Natureza da Informação
Profª Ana Carolina Lorena
Bacharelado em Ciência e Tecnologia Universidade Federal do ABC
Outubro 2010
Códigos retangulares
Provêm
correção de um único erro
e
detecção de erro duplo
simultaneamente
Supor ter que proteger informação de um byte
Oito bits D0 D1 D2 D3 D4 D5 D6 D7
Arranjá-los em uma tabela retangular e adicionar bits de
paridade para cada uma das linhas e colunas:
D0 D1 D2 D3 PL0 D4 D5 D6 D7 PL1 PC0 PC1 PC2 PC3 P
Há outros códigos geométricos também, baseados em arranjar os bits em triângulos, cubos, pirâmides, cunhas ou estruturas de maior dimensão
Códigos retangulares
Cada bit de paridade de linha e coluna é ajustado
tal que paridade total na linha ou coluna é par (ou
ímpar, dependendo do sistema adotado)
PL0, PL1, PC0, PC1, PC2, PC3
Paridade total P é ajustada tal que coluna de bits de
paridade mais à direita também tenha número par
de 1s
Já garante que a linha mais abaixo também tem
Códigos retangulares
No ex., os 15 bits são então enviados pelo canal
Decodificador de canal os analisa na recepção
Faz um total de 8 checagens de paridade
Nas 3 linhas e nas 5 colunas
Um único erro: uma das três paridades de linha e uma das
cinco paridades de coluna estará errada
Esse bit pode então ser identificado e corrigido
Na intersecção da linha e coluna com paridades incorretas
Dois erros: haverá um padrão diferente de falhas de paridade
Erros duplos podem ser detectados, mas não corrigidos
Corrigindo múltiplos erros
No caso geral, para criar um código que corrija L
erros, precisamos que a
distância mínima
(d
min)
entre os padrões seja
maior ou igual a 2L + 1
Exemplo:
Para detectar 1 erro, é preciso uma distância mínima de 3
No código de paridade para 1 bit, podemos apenas detectar o
erro: 00 11
Mas se colocarmos 1 bit a mais, teremos: 000 e 111
Neste caso, podemos saber qual era o bit original
Os códigos válidos 000 e 111 estão à distância 3
Códigos de Hamming
Supor correção de um único erro
Ignorando a possibilidade de erros múltiplos
Richard Hamming inventou conjunto de códigos
com número mínimo de bits de paridade extra
Cada bit adicionado no codificador permite uma
checagem de paridade no decodificador
Um bit de informação pode ser usado para ajudar a
Códigos de Hamming
Ex. 3 bits extra
⇒
3 testes podem identificar até 8
condições
Uma delas será “não erro”
7 remanescentes para identificar a localização de até 7
locais onde erro possa estar
Bloco transmitido pode então ter 7 bits
3 para checagem de erros
4 para carregar os dados (carga)
Ex. 4 bits de paridade
⇒
blocos com 15 bits
Códigos de Hamming
• Número de bits de paridade
– Se o número de bits de dados for d, o número
de bits de paridade p é determinado por:
• Ex.: 4 bits de dados (mensagens com 4 bits)
– p = 2 ⇒ 2p = 22 = 4 e d + p + 1 = 4 + 2 + 1 = 7
» 4 < 7, relação não é satisfeita
– p = 3 ⇒ 2p = 23 = 8 e d + p + 1 = 4 + 3 + 1 = 8
» 8 ≥ 8, relação é satisfeita
1
2
p≥
d
+
p
+
Precisa de 3 bits de paridade para proporcionar correção de um único erro em quatro bits de dados
Códigos de Hamming
Detecção e correção são proporcionados por
todos os bits no grupo
De paridade e de dados
Códigos de Hamming
Inserção de bits de paridade no código:
Arranjar os bits adequadamente no código
Ex. com 4 bits de dados e 3 bits de paridade
Bit mais à esqueda é designado como bit 1, próximo como
2 e assim por diante
bit 1, bit 2, bit 3, bit 4, bit 5, bit 6, bit 7
Bits de paridade são colocados nas posições numeradas
em correspondência às potências 1, 2, 4, 8, ...: P1, P2, D1, P3, D2, D3, D4
Pi é um bit de paridade em particular e Di é um bit de dado em particular
Códigos de Hamming
Determinação dos valores de bits de
paridade
Designar apropriadamente o valor 0 ou 1 a cada
bit de paridade
Cada bit de paridade provê verificação em outros
determinados bits no código total
Deve saber valor desses outros bits para determinar o de
Códigos de Hamming
Determinação dos valores de bits de paridade
Para determinar o valor do bit, primeiro numere cada
posição de bit em binário
Escreva o binário equivalente a cada decimal da
posição
Códigos de Hamming
Determinação dos valores de bits de paridade
Em seguida, indique a localização dos bits de dados e
de paridade
Primeira linha da tabela:
Número da posição em binário do bit de paridade P1 tem 1 no dígito mais à direita: esse bit verifica as posições de todos os bits, incluindo ele, que têm
Códigos de Hamming
Determinação dos valores de bits de paridade
Número da posição em binário do bit de paridade P2 tem 1 no dígito do meio: esse bit verifica as posições de todos os bits, incluindo ele, que têm 1
na mesma posição (bits 2, 3, 6 e 7)
Número da posição em binário do bit de paridade P3 tem 1 no dígito mais à esquerda: esse bit verifica as posições de todos os bits, incluindo ele, que
Códigos de Hamming
Determinação dos valores de bits de paridade
Em cada caso, é designado ao bit de paridade o valor
que torna a quantidade de 1s, no conjunto de bits que
ele verifica, par ou ímpar
Códigos de Hamming
Ex. 1: Determine o código de Hamming para
o número BCD 1001, usando paridade par
Passo 1
: determinar número de bits de paridade
necessários
p = 3 são suficientes (visto em slide anterior)
Códigos de Hamming
Ex. 1: Determine o código de Hamming para
o número BCD 1001, usando paridade par
Passo 2
: construir tabela de posições de bits e
inserir os bits de dados
Códigos de Hamming
Ex. 1: Determine o código de Hamming para
o número BCD 1001, usando paridade par
Passo 3
: Determinar os bits de paridade
• P1 verifica bits das posições 1, 3, 4 e 7: tem que ser 0 para no de 1s ser par no grupo
• P2 verifica bits das posições 2, 3, 6 e 7: tem que ser 0 para no de 1s ser par no grupo
Códigos de Hamming
Ex. 1: Determine o código de Hamming para
o número BCD 1001, usando paridade par
Códigos de Hamming
Ex. 2: Determinar código de Hamming para
bits de dados 10110 usando paridade ímpar
Passo 1
: determinando número de bits de
paridade necessários
d = 5
Tentando p = 4
2p = 24 = 16
d + p + 1 = 5 + 4 + 1 = 10 ⇒ 4 bits são suficientes
Códigos de Hamming
Ex. 2: Determinar código de Hamming para
bits de dados 10110 usando paridade ímpar
Passo 2
: construir tabela de posições de bits e
inserir bits de dados
Códigos de Hamming
Ex. 2: Determinar código de Hamming para
bits de dados 10110 usando paridade ímpar
Passo 3
: determinar bits de paridade
•P1 verifica bits das posições 1, 3, 5, 7 e 9: tem que ser 1 para no de 1s ser ímpar no grupo
• P2 verifica bits das posições 2, 3, 6 e 7: tem que ser 0 para no de 1s ser ímpar no grupo
• P3 verifica bits das posições 4, 5, 6 e 7: tem que ser 1 para no de 1s ser ímpar no grupo
Códigos de Hamming
Ex. 2: Determinar código de Hamming para
bits de dados 10110 usando paridade ímpar
Exercícios
Determinar o código Hamming para o
número BCD 1000 usando paridade par
Determinar o código de Hamming para
Códigos de Hamming
Detecção e correção de erro com o código
de Hamming:
Cada bit de paridade e seus grupos de bits
correspondentes tem que ser verificado
Se possui paridade adequada
Se há 3 bits de paridade ⇒ 3 verificações são feitas Se há 4 bits de paridade ⇒ 4 verificações são feitas Etc.
Cada verificação de paridade produz um
resultado bom ou ruim
Códigos de Hamming
Detecção e correção de erro com o código de
Hamming:
Resultado de todas as verificações indica o bit, se houver
algum, que está errado:
Passo 1: começar com o grupo verificado por P1
Passo 2: Verifique o grupo quanto à paridade correta
0 representa verificação de paridade correta 1 representa verificação de paridade incorreta
Passo 3: repetir passo 2 para cada grupo de paridade
Passo 4: Número binário formado pelo resultado de todas as
verificações de paridade determina a posição do bit do código que está errado
Código de posição de erro
Primeira verificação de paridade gera o bit menos significativo Todas as verificações corretas indicam que não há erro
Código de Hamming
Ex. 1: Considere que transmitiu 0011001
(exemplo 1) e 0010001 foi recebido
Receptor não sabe o que foi transmitido
Tem que testar as paridades para determinar se o
código está correto
Código de Hamming
Ex. 1: Considere que transmitiu 0011001
(exemplo 1) e 0010001 foi recebido
Montar tabela de posição de bit
• Primeira verificação de paridade: Bit P1 verifica as posições 1, 3, 5 e 7 Há dois 1s nesse grupo
Código de Hamming
Ex. 1: Considere que transmitiu 0011001
(exemplo 1) e 0010001 foi recebido
Montar tabela de posição de bit
• Segunda verificação de paridade: Bit P2 verifica as posições 2, 3, 6 e 7 Há dois 1s nesse grupo
Código de Hamming
Ex. 1: Considere que transmitiu 0011001
(exemplo 1) e 0010001 foi recebido
Montar tabela de posição de bit
• Terceira verificação de paridade: Bit P3 verifica as posições 4, 5, 6 e 7 Há um 1 nesse grupo
Código de Hamming
Ex. 1: Considere que transmitiu 0011001
(exemplo 1) e 0010001 foi recebido
Montar tabela de posição de bit
• Resultado:
Código de posição de erro é 100 (binário 4) Bit na posição 4 está errado (deveria ser 1)
Código de Hamming
Ex. 2: O código 101101010 é recebido. Corrija
qualquer erro. Há quatro bits de paridade.
Paridade usada é ímpar.
Tabela de posição de bit:
• Primeira verificação de paridade:
Bit P1 verifica as posições 1, 3, 5, 7 e 9 Há dois 1s nesse grupo
Código de Hamming
Ex. 2: O código 101101010 é recebido. Corrija
qualquer erro. Há quatro bits de paridade.
Paridade usada é ímpar.
Tabela de posição de bit:
• Segunda verificação de paridade: Bit P2 verifica as posições 2, 3, 6 e 7 Há dois 1s nesse grupo
Código de Hamming
Ex. 2: O código 101101010 é recebido. Corrija
qualquer erro. Há quatro bits de paridade.
Paridade usada é ímpar.
Tabela de posição de bit:
• Terceira verificação de paridade: Bit P3 verifica as posições 4, 5, 6 e 7 Há dois 1s nesse grupo
Código de Hamming
Ex. 2: O código 101101010 é recebido. Corrija
qualquer erro. Há quatro bits de paridade.
Paridade usada é ímpar.
Tabela de posição de bit:
• Quarta verificação de paridade: Bit P4 verifica as posições 8 e 9 Há um 1 nesse grupo
Código de Hamming
Ex. 2: O código 101101010 é recebido. Corrija
qualquer erro. Há quatro bits de paridade.
Paridade usada é ímpar.
Tabela de posição de bit:
• Resultado:
Código de posição de erro é 0111 (binário 7) Bit na posição 7 está errado
Exercícios
O código 101111001 é recebido. Corrija
qualquer erro se a paridade ímpar for usada.
Repetir o processo ilustrado no exemplo 1 se
Códigos de Hamming
• Alguns códigos de Hamming:
(255, 247, 3)
0,97
247
255
8
(127, 120, 3)
0,94
120
127
7
(63, 57, 3)
0,90
57
63
6
(31, 26, 3)
0,84
26
31
5
(15, 11, 3)
0,73
11
15
4
(7, 4, 3)
0,57
4
7
3
(3, 1, 3)
0,33
1
3
2
Tipo de bloco de
código
Taxa de
código
Carga
Tamanho
de bloco
Bits de
paridade
Códigos de Hamming
• Alguns códigos de Hamming:
(255, 247, 3)
0,97
247
255
8
(127, 120, 3)
0,94
120
127
7
(63, 57, 3)
0,90
57
63
6
(31, 26, 3)
0,84
26
31
5
(15, 11, 3)
0,73
11
15
4
(7, 4, 3)
0,57
4
7
3
(3, 1, 3)
0,33
1
3
2
Tipo de bloco de
código
Taxa de
código
Carga
Tamanho
de bloco
Bits de
paridade
Redundância triplaCódigos de Hamming
• Alguns códigos de Hamming:
(255, 247, 3)
0,97
247
255
8
(127, 120, 3)
0,94
120
127
7
(63, 57, 3)
0,90
57
63
6
(31, 26, 3)
0,84
26
31
5
(15, 11, 3)
0,73
11
15
4
(7, 4, 3)
0,57
4
7
3
(3, 1, 3)
0,33
1
3
2
Tipo de bloco de
código
Taxa de
código
Carga
Tamanho
de bloco
Bits de
paridade
Código de Hamming mais simples com eficiência razoável
Códigos de bloco
É conveniente prover proteção de correção de erros
para uma certa quantidade de dados e enviar o
resultado como um bloco de tamanho n
Se número de bits de dados no bloco é k, então o número
de bits de paridade é n – k
Costuma-se chamar tal código como código de bloco (n,k)
Ex. código de Hamming dos slides anteriores é (7,4)
É também comum incluir a distância de Hamming mínima
entre dois códigos válidos quaisquer (dados originais), na forma (n,k,d)
Códigos de Hamming
Todos permitem:
Correção de erros isolados ou
Detecção de erros duplos
Códigos avançados
Códigos de bloco com distância de Hamming
mínima maior que 3 são possíveis
Podem lidar com mais de um erro
Alguns são conhecidos como códigos BCH
Bose-Chaudhuri-Hocquenhem
Códigos Reed-Solomon
Lidam com bytes de dados ao invés de bits
Ex. (256, 224, 5) e (224, 192, 5) são usados em tocadores de CD
e podem proteger contra longas sequências de erros
Difícil produzir códigos que sejam eficientes, protejam
contra grandes números de erros, sejam fáceis de
programar e executem rapidamente
Códigos avançados
Nas missões espaciais e comunicações com satélites
Código binário de detecção e correção de erros de Golay e
Reed-Solomom
Na TV digital
Códigos de Reed-Solomom e Viterbi
Nas redes locais (LANS) utilizam-se
Códigos de redundância cíclica (CRC-25)
Em armazenamento de dados
Códigos Reed-Solomom para resolver os problemas de
Dígitos de checagem
Detecção de erros é rotineiramente usada
para reduzir erros humanos
Lidar com longos números ou sequências de
caracteres, que devem ser digitadas
Ex. números de cartão de crédito, de RG, de registros
de software
Sujeito a erros
Dígitos ou caracteres adicionais podem ser incluídos
para detectar erros
Como bits de paridade em cadeias de bits
Cartões de crédito
Têm dígito de checagem extra
Calculado como especificado em 1954 por H. P. Luhn
(IBM)
Protege contra tipo comum de erro: transposição de bits
adjacentes
Algoritmo funciona para qualquer número de dígitos
Números de cartão têm tipicamente 15 ou 16 dígitos
6 primeiros dígitos: organização que emitiu o cartão
O primeiro denota o setor econômico associado ao cartão
Ex. 1 e 2 para companias aéreas, 3 para viagem e lazer, 4, 5,
e 6 para bancos e lojas
O último dígito é o dígito de checagem
Cartões de crédito
Cada emissor de cartão tem seu prefixo
American Express: começa com 34 ou 38
Visa: começa com 4
Mastercard: começa com 51, 52, 53, 54 ou 55
Procedimento de Luhn:
Testa se o número do cartão, incluindo dígito de
checagem, é válido
Cartões de crédito
Procedimento de Luhn:
Primeiro, seleciona dígitos do cartão que aparecem em posições
alternadas, começando pelo dígito próximo ao último Ex. cartão de número 1234 4567 7891
Esses dígitos são 9, 7, 6, 4, 3 e 1
Verifica quantos desses dígitos são maiores que 4
Ex. há 3 deles (9, 7 e 6)
Adiciona os dígitos alternados:
Ex. 9 + 7 + 6 + 4 + 3 + 1 = 30
Adiciona todos dígitos do número do cartão
Ex. 57
Soma 3 números anteriores
Ex. 3 + 30 + 57 = 90
Se resultado é múltiplo de 10, número passa no teste e pode ser
Cartões de crédito
Procedimento de Luhn detecta todos erros de um
dígito e quase todas transposições de dígitos
adjacentes
Ex. digitando 1243 ao invés de 1234
Mas muitos outros erros de transcrição não são
detectados
Ex. digitando 3412 ao invés de 1234
Tem alta taxa de código
1 dígito de checagem para 14 ou 15 dígitos de carga
Exercícios
Considerando que o número do cartão é
1234 4567 7891
Usar procedimento de Luhn para os casos:
1243 4567 7891
3412 4567 7891
Detecção/correção de erros
Como vimos, a detecção e a correção de erros implica em um
aumento de numero de bits a serem transmitidos
Implica em um aumento de processamento na comunicação
Em algumas situações, não é viável a verificação de erros em
todas as transmissões
Ex.: as mensagens transmitidas na Internet pelo protocolo IP têm
no cabeçalho da sua mensagem um campo para verificação de erro, o campo checksum
As estações e os roteadores da rede só verificam erro nos
cabeçalhos dessas mensagens e deixam para as aplicações verificarem os erros,quando isso for necessário
Ex: transmissão de um programa (FTP)
Referências
Material de:
Prof Dr Francisco Javier Ropero
Profa Dra Itana Stiubiener
Prof Dr Raphael Camargo
Prof Dr Luiz Mirisola
Prof Dr Rogério Neves
Wikipedia