Códigos Hamming
Descubiertos entre 1947 y 1948 por R. W. Hamming y M. J. E. Golay, se trata de un conjunto de
códigos lineales óptimos para corregir errores que afecten a un solo símbolo. Aunque nos interesan
principalmente los códigos Hamming binarios, vamos a definirlos y a deducir sus propiedades
suponiendo que se utiliza un alfabeto de codificación general. La construcción de códigos Hamming es
muy sencilla.
Definición 6.11 (Código Hamming). Un código Hamming es un código lineal 1-perfecto.
Los parámetros [n; k] de un código Hamming binario son, por tanto, las soluciones de la ecuación
m m
n=2n−k −1 Existen, entonces, códigos Hamming binarios [2 −1.2 −m−1] para m = 2; 3; : : : , y Hm
será en adelante el de m símbolos de redundancia[ CITATION Cán16 \l 3082 ]
Ejemplo 6.9. De acuerdo con la definición anterior, y a la vista de su matriz de comprobación de
paridad
Por definición, los códigos Hamming tienen distancia 3, y cualquier vector binario de longitud 2m - 1 o
bien pertenece a Hm o bien dista una unidad de algún vector de Hm. Además, según el teorema 6.10,
para que estas condiciones se cumplan, dos columnas cualesquiera de H deben ser linealmente
independientes (distintas, cuando el código es binario) y no nulas. En consecuencia, una matriz de
comprobación de paridad de Hm tendrá por columnas todos los vectores binarios no nulos de longitud
m. Conocida la estructura de H es fácil concluir que los códigos Hamming (los binarios Hm en
particular) son códigos lineales correctores únicamente de errores simples que, salvo equivalencia, son
únicos.
Además de los Hamming, se ha encontrado que el único código lineal binario perfecto no trivial es el
Golay[23,12], y se ha demostrado que cualquier código binario perfecto no lineal tiene los mismos
parámetros que un código Golay o que un código Hamming [41]. Los códigos perfectos son raros.
La distancia de un subcódigo nunca es inferior a la del código que lo contiene. Así, la de Hm se puede
incrementar si se eliminan l columnas cualesquiera de H, resultando una matriz H´, de dimensiones
mx 2m -l-1 m, comprobadora de paridad de un código lineal con parámetros n=2m l−1, k =2m−m−l−1,
n-k = m y d >3 . Que la distancia del código acortado definido por H0 es mayor o igual que 3 se deduce
de ser H0 una submatriz de H. Eligiendo adecuadamente qué columnas borrar, se pueden obtener
códigos de distancia mínima igual a 4. Por ejemplo, si se prescinde de todas las columnas con un
número par de unos, la suma de tres de las restantes no puede ser el vector nulo; es siempre un vector
de peso impar, y existe por ello otra columna en H0 idéntica a esa suma, lo cual implica que d = 4.
[CITATION Ori \l 3082 ]
En lugar de acortar el código reduciendo símbolos de información y de redundancia, es posible a veces
incrementar la distancia de un código lineal binario añadiendo un bit de paridad par, proceso que se
conoce como extensión del código. Puesto que los códigos Hamming poseen distancia 3, es claro que la
distancia del código Hamming extendido [2m , 2m−m−1 ], bHm, será 4. El código dual de un Hamming
extendido pertenece a la clase de los códigos Reed-Müller de primer orden, cuya principal ventaja es
que existe para ellos un algoritmo de decodificación muy simple [41]. Examinaremos aún en mayor
profundidad la estructura de los códigos
Estructura cíclica de los códigos Hamming
Un código Hamming binario de longitud 2m −1m>3es equivalente a un código cíclico generado por un
polinomio primitivo pm x de grado m. Para probar esta aseveración no hay más que relacionar
propiedades que ya resultan conocidas.
Teorema El menor código cíclico binario con un polinomio binario primitivo de grado m como
generador es el código Hamming Hm.
Código de Hamming.
Se llama código de Hamming de longitud 2 r – 1 a un código de longitud n = 2 r – 1, y cuya matriz de
paridad H consiste en filas no nulas donde r es un entero.[ CITATION And98 \l 3082 ]
Así, un posible código de Hamming de longitud 7, r = 3, es:
1 1 1
[]
1 1 0
1 0 1 De esta matriz se observa que In-k = I3 , por tanto K=4, el código es (7,4).
0 1 1
1 0 0
0 1 0
0 0 1
HT =
Se tienen 16 palabras que se pueden codificar y se corrige un error, esto último ya que:
2r – (r + 1) k
Se cumple:
2r – (r + 1) = 4
k=4
Se puede formar la matriz generadora:
1 0 0 0 1 1 1
G=
[ 0
0
0
1
0
0
0
1
0
0
0
1
1
1
0
1
0
1
0
1
1
]
Y se cumple que GHT = 0̄ (para todo código):
0 0 0
GHT =
[ ]
0
0
0
0
0
0
0
0
0
Código extendido.
Sea C un código lineal de longitud n. El código C * de longitud n+1 se obtiene añadiendo un dígito a
cada palabra codificada, a C* se le llama código extendido de C.
Si la matriz generadora de C es G de orden k x n, el código extendido C* es de orden k x(n+1), y la
matriz generadora es:
G* = [G , b]
Donde la columna b se diseña tal que el número de unos en cedas renglón es par. Otra forma de obtener
C* es por la matriz de paridad H* del código extendido: [ CITATION Ori \l 3082 ]
HT j
¿
H =
T
0 1[ ]
=[GH T , Gj+b ]
Donde j es la matriz columna formada por unos.
Por ejemplo, sea el código lineal (5,3):
t
2 n−k
≥∑ n ()
i=0 i
1 0
G=
[
1 0 0 1 0
0 1 0 0 1
0 0 1 1 1 ] entonces HT =
[] 0
1
1
0
1
1
0
1
2 ≥∑ n
n
t
i=0 i
4≥ 5 + 5
()()
0 1
()
4≥1+5
por lo que puede corregir cero errores.
Un código extendido es:
1 0 0
*
G =
[
1 0 0 1 0 0
0 1 0 0 1 0
0 0 1 1 1 1 ] entonces H
T
¿
=
[]
0
1
1
0
0
1
1
0
1
0
0
1
0
0
1
O bien:
Se cumple que:
1 0 1
[]
T
0 1 1 G* H¿ =
1 1 1
1 0 1 H T
G*
¿
2 =[0]
0 1 1
H T 0 0 1
¿
2 = Ya no es un código sistemático.
¿
T H T
Con H se tiene un código sistemático, con ¿
2 no.
Códigos cíclicos de Hamming.
La matriz de paridad de un código de Hamming de longitud n = 2r – 1, es de la forma:
1
[]
β
β2
β3
.
.
.
2 r−2
β
H=
Por ejemplo, sea r = 3 y con P(x) = 1 +x +x 3 construir GF(23), donde 010 es elemento
primitivo, entonces:
1 1 0 0
[] [ ]
β 0 1 0
β2 0 0 1
β3 1 1 0
β4 0 1 1
β5 1 1 1
β6 1 0 1
HT = =
Un polinomio primitivo de grado r es el polinomio generador de jun código de Hamming de longitud
22r-1. En el ejemplo anterior p(x) = mα(x)
Para decodificar si w(x) es recibida, w(x) =c(x)+e(x) donde w() =e() =j, por lo que e(x)= xj y c(x)
=w(x) +xj .
Para el ejemplo anterior, supongamos que se recibe w(x) =1+x2 +x3+x6 , entonces:
w() = 1+2 +3 +3
= 100 + 001 + 110 + 101
= 110 = 3
y e(x) = x3, por lo que:
f(x) = w(x) + x3 = 1+ x2 + x6 [ CITATION And98 \l 3082 ]
Comportamiento BER para un código de Hamming (7,4)
Aquí se muestran las curvas VER para BPSK sin codificar y codificada para el código de Hamming
K=4, n=7. Las curvas se han normalizado para igual energía por bit de información (pre codificación),
teniendo presente que la energía por bit transmitido es menor que la energía por bit de información en
un factor al coeficiente del código R. las matemáticas requeridas para calcular el comportamiento de
algunos de estos códigos son muy complejas y a menudo solo es posible deducir resultados
aproximados ejecutar simulaciones sobre periodos de tiempo muy largos[ CITATION VVA86 \l 3082 ]
La mejora en comportamiento de Eb/No de los sistemas codificados frente a los sin codificar. A un
VER especificada, se denomina ganancia de codificación.
Observe que Eb (pre codificado) = Eb (pos codificado) /R
Códigos de Hamming de orden superior Existe una familia completa de códigos de Hamming, algunos
de los cuales se muestran aquí. A medida que aumenta la longitud, los códigos dan un comportamiento
similar e corrección a una determinada VER, pero con una general de codificación siempre reducida.
Además, la ganancia de codificación asintótica aumenta con el incremento de la longitud de código.
Por ejemplo, l código de Hamming (4,7) tiene una ganancia de codificación asintótica de unos 0,5dB
mientras el código de Hamming (120,127) tiene una ganancia de codificación del orden de 1,5dB. el
coeficiente del código es más alto para el código (120,127) R = 120/127, que el código (4,7) R=4/7 y
así tiene menos redundancia [ CITATION VVA86 \l 3082 ]
K N R=k/n
4 7 0.57
11 15 0.73
26 31 0.84
57 63 0.91
120 127 0.94
247 255 0.968
502 511 0982
Bibliografía
[1] C. López, «Teoría de la Información y,» Autonoma, Mexico, 2016.
[2] O. Sanllet, Principios de comunicaciones moviles, Peru: Autonoma, 2013.
[3] A. Bateman, Comunicaciones digitales: diseño para el mundo real, Tegucigalpa: Autonoma, 12998.
[4] VV.AA., ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES I (GESTIÓN Y SISTEMAS), España: Autonoma,
1986.