Código de Hamming: corregir un bit localizando su posición

Elige los cuatro bits de datos e invierte cualquier bit en el canal, mediante los botones o pulsando el diagrama. El decodificador repite las tres comprobaciones de paridad, interpreta las que fallan como un número binario e invierte el bit de esa posición. Recorre el proceso paso a paso y prueba después con dos inversiones.

Cargando simulación interactiva...

Lección

La teoría — Código de Hamming: corregir un bit localizando su posición

Un código de Hamming añade bits de paridad a los datos para localizar un bit invertido y devolverlo a su valor original. Cada bit de paridad hace que un conjunto determinado de posiciones contenga un número par de unos; esto constituye una comprobación de paridad. El decodificador repite las comprobaciones sobre la palabra recibida. El patrón de fallos, llamado síndrome, se interpreta como un número binario que indica la posición del bit erróneo; 0 significa que no hay ninguno. Una cifra de control solo puede indicar que algo está mal; este código indica dónde. El código extendido añade un bit para que la palabra completa tenga paridad par. Así corrige cualquier inversión aislada y detecta dos inversiones cualesquiera, aunque no las corrige: SECDED.

Qué significa cada símbolo

dᵢ
los cuatro bits de datos, situados en las posiciones 3, 5, 6 y 7
p₁, p₂, p₄
los bits de paridad, cada uno en la posición que le da nombre; p0 es el bit de paridad global del código extendido
s
el síndrome, 4s4 + 2s2 + s1, donde sk vale 1 cuando el círculo k contiene un número impar de unos al llegar
P
la paridad de los ocho bits recibidos en el código extendido: 1 indica un número impar de inversiones
p
la tasa de error de bit, es decir, la probabilidad de que un bit cualquiera se invierta con independencia de todos los demás
Supone
Cada bit se invierte de forma independiente y con la misma probabilidad p. Los canales y las memorias reales también sufren errores en ráfaga, que afectan a varios bits vecinos a la vez. Estas inversiones múltiples son precisamente las que peor resuelven estos códigos.
Falla cuando
Con tres inversiones. El código extendido las interpreta como una, porque la paridad global resulta impar, y corrige un bit que era correcto: la tabla de todas las inversiones muestra que las 896 inversiones triples entregan datos erróneos sin aviso.

Los círculos que fallan suman la posición del bit invertido 🖖

Pulsa Una inversión. El bit 5 se invierte en el canal, y los círculos 1 y 4 contienen ahora un número impar de unos mientras que el círculo 2 sigue siendo par: 1 + 4 = 5. No se ha elegido un caso especial para que funcione. El círculo k comprueba exactamente las posiciones cuyo número binario contiene k. Por eso, un bit erróneo en la posición i altera justo los círculos cuya suma es i: la posición de un bit en el diagrama es también su dirección. En 1950, Hamming buscaba precisamente esto, un «número de comprobación» que indicase la posición de cualquier error aislado, reservando el cero para la ausencia de errores. Tres comprobaciones ofrecen ocho resultados y una palabra de siete bits necesita exactamente ocho: sus siete posiciones y «sin error». No sobra ninguno. De las 128 palabras de siete bits, 16 son palabras de código; las otras 112 se obtienen invirtiendo un solo bit de una de ellas, y cada una dista una inversión de exactamente una palabra de código. La tabla situada bajo el gráfico decodifica correctamente las 112. Que los bits de paridad ocupen las posiciones 1, 2 y 4 es menos arbitrario de lo que parece. Esas posiciones tienen un único 1 en binario, por lo que cada bit de paridad pertenece a un solo círculo y puede fijarse mediante su propia comprobación. Esa fue la razón que dio Hamming.

Con dos inversiones, el decodificador estropea un tercer bit 🖖

Pulsa Dos inversiones. Los bits 3 y 5 cambian. El círculo 1 contiene ambos, sufre dos alteraciones y permanece par; los círculos 2 y 4 se vuelven impares, de modo que el síndrome indica 6, una posición perfectamente válida. El decodificador invierte el bit 6, que era correcto. Al llegar había dos bits de datos erróneos; después de la corrección hay tres. La cuadrícula muestra que todos los pares producen el mismo resultado: los 21 y, por tanto, las 336 inversiones dobles entre las 16 palabras de datos entregan información errónea sin aviso. Pulsa Solo bits de paridad: las posiciones 1 y 2 no contienen datos, los datos han llegado intactos y el síndrome 3 lleva al decodificador a estropear d1. Pulsa ahora Extendido, dos cambios. El octavo bit hace par el conjunto de los ocho, así que una inversión siempre vuelve impar la paridad global y dos inversiones la dejan par. Al encontrar una paridad global par junto a un síndrome distinto de cero, el decodificador señala la palabra y no toca nada. Así ocurre con las 448 inversiones dobles. No puede repararlas, pues 3 y 5 producen el síndrome 6, igual que 1 y 7. Hamming partió precisamente de la necesidad de señalar el error. Su artículo de 1950 comienza con los dos ordenadores de relés que Bell Labs construyó para el campo de pruebas de Aberdeen. No dejaban pasar inadvertido ningún fallo de relé, unos dos o tres diarios entre 8.900 relés durante la primera época, pero cuando funcionaban sin supervisión por las noches y los fines de semana se detenían con frecuencia.

Enviar cada bit dos veces cuesta los mismos ocho bits y no corrige nada 🖖

Repetir cada bit dos veces y usar el código extendido exige en ambos casos ocho bits para transmitir cuatro. Si las dos copias no coinciden, el receptor sabe que algo ha fallado, pero no cuál de ellas es correcta; solo puede señalar el bloque. Con p = 0,01, esto sucede en 7,69×10⁻² de los bloques, mientras que 3,77×10⁻⁴ pasan con errores cuando se invierten a la vez las dos copias de un bit. El código de Hamming extendido corrige cualquier inversión aislada, señala 2,64×10⁻³ y deja pasar 5,34×10⁻⁵: con el mismo presupuesto, produce 29 veces menos avisos y 7 veces menos bloques erróneos. Las líneas discontinuas y continuas muestran que aventaja a la repetición en ambos aspectos hasta que p supera 0,066, lo que corresponde a un canal que invierte un bit de cada quince. Repetir cada bit tres veces sí supera al código de siete bits por bloque para todos los valores de p del control: aquí, 1,19×10⁻³ frente a 2,03×10⁻³. Sin embargo, requiere 12 bits en lugar de 7; por eso la comparación justa es la de ocho.

Problema resuelto al detalle

  1. ¿Cuántos bits de paridad necesita una palabra de 64 bits? 4 pasos

    Protege 64 bits de datos del mismo modo. Pulsa Extendido, un cambio: cuatro bits de paridad para cuatro bits de datos, con una tasa del 50,0 %. Calcula cuántos bits de paridad necesita una palabra de 64 bits para ofrecer la misma garantía, corregir cualquier inversión aislada y señalar dos cualesquiera, y cuál es el coste de la palabra más larga para el valor p = 0,001 de este ejemplo.

    Abre este problema en la herramienta

    1. Con r comprobaciones, el síndrome puede tomar 2r valores. Uno debe indicar que no hay errores y cada una de las m + r posiciones necesita el suyo, así que 2r ≥ m + r + 1. En la página, m = 4 y r = 3 satisface la desigualdad exactamente, sin que sobre ningún valor.

    2. Para m = 64, seis comprobaciones ofrecen 64 valores, pero hacen falta 71; siete ofrecen 128, suficientes para 72. Por tanto, 71 bits permiten corregir cualquier inversión aislada.

    3. Al añadir un bit de paridad global se obtienen 72 bits, 8 de ellos de paridad, y una tasa del 88,9 % frente al 50,0 % de la página.

    4. El precio es que una palabra más larga acumula dos inversiones con mayor frecuencia, justo el caso que SECDED ya no puede reparar. Para una palabra de 8 bits, esa probabilidad es la suma de las dos cifras de la página.

    Respuesta

    Ocho bits de paridad, una palabra de 72 bits y una tasa del 88,9 %. Con p = 0,001, contiene dos inversiones o más con probabilidad 2,44×10⁻³. Si los mismos 64 bits se dividen en dieciséis palabras de 8 bits, se pierden cuando falla cualquiera de ellas, con probabilidad 4,46×10⁻⁴. La palabra larga tiene unas 5,5 veces más probabilidades de perder sus 64 bits, a cambio de emplear la octava parte de bits de paridad.

Ruta de aprendizaje

Por qué un algoritmo es correcto

Referencias (2)