You are on page 1of 5

138

7.12. Codigos de Hamming


Los codigos de Hamming, introducidos por Golay en 1949, permiten re-
ducir el tiempo y el espacio de decodicacion. Para su denici on, se precisa
introducir el concepto de tasa de informacion de un codigo lineal C(n, k).
Se llama as al cociente R = k/n. Representa el n umero de bits de informa-
ci on por smbolo que porta cada palabra-c odigo. Obviamente, a igualdad de
capacidad correctora, interesa m as el codigo con tasa m as pr oxima a 1.
Recordemos que la redundancia de un codigo lineal viene dada por r =
n k, donde k es la dimensi on, y que r es el n umero de las de una matriz
de control.
Denicion 7.12.1. Fijado r, se llama codigo de Hamming de redundancia r
al codigo lineal con la mayor tasa posible entre todos los que son 1-correctores.
Al tratarse de codigos lineales 1-correctores, se sigue que la matriz de
control no puede tener menos de 3 columnas linealmente dependientes. En
efecto, de ser la capacidad correctora 1, se sigue que d 3, y recordemos
que el n umero mnimo de columna linealmente dependientes en la matriz de
control coincide con el valor de d. Como r = n k, la tasa de informaci on
viene dada por R =
k
n
=
nr
n
= 1
r
n
. Por tanto, al aumentar n aumenta la
tasa R, lo que nos dice que n debe ser lo mas grande que sea posible.
No es difcil construir este tipo de codigos. Una matriz de control solo
puede contener conjuntos de 3 o m as columnas linealmente dependientes. En
consecuencia, debe cumplir:
(a) Todas la columnas deben ser diferentes.
(b) Ninguna columna es nula.
(c) Ninguna columna puede ser un m ultiplo de otra.
(d) Las columnas son de r (= n k) coordenadas de A.
139
(e) La matriz de control debe tener el mayor n umero posible de columnas,
para que la tasa de informaci on sea lo mas pr oxima a 1 que sea posible.
q
r
1 es el n umero de columnas no nulas diferentes con r coordenadas. Si
m es el n umero total de columnas que verican las condiciones anteriores,
cada una de ellas, al multiplicarlas por uno de los q 1 escalares no nulos,
da otras q 1 columnas diferentes. Por tanto, m(q 1) = q
r
1 m =
q
r
1
q1
es el n umero maximo de columnas que podramos poner en la matriz H. Por
tanto, el valor de los parametros de un codigo de Hamming (n, k) viene dado
por:

n =
q
r
1
q1
,
k = n r =
q
r
1
q1
r.
Se deduce que no existen codigos de Hamming para cualesquiera (n, k) ya
que la construccion depende de r = n k.
7.13. Correccion con un codigo de Hamming
Vamos a ver que no se necesita mantener en memoria la tabla de sn-
dromes, sino solo la matriz de control. Supongamos que se transmite la pa-
labra-codigo x y se recibe y, donde y = x + e, siendo e el error que se ha
producido. Si e es una palabra de peso 1 (porque el codigo de Hamming es
1corrector), se tiene
Hy
t
= H(x
t
+ e
t
) = He
t
,
pues Hx
t
= 0. Si el error e = 0, obviamente He
t
= 0 Hy
t
= 0 y corregimos
aceptando y como correcta. Pero si, como hemos dicho antes, e es de peso
1, entonces e = e
i
( = 0), donde e
i
denota la cadena con todas sus
componentes nulas salvo la que ocupa el lugar iesimo que es igual a ,
entonces He
t
= h
i
, donde h
i
es la columna iesima de H.
Esta observacion permite idear un metodo de correcci on simple .
Al recibir y se calcula Hy
t
.
140
Si Hy
t
= 0, se acepta y como el mensaje enviado.
Si Hy
t
= s
t
= 0 se compara s
t
con las columnas de H. Si existe i, tal que
s
t
= h
i
, entonces e es una cadena de longitud n con en la posicion
i-esima y cero en las otras. Se ha producido un error y corregimos y
como y e.
Si Hy
t
= s
t
no es un m ultiplo de alguna columna de H es que ha habido
m as de un error.
En el caso de codigos binarios de Hamming, a un podemos mejorar este
metodo.
Las columnas de H son vectores de r = nk componentes pertenecientes
a

0, 1

= Z
2
. Las ordenamos de modo que la columna i sea la representaci on
binaria del entero i :
0
2
0
+
1
2
1
+
2
2
2
+ +
t
2
t1
.
Ejemplos 7.13.1. 1. Consideremos la matriz
H =

1 0 1 0 1 0 1
0 1 1 0 0 1 1
0 0 0 1 1 1 1

.
7 = 1 2
0
+ 1 2
1
+ 1 2
2
.
Si, como antes, obtenemos Hy
t
= s
t
, no necesitamos comparar s
t
con
todas las columnas de H. Basta examinar s
t
y ver de que entero i es la
representaci on binaria, y se tratara entonces de la columna i.
2. En el ejemplo anterior, si transmitimos x = 0111100 y recibimos y =
0111110, calculamos Hy
t
= (0 1 1)
t
que es la sexta columna. El error es un
vector de peso 1 (en el sexto lugar). Se decodica y como y (0 0 0 0 0 1 0).
7.14. Codigos de Hamming con MATLAB
Si se desea determinar las matrices de control y generadora para un codigo
de Hamming de redundancia r, se teclea en la ventana de comandos
141
>> [parmat,genmat]=hammgen(r)
y aparecen en pantalla ambas matrices. Por ejemplo, si se toma r = 3; resulta:
>> [parmat,genmat]=hammgen(3)
parmat =

1 0 0 1 0 1 1
0 1 0 1 1 1 0
0 0 1 0 1 1 1

genmat =

1 1 0 1 0 0 0
0 1 1 0 1 0 0
1 1 1 0 0 1 0
1 0 1 0 0 0 1

Notese que ambas matrices est an en la forma estandar. Para codicar un


mensaje cualquiera, podemos usar el programa siguiente
>> r=input(dame la redundancia);
n = 2
r
1;d=n-r;
[parmat,genmat]=hammgen(r); G=genmat;
m=input(dame el mensaje);
p=length(m)/d; i=0; j=0; I=0; J=0;
cn=p*n; cm=ones(1,cn)
for k=1:p
i=d*(k-1)+1
j=i+d-1
I=n*(k-1)+1
J=I+n-1
cm(I:J)=m(i:j)*G
end
for h=1:cn
if rem(cm(h),2)==0
cm(h)=0
elseif rem(cm(h),2)==1
142
cm(h)=1
end
end
Para decodicar una cadena recibida, y, se procede como sigue:
>> parmat=hammgen(3); (produce la matriz de control)
>> trt=syndtable(parmat); (produce una matriz la con los vectores
errores ordenados de forma que pasando el sndrome a la base 10 y sumando
1, se obtiene el n umero de la la de trt que contiene el error)
>> y = [1001111]; (se introduce la cadena recibida)
>> syndrome=rem(y*parmat,2); (se calcula el sdrome)
>> syndrome-de=bi2de(syndrome,left-msb); (se pasa el sndrome a la
base 10)
>> e=trt(1+syndrome-de,:); (se obtiene el error)
>> x=rem(y+e,2); (se corrige la cadena recibida).

You might also like