El código Hamming es una familia de códigos correctores que añade bits de paridad en posiciones cuidadosamente elegidas. El receptor repite las comprobaciones y combina sus resultados en una dirección binaria llamada síndrome. Si un único bit cambió durante la transmisión o el almacenamiento, el síndrome señala su posición exacta y permite repararlo sin pedir de nuevo los datos.
El ejemplo clásico es Hamming(7,4): cuatro bits de información se convierten en una palabra de siete bits al incorporar tres controles. Esta guía desarrolla la distribución, codifica un ejemplo completo, introduce un fallo y lo corrige paso a paso. También aclara los límites del esquema básico y la función de la paridad global en SECDED.
Qué problema resuelve el código Hamming
El ruido, las interferencias, una celda débil, la radiación o un fallo de temporización pueden alterar bits en enlaces y memorias. Un solo bit de paridad permite saber que cambió una cantidad impar de bits, pero no identifica cuál. El código Hamming combina comprobaciones superpuestas para que cada posición pertenezca a un conjunto único de grupos.
Cada control solo indica aprobado o fallido. Sin embargo, la combinación de todos esos resultados codifica la ubicación del error. La redundancia no se limita a anunciar corrupción: forma un mapa para localizar el bit afectado.
Es una técnica de corrección de errores hacia delante. El emisor incluye redundancia antes de que ocurra el fallo y el receptor corrige localmente el caso previsto, en vez de depender siempre de una retransmisión.
Distancia de Hamming y capacidad de corrección
La distancia de Hamming entre dos cadenas de igual longitud es la cantidad de posiciones distintas. 101101 y 100001, por ejemplo, difieren en dos lugares y tienen distancia 2.
La distancia mínima entre palabras válidas determina la garantía del código:
| Distancia mínima | Capacidad garantizada |
|---|---|
| 2 | Detectar un error de bit |
| 3 | Corregir un error de bit |
| 4 | Corregir un error y detectar dos errores |
El código Hamming básico tiene distancia mínima 3. Si una palabra válida sufre un cambio, el resultado sigue estando más cerca de una única palabra válida. Al añadir una paridad global, la forma extendida alcanza distancia 4 y ofrece SECDED: corrección de un error y detección de dos.
Cuántos bits de paridad hacen falta
Si hay m bits de datos y r bits de paridad, los resultados de control deben distinguir todas las posiciones y el caso sin error:
2^r >= m + r + 1Para cuatro bits de datos, dos controles no bastan: 2^2 = 4, pero 4 + 2 + 1 = 7. Tres sí bastan porque 2^3 = 8 y 4 + 3 + 1 = 8. El resultado es una palabra de siete bits.
Para 11 bits de datos, cuatro controles cumplen 2^4 = 11 + 4 + 1, dando Hamming(15,11). En la notación Hamming(n,k), n es la longitud total y k la cantidad de datos útiles.
Dónde se colocan los bits de paridad
Numera las posiciones desde 1. Reserva las potencias de dos, como 1, 2, 4 y 8, para paridad; coloca los datos en los demás lugares.
La distribución Hamming(7,4) es:
| Posición | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| Función | P1 | P2 | D1 | P4 | D2 | D3 | D4 |
Las direcciones binarias explican la cobertura:
| Posición | Dirección | Controles |
|---|---|---|
| 1 | 001 | P1 |
| 2 | 010 | P2 |
| 3 | 011 | P1, P2 |
| 4 | 100 | P4 |
| 5 | 101 | P1, P4 |
| 6 | 110 | P2, P4 |
| 7 | 111 | P1, P2, P4 |
P1 comprueba 1, 3, 5 y 7, cuyas direcciones tienen activo el bit de unidades. P2 cubre 2, 3, 6 y 7; P4 cubre 4, 5, 6 y 7. Cada posición participa en una combinación distinta, de modo que los fallos forman una dirección única.
Ejemplo completo de codificación Hamming(7,4)
Codifiquemos los datos 1011 con paridad par. Coloca sus bits en las posiciones 3, 5, 6 y 7:
| Posición | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| Valor | P1 | P2 | 1 | P4 | 0 | 1 | 1 |
Calcular P1
P1 cubre 1, 3, 5 y 7. Los datos conocidos son 1, 0, 1, con dos unos. La cantidad ya es par, así que P1 vale 0.
Calcular P2
P2 cubre 2, 3, 6 y 7. Hay tres unos conocidos. P2 debe valer 1 para que el total sea cuatro.
Calcular P4
P4 cubre 4, 5, 6 y 7. Los valores 0, 1, 1 contienen dos unos, por lo que P4 vale 0.
La palabra final es:
Posición: 1 2 3 4 5 6 7
Palabra: 0 1 1 0 0 1 1
Resultado: 0110011Con paridad impar se conserva la misma distribución, pero cada control se elige para dejar una cantidad impar de unos. Emisor y receptor deben compartir la convención.
Detectar y corregir un error de un bit
Supongamos que la posición 5 cambia de 0 a 1. El receptor obtiene 0110111. Al repetir los controles e incluir los bits de paridad:
| Control | Posiciones | Resultado |
|---|---|---|
| P1 | 1, 3, 5, 7 | Falla; XOR da 1 |
| P2 | 2, 3, 6, 7 | Pasa; XOR da 0 |
| P4 | 4, 5, 6, 7 | Falla; XOR da 1 |
Ordena los resultados como P4-P2-P1:
P4 P2 P1 = 1 0 1
Binario 101 = posición decimal 5El síndrome vale 5 y señala el bit alterado. Se invierte de 1 a 0, se recupera 0110011 y se extraen las posiciones 3, 5, 6 y 7 para obtener 1011. El conversor de binario a decimal permite verificar el valor posicional del síndrome durante el aprendizaje.
Procedimiento de un decodificador
Un decodificador práctico sigue estos pasos:
- Recibe la palabra con ancho fijo.
- Recalcula cada grupo según la paridad acordada.
- Combina los fallos en el síndrome, donde cada control aporta el valor de su posición.
- Si el síndrome no es cero y está dentro del rango, invierte esa posición bajo el modelo de un solo fallo.
- Elimina las posiciones de paridad y devuelve los datos.
- Si existe paridad global, la usa para distinguir uno y dos errores antes de corregir.
Los controles son reducciones XOR que pueden ejecutarse en paralelo con los circuitos de la guía de puertas lógicas. La guía del sistema binario explica por qué las potencias de dos producen direcciones únicas.
Código Hamming básico frente a SECDED
El esquema básico corrige un error. Si cambian dos bits, el síndrome puede apuntar a una tercera posición; invertirla convertiría dos fallos en tres. La forma de siete bits no distingue de manera fiable todos los errores dobles de los simples.
La variante extendida añade un bit de paridad sobre toda la palabra básica. El receptor combina el síndrome y ese control:
| Síndrome | Paridad global | Interpretación |
|---|---|---|
| Cero | Pasa | No se detecta error |
| No cero | Falla | Un error en la posición indicada; se corrige |
| Cero | Falla | Falló el propio bit global |
| No cero | Pasa | Error doble detectado; no se corrige como simple |
Este comportamiento SECDED aparece habitualmente en memoria ECC. Corrige cualquier error aislado y detecta, pero no repara, dos errores. Las ráfagas y los fallos de un dispositivo completo requieren códigos más fuertes o protección específica.
Formas mayores y acortadas
Las longitudes binarias perfectas son 2^r - 1: 7, 15, 31, 63 y otras. También es posible acortar un código fijando ciertas posiciones de datos y omitiéndolas en la transmisión. La nueva palabra lleva menos información, pero conserva las relaciones de paridad heredadas.
Un sistema real debe documentar numeración, orden en el cable, empaquetado en bytes, convención par o impar y presencia de paridad global. Dos implementaciones pueden usar la misma familia matemática y mostrar los bits en direcciones opuestas; la interoperabilidad depende del formato completo.
Aplicaciones habituales
- Memoria ECC: las variantes extendidas corrigen fallos aislados e informan errores dobles.
- Comunicación digital: un enlace sencillo repara un bit ocasional sin esperar una retransmisión.
- Almacenamiento y sistemas integrados: palabras pequeñas reciben protección con lógica moderada.
- Educación y diseño: el método muestra con claridad cómo ecuaciones redundantes localizan un fallo.
- Base conceptual: códigos modernos más fuertes usan otras matemáticas, pero conservan ideas de distancia mínima y síndrome.
Es apropiado cuando predominan errores de un solo bit independientes y el coste debe ser bajo. Si el canal suele producir daños agrupados, la selección debe basarse en esas estadísticas reales.
Errores frecuentes
- Numerar desde cero: la derivación estándar comienza en 1 para situar controles en potencias de dos.
- Colocar datos en 1, 2, 4 u 8: esas posiciones están reservadas.
- Mezclar paridad par e impar: ambas sirven, pero codificador y decodificador deben coincidir.
- Leer el síndrome al revés: P1 es el bit menos significativo; P4-P2-P1 forma la posición.
- Confiar en el básico para errores dobles: hace falta paridad global para obtener SECDED.
- Corregir una dirección fuera de rango: debe tratarse como fallo de formato o error múltiple.
- No acordar el orden de datos: hay que definir dónde entra el primer bit suministrado.
Preguntas frecuentes
¿Qué es el código Hamming en términos sencillos?
Añade controles de paridad superpuestos. La combinación de los controles fallidos forma la dirección de un bit incorrecto, que puede invertirse para recuperar la palabra.
¿Por qué la paridad ocupa potencias de dos?
Esas posiciones tienen una sola unidad en su dirección binaria. Las demás presentan combinaciones únicas, por lo que su participación en grupos identifica cada posición.
¿Qué significa Hamming(7,4)?
Una palabra total de siete bits que transporta cuatro bits de datos y tres de paridad. La versión básica corrige un fallo dentro de esa palabra.
¿Puede corregir dos errores?
No. La forma estándar corrige uno. Con paridad global detecta dos, pero tampoco puede repararlos. La corrección múltiple exige un código más potente.
¿Qué es el síndrome?
Es el resultado conjunto de todas las comprobaciones. Cero indica que los controles básicos pasan; un valor distinto de cero representa el índice binario del error bajo el modelo de un solo fallo.
¿Distancia de Hamming y código Hamming son lo mismo?
No. La distancia es una medida general entre cadenas de igual longitud. El código es una familia correctora concreta diseñada con esa medida.
¿El código Hamming cifra los datos?
No. La redundancia sirve para fiabilidad y es pública. La confidencialidad requiere cifrado; este esquema no impide leer el contenido.
Resumen
El código Hamming reserva potencias de dos para paridad y hace que cada control cubra un conjunto distinto de direcciones binarias. Los fallos forman un síndrome que localiza un bit alterado. Hamming(7,4) transforma cuatro bits de datos en siete, y la paridad global lo extiende a SECDED. La garantía debe respetarse: corregir uno, detectar dos solo en la versión extendida y adoptar protección superior cuando sean probables errores múltiples o en ráfaga.
