Texto e documentos
Números e cálculo
Dados e formatos
Segurança
Desenvolvimento e DevOps
Inteligência Artificial
Finanças
Saúde & Bem-estar
Produtividade
Jogos & Entretenimento
Multimédia e design
Empresa
Guia de utilização
O que é e para que serve

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.

Como se usa (os três separadores)

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).

O que introduzir e os seus limites

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).

Como funciona a codificação

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.

Como deteta e corrige (a síndrome)

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.

SECDED (paridade estendida)

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.

Simular um erro (separador Codificar)

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.

HammingDeteção de erros
Código HammingDeteção e correção de erros (com SECDED e simulador)
Dados sem bits de paridade (são adicionados automaticamente)