CENTRO UNIVERSITARIO INTERAMERICANO DEL PACIFICO
ESPECIALIDAD EN REDES
ALUMNO: L.S.C. STALIN VAZQUEZ VILLALOBOS
TERCER CUATRIMESTRE
____________________________________________________________________________________________
METODO HAMMING
Todo inicia en 1950 cuando el profesor Richard W. Hamming realiza una
publicación de un artículo sobre la detección y corrección de errores el cual
nos indica un algoritmo dentro de una palabra binaria de datos, con el fin de
transmitir mensajes confiables. El fin de este trabajo es la investigación
frente a este tema e ir desapareciendo tantas incógnitas que tenemos para ser
aplicadas como proyecto final en el trascurso de nuestro curso de electrónica
digital.
Debemos tener unos conceptos claros como el código binario el cual es una
representación de las cantidades a las que se les asignan una combinación de
signos binarios; otro concepto es la distancia entre dos combinaciones binarias
que es representada por el número de bits que se deben que asignar en una
combinación de signos binarios y por último la distancia mínima de un código,
la cual es la combinación entre dos combinaciones binarias menores de dicho
código. Teniendo estos conceptos cabe resaltar que un código binario debe tener
una distancia mínima o igual a 1 con el fin que una combinación no represente a
varias cantidades o valores; Estos códigos a su vez son continuos con números
decimales de un bit.
El código de Hamming es un código detector y corrector de errores que lleva el nombre de su inventor, Richard Hamming. En los datos codificados en Hamming se pueden detectar errores en un bit
y corregirlos, sin embargo no se distingue entre errores de dos bits y de un
bit (para lo que se usa Hamming extendido). Esto representa una mejora respecto
a los códigos con bit de paridad, que pueden detectar errores en sólo un bit,
pero no pueden corregirlo.
Códigos
Hamming
Si se añaden
junto al mensaje más bits detectores-correctores de error y si esos bits se
pueden ordenar de modo que diferentes bits de error producen diferentes
resultados, entonces los bits erróneos podrían ser identificados. En un
conjunto de siete bits, hay sólo siete posibles errores de bit, por lo que con
tres bits de control de error se podría especificar, además de que ocurrió un
error, en qué bit fue.
Hamming estudió los esquemas
de codificación existentes, incluido el de dos entre cinco, y generalizó sus
conclusiones. Para empezar, desarrolló una nomenclatura para describir el
sistema, incluyendo el número de los bits de datos y el de los bits detectores-correctores
de error en un bloque. Por ejemplo, la paridad incluye un solo bit para
cualquier palabra de datos, así que las palabras del Código ASCII que son de
siete bits, Hamming las describía como un código (8.7), esto es, un total de 8
bits de los cuales 7 son datos. Con base a la anterior repetición, sería un
código (3.1), siguiendo la misma lógica. La relación de la información es el
segundo número dividido por el primero, por nuestro ejemplo de la repetición,
1/3.
Hamming también estudió los
problemas que surgían al cambiar dos o más bits a la vez y describió esto como
"distancia" (ahora llamada distancia de Hamming en su
honor). La paridad tiene una distancia de 2, dado que cualquier error en dos
bits no será detectado. La repetición (3.1) tiene una distancia de 3, pues es
necesarios el cambio simultáneo de tres bits para obtener otra palabra de
código. La repetición (4.1) (cada bit se repite cuatro veces) tiene una
distancia de 4, así que el cambio de dos bits en el mismo grupo quedará sin
definir.
Hamming estaba interesado en
solucionar simultáneamente dos problemas: aumentar la distancia tanto como sea
posible, a la vez que se aumentan al máximo los bits de información. Durante
los años 40 desarrolló varios esquemas de codificación que mejoraban
notablemente los códigos existentes. La clave de todos sus sistemas era
intercalar entre los bits de datos los de paridad.
Hamming (7,4) Hoy, el código
de Hamming se refiere al (7.4) que Hamming introdujo en 1950. El código de
Hamming agrega tres bits adicionales de comprobación por cada cuatro bits de
datos del mensaje. El algoritmo de Hamming (7.4) puede corregir cualquier error
de un solo bit, pero cuando hay errores en más de un bit, la palabra
transmitida se confunde con otra con error en un sólo bit, siendo corregida,
pero de forma incorrecta, es decir que la palabra que se corrige es otra
distinta a la original, y el mensaje final será incorrecto sin saberlo. Para
poder detectar (aunque sin corregirlos) errores de dos bits, se debe añadir un
bit más, y el código se llama Hamming extendido. El procedimiento para esto se
explica al final. El algoritmo es el siguiente:
1. Todos los bits cuya
posición es potencia de dos se utilizan como bits de paridad (posiciones 1, 2,
4, 8, 16, 32, 64, etc.).
2. Los bits del resto de
posiciones son utilizados como bits de datos (posiciones 3, 5, 6, 7, 9, 10, 11,
12, 13, 14, 15, 17, etc.).
3. Cada bit de paridad se
obtiene calculando la paridad de alguno de los bits de datos. La posición del
bit de paridad determina la secuencia de los bits que alternativamente
comprueba y salta, a partir de éste, tal y como se explica a continuación.
Posición 1: salta 0, comprueba 1, salta 1, comprueba 1, etc. Posición 2: salta
1, comprueba 2, salta 2, comprueba 2, etc. Posición 4: salta 3, comprueba 4,
salta 4, comprueba 4, etc. Posición 8: salta 7, comprueba 8, salta 8, comprueba
8, etc. Posición 16: salta 15, comprueba 16, salta 16, comprueba 16, etc. Regla
general para la posición n es: salta n-1 bits, comprueba n bits, salta n bits,
comprueba n bits... Y así sucesivamente. En otras palabras, el bit de paridad
de la posición comprueba los bits en las posiciones que tengan al bit k en su
representación binaria. Dicho a la inversa, el bit 4, chequea los bits 4, 5, 6,
7, al ser estos los de su representación binaria: 4=100(2), 5=101(2), 6=110(2)
y 7=111(2). Por el contrario, el mismo bit de paridad no comprueba el bit 8,
debido a que en su representación binaria el bit número 3 (=4) es igual a 0
(8=1000B). Así, por ejemplo, para los primeros términos se tiene: En la
Posición 1 (2^0 = 1), comprobaríamos los bits: 1, 3, 5, 7, 9, 11, 13... En la
Posición 2 (2^1 = 2), los bits: 2, 3, 6, 7, 10, 11, 14, 15... En la Posición 4
(2^2 = 4), los bits: 4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23... En la
Posición 8 (2^3 = 8) tendríamos: 8, 9, 10, 11, 12, 13, 14, 15, 24-31...
Siguiendo el algoritmo hasta completar la nueva cadena.
Ejemplo
Consideremos
la palabra de datos de 7 bits "0110101". Para ver cómo se generan y
utilizan los códigos Hamming para detectar un error, observe las tablas
siguientes. Se utiliza la d para
indicar los bits de datos y la p
para los de paridad.
En primer lugar los bits de
datos se insertan en las posiciones apropiadas y los bits de paridad calculados
en cada caso usando la paridad par.
p1
|
p2
|
d1
|
p3
|
d2
|
d3
|
d4
|
p4
|
d5
|
d6
|
d7
|
|
Palabra de datos (sin paridad):
|
0
|
1
|
1
|
0
|
1
|
0
|
1
|
||||
p1
|
1
|
0
|
1
|
0
|
1
|
1
|
|||||
p2
|
0
|
0
|
1
|
0
|
0
|
1
|
|||||
p3
|
0
|
1
|
1
|
0
|
|||||||
p4
|
0
|
1
|
0
|
1
|
|||||||
Palabra de datos (con paridad):
|
1
|
0
|
0
|
0
|
1
|
1
|
0
|
0
|
1
|
0
|
1
|
P1 = D1 exor D2 exor D4
exor D5 exor D7
P2 = D1 exor D3 exor D4 exor D6 exor D7
P3 = D2 exor D3 exor D4
P4 = D5 exor D6 exor D7
P2 = D1 exor D3 exor D4 exor D6 exor D7
P3 = D2 exor D3 exor D4
P4 = D5 exor D6 exor D7
La nueva palabra de datos (con
los bits de paridad) es ahora "10001100101". Consideremos ahora que
el bit de la derecha, por error, cambia de 1 a 0. La nueva palabra de datos
será ahora "10001100100".
Sin errores
p1
|
p2
|
d1
|
p3
|
d2
|
d3
|
d4
|
p4
|
d5
|
d6
|
d7
|
Prueba de paridad
|
Bit de comprobación
|
|
Palabra de datos recibida:
|
1
|
0
|
0
|
0
|
1
|
1
|
0
|
0
|
1
|
0
|
1
|
1
|
|
p1
|
1
|
0
|
1
|
0
|
1
|
1
|
Correcto
|
0
|
|||||
p2
|
0
|
0
|
1
|
0
|
0
|
1
|
Correcto
|
0
|
|||||
p3
|
0
|
1
|
1
|
0
|
Correcto
|
0
|
|||||||
p4
|
0
|
1
|
0
|
1
|
Correcto
|
0
|
|||||||
Comprobación de los bits de paridad (con primer
bit de la derecha sin cambiar)
|
Con errores
p1
|
p2
|
d1
|
p3
|
d2
|
d3
|
d4
|
p4
|
d5
|
d6
|
d7
|
Prueba de paridad
|
Bit de comprobación
|
|
Palabra de datos recibida:
|
1
|
0
|
0
|
0
|
1
|
1
|
0
|
0
|
1
|
0
|
0
|
1
|
|
p1
|
0
|
0
|
1
|
0
|
1
|
0
|
Error
|
1
|
|||||
p2
|
1
|
0
|
1
|
0
|
0
|
0
|
Error
|
1
|
|||||
p3
|
0
|
1
|
1
|
0
|
Correcto
|
0
|
|||||||
p4
|
1
|
1
|
0
|
0
|
Error
|
1
|
|||||||
Comprobación de los bits de paridad (con primer
bit de la derecha cambiado)
|
Si se analiza en la tabla
anterior la paridad que se debe obtener a la derecha tras la llegada del
mensaje sin errores debe ser siempre 0 (por cada fila), pero en el momento en
que ocurre un error esta paridad cambia a 1, de allí el nombre de la columna "prueba
de paridad 1". Se observa que en la fila en que el cambio no afectó la
paridad es cero y llega sin errores.
El paso final es evaluar los
bits de paridad (recuerde que el fallo se encuentra en d7). El valor entero que representan los bits de
paridad es 11 (si no hubieran ocurrido errores este valor seria 0), lo que
significa que el bit décimo primero de la palabra de datos (bits de paridad
incluidos) es el erróneo y necesita ser cambiado.
p4
|
p3
|
p2
|
p1
|
||
Binario
|
1
|
0
|
1
|
1
|
|
Decimal
|
8
|
2
|
1
|
Σ = 11
|
Cambiando el bit décimo
primero 10001100100 se obtiene
de nuevo 10001100101. Eliminando
los bits de patrón de la paridad no se tienen en cuenta los bits de paridad. Si
el error se produjera en uno de ellos, en la comprobación sólo se detectaría un
error, justo el correspondiente al bit de paridad causante del mismo.
No hay comentarios.:
Publicar un comentario