Código Hamming Detección y corrección de errores
Información
Publicado en 1950 por Richard Hamming. Se puede detectar error en un bit y corregirlo. Para errores en dos bits se utiliza Hamming extendido (pero no corrige). Se utiliza para reparar errores en la trasmisión de datos, donde puede haber perdidas.
Bits paridad/Bits datos
Agrega tres bits adicionales de comprobación por cada cuatro bits de datos del mensaje. Bits de paridad: Bits cuya posición es potencia de 2 (1,2,4,8,16,32,64,…) Bits de datos: Bits del resto de posiciones (3,5,6,7,9,10,11,12,13,14,15,17…)
Algoritmo
Cada bit de paridad se obtiene con la paridad de algunos de los bits de datos:
Posición 1 : Salta 0, Comp 1, Salta 1, Comp 1…
Posición 2 : Salta 1, Comp 2, Salta 2, Comp 2…
Posición 4 : Salta 3, Comp 4, Salta 4, Comp 4…
Posición n : Salta n-1, Comp n, Salta n, Comp n..
Ejemplo: 0110101 p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7 Palabra s/p P1 P2 P3 p4 Palabra c/p
0
1
1
0
1
0
1
Ejemplo: 0110101 p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7 Palabra s/p P1 P2 P3 p4 Palabra c/p
1
0
1
0
1
1
0
1
0
1
0
1 1
Ejemplo: 0110101 p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7 Palabra s/p P1 P2 P3 p4 Palabra c/p
1 0
0
1
0
1
0
1
1
0
1
0
1
0
0
1 1
0
1
Ejemplo: 0110101 p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7 Palabra s/p P1 P2 P3 p4 Palabra c/p
1 0
0
1
0
1
0 0
1
1
0
1
0
1
1
0
1
0
0
1 1
0
1
Ejemplo: 0110101 p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7 Palabra s/p P1 P2 P3 P4 Palabra c/p
1 0
0
1
0
1
0 0
1
1
0
1
0
1
1
0
1
0 0
1
0
1 1
0
1
0
1
Ejemplo: 0110101 p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7 Palabra s/p P1
1
P2
0
0
1
0
1
0
P3
0
1
1
0
1
0
1
1
0
1
0
P4 Palabra c/p 1
0
0
0
1
1
0
0
1 1
0
1
0
1
0
1
0
1
0
1
Comprobando Error
Ahora supongamos que el 3° bit de derecha a izquierda cambia de 1 a 0, la nueva palabra seria:
10001100101 => 10001100001
Comprobando Error p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7 Bit paridad Palabra s/p P1
1
P2
0
0
1
0
1
0
P3
0
1
1
0
0
0
0
1
0
1
0
P4 Palabra c/p 1
0
0
0
1
1
0
0
1 1
0
1
0
0
0
1
0
0
0
1
Comprobando Error p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7 Bit paridad Palabra s/p P1
1
P2
0
0
1
0
1
0
P3
0
1
1
0
0
0
0
1
0
1
0
P4 Palabra c/p 1
0
0
0
1
1
0
0
1 1
0
1
0
0
0
1
0
0
0
1
1
Comprobando Error p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7 Bit paridad Palabra s/p P1
1
P2
0
0
1
0
1
0
P3
0
1
1
0
0
0
0
1
0
1
0
P4 Palabra c/p 1
0
0
0
1
1
0
0
1 1
1
0
1
0
0
0
0
1
0
0
0
1
Comprobando Error p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7 Bit paridad Palabra s/p P1
1
P2
0
0
1
0
1
0
P3
0
1
1
0
0
0
0
1
0
1
0
P4 Palabra c/p 1
0
0
0
1
1
0
0
0
1 1
1
1
0 0
0
0
0
1
0
0
0
1
Comprobando Error p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7 Bit paridad Palabra s/p P1
1
P2
0
0
1
0
1
0
P3
0
1
1
0
0
0
0
1
0
1
0
P4 Palabra c/p 1
0
0
0
1
1
0
0
0
1 1
1
1
0 0
0
0
0
1
0
0
0
1
1
Corrigiendo error
Los bits de paridad nos dicen que el error esta en la posición:
1001 = 9
El error está en el 9° bit:
10001100001
El número original era: 10001100101 = 0110101