Código de Hamming: corrigir um bit identificando a sua posição

Defina os quatro bits de dados e inverta quaisquer bits no canal, usando os botões ou clicando no diagrama. O descodificador repete as três verificações de paridade, lê as que falham como um número binário e inverte esse bit. Percorra o processo uma vez e depois experimente duas inversões.

A carregar a simulação interativa...

Lição

A teoria — Código de Hamming: corrigir um bit identificando a sua posição

Um código de Hamming acrescenta bits de paridade aos dados para localizar e corrigir um bit invertido. Cada bit de paridade faz com que um conjunto escolhido de posições contenha um número par de uns; é uma verificação de paridade. O descodificador repete as verificações sobre a palavra recebida. O padrão das que falham, a síndrome, é lido como um número binário e indica a posição do bit errado; 0 significa que não há nenhum. Um dígito de controlo apenas consegue indicar que algo está errado; este código indica onde. O código estendido acrescenta um bit que torna par a palavra inteira. Corrige então qualquer inversão isolada e deteta quaisquer duas, sem as corrigir: SECDED.

O que significa cada símbolo

dᵢ
os quatro bits de dados, nas posições 3, 5, 6 e 7
p₁, p₂, p₄
os bits de paridade, cada um na posição que lhe dá o nome; p0 é o bit global do código estendido
s
a síndrome, 4s4 + 2s2 + s1, em que sk vale 1 quando o círculo k contém um número ímpar de uns à chegada
P
a paridade dos oito bits recebidos no código estendido: 1 significa que houve um número ímpar de inversões
p
a taxa de erro de bit, isto é, a probabilidade de qualquer bit se inverter, independentemente dos restantes
Pressupõe
Cada bit se inverte independentemente, sempre com a mesma probabilidade p. Os canais e as memórias reais também falham em rajadas, atingindo de uma vez vários bits vizinhos; uma rajada é precisamente o tipo de inversão múltipla que estes códigos tratam pior.
Falha quando
Com três inversões. O código estendido interpreta três inversões como uma, pois a verificação global resulta ímpar, e corrige um bit que estava certo: a tabela completa mostra todas as 896 inversões triplas a entregar dados errados sem sinalização.

A soma dos círculos que falham indica o bit invertido

Carregue em Uma inversão. O bit 5 é invertido no canal; os círculos 1 e 4 passam a conter um número ímpar de uns, enquanto o círculo 2 continua par: 1 + 4 = 5. Esta coincidência não foi preparada pelo exemplo. O círculo k verifica exatamente as posições cuja representação binária contém k; assim, um bit errado na posição i altera precisamente os círculos cuja soma é i. A posição de cada bit no diagrama é o seu endereço. Foi isto que Hamming procurou em 1950: um «número de verificação» que indicasse a posição de qualquer erro isolado, reservando o zero para a ausência de erros. Três verificações permitem oito respostas, exatamente as necessárias para a palavra de sete bits: sete posições e «sem erro». Não sobra nenhuma. Das 128 palavras de sete bits, 16 são palavras de código; as outras 112 resultam de uma única inversão e estão todas a uma inversão de exatamente uma palavra de código. A tabela sob o gráfico descodifica corretamente as 112. A razão para os bits de paridade ocuparem as posições 1, 2 e 4 é mais simples do que parece. Essas posições têm um único 1 na representação binária, pelo que cada bit de paridade pertence apenas a um círculo e pode ser definido pela sua própria verificação, precisamente a justificação apresentada por Hamming.

Duas inversões levam o descodificador a estragar um terceiro bit

Carregue em Duas inversões. Os bits 3 e 5 ficam errados. O círculo 1 contém ambos, sofre duas alterações e continua par; os círculos 2 e 4 tornam-se ímpares e a síndrome indica 6, uma posição perfeitamente válida. O descodificador inverte o bit 6, que estava certo. À chegada havia dois bits de dados errados; depois da correção há três. A grelha mostra o mesmo resultado para todos os pares: os 21, portanto todas as 336 inversões duplas nas 16 palavras de dados, entregam dados errados sem sinalização. Carregue em Só bits de paridade: as posições 1 e 2 não transportam dados, portanto estes chegam intactos, mas a síndrome 3 manda o descodificador estragar d1. Agora carregue em Estendido, duas. O oitavo bit torna par o conjunto dos oito; uma inversão deixa sempre a verificação global ímpar, enquanto duas a deixam par. Perante uma verificação global par e uma síndrome diferente de zero, o descodificador sinaliza a palavra sem lhe tocar, em todas as 448 inversões duplas. Não consegue corrigi-las: 3 e 5 produzem a síndrome 6, tal como 1 e 7. Hamming começou precisamente pela necessidade de sinalizar. O seu artigo de 1950 abre com os dois computadores de relés construídos pelos Bell Labs para o Aberdeen Proving Ground. Nenhuma falha de relé passava despercebida; no período inicial ocorriam cerca de duas ou três por dia entre 8 900 relés e, quando as máquinas funcionavam sem supervisão durante as noites e os fins de semana, paravam com frequência.

Enviar cada bit duas vezes custa os mesmos oito bits e nada corrige

Repetir cada bit duas vezes e usar o código estendido consome, em ambos os casos, oito bits para transmitir quatro. Quando as duas cópias divergem, sabe-se que houve um erro, mas não qual delas está certa; o recetor só pode sinalizar o bloco. Para p = 0,01, isso acontece em 7,69×10⁻² dos blocos, enquanto 3,77×10⁻⁴ passam errados quando ambas as cópias de um bit se invertem. O código de Hamming estendido corrige todas as inversões isoladas, sinaliza 2,64×10⁻³ e deixa passar 5,34×10⁻⁵: com o mesmo número de bits, produz 29 vezes menos sinalizações e 7 vezes menos blocos errados. As linhas tracejadas e contínuas mostram a sua vantagem nas duas medidas até p ultrapassar 0,066, valor correspondente a um canal que inverte um bit em cada quinze. Repetir cada bit três vezes supera o código de sete bits por bloco em todos os valores de p disponíveis no seletor, 1,19×10⁻³ contra 2,03×10⁻³ neste ponto. Contudo, usa 12 bits em vez de 7; por isso, a comparação justa é a que usa oito.

Problema resolvido na íntegra

  1. Quantos bits de paridade exige uma palavra de 64 bits? 4 passos

    Proteja 64 bits de dados da mesma forma. Carregue em Estendido, uma: quatro bits de paridade para quatro bits de dados, com uma taxa de 50,0%. Determine quantos bits de paridade precisa uma palavra de 64 bits para oferecer a mesma garantia, corrigir qualquer inversão isolada e sinalizar quaisquer duas, e calcule o custo da palavra mais longa para p = 0,001, o valor dessa predefinição.

    Abrir este problema na ferramenta

    1. Com r verificações, a síndrome pode assumir 2r valores. Um tem de significar «sem erro» e cada uma das m + r posições precisa do seu próprio valor, portanto 2r ≥ m + r + 1. Nesta página, m = 4 e r = 3 satisfaz a desigualdade à justa, sem qualquer valor livre.

      2r≥m+r+1,m=4: 23=8=4+3+12^{r}\ge m+r+1,\qquad m=4:\ 2^{3}=8=4+3+1
    2. Para m = 64, seis verificações dão 64 valores, quando são necessários 71; sete dão 128, suficientes para 72. Assim, 71 bits permitem corrigir qualquer inversão isolada.

      m=64:26=64<71,27=128≥72 ⇒ r=7, n=71m=64:\quad 2^{6}=64<71,\qquad 2^{7}=128\ge72\ \Rightarrow\ r=7,\ n=71
    3. Acrescentando um bit global, obtêm-se 72 bits, dos quais 8 são de paridade, e uma taxa de 88,9%, contra os 50,0% da página.

      n=64+7+1=72,6472=88.9%n=64+7+1=72,\qquad \dfrac{64}{72}=88{.}9\%
    4. O preço a pagar é que uma palavra mais longa acumula duas inversões com maior frequência, e o SECDED já não consegue corrigi-las. Para uma palavra de 8 bits, essa probabilidade é a soma dos dois valores apresentados na página.

      P≥2(n)=1−qn−npqn−1,P≥2(8)=2.78×10−5+5.57×10−8=2.79×10−5P_{\ge2}(n)=1-q^{n}-npq^{n-1},\qquad P_{\ge2}(8)=2{.}78\times10^{-5}+5{.}57\times10^{-8}=2{.}79\times10^{-5}

    Resposta

    Oito bits de paridade, uma palavra de 72 bits, taxa de 88,9%. Para p = 0,001, a probabilidade de conter duas ou mais inversões é 2,44×10⁻³. Se os mesmos 64 bits forem divididos em dezasseis palavras de 8 bits, perdem-se quando pelo menos uma delas se perde, com probabilidade 4,46×10⁻⁴. A palavra longa tem uma probabilidade cerca de 5,5 vezes maior de perder os seus 64 bits, em troca de usar oito vezes menos bits de paridade.

    P≥2(72)=2.44×10−3,1−(1−P≥2(8))16=4.46×10−4,2.440.446≈5.5P_{\ge2}(72)=2{.}44\times10^{-3},\qquad 1-\bigl(1-P_{\ge2}(8)\bigr)^{16}=4{.}46\times10^{-4},\qquad \dfrac{2{.}44}{0{.}446}\approx5{.}5

Percurso de aprendizagem

Por que razão um algoritmo está correto

Referências (2)