2/7/0 Codificação de Informação Sumário: Detecção e correcção de erros detecção de erros (conclusão) correcção de erros (código de Hamming) aplicações: CD ROM e discos RAID Detecção de erros Detectar erros em pequenas quankdades de dados Números de cheques, contas bancárias, cartões de crédito. Livros (ISBN) Detectar em números base 0 Detectar erros de leitura das máquinas Detectar números forjados Dept. InformáKca/FCT 7 Dezembro 200 2
2/7/0 Erros de digitação Tipo de erro Exemplo Frequência Erros isolados a para b 60-95% Transposições adjacentes ab para ba 0-20% Erros duplos aa para bb 0.5-.5 % Transposições por salto acb para bca 0.5-.5 % Saltos duplos aca para bcb < % Erros fonéticos 3 para 3 0.5-.5 % Omitir ou acrescentar um dígito 0-20% Dept. InformáKca/FCT 7 Dezembro 200 3 Dígito de verificação () Omissão/Adição de um dígito é detectado por contagem O dígito de verificação deve tratar os casos Erros isolados e transposição de dígitos adjacentes Todos os outros erros são raros Normalmente o dígito de verificação ukliza o módulo da divisão por N Sendo o número d a d n, dígito de verificação C é calculado a parkr de: (C + d + d 2 +... ) mod N = 0 Dept. InformáKca/FCT 7 Dezembro 200 4 2
2/7/0 Exemplo: Dígito de verificação (2) T = (d + d 2 +... ) mod n C = n T A = d d 2 d 3 e cada dígito pode ir de 0 a 4 A = 4 2 T = (4+2+) mod 5 = 2 C = 3 Detecta que há erro mas não corrige Não é eficiente para os erros de transposição Dept. InformáKca/FCT 7 Dezembro 200 5 Soma com pesos C + w *d + w 2 *d 2 +... ) mod n = 0 T = ( w *d + w 2 *d 2 +... ) mod n ; C = n T Exemplo: A = d d 2 d 3 e cada dígito pode ir de 0 a 4 Pesos w =2, w 2 =3, w 3 =4 A = 4 2 T = (4*2+2*3+*4) mod 5 = 3 C = 2 Se se receber 4 2 / 2 ( 2 + 4*2 + *3 + *4) mod 5 = 2 ERRO!! Note se que isto funciona bem porque os pesos são primos relakvamente a n Dept. InformáKca/FCT 7 Dezembro 200 6 3
2/7/0 País/ Língua 0 inglês (USA,UK) 2 francês (Europa, Canadá) 972 Português 9992 Quatar ISBN 0 d d 2 d 3 d 4 d 5 d 6 d 7 d 8 d 9 0 3 8 7 9 5 0 4 5 Editor Número do livro Dígito de verificação Cálculo do dígito de verificação T = (0*d+9*d2+...+2*d9) mod Dígitos de verificação : 0,, 2,..., 0 Esquema de detecção forte: N () é primo e portanto todos os pesos são primos relativamente a Dept. InformáKca/FCT 7 Dezembro 200 7 ISBN 0 #define N 0 #define QUOCIENT int acum, weight, remainder, checkdigit;... acum = 0; weight=n; char *apt = argv[]; for( i = N-; i > 0; i--) { acum = acum + weight * (int)(*apt - 0 ); apt++; weight--; } remainder = acum % QUOCIENT; checkdigit = (QUOCIENT remainder) % QUOCIENT; if( checkdigit!= (QUOCIENT -)) printf( checkdigit = %d\n, checkdigit); else printf( checkdigit = \n ) Dept. InformáKca/FCT 7 Dezembro 200 8 4
2/7/0 ISBN 0 Detecta os erros mais comuns, não corrige Detecta erros de só dígito Dem. por absurdo Suponha se que se alterava d i sem alterar T Para isso a contribuição d i *w i teria de ser ou um múlkplo de Mas é primo... Detecta transposições adjacentes Dem. por absurdo Suponha se que se alterava d i d i+ sem alterar T Para isso: ( d i *w i +d i+ *w i+ ) mod (d i+ *w i +d i *w i+ ) mod teria de ser múlkplo de Mas a diferença só pode valer 0 Dept. InformáKca/FCT 7 Dezembro 200 9 ISBN 3 Janeiro 2007 Exemplo: 978 0 306 4065 7 3 dígitos Quando 978 se esgotar passa a 979 e sucessivamente 9 dígitos seguintes como no ISBN 0 Dígito de verificação calculado de forma diferente: Dígito: 9 7 8 0 3 0 6 4 0 6 5 Peso: 3 3 3 3 3 3 9*+7*3+8*+0*3+3*+0*3+6*+4*3+0*+6*3+*+5*3=93 93 mod 0 = 3 0 3 = 7 Pesos ou 3; módulo 0 Dept. InformáKca/FCT 7 Dezembro 200 0 5
2/7/0 Códigos de barras () 8 3 7 2 8 0 0 3 2 Tipo do produto Código do fabricante Código do produto Dígito de verificação (C) Cada dígito é codificado em 7 barras (0/) Bits de paridade Pode ser lido nos dois sentidos T = (3*d + d 2 + 3*d 3 + d 4 + 3*d 5 + d 6 + 3*d 7 + d 8 + 3*d 9 + d 0 +3*d ) mod 0 C = 0 - T Dept. InformáKca/FCT 7 Dezembro 200 Códigos de barras (2) T = (3*d + d 2 + 3*d 3 + d 4 + 3*d 5 + d 6 + 3*d 7 + d 8 + 3*d 9 + d 0 +3*d ) mod 0 C = 0 T Erro num dígito Para um dígito d i com erro não ser detectado d i * ou d i *3 teriam ser múlkplos de 0, o que nunca acontece Transposição A contribuição para a soma passa de *a+3*b para *b+3*a (a+3b) (b+3a) = 2b 2a vai de 8 a +8 e pode ser 0 Não detecta todos os casos Admite se que os leitores (máquinas) não trocam dígitos Dept. InformáKca/FCT 7 Dezembro 200 2 6
2/7/0 Cartões de crédito IBM check 5 dígitos + verificação T = (2#d + d 2 + 2#d 3 + d 4... + 2#d ) mod 0 C = 0 T #d mulkplica d por 2 e soma os dígitos do produto Detecta todos os dígitos errados Detecta quase todas as transposições Dept. InformáKca/FCT 7 Dezembro 200 3 Métodos de correcção de erros Votação Bits de verificação Bits de paridade Horizontal (detecta um bit errado; não corrige) Rectangular (corrige um bit errado) Códigos de bloco Códigos de Hamming Outros Códigos de convolução (não incluídos nesta disciplina) Dept. InformáKca/FCT 7 Dezembro 200 4 7
2/7/0 Detecção de erros com códigos de bloco Dept. InformáKca/FCT 7 Dezembro 200 5 Distância de Hamming Definição: O número de elementos que necessitam de mudar para tornar uma palavra de código noutra. A distância de Hamming de: [00] para [00] é 2 bits [00] para [0000] é 2 bits barrar to bastar é 2 chars Distância de Hamming (d) para duas sequências binárias de n bits, é o número de bits diferentes: Ex., v =00; v 2 =000; d(v, v 2 )=3 Pode ser feito com um OR ou com aritmékca módulo 2 Dept. InformáKca/FCT 7 Dezembro 200 6 8
2/7/0 Interpretação gráfica da distância de Hamming (em bits) 00 0 0 Número de arestas que é preciso percorrer para chegar de um código a outro é o nº de bits que têm de vir errados para transformar um código noutro 000 00 00 0 00 0 0 Se escolhermos os códigos 000 0 0 0 Temos um código de distância 2; é preciso percorrer 2 arestas para ir de um código a outro Dept. InformáKca/FCT 7 Dezembro 200 7 Interpretação gráfica da distância de Hamming (em bits) 000 Hipercubo 4 dimensões 00 00 0 0000 000 000 00 0 00 0 000 00 00 0 Dept. InformáKca/FCT 7 Dezembro 200 8 9
2/7/0 Distância de Hamming de um código Exemplo de codificação A -> 00 -> 00000 B -> 0 -> 00 C -> 0 -> 00 D -> -> 0 A distância de Hamming de um código d é a distância mínima entre quaisquer dois códigos diskntos No exemplo, d=3 Dept. InformáKca/FCT 7 Dezembro 200 9 Correcção de erros baseada na distância de Hamming Com n bits de dados e k bits de verificação são possíveis 2 (n+k) configurações 2 n deles são usadas As 2 n configurações válidas são escolhidas de forma a que exista entre elas uma distância d Quando é recebido um código não válido, é assumido o código com distância menor (descodificação pela máxima verosimilhança) Tendo o sido emitido o símbolo U pela fonte; este foi codificado na sequência. Tendo sido recebida a sequência Y trata-se de maximizar ( P(U Y a probabilidade condicional U Y Canal com ruído Dept. InformáKca/FCT 7 Dezembro 200 20 0
2/7/0 Interpretação geométrica da distância de Hamming () Dept. InformáKca/FCT 7 Dezembro 200 2 Interpretação geométrica da distância de Hamming (2) Dept. InformáKca/FCT 7 Dezembro 200 22
2/7/0 Correcção de erros Maior distância de Hamming entre palavras de código válidas Hipótese básica: Se o padrão de bits x recebido não corresponde a nenhum código válido, e a palavra de código a é que tem a menor distância de Hamming para x então é provável que x seja uma versão corrompida do código a Quanto maior for a separação (distância de Hamming entre códigos válidos), maior será a probabilidade dessa correspondência Dept. InformáKca/FCT 7 Dezembro 200 23 Correcção de erros Exemplo Códigos com 3 bits Dois códigos válidos 0000 Qual é a distância de Hamming deste código? Quantos bits errados podemos detectar? E corrigir? Suponha se que se recebe 0 Assume se que é uma versão corrompida of, e não 0000 Suponha se que se recebe 00? Dept. InformáKca/FCT 7 Dezembro 200 24 2
2/7/0 Correcção de erros Exemplo Códigos com 4 bits e distância 4 Dois códigos válidos: 0000 e Distância de 0000 Distância 2 de 0000 Distância 2 de Distância de 000 000 0000 000 000 00 00 00 00 00 00 0 0 0 0 Dept. InformáKca/FCT 7 Dezembro 200 25 De uma forma geral: Códigos de Hamming É preciso decidir que o padrão de bits recebido é mais próximo de uma palavra de código válida do que de qualquer outra. Os empates não ajudam Se a distância entre códigos válidos é m Detectam se até m bits errados Corrigem se até (m )/2 (arredondado para baixo) bits errados Dept. InformáKca/FCT 7 Dezembro 200 26 3
2/7/0 Distância de Hamming Exemplos Se a distância de Hamming é: 5 - Detectam se até 4 bits errados - Corrigem se até 2 bits errados 3 - Detectam se 2 bits errados - Corrigem se até 6 bits errados 9 - Detectam se até 8 bits errados - Corrigem se até 4 bits errados Dept. InformáKca/FCT 7 Dezembro 200 27 Distância de Hamming para um código de paridade ( 4 C(5, Código de paridade Este código tem 4 bits de dados e bit de verificação. A sua distância é 2 Consegue detectar um erro e corrigir zero erros Dept. InformáKca/FCT 7 Dezembro 200 28 4
2/7/0 Distância de Hamming para um código de paridade Suponha-se que se transmitiu 0; o código criado é 0 Não há erros. S é 0. O código é dado como bom Foi recebido 00 (um erro num bit de dados). S é. O código é dado como errado Foi recebido 00 (um erro no bit de verificação). S é. O código é dado como errado. Há dois erros: foi recebido 000. S é 0. O código é dado como bom e 0 passa 00 Há três bits errados. S é. Detecta-se um erro Um código com um bit de paridade detecta um nº ímpar de bits errados Dept. InformáKca/FCT 7 Dezembro 200 29 Código de Hamming Permite correcção automákca de bit errado Distância de Hamming: 3. Detecta dois bits errados e corrige um Forma sistemákca de calcular os bits de verificação de forma a que se saiba onde está o erro Numerar os bits começando pelo menos significakvo a parkr de. Colocar os bits menos significakvos à direita. As posições que são potências de 2 são bits de verificação Todas as outras posições são bits de dados reais Dept. InformáKca/FCT 7 Dezembro 200 30 5
2/7/0 Cálculo dos bits de verificação de Hamming Colocar os bits de dados deixando das posições de verificação vazias Preencher o bit de verificação Contar os s nas posições 3, 5, 7, 9,, 3, todas as ímpares Atribuir o valor à posição que torne o número de s par Preencher o bit de verificação 2 Paridade par com os bits 3, 6, 7, 0,, 4, etc. Preencher o bit de verificação 4 Paridade par com as posições posikons 5, 6, 7, 2, 3, 4, etc. Preencher o bit de verificação 8 8, 9, 0,, 2, 3 e assim por diante Dept. InformáKca/FCT 7 Dezembro 200 3 Exemplo () Palavra de dados com 8 bits. Quantos bits de verificação são precisos? Seja a palavra de dados = 00 0 Palavra de Hamming (sem bits de verificação): 2 0 9 8 7 6 5 4 3 2 0 0 0 Dept. InformáKca/FCT 7 Dezembro 200 32 6
2/7/0 Exemplo (2) Bit Bit 2 Bit 4 Bit 8 2 3 4 5 6 7 8 9 0 2 Palavra de Hamming (com bits de verificação): 8 9,0, 4 5,6, 2 3,6,7 3,5,7 2 0 0 9 0 8 0 7 6 5 4 3 0 2 0, 2 0 0 7,2 0 0, 0 9, 0 0 0 0 Dept. InformáKca/FCT 7 Dezembro 200 33 Exemplo (3) Suponha se que quando se lê o dado se recebe : 00 (há um erro no bit 3 da palavra de Hamming) Recalculam se os bits de verificação 2 0 9 8 7 6 5 4 3 2 0 0 0 0 0 0 bits de verificação recebidos OR 0 0 bits de verificação calculados ----------- 0 0 (erro no bit 3) Dept. InformáKca/FCT 7 Dezembro 200 34 7
2/7/0 Correcção de erros uklizando o método de Hamming (4 bits dados + 3 bits verificação) d4 d3 d2 d Se é 0 não há erros senão indica o bit errado s3 s2 s d4 d3 d2 d Geração dos bits de verificação OR dos bits de verificação recebidos e calculados Transmissão através de um meio sujeito a erros d4 d3 d2 d4 v3 d v2 v d4 d3 d2 7 6 5 4 3 2 7 6 5 4 3 2 Dept. InformáKca/FCT 7 Dezembro 200 35 d4 v3 d v2 v Comentários sobre o método de Hamming Número de bits necessários para uma codificação de Hamming para K bits de dados: K + V bits de verificação Com V bits de verificação é possível representar valores entre 0 (não há erro) e 2 V (um dos bits está errado) V é o menor inteiro que verifica a condição 2 V >= K + V + Dept. InformáKca/FCT 7 Dezembro 200 36 8
2/7/0 Família de códigos de Hamming k 4 26 57 20 247 502 n 7 5 3 63 27 255 5 R=k/n 0.57 0.73 0.84 0.9 0.94 0.968 0.982 A eficiência aumenta à medida que o tamanho do bloco aumenta No entanto, à medida que o tamanho do bloco aumenta, surgem dificuldades: - Complexidade do codificador aumenta - É preciso juntar muitos bits antes de transmitir, o que pode criar atrasos intoleráveis Dept. InformáKca/FCT 7 Dezembro 200 37 Códigos BCH (Bose Chaudhuri Hocquenghem) 960 O código de Hamming faz parte dos códigos BCH Os códigos BCH podem corrigir um número de erros tão grande quanto se queira (desde que o bloco tenha bits suficientes) Têm um rendimento R=k/n muito baixo UKlizados quando a fiabilidade é essencial k 4 5 24 64 247 7 7 5 63 27 255 255 023 R=k/n 0.57 0.33 0.38 0.5 0.97 0.67 0.0 Erros corrigidos 3 7 0 255 Dept. InformáKca/FCT 7 Dezembro 200 38 n 9
2/7/0 Correcção de erros em caso de rajadas (bursts) Os código de Hamming clássicos (7;4 e semelhantes) são adequados à correcção de erros isolados Um caso diferente são os erros de rajada Fenómenos atmosféricos, danos na super~cie de um meio de armazenamento É preciso usar códigos de correcção de erros especialmente vocacionados para esta situação Dept. InformáKca/FCT 7 Dezembro 200 39 Interleaving () Os códigos de bloco até agora descritos resultam melhor quando os erros ocorrem de forma isolada Em muitos casos, os erros ocorrem em rajada (burst errors) exemplo telemóveis (propagação múlkpla, movimento do uklizador) Para distribuir os burst errors por vários blocos pode se fazer interleaving Dept. InformáKca/FCT 7 Dezembro 200 40 20
2/7/0 Códigos periódicos ( interleaving ) Embebem se bits de paridade no meio dos bits de dados, de forma a que cada bit de paridade seja calculado com bits não adjacentes Exemplo detecção de erros em blocos de 5 bits de dados mais um de paridade b, b,2 b,3 b,4 b,5 p b 2, b 2,2 b 2,3 b 2,4 b 2,5 p... b 5, b 5,2 b 5.3 b 5.4 b 5.5 p 5 2 Pi = b(i,) xor b(i-,2) xor b(i-2,3) xor b(i-3,4) xor b(i-4,5) Paridade par Dept. InformáKca/FCT 7 Dezembro 200 4 Correcção de erros de rajada uklizando interleaving e codificação de Hamming Dept. InformáKca/FCT 7 Dezembro 200 42 2
2/7/0 Códigos periódicos na correcção de erros em CDs Amostragem a 44. KHz hora de música = 58.760.000 amostras Tendo cada amostra de 6 bits dá 2 x 5.080.320.000 bits = 635,040,000 bytes Dept. InformáKca/FCT 7 Dezembro 200 43 Códigos periódicos na correcção de erros em CDs CDs de dados - modo sectores de 2048 bytes Dept. InformáKca/FCT 7 Dezembro 200 44 22
2/7/0 Codificação de dados num CD Começa se com um bloco de 24 bytes de dados Aplica se uma codificação de Reed Solomon (ver à frente) e obtêm se 32 bytes Uma frame contem 33 bytes (32 de dados+correcção de erros + byte de subcoding info. sobre as faixas) Cada byte é transformado em 4 bits para evitar demasiados 0s consecukvos + 3 bits de separação Uma frame tem: 24+3 bits iniciais de sincronização 33x(4+3) bits de dados 24 bytes (92 bits) de dados transformam se em 588 bits escritos no CD... Dept. InformáKca/FCT 7 Dezembro 200 45 Correcção de erros em CDs É importante corrigir erros em CDs de dados, mas também de audio ( 0000 0000 0000 0000 silêncio, 000 0000 0000 0000 som muito forte...) I N T E R L E A V E D D A T A Impressão digital (50 ( µm Partícula de pó (40 ( µm Cabelo ( µm 80) Dept. InformáKca/FCT 7 Dezembro 200 46 23
2/7/0 Correcção de erros por interleaving I N T E R L E A V E D D A T A Dados interleaved N E E I T L R V D A A D E T A N E E I T L?????? E T A I N T E? L E?? E?? A T? Burst de erros O burst de erros é transformado em erros isolados que podem ser corrigidos por bytes de paridade Dept. InformáKca/FCT 7 Dezembro 200 47 Códigos de Reed Solomon nos CDs Erros isolados corrigidos por bits de paridade Erros de rajada corrigidos por códigos RS (Reed Solomon) Bell Labs 960 Consegue corrigir 4000 bits errados seguidos (3 mm de uma pista estragada...) É um código periódico ou interleaved Dept. InformáKca/FCT 7 Dezembro 200 48 24
2/7/0 Códigos de Reed Solomon Um código RS(N,K) tem os parâmetros: K número de bytes de informação N número de bytes total num bloco N K syndrome bytes É capaz de corrigir (N K)/2 erros nos K bytes de informação Exemplo RS(255,223) 223 bytes de informação 32 bytes de correcção de erros Corrige até 6 bytes errados Baseado na teoria dos campos de Galois Fácil de implementar em hardware Dept. InformáKca/FCT 7 Dezembro 200 49 Aplicação da correcção de erros discos RAID RAID Redundant Array of Independent Disks Conjunto de dois ou mais discos, com objeckvo de: Tornar o sistema de disco mais rápido (isto é, acelerar o carregamento de dados do disco), através de uma técnica chamada divisão de dados (data striping ou RAID 0); Tornar o sistema de disco mais seguro, através de uma técnica chamada espelhamento (mirroring ou RAID ). Estas duas técnicas podem ser usadas isoladamente ou em conjunto. Dept. InformáKca/FCT 7 Dezembro 200 50 25
2/7/0 Aplicação da correcção de erros discos RAID RAID 0 blocos espalhados por vários discos (não há tolerância a falhas) RAID mirror RAID 2 bit por disco; n discos para dados; correcção de erros por código de Hamming: k discos RAID 3 bit por disco; n discos para dados; disco para bit de paridade RAID 4 n discos com stripes de dados; disco para stripe de paridade RAID 5 idem; mas com stripe de paridade rotakvo RAID 6 Código de Reed Solomon (2 discos extra) Dept. InformáKca/FCT 7 Dezembro 200 5 RAID 0 (striping) RAID (mirroring) Dept. InformáKca/FCT 7 Dezembro 200 52 26
2/7/0 RAID 2 K discos de dados Número de discos V para correcção de erros é o menor k que verifica a condição: 2 V >= K+V + 8 discos com dados (K=8). O menor V que verifica a condição é 4; 4 discos de código de Hamming 4 discos de dados (K=4). V = 3 b 0 b 2 ( b ) f 2 ( b ) f ( b ) f 0 b b 2 Dept. InformáKca/FCT 7 Dezembro 200 53 RAID 3 bit por disco; b 0, b, b 2, b 3,..., b n O bit de paridade é calculado por hardware: Bit paridade = b 0 or b or b 2 or... or b n ou Bit paridade = b 0 + b + b 2 +... + b n (mod 2) Um disco em falha pode ser reconstruído usando o mesmo método. Supondo que o disco 3 falhou: b 3 = b 0 or b or b 2 or Bit paridade or b 4 or... b 0 b b 2 b 2 ( P(b Dept. InformáKca/FCT 7 Dezembro 200 54 27
2/7/0 O stripe de paridade é calculado fazendo o OR dos bits dos stripes de dados O disco de paridade é um gargalo no RAID 4; resolvido no RAID 5 através da paridade rotakva Recuperação em caso de erro como no RAID 3 RAID 4 e RAID 5 RAID 4 RAID 5 Dept. InformáKca/FCT 7 Dezembro 200 55 RAID 6 Tolera a falha simultânea de dois discos: mínimo 4 discos(2 discos de dados + 2 discos de correcção de erros) Blocos de correcção de erros rotakvos (como no RAID 5) Má performance em escrita (3 discos: dados, 2 de paridade) O cálculo dos bytes de correcção baseia-se num código de Reed Solomon: correcção automática de dois erros Dept. InformáKca/FCT 7 Dezembro 200 56 28