O código de Hamming é um código corretor de erros: acrescenta aos teus dados alguns bits de paridade para que, se um bit se corromper ao ser transmitido ou armazenado, possa ser detetado e corrigido automaticamente sem reenviar nada. É usado em memórias ECC, comunicações e armazenamento. Um código de Hamming clássico corrige 1 bit errado por palavra; com a extensão SECDED, também deteta 2. Todo o cálculo acontece no teu navegador.
1. Codificar — escreve os teus bits de dados e obtém a palavra código com a paridade já intercalada; clica num bit para simular um erro.
2. Detetar e corrigir — cola uma palavra código (com ou sem falha) e verás a síndrome, o bit errado e a palavra corrigida.
3. Simulador — envia a mesma palavra milhares de vezes por um canal com ruído e mede quantas são corrigidas, detetadas ou falham.
O interrutor SECDED e o menu Exemplos estão nos três separadores. Tudo se recalcula só ao escrever (sem botão).
Em Codificar tens dois modos:
• Bits — apenas os carateres 0 e 1 (os dados, sem bits de paridade: são adicionados automaticamente).
• Texto — texto ASCII/Latin-1; cada caráter converte-se em 8 bits (carateres fora desse intervalo não são admitidos).
Em Detetar e corrigir cola-se a palavra código completa (dados + paridade), também em 0 e 1. Qualquer outro caráter marca o campo a vermelho. Não há limite de comprimento: quantos mais bits de dados, mais eficiente é o código (menos paridade por bit).
Os bits de paridade colocam-se nas posições potência de 2 (1, 2, 4, 8, 16…) e os de dados preenchem o resto. Para k bits de dados escolhem-se os r bits de paridade justos para que 2^r ≥ k + r + 1 (assim 4 dados → 3 paridade = Hamming(7,4); 8 dados → 4 paridade).
Cada bit de paridade Pi cobre as posições cujo índice tem esse bit a 1: P1 (1, 3, 5, 7…), P2 (2, 3, 6, 7…), P4 (4, 5, 6, 7…). O seu valor fixa-se (com XOR) para que a quantidade de uns que cobre seja par. A tabela Cobertura mostra que posições cada um vigia.
Ao receber a palavra, cada paridade é reverificada com um XOR. A síndrome é a soma das posições de paridade que falham e, pela forma como foram colocadas, equivale exatamente à posição do bit errado: síndrome 0 = sem erro; síndrome 5 (= 101 em binário) = o bit 5 está errado, e inverte-se para o corrigir.
Atenção: o Hamming assume sempre um único erro. Se houver 2 bits errados, a síndrome aponta para um terceiro bit inocente e "corrige-o" mal → falha silenciosa (dados errados sem aviso). Para isso existe o SECDED.
Ao ativar SECDED acrescenta-se um bit de paridade global (P0) que cobre toda a palavra, subindo a distância mínima de 3 para 4. Com isso o código corrige 1 erro e deteta 2 (embora não consiga corrigir os duplos). É o que usa a memória ECC.
A lógica combina a síndrome com P0: síndrome 0 e P0 correto = sem erro; síndrome ≠ 0 e P0 falha = 1 erro corrigível; síndrome ≠ 0 mas P0 correto = erro duplo detetado; só P0 falha = o próprio P0 corrompeu-se.
Depois de codificar, clica em qualquer bit da palavra para o "corromper" e observa ao instante como a síndrome localiza o bit assinalado e o corrige. Se mudares 2 ou mais bits verás a falha silenciosa (ou, com SECDED, a deteção do erro duplo). Usa Restaurar palavra para voltares à original ou Enviar para Detetar e corrigir para a analisares no outro separador.