El documento describe el código de Hamming para la detección y corrección de errores en la transmisión de datos binarios. El código de Hamming genera bits de paridad adicionales que permiten detectar y corregir errores de un solo bit. Se explican los conceptos básicos como la distancia de Hamming y cómo se generan y asignan las combinaciones binarias para los bits de paridad y los datos originales. Finalmente, se muestra un ejemplo de tabla de codificación Hamming para 7 bits de datos.
Código de Hamming para detección y corrección de errores
1. CÓDIGO DE HAMMING PARA DETECCIÓN
Y CORRECCIÓN DE ERRORES
ALVARO HUMBERTO CISNEROS ROSERO
DANIEL SEPÚLVEDA NÚÑEZ
INFORMACIÓN Y CODIFICACIÓN
UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS
FACULTAD DE INGENIERÍA
MAESTRÍA EN CIENCIAS DE LA INFORMACIÓN Y LAS COMUNICACIONES
BOGOTÁ
2012
2. TABLA DE CONTENIDO
INTRODUCCIÓN 2
1. OBJETIVOS 3
1.1 GENERAL 3
1.2 ESPECÍFICOS 3
2. TÉCNICAS DE DETECCIÓN DE ERRORES 4
3. TÉCNICAS DE CORRECCIÓN DE ERRORES 5
4. RICHARD WESLEY HAMMING 6
5. CÓDIGO HAMMING 7
5.1. CONCEPTOS BÁSICOS 7
5.2. DISTANCIA DE HAMMING 7
5.3 VARIABLES PARA GENERACIÓN HAMMING 8
5.4. GENERACIÓN DEL CÓDIGO DE HAMMING 9
5.5. EL SÍNDROME Y DETECCIÓN SISTEMÁTICA DEL CÓDIGO DE 13
HAMMING.
5.6. DETECCIÓN Y EFICIENCIA SOBRE CANAL 15
6. EXTENSIÓN DEL CÓDIGO DE HAMMING. 17
7. TAREA 18
8. CONCLUSIONES 19
9. BIBLIOGRAFÍA 20
3. INTRODUCCIÓN
Desde que Claude Shanon desarrollo su teoría de la información, la transmisión
de la información digital presenta un reto constante para los ingenieros de
comunicaciones, puesto que los medios de transmisión pueden corromper y dañar
los datos, por ende es necesario crear un métodos que permitan detectar errores y
mejor aún corregirlos, uno de estos métodos es el método de Hamming,
desarrollado por Richard Wesley Hamming, este método será el pilar desarrollado
en este trabajo, pero para entender de una forma más concisa es necesario
conocer técnicas de corrección y detección de errores que las veremos en los
capítulos 2 y 3, veremos una breve historia sobre Richard Hamming que se
muestra en el capítulo 4 y el capítulo 5 se desarrolla el código Hamming y un
método para lograr una mejor comprensión.
El código Hamming permite detección y corrección de los datos enviados por un
canal susceptible a ruido, esté método se utiliza en canales donde la retransmisión
de un mensaje puede congestionar el canal, este método se utiliza comúnmente
en redes de Wi –Fi para la transmisión de mensajes, su estudio nos mostrará
como detecta y corrige errores de un bit y como puede ser escalado para que
detecte más errores mejorando la eficiencia en el canal.
4. 1. OBJETIVOS
1.1 GENERAL
Estudiar y comprender los aspectos relacionados con el código Hamming.
1.2 ESPECÍFICOS
Conocer las técnicas fundamentales para la detección y la corrección de errores
relacionados con el código Hamming.
Examinar y analizar el método de Hamming para la corrección y su posterior
corrección de errores.
Determinar un sistema para el análisis y comprensión del código Hamming.
Indagar sobre sistemas de mayor complejidad como el método de Hamming
Extendido.
Relacionar la eficiencia del código Hamming frente al aprovechamiento del canal
de transmisión.
5. 2. TÉCNICAS DE DETECCIÓN DE ERRORES
Códigos VRC (Vertical Redundancy Check).
En esta técnica, un bit redundante, denominado bit de paridad, se añade al final de
cada bloque de datos.
Código LRC (Longitudinal Redundancy Check).
Esta técnica consiste en VRC de dos dimensiones, se agrupa un determinado
número de unidades de datos en un bloque, cada uno con su bit VRC
correspondiente. Se calcula el bit de paridad entre cada bit de todas y cada una de
las unidades de datos (primeros bits, segundos, etc.). Se reúnen los bits de
paridad de todas las posiciones en una nueva unidad de datos y se añade al final
del bloque.
Comprobación de redundancia cíclica (CRC).
Dado un bloque o mensaje de k bits, el transmisor genera una secuencia de n bits,
denominada secuencia de comprobación de trama (FCS Frame Check Sequence),
la trama resultante, de n + k bits sea divisible por algún número predeterminado
(patrón de bits). El receptor dividirá la trama recibida por el mismo patrón de bits y,
si el resto en la división (resto 0), indica que la transmisión ha sido correcta, sin
error.
6. 3. TÉCNICAS DE CORRECCIÓN DE ERRORES
Requerimiento automático de repetición (ARQ)
Pare y espere ( stop and wait ARQ ): Cuando el receptor recibe una trama procede
a validarla, si no contiene errores envía una señal de confirmación hacia el emisor
ACK (acknowledge). Si hay error envía una señal de recepción errónea llamada
NAK (negative acknowledge).
Envío continuo ( Continuos ARQ ): Presenta el inconveniente de reducir el tiempo
de utilización efectiva de los canales de comunicación dado que cada mensaje
debe ser confirmado individualmente y todo se paraliza hasta que ello ocurre.
Corrección de errores hacia adelante (FEC)
Códigos de bloque: Un código de bloques convierte k bits de entrada en n bits de
salida con n>k, este es un código sin memoria.
Códigos de árbol: Un código de árbol es producido por un codificador con
memoria, a este grupo pertenecen los códigos convolucionales, los cuales tienen
como característica que a cada bit de una secuencia se le aplica una operación
binaria especifica.
7. 4. RICHARD WESLEY HAMMING
Matemático estadounidense de gran importancia en el área de la informática y de
las telecomunicaciones, nació en Chicago, Illinois, el 11 de febrero de 1915.
Estudio su licenciatura en la Universidad de Chicago en 1937, en 1939 realiza un
master en la Universidad de Nebraska y se doctoró en la Universidad Urbana-
Champaign de Illinois en 1942.
Mientras se desarrollaba la Segunda Guerra Mundial, fue profesor en la
Universidad de Louisville, trabajo que abandonaría para integrarse en 1945 en el
proyecto Manhattan. Allí desarrolló su trabajo programando una de las primeras
calculadoras numéricas electrónicas, para determinar la solución a algunas
ecuaciones proporcionadas por los físicos del proyecto. El objetivo del programa
era descubrir si la detonación de una bomba atómica podría incendiar la
atmósfera. Entre los años 1946-1976, trabajó en los laboratorios Bell, en donde
colaboró con Claude E. Shannon. El 23 de julio de 1976 se trasladó a la Naval
Postgraduate School, en donde trabajó como profesor adjunto hasta 1997,
llegando a ser Professor Emeritus.
Fue fundador y presidente de la Association for Computing Machinery.
Murió en Monterey, California el 7 de enero de 1998.
8. 5. CÓDIGO HAMMING
Es un código que se utiliza en la detección y corrección de errores que se
producen en la transmisión de códigos binarios, la palabra de código se conforma
por los bits de comprobación y los bits de información.
5.1. CONCEPTOS BÁSICOS:
Para poder continuar con el desarrollo del código es necesario tener en cuenta
algunas generalidades y conceptos básicos:
Código binario: Es una representación unívoca de las cantidades, de tal forma
que a cada una de éstas se le asigna una combinación de símbolos binarios.
Distancia entre dos combinaciones binarias: Viene dada por el número de bits
que hay que cambiar en una de ellas para obtener la otra.
Distancia mínima de un código: Es la menor de las distancias entre dos
combinaciones binarias cualesquiera pertenecientes a dicho código.
5.2. DISTANCIA DE HAMMING
El código Hamming se genera a partir de una distancia mínima de 3, ya que una
distancia de 1 o 2 es inconveniente para poder generar un código para detectar un
error.
La distancia mínima de Hamming está dada por la siguiente ecuación:
Dm= 2X+1
Donde Dm es la distancia mínima de un código para permitir la corrección de datos
y X es las líneas de datos.
Si se tuviese una distancia de 1 no tendríamos valores para saber si hay o no un
error.
Si se tienen una distancia de 2 se podría lograr un sistema de corrección de error
con un bit de paridad pero el problema que esto lleva es que un sistema con
distancia 2 puede tener datos erróneos que pueden pasar como datos correctos.
9. Con la distancia de 3 se tiene que los códigos no van a tener datos o resultados
similares por ende se puede detectar el error y se puede desarrollar un sistema
para su corrección como el Hamming
5.3. VARIABLES PARA GENERACIÓN HAMMING
Para la generación del código Hamming se deben tener en cuenta tres variables
que mencionaremos a continuación:
n: número de bits del código original que se pretende transmitir.
p: número de bits de paridad par generados en el transmisor, o sea, número de
líneas que añadimos al código inicial.
c: número de bits detectores de paridad par generados por el receptor.
El valor de p = c, ya que los bits de paridad generados tanto en el transmisor
como en el receptor debe ser la misma.
El número de combinaciones que se pueden formar con los c bits detectores de
paridad tiene que ser mayor o igual que el número de líneas del código original (n)
más el número de líneas de paridad añadidas (p) más uno, este último para
contemplar el caso de no error.
Esta ecuación nos muestra que existen unas combinaciones, estas no pueden ser
asignadas de forma aleatoria a un evento, para asignar estas combinaciones a un
evento específico este debe estar en uno de los tres grupos diferenciados.
1. Combinación asignada a la situación en que no haya error en la transmisión.
2. Combinaciones asignadas a los bits de paridad generados en el transmisor.
3. Combinaciones asignadas a los bits de datos del código original.
Podemos tener un manejo de esta ecuación para poder obtener la cantidad
mínima de bits de información que nosotros podemos enviar.
10. Si se despeja n
Teniendo en cuenta que p =c
Si contamos con los valores de bits de paridad podemos encontrar los bits de
información que se pueden manejar.
Para obtener el número de bits total de la cadena del mensaje (s) se debe
realizar la siguiente operación:
Ejercicio 1:
Si deseo enviar un nibble cuantos bits de paridad necesito para enviar el mensaje
y poderlo corregir si existe un error.
Nibble = 4 bits
Si c = 3 entonces
n=4
Con 3 bits de paridad podríamos manejar y codificar un nibble de información.
5.4. GENERACIÓN DEL CÓDIGO DE HAMMING
El código Hamming plantea la generación de una tabla para poder asignar los
valores de las posibles combinaciones que generen los bits de paridad.
A continuación manejaremos un código ASCII de 7 bits
11. Si se tienen 7 bits de información se necesitan entonces que c = 4, esto nos
conlleva a que se generan 2c combinaciones y es igual a 24 = 16 combinaciones a
continuación se establece una tabla de 16 combinaciones con un rango de 0 a 15
# DE
#b Combinaciones "1" 2^3 2^2 2^1 2^0 CORRESPONDENCIA
SITUACION DE NO
b0 0 0000 0 0 0 0 0 ERROR
b1 1 0001 1 0 0 0 1 BIT DE PARIDAD "1"
b2 2 0010 1 0 0 1 0 BIT DE PARIDAD "2"
b3 3 0011 2 0 0 1 1 DATO 1
b4 4 0100 1 0 1 0 0 BIT DE PARIDAD "3"
b5 5 0101 2 0 1 0 1 DATO2
b6 6 0110 2 0 1 1 0 DATO 3
b7 7 0111 3 0 1 1 1 DATO 4
b8 8 1000 1 1 0 0 0 BIT DE PARIDAD "4"
b9 9 1001 2 1 0 0 1 DATO 5
b10 10 1010 2 1 0 1 0 DATO 6
NO SE USA EN EL
b11 11 1011 3 1 0 1 1 EJEMPLO
b12 12 1100 2 1 1 0 0 DATO 7
NO SE USA EN EL
b13 13 1101 3 1 1 0 1 EJEMPLO
NO SE USA EN EL
b14 14 1110 3 1 1 1 0 EJEMPLO
NO SE USA EN EL
b15 15 1111 3 1 1 1 1 EJEMPLO
TABLA 1. Generación código Hamming.
Para la asignación de los eventos se realiza lo siguiente:
1. Contar Número de unos en las combinaciones
2. Si el número de unos es cero es una situación de no error y no se utiliza para
enviar dato.
12. 3. Si el número de unos es 1, debemos empezar a organizar los bits de paridad
desde el primero hasta el último y darles su respectiva asignación.
4. Si el número de unos es 2 en estos deben colocarse para los datos, si las
combinaciones de 2 unos no son suficientes para los datos debemos empezar
con los de 3 y luego los de 4 así sucesivamente, se prefiere que se coloquen
los datos primero en los grupos de 2.
5. Si no se tienen más datos esas líneas no son válidas y se omiten en el sistema
de verificación.
Los bits de paridad b1, b2, b4, b8, no tienen un valor fijo este valor se encuentra
por las siguientes relaciones:
b1 = b3 ⊕ b5 ⊕ b7 ⊕ b9 ⊕ b11 ⊕ b13 ⊕ b15;
b2 = b3 ⊕ b6 ⊕ b7 ⊕ b10 ⊕ b11 ⊕ b14 ⊕ b15;
b4 = b5 ⊕ b6 ⊕ b7 ⊕ b12 ⊕ b13 ⊕ b14 ⊕ b15;
b8 = b9 ⊕ b10 ⊕ b11 ⊕ b12 ⊕ b13 ⊕ b14 ⊕ b15;
Esto se debe a que los bits de paridad se conforman de las combinaciones en
donde el bit de paridad es uno, por ejemplo el bit1 es el bit de paridad para las
combinaciones impares, se conforman de las combinaciones impares b3, b5, b7,
b9, b11, b13, b15.
A continuación se muestra una tabla para ver cómo se realiza la operación de
EXOR
13. En la tabla se organizan y se suma para obtener los valores de b1, b2, b4, b8.
#b 2^3 2^2 2^1 2^0 b8 b4 b2 b1
b1 b1 0 0 0 1 0
b2 b2 0 0 1 0 0
b3 d1 0 0 1 1 1 1 1
b4 b4 0 1 0 0 0
b5 d2 0 1 0 1 0 0 0
b6 d3 0 1 1 0 0 0 0
b7 d4 0 1 1 1 1 1 1 1
b8 b8 1 0 0 0 1
b9 d5 1 0 0 1 0 0 0
b10 d6 1 0 1 0 0 0 0
b11 1 0 1 1 0 0 0
b12 d7 1 1 0 0 1 1 1
b13 1 1 0 1 0 0 0
b14 1 1 1 0 0 0 0
b15 1 1 1 1 0 0 0 0
1 0 0 0
Tabla 2. Coeficientes de paridad.
Terminada la tabla se procede a enviar el dato o la trama de datos
La cual sería
00100011000100
Los datos que no se utilizan por lo general se envían en cero.
Para saber si existe un error en la transmisión o si el mensaje de transmitió
correctamente se deber realizar una comprobación del sistema para esto se
realiza con una codificación de los componentes c1, c2, c3, c4 de la siguiente
manera:
c1 = b1 ⊕ b3 ⊕ b5 ⊕ b7 ⊕ b9 ⊕ b11 ⊕ b13 ⊕ b15;
c2 = b2 ⊕ b3 ⊕ b6 ⊕ b7 ⊕ b10 ⊕ b11 ⊕ b14 ⊕ b15;
c3 = b4 ⊕ b5 ⊕ b6 ⊕ b7 ⊕ b12 ⊕ b13 ⊕ b14 ⊕ b15;
14. c4 = b8 ⊕ b9 ⊕ b10 ⊕ b11 ⊕ b12 ⊕ b13 ⊕ b14 ⊕ b15;
Los resultados que vemos aquí son calculados con los datos que llegan al
receptor, si los datos de c1, c2, c3, c4 nos dan cero en todos el mensaje se
transmitió sin error pero si uno o varios de estos elementos se convierten en 1
quiere decir que hay un error, por ejemplo si el resultado de los indicadores ci son:
c1 = 0, c2=1, c3=1, c4=0, esto quiere decir que hay un error en la combinación b6
por ende si hay un uno en esta posición quiere decir que el verdadero valor es
cero, entonces podemos cambiar el valor de este y corregir de esta manera el
error presentado.
5.5. EL SÍNDROME Y DETECCIÓN SISTEMÁTICA DEL CÓDIGO DE HAMMING.
Para el ejemplo anterior del código ASCII se tienen 7 bits de información para
transmitir, se observa el mismo dato que se envía en la tabla a en la tabla b se
encuentra el dato recibido con un error
DATOS TX DATOS RX
#b b8 b4 b2 b1 b8 b4 b2 b1
b1 b1 0 b1 1
b2 b2 0 b2 1
b3 d1 1 1 1 d1 1 1 1
b4 b4 0 b4 1
b5 d2 0 0 0 d2 0 0 0
b6 d3 0 0 0 d3 0 0 0
b7 d4 1 1 1 1 d4 0 0 0 0
b8 b8 1 b8 1
b9 d5 0 0 0 d5 0 0 0
b10 d6 0 0 0 d6 0 0 0
b11 0 0 0 0 0 0
b12 d7 1 1 1 d7 1 1 1
b13 0 0 0 0 0 0
b14 0 0 0 0 0 0
b15 0 0 0 0 0 0 0 0
1 0 0 0 1 1 1 1
Tabla 3. Ejemplo trama de datos enviados y se recibe una trama con el dato 4
erróneo o bit 7.
15. Como se observa en la recepción hay un valor diferente de los datos transmitidos,
si se realizan los valores de b1, b2, b4, b8, son distintos en ambos lados, ahora si
se comparan con los valores de c1 c2, c3, c4 se obtiene que:
bloque par
1 1 1 1 recibido
bloque par
1 0 0 0 enviado
0 1 1 1 7
2^3 2^2 2^1 2^0 #b dato dañado
Tabla 4. Detección del número del bit dañado.
En la figura se suman los valores de bits de paridad encontrados en el receptor
con los valores de paridad envidados, se debe realizar una operación EXOR uno a
uno y el resultado que se obtiene son los valores de c1, c2, c3, c4, como vemos el
resultado es 0111 si esto se pasa a decimal es 7 si vemos en la tabla del ejemplo
el dato que se encuentra erróneo se encuentra en la combinación 7 la cual es la
asignada al dato 4.
El síndrome
Al cálculo que se realizó anteriormente de sumar cada bit de paridad en el
receptor se le denomina Síndrome, el síndrome se desarrolla bit a bit y se suma
con una función EXOR en módulo 2.
16. 5.6. DETECCIÓN Y EFICIENCIA SOBRE CANAL
Si m es igual a la distancia mínima de un código Haming podemos determinar que
el factor de detección y corrección de un código depende de:
Además si
n = número de bits de la cadena de salida
k = número de bits de información
La eficiencia sobre el canal de transmisión será la siguiente:
n/k
Con estos datos se puede obtener la siguiente tabla
Tabla 5. Tabla de eficiencia, tomada del trabajo de Hamming desarrollado por:
Luis Gabriel Clavijo Castro, Vivian Andrea Garcia Balaguera
17. Como vemos si la distancia de Hamming aumenta la longitud de la información
aumenta pero los bits de información de corrección serán menores que los de
detección , pero si vemos bien la tabla con una distancia de Hamming 3 la
longitud total del paquete son 7 y se transportan 4 bits de información, los otros
son de corrección, ahora si vemos el 10 la longitud total serían 1023 se
transportan 1013 bits de información y el restante que son solo 10 bits se utilizan
para la detección y la corrección como vemos este es un proceso mucho más
eficiente ya que podemos transportar 1013 bits de información procesando solo 10
bits de detección y corrección, esto permite que los procesos de transporte de
datos se optimicen logrando tasas porcentuales realmente altas.
18. 6. EXTENSIÓN DEL CÓDIGO DE HAMMING.
La extensión del código Hamming plantea ingresar a la tabla un número adicional
con el propósito de encontrar más de un bit dañado, esto lo logra mediante el
desarrollo de matrices estas matrices se computan para poder detectar y corregir
un bit dañado e informar cuando hay dos o más bit dañados en el proceso. El
proceso matricial es como lo desarrollaría realmente un sistema de cómputo.
Como se mencionó el código Hamming extendido añade un símbolo adicional que
computa todos los anteriores símbolos de la palabra de código, este tiene una
distancia de Hamming de 4, con esto se logra detectar todos los errores dobles y
al mismo tiempo se corrigen todos los errores individuales. La decodificación se
realiza así:
Si el último dígito del síndrome es 2, entonces el número de errores debe ser
impar. La corrección se realizaría de la manera habitual.
Si el último dígito del síndrome es 0, pero el síndrome no es todo ceros, no hay
corrección posible, porque se ha producido más de un error, pero los errores
dobles son detectados.
19. 7. TAREA
Encontrar los valores de los bits de paridad para los siguientes datos:
Dato a transmitir: 1100110011
Dato a transmitir: 1001110110
Dato a transmitir: 1010100011
Si el síndrome que se obtuvo en el dato de transmisión es:
bloque par
1 1 1 1 enviado
Y el síndrome que se recibe en el receptor es:
bloque par
0 0 1 0 recibido
En que bit se presentó el daño de la información
20. 8. CONCLUSIONES
La integración de código redundante permite realizar la corrección en cierta
medida de los errores presentados en la transmisión; sin embargo hace menos
eficiente el proceso de codificación, por lo cual se deberá lograr un equilibrio
entre codificación redundante y eficiente dadas las características del canal.
Aunque los parámetros de los códigos AG son mejores que los clásicos para
códigos de longitud arbitrariamente grande, las aplicaciones técnicas no se han
visto aún en la necesidad práctica de sustituir los códigos que actualmente se
utilizan por otros de mayor longitud sin que se dispare simultáneamente el
coste y la tasa de error.
El Código Hamming, es un sistema de detección y corrección automática de
errores en información electrónica, el cual asocia una serie de bits de
validación o paridad a los bits de datos, de tal forma que una alteración en
cualquiera de esos bits de datos pueda ser detectada y corregida
adecuadamente.
La distancia Hamming permite establecer el número de bits erróneos que
pueden ser corregidos ó detectados mediante las formulas:
Detección= (m-1)
Corrección= (m-1)/2
El síndrome es una operación que relaciona los bits de paridad por medio de
una función EXOR bit a bit, si este resultado es 0 en cada bit de paridad no
indica que el paquete de datos llego sin errores pero si nos indica un error o un
1 nos debe indicar el lugar donde se presenta dicho problema.
Para entender de una manera más sencilla la elaboración del código se
utilizaron tablas pero por lo general se utilizan matrices y relaciones entre ellas
para poder lograr relaciones cruzadas y obtener los valores de bits de paridad.
El sistema de códigos Haming es muy utilizado en elementos como memorias
y en comunicaciones en las tramas de Wifi.
21. 9. BIBLIOGRAFÍA
Comunicaciones y Redes de Procesamiento de Datos. Nestor Gonzáles Sainz.
Ed Mac Graw . 1987.
Wikipedia.[online]. Algoritmos de Código de Redundancia Cíclica.
<http://es.wikipedia.org/wiki/Algoritmo_de_los_C%C3%B3digos_de_Redundan
cia_C%C3%ADclica>
Tio Petros. [online]. Aritmética Modular.
<http://tiopetrus.blogia.com/2005/060401-aritmetica-modular-4-.php>
Códigos Detectores y Correctores de Errores. Códigos de Redundancia
Cíclica. < http://www.argo.es/~jcea/pics/artic/ecc-crc.htm>
MODIANO, Eytan. [online]. La capa de enlace de Datos: Entramado y
Detección de Errores< http://mit.ocw.universia.net>.
Demeter. Codificación de Señales. Ver. 1.1. 2 de Diciembre de 2003
knabe@ing.puc.cl. Apuntes de IIC 3512 -- El nivel de enlace. Dic. 1996.
<http://www.cs.virginia.edu/~knabe/iic3512/apuntes_4.html>
Códigos Lineales. http://jungla.dit.upm.es/~trdt/apuntes