Codigo+Hamming


 * //CODIGO DE HAMMING //**

 || Richard Hamming, el creador del código de corrección de errores, murió el pasado 7 de enero en Monterey, California a los 82 años de edad. Hasta el momento de su muerte, Hamming era profesor adjunto en el departamento de Ciencias de la Computación en la Escuela Naval Superior donde también había trabajado en los departamentos de Ingeniería Electrónica y de Computadores, y Matemáticas. ||

Su descubrimiento fue uno de los más importantes en la ciencia de la informática. Aún hoy, 50 años después, es un resultado asombroso. Su método permite identificar un bit erróneo en una palabra codificada (en binario). Esto es, si un bit es incorrecto, por ejemplo el cambio de un 1 por un 0 en una transmisión, podemos no solo detectar el bit erróneo, sino además corregirlo. Así el código de Hamming y sus variantes han encontrado aplicación tanto en las comunicaciones como en el almacenamiento de datos. Los códigos Hamming fueron la primera clase de códigos ideados para corrección de errores. Estos códigos y sus variaciones han sido ampliamente usados para control de errores en comunicación digital y en sistemas de almacenaje de información. Para cualquier entero positivo m>=3, existe un código Hamming con los siguientes parámetros:

Longitud del Código:n=2m-1 || Número de símbolos de información:k=2m-m-1 || Número de símbolos de comprobación de paridad:n-k=m || Capacidad de corrección de errores:t=1(dmin=3) ||

<span style="font-family: 'Times New Roman', 'serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES-MX;">La matriz de comprobación de paridad H de este código consta de todas las m-tuplas no nulas como columnas. En forma sistemática, las columnas de H están ordenadas de la siguiente forma: H=[ImQ], donde Im es una matriz identidad m x m y la submatriz Q consta de 2m-m-1 columnas, las cuales son las m-tuplas de peso 2 o más. Estas columnas pueden ser colocadas en cualquier orden sin afectar a la propiedad de distancia y distribución de peso del código. En forma sistemática, la matriz generadora del código es G=[QT I2m-m-1], donde QT es la traspuesta de Q y I2m-m-1 es una matriz identidad de orden 2m-m-1. Como las columnas de H son no nulas y distintas, dos columnas no pueden sumar cero. Se sigue que la mínima distancia de un código Hamming es al menos 3. Como H consta de todas las m-tuplas no nulas como columnas, el vector suma de dos columnas cualesquiera, hi y hj, debe ser también una columna de H, hl. Así hi+ hj+ hl= 0. De aquí se sigue que la mínima distancia de un código Hamming es exactamente 3. Así, el código es capaz de corregir todos los patrones de error con un error simple o de detectar todos los patrones de error de dos errores o menos. Si formamos una matriz típica para el código Hamming de longitud 2m-1, se pueden usar todas las (2m-1)-tuplas de peso 1 como líderes de co-conjunto. El número de (2m-1)-tuplas de peso 1 es 2m-1. Como n-k=m, el código tiene 2m co-conjuntos. Así, el vector 0 y las (2m-1)-tuplas de peso 1 forman todos los líderes de los co-conjuntos de la matriz típica. Esto nos dice que un código Hamming corrige solamente los patrones de error simple y ningún otro. Esta es una construcción muy interesante. Un código corrector de errores de peso t se llama código perfecto si su matriz típica tiene todos los patrones de error de peso t o menor y ningún otro como líderes de co-conjunto. Así, los códigos Hamming forman una clase de códigos perfectos de corrección de errores simples. Podemos borrar cualesquiera l comunas de la matriz de comprobación de paridad H de un código Hamming. Esto da como resultado una matriz H' de orden m x (2m-l-1). Usando H' como matriz de comprobación de paridad, obtenemos un código Hamming recortado con los siguientes parámetros:

<span style="font-family: 'Times New Roman', 'serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES-MX;">Longitud del Código:</TD || <span style="font-family: 'Times New Roman', 'serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES-MX;">n=2m-1 || <span style="font-family: 'Times New Roman', 'serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES-MX;">Número de símbolos de información:</TD || <span style="font-family: 'Times New Roman', 'serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES-MX;">k=2m-m-1 || <span style="font-family: 'Times New Roman', 'serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES-MX;">Número de símbolos de comprobación de paridad:</TD || <span style="font-family: 'Times New Roman', 'serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES-MX;">n-k=m || <span style="font-family: 'Times New Roman', 'serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES-MX;">Distancia mínima:</TD || <span style="font-family: 'Times New Roman', 'serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES-MX;">dmin=3 ||

<span style="font-family: 'Times New Roman', 'serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES-MX;">Si borramos las columnas apropiadas de H, obtenemos un código Hamming recortado de distancia mínima 4. Por ejemplo, si borramos de la submatriz Q todas las columnas de peso impar, obtenemos una matriz de peso m x 2m-1: H'=[Im Q'] ,donde Q' consta de 2m-1-m columnas de peso par. Como todas las columnas de H' tiene peso par, no hay tres columnas que sumen cero. No obstante, para una columna hi de peso 3 en Q', existen tres columnas hj, hl, hs en Im tal que hi + hl + hj + hs = 0. Así, el código Hamming recortado con H' como matriz de comprobación de paridad tiene distancia mínima exactamente 4. <span style="font-family: 'Times New Roman', 'serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES-MX;">El código Hamming recortado de distancia 4 puede ser usado para corregir todos los patrones de error simple y simultáneamente detectar todos los patrones de error doble. Cuando un error simple ocurre durante la transmisión de un vector código, el síndrome resultante es distinto de cero y contiene un número par de unos. No obstante, cuando ocurre un error doble, el síndrome es también distinto de cero, pero consta de un número impar de unos. Basándonos en estos hechos, la decodificación puede ser realizada de la siguiente manera: <span style="font-family: 'Times New Roman', 'serif'; font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES-MX;">Si el síndrome s es cero, asumimos que el error no existió. Si s es distinto de cero y consta de un número par de unos, asumimos que el error ocurrido fue un error simple. El patrón de error del error simple que corresponde a s se suma al vector recibido para la corrección de errores. Si s es distinto de cero y contiene un número impar de unos, se ha detectado un patrón de error no corregible.

[|Codigo Hamming]

Raziel Juárez Mata Arquitectura de Computadoras Universidad Marista de Queretaro Ing. en Computación 5° Semestre 27-08-09