1. Universidad de las Fuerzas Armadas ESPE, Extensión Latacunga 2014,Barrera Llanga Kevin Iván
1
(Simmons, 1992) (Peterson, 1961) (James,2010)CÓDIGOS DE DETECCIÓNDE
ERROR CRC Y HAMMING
Barrera Llanga Kevin Iván
Ingeniería Mecatrónica, Quinto “A”
Universidad de las Fuerzas Armadas ESPE, Extensión Latacunga
e-mail: kevinivancho@hotmail.com
Abstract: This article describes that is the code error
detection Hamming and CRC, each of its features,
functions, s step by step procedure, applications
developers and a brief example of each of these using
the knowledge acquired throughout this document. Also
some special characteristics of error detection codes will
be discussed.
Resumen: En este artículo se describe en que
consiste el código de detección de error Hamming y
CRC, cada una de sus características, funciones, s
procedimiento paso a paso, aplicaciones,creadores y un
breve ejemplo de cada una de estas utilizando los
conocimientos adquiridos a lo largo de este documento.
Además se expondrá algunas características especiales
de los códigos de detección de error.
PALABRAS CLAVE: CRC, Detección de error,
Hamming, Sistemas Digitales.
I. Introducción
En todo sistema se presente una cantidad de error,
por más mínima que esta sea se necesita una forma
correctiva, para esta corrección en los sistemas digitales
se utilizan códigos de detección de errores entre estos
esta el chequeo de redundancia cíclica o CRC y los
códigos Hamming. Estos poseen la capacidad de
detectar diferentes errores de transmisión o
perturbaciones producidos por factores como el ruido
térmico, impulsivo, redondeo, cruce de líneas, etc.
Corrigiéndolos y dándonos como resultado un sistema
optimo, evitando la perdida de datos y comunicación en
los sistemas digitales. (Andy, 2007)
II. Código de detección de error
Hamming
2.1 Richard Wesley Hamming
R.W. Hamming [Fig.1] fue un matemático
estadounidense que tubo un principal aporte en el
campo de la informática y telecomunicaciones
trabajando en temas relacionados con los mismos dando
como resultado entre sus principales contribuciones el
código Hamming, la distancia Hamming y la ventana
Hamming. Nació en Chicago en 1915, entre sus
aptitudes académicas obtuvo una licenciatura en la
universidad de su ciudad de origen, una maestría en la
Universidad de Nebraska yse doctoró en la Universidad
Urbana- Champaign.
Trabajo en el proyecto Manhattan más conocido
como la primera bomba atómica. Fue fundador y
presidente de la Asociación de Maquinaria en
Informática. Murió en Monterey, California el 7 de enero
de 1998. (James, 2010)
Fig. 1. Richard Wesley Hamming [1]
2.2 Código de detección de error
Hamming
Los códigos Hamming son códigos de detección de
error cuyo nombre proviene de su descubridor R.W.
Hamming,es uno de los tipos de código de bloques más
conocidos,entre sus características principales se puede
decir que es un código de distancia numero 3, es capaz
de detectar diferentes errores dobles ycorregir errores si
es un solo error simple es decir errores en un bit
enviados por un canal que es sensible al ruido. Un
ejemplo muy común de este método de corrección de
errores seria en redes WI-FI para la transmisión de
mensajes.
2.3 Distancia de Hamming
Como se decía este código se forma a partir de una
distancia mínima de 3,esto es así ya que con distancias
de 1 o 2 es incomodo para poder generar un código para
la detección de su error ya que si se tuviera el valor de 1
no existiera ningún otro valor para realizar una
comparación y si se tuviera una distancia de 2 puede
tener una corrección de error al existir una sola
comparación podrían pasar desapercibidos otros errores
existentes. Cuando mayor sea la diferencia menor será
2. Universidad de las Fuerzas Armadas ESPE, Extensión Latacunga 2014,Barrera Llanga Kevin Iván
2
la posibilidad de que un código se convierta en otro
código por una serie de errores. Esta distancia está
dada por la siguiente ecuación:
𝐷 𝑚 = 2𝑋 + 1 [Ec.1. Distancia mínima de Hamming]
En donde:
Dm= Es la distancia mínima para la corrección de datos
exceptuando 1 y 2 por motivos ya mencionados.
X= Son las líneas de los datos.
2 y 1= Son constantes utilizados en la ecuación.
Ejemplo: ¿Cuál es la distancia de Hamming entre
los números binarios 1011010 y 1001111?
La distancia de Hamming seria de 3 ya que los valores
son diferentes en 3 de sus dígitos. (Peterson, 1961)
2.4 Variables para la generación del
código Hamming
Las variables que se toman a consideración para el
código Hamming son:
n: el número de bits que posee el código original.
p: es el número de bits de paridad par generados en el
transmisor.
c: el número de bits de detectores de paridad par
generados por el receptor.
c=p ya que los bits de transmisor y receptor deben ser
los mismos.
𝑛 = 2 𝑐
− 𝑐 − 1 [Ec.2. Combinaciones de Hamming] [2]
2.5 Generación del código Hamming
En esencia el código Hamming propone generar
una tabla para asignar valores a las combinaciones que
se generen en los bits de paridad tanto como de
transmisor y receptor. El procedimiento es el siguiente:
1.- Los bits de posición que sea potencia de dos se
utilizan como bits de paridad, estas posiciones son 20
=
1, 21
= 2, 22
= 4, 23
= 8, 24
= 16, 25
= 32, etc.
2. Los bits que sobran en las posiciones son utilizados
como bits de datos.
3. Los bits 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. (Simmons, 1992)
Tabla. 1. Código ASCII de 7 bits para generación del
código Hamming [3]
Ejemplo:Con un dato de 7 bits 1001110 calcule los bits
del código Hamming.
El nuevo dato de paridad seria 10100010110
2.6 Extensión del código de Hamming
La extension consiste en colocar en la tabla un
número adicional con el fin 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. Se pueden dar 3 casos:
“1.- No hay error :Hamming =0, Paridad OK
2.- Un bit de error :Paridad Fallo entonces
a) Hamming = 0,P = incorrecto,en este caso se cambia
el valor del bit de paridad.
b) Hamming <> 0, corrijo según Hamming.
3.- Dos bit en error -> Paridad Ok, Hamming <> 0, por lo
tanto informo, NO corrijo” [Ref. Introducción a los
Sistemas Digitales, pág. 89] (Peterson, 1961)
III. Código de detección de error CRC
3.1 William Wesley Peterson
W. Wesley Peterson [Fig.2], nació en Michigan en
1924 fue un matemático y un científico, su pación fue la
informática, conocido por inventar el método de
comprobación de redundancia cíclica, por lo que fue
galardonado con un Premio Japón en 1999. Fue
profesor de Ciencias de la computación de la
universidad Manoa.Escribió varios libros sobre códigos
de corrección de errores, incluyendo la 2da edición
revisada de: Código de Corrección de Errores. Además
hizo investigaciones y publicaciones en los campos de
lenguajes de programación,programación de sistemas y
redes. Ganó el Premio Claude Shannon en 1981 y la
medalla Centenaria de IEEE en 1984. Falleció en mayo
de 2009 en Honolulu, Hawaii (James, 2010)
Fig. 1. W. Wesley Peterson [4]
3. Universidad de las Fuerzas Armadas ESPE, Extensión Latacunga 2014,Barrera Llanga Kevin Iván
3
3.2 Código de detección de error
CRC
El código de detección de error CRC también
conocido como verificación de redundancia cíclica es un
código el cual permite detectar errores usándose
mayormente en dispositivos por su simpleza de
implementación como en los dispositivos de
almacenamiento, telecomunicaciones y redes digitales,
con el fin de detectar y controlar cambios en los datos,
estos se generan en la mayoría de los casos de forma
accidental.
Se encarga de la protección de los datos en bloques
conocidos como tramas,el código de detección de error
CRC contiene datos repetidos con la trama, de manera
que los errores no sólo se pueden detectar sino que
además se pueden solucionar. Este método es muy
efectivo en la detección de errores en los sistemas de
comunicaciones,una de esas características es que no
permite la corrección de errores ya que se envía uno o
más caracteres adicionales de redundancia
denominados FCS ("frame check sequence") o BCC
("block check caracter"), que difieren fundamentalmente
en la forma de calcularlo. (Andy, 2007)
3.3 Definición de código de
detección de error CRC
El código CRC consiste en considerar a los bits a
ser transmitidos como un polinomio en x (para n bits el
orden es n-1) tal que la presencia de un término significa
un "1", y la ausencia, un "0", denotando polinomios
cuyos coeficientes se correspondan con la secuencia
binaria cuyo cálculo es una larga división de
computación en el que se descarta el cociente y el resto
se convierte en el resultado, con la diferencia que el
arrastre se produce con bits formando una familia de
códigos de bloques lineales.
3.4 Polinomio Generador Ideal
La aritmética con estos polinomios del CRC es de
módulo 2 sin llevar, es decir la adición y la sustracción
son equivalentes a la puerta XOR, la división la usa en
lugar de sustracción y A se divide entre B si el número
de bits es mayor de o igual a el número en A. Todos los
polinomios correspondientes a las palabras del código
cíclico, deben dividirse entre g(x) sin residuo siendo este
un divisor de x – 1 el bit mayor y el menor del generador
deben ser 1, es decir:
Si 110001 son los bits a transmitir,
entonces el mensaje podrá ser
considerado como un polinomio U(x) tal
que: U(x) = X6
+ X5
+1
Un ejemplo a la inversa seria si G(x)= X4
+
X3
+ X+1 seria igual a 11011. (James, 2010)
3.5 Polinomios Generadores más
Comunes
CRC-12: X12
+ X11
+ X3
+ X2
+ X + 1
CRC-16: X16
+ X15
+ X2
+ 1
CRC CCITT V41: X16
+ X12
+ X5
+ 1 (este
código se utiliza en el procedimiento HDLC)
CRC-32 (Ethernet): = X32
+ X26
+ X23
+ X22
+
X16
+ X12
+ X11
+ X10
+ X8
+ X7
+ X5
+ X4
+ X2
+
X + 1
CRC ARPA: X24
+ X23
+ X17
+ X16
+ X15
+ X13
+
X11
+ X10
+ X9
+ X8
+ X5
+ X3
+ 1
3.6 Características principales de
CRC
Se utiliza la división de números binarios.
Tanto el emisor como el receptor conocen un
divisor común.
Detecta todos los errores de 1 y 2 bits es decir
los errores simples y dobles.
Detecta todos los errores de un “Burst” menor
que el grado de P(x)
Detecta el 99 % de los errores de un “Burst”
mayor que el grado de P(x)
Sirve para verificar la integridad, pero no para
saber si el mensaje es correcto.
Cualquier bit se refleja en varios bits por un
tiempo considerable después que éste fue
transmitido. (Peterson, 1961)
3.7 Cálculo de código de detección
de error CRC
Pasos:
1.- Comience con el mensaje a codificar:
11010011101100
2.- Esta se rellena primero con ceros correspondientes a
la longitud n de bits de la CRC. Este es el primer cálculo
para calcular una de 3 bits CRC:
11010011101100 000
3.- Si el bit de entrada por encima del divisor poco más a
la izquierda es 0, no haga nada.
4.- Si el bit de entrada por encima del divisor de bits más
a la izquierda es 1, el divisor es XOR en la entrada.
5.- El divisor es entonces desplazado un poco hacia la
derecha, y el proceso se repite hasta que el divisor
alcanza el extremo de la derecha de la fila de entrada.
Todo el cálculo:
11010011101100 000.
La validez de un mensaje recibido puede ser fácilmente
verificado por realizar el cálculo anterior de nuevo, esta
vez con el valor de comprobación añadido en lugar de
ceros. El resto debe ser igual a cero si no hay errores
detectables.
11010011101100 100
4. Universidad de las Fuerzas Armadas ESPE, Extensión Latacunga 2014,Barrera Llanga Kevin Iván
4
La aritmética en modulo 2 se considera así:
Sumas binarias sin acarreos = Operación lógica XOR
Restas binarias sin acarreos = Operación lógica XOR
En donde:
T= Trama de (k + n) bits a transmitir, con n<k
n = Bits de comprobación
M = Mensaje de k bits, los primeros k bits de T
P= Patrón de n + 1 bits , este es el divisor elegido.Como
mínimo el bit más significativo y el menos significativo
debe ser 1.
𝑇 = 2 𝑛
∗
𝑀
𝑃
11010011101100 =entrada=M
1011 =divisor (4 bits)=P
-----------------------
01100011101100 = resultado
00000000001110=resultado de la multiplicación
1011=divisor
-----------------------
00000000000101=resto (3 bits) (James, 2010)
3.8 Especificaciones de código de
detección de error CRC
“A veces una prefijos implementación de un
patrón de bits fija para el flujo de bits de
comprobación.
Por lo general, una aplicación anexa n 0-bits a
la corriente de bits de comprobación antes de
que ocurra la división polinómica.
A veces, una aplicación exclusiva-Ors un
patrón de bits fija en el resto de la división
polinómica.
Orden de los bits: Algunos programas
consideran que el bit de orden inferior de cada
byte como "primero", el cual durante la división
polinómica significa "izquierda", lo cual es
contrario a nuestra comprensión habitual de
"orden inferior".
Orden de bytes: Con CRC de varios bytes, no
puede haber confusión sobre si el byte
transmitido primero es el byte menos
significativo o el byte más significativo.
La omisión del bit de orden del polinomio
divisor: Puesto que el bit de orden superior es
siempre 1,y puesto que un CRC de n bits debe
ser definido por un divisor de bits que se
desborda un registro de n bits, algunos autores
suponen que se es innecesario mencionar bit
de orden del divisor.”
[Ref.2. E-centro de Artigo, sección CRC, tema
especificación de código de detección de error.]
(Simmons, 1992)
IV. Conclusiones
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.
El CRC es una función diseñada para detectar
cambios accidentales en datos de computadora y es
comúnmente usada en redes digitales y dispositivos de
almacenamiento (como discos duros) el cual utiliza
polinomios generadores y su medio de resolución es con
divisiones sucesivas.
Estos métodos para la detección de error son muy
útiles aunque cada uno se especializa en su campo,
ambos son necesarios en los sistemas de control ya que
gracias a estas correcciones de errores permite un
sistema mas estable y optimo en los códigos digitales.
V. Bibliografía
Simmons,G. (1992).A survey of information
Authentication. En G. Simmons, A survey of information
Authentication (pág.23). New York: IEEE Press.
Peterson.(1961).Cyclic Codes for Error Detection.En
Peterson,Cyclic Codes for Error Detection (pág.281).
Boston:ISSN.
James,P. (2010).Introduccion de los sistemas Digitales.
En P. James, Introduccion de los sistemas Digitales. Mc-
Graw.
Andy, B. (2007).Comunicacion Digitales.En B. Andy,
Comunicacion Digitales. Marcombo.
ezp1-
espe.edu.ec:2050/lib/espesp/docDetail.action?DocID=10
515233&p00=codigo+hamming