Академический Документы
Профессиональный Документы
Культура Документы
Captulo 8
Algunos c
odigos notables
8.1.
C
odigos de Hamming
La decodificacion mediante sndromes todava presenta problemas de espacio. Por ejemplo, un codigo binario lineal C(64, 30) tiene 234 sndromes
posibles, ya que hay 264 cadenas en An y el codigo cuenta con 230 palabras.
64
Por tanto, 2230 = 234 es el n
umero de clases adjuntas y para cada una de ellas
hay un sndrome. Ahora en cada uno de las 234 clases adjuntas hay que
buscar el elemento de peso mnimo.
Los codigos de Hamming fueron introducidos por Golay en 1949 y permiten reducir el tiempo y el espacio de decodificacion. Estos codigos son
lineales, 1-correctores, de tipo C(n, k) sobre An , siendo A un cuerpo de q
elementos.
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, c = 1 = d1
d1
1 d 3, y recordemos que el n
umero
2
2
mnimo de columna linealmente dependientes en la matriz de control coincide
con el valor de d. Sea r = n k = el n
umero de filas de la matriz de control.
De todos los codigos 1correctores que tienen el mismo parametro r (r es
la redundancia del codigo), el mejor sera aquel para el cual la longitud n
sea la mas grande posible. En efecto, la tasa de transmision viene dada por
125
126
R = nk = nr
= 1 nr .
n
Por tanto, al aumentar n aumenta la tasa de transmision.
No es difcil construir este tipo de codigos. Su matriz de control solo
puede contener conjuntos de 3 o mas 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.
(e) La matriz de control debe tener el mayor n
umero posible de columnas,
para que la tasa de transmision sea lo mas proxima 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 verifican las condiciones anteriores,
cada una de ellas al multiplicarlas por uno de los q 1 escalares no nulos da
r 1
otras q 1 columnas diferentes. Por tanto, m(q 1) = q r 1 m = qq1
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 = qr 1 ,
q1
k =nr =
q r 1
q1
r.
8.2.
Decodificaci
on de un c
odigo de Hamming
Vamos a ver que no se necesita mantener en memoria la tabla de sndromes, sino solo la matriz de control. Supongamos que se transmite la palabra-codigo x y se recibe y, donde y = x + e, siendo e el error que se ha
DE UN CODIGO
8.2. DECODIFICACION
DE HAMMING
127
1 0 1 0 1 0 1
H = 0 1 1 0 0 1 1 .
0 0 0 1 1 1 1
CAPITULO 8. ALGUNOS CODIGOS
NOTABLES
128
7 = 1 20 + 1 21 + 1 22 .
Si, como antes, obtenemos Hy t = st , no necesitamos comparar st con
todas las columnas de H. Basta examinar st y ver de que entero i es la
representacion 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 decodifica y como y (0 0 0 0 0 1 0).
8.3.
C
odigos de Hamming con MATLAB
1 0 0 1 0 1 1
0 1 0 1 1 1 0
0 0 1 0 1 1 1
genmat =
1
0
1
1
1
1
1
0
0
1
1
1
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
8.3. CODIGOS
DE HAMMING CON MATLAB
129
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
cm(h)=1
end
end
Para decodificar una cadena recibida, y, se procede como sigue:
>> parmat=hammgen(3); (produce la matriz de control)
>> trt=syndtable(parmat); (produce una matriz fila 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 fila 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).
CAPITULO 8. ALGUNOS CODIGOS
NOTABLES
130
8.4.
El c
odigo de Reed-Muller de primer orden
Definici
on 8.4.1. Se denota por R(1, t) al subespacio generado por los vectores 1, V1 , , Vt . Por tanto, R(1, t) es un codigo binario cuya matriz generadora es
1
1
G=
.
=
Bt
Ht |
Se llama c
odigo de RedMuller de primer orden.
DEMOSTRACION:
Denotemos, como es usual, los parametros del codigo por (n, k, d). Como
la matriz generadora G tiene 2t 1+1 = 2t columnas, se sigue que n = 2t . En
cuanto a las filas de G, notese que seran 1+ n
umero de f ilas de la matriz Ht
del codigo de Hamming (= n k = t).
Por tanto, G posee t+1 filas. Veamos que son linealmente independientes.
Las t filas de Bt lo son porque It puede encontrarse en Ht como una submetriz.
8.4. EL CODIGO
DE REED-MULLER DE PRIMER ORDEN
131
ri1
.
(a) rij 6= 1 j. Sea A la matriz A = .. .
ris
La componente h de c sera 1 cuando la columna h de A contenga un
n
umero impar de unos y sera 0 si dicha columna contiene un n
umero
par de unos. Cada supla de 0 y 1 aparece en las columnas de A. De
hecho, cada una aparece repetida un n
umero de veces igual a 2ts que es
el n
umero de formas de completar de modo diferente una columna de A
hasta una columna de Ht . El n
umero de suplas pares es igual al n
umero
de suplas impares. En consecuencia, el n
umero de componentes no
nulas de c es igual al n
umero de componentes nulas de c. Esto obliga a
t1
que w(c) = 2 .
(b) Si alg
un rij = 1, consideramos c 1. El anterior argumento prueba que
w(c 1) = 2t1 si c 6= 1. Por tanto, hemos probado que w(c) = 2t1 .
En efecto, c 1 = c + 1. Luego el n
umero de unos de c debe ser 2t1 .
1 0 0 1 0 1 1
H3 = 0 1 0 1 1 0 1 .
0 0 1 0 1 1 1
CAPITULO 8. ALGUNOS CODIGOS
NOTABLES
132
1 0 0 1 0 1 1 0
B3 = 0 1 0 1 1 0 1 0 .
0 0 1 0 1 1 1 0
y, finalmente, la matriz generadora del codigo R(1, 3)
1 1
1 0
G=
0 1
0 0
1
0
0
1
1
1
1
0
1
0
1
1
1
1
0
1
1
1
1
1
1
0
0
0
8.5.
C
odigos autoduales
Definici
on 8.5.1. Un codigo lineal C se llama auto-ortogonal si C C ;
es decir, las palabras-c
odigo son mutuamente ortogonales.
Puede ocurrir que la contencion C C sea estricta, pero si las dimensiones de C y C coinciden , entonces ambos codigos son iguales.
DEMOSTRACION:
1) Supongamos que C C Como C = C = (C ) ,
se sigue que G es una matriz generadora para C y, por tanto, es una matriz
de control para C . Entonces G xt = 0, para cada x C . En particular,
G xt = 0, para x C. Luego G Gt = 0.
2) Sea G Gt = 0. Si F1 , .., Fk son las filas de G, sabemos que forman una
base de C. La igualdad G Gt = 0 implica que los productos Fi Fj son todos
8.5. CODIGOS
AUTODUALES
133
Definici
on 8.5.3. Un codigo lineal C se llama autodual si C = C .
DEMOSTRACION:
En este caso, C y C tienen dimension k y, por otra
parte, notese que la igualdad G Gt = 0 es equivalente a B B t = Ik , ya
que G Gt = Ik + B B t .
DEMOSTRACION:
Sabemos que H = (B t Ik ) = (B Ik ) es una matriz
de control para el codigo C, por tanto, por ser el codigo autodual, H tambien
es una matriz generadora para C. Luego, si (a, b) C, entonces (a, b) debe
ser combinacion lineal de filas de G. A partir de dicha combinacion lineal de
filas de G, es facil expresar la cadena (b, a) como combinacion lineal de las
mismas filas de H, lo que prueba el teorema.
CAPITULO 8. ALGUNOS CODIGOS
NOTABLES
134
8.6.
C
odigos de Golay
Estos codigos se usaron para transmitir, desde los Voyager 1 y 2, fotografas en color de J
upiter (1979) y de Saturno (1980). Para simplificar,
vamos a considerar solo codigos binarios.
Proposici
on 8.6.1. Si C es un codigo autodual binario, todas las palabrascodigo tienen peso par.
DEMOSTRACION:
Si c es una palabra-codigo, por ser C autodual, se sigue
que c c = 0. Pero el producto anterior es la suma de tantos unos como
componentes no nulas tenga c. Como dicha suma es nula, debe ser par el
n
umero de componentes no nulas de c.
0 1 1 1 1
1 1 1 0 1
1 1 0 1 1
1 0 1 1 1
1 1 1 1 0
1 1 1 0 0
B12 =
1 1 0 0 0
1 0 0 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 1 1
1 0 1 1 0
matriz
1
1
1
0
0
0
1
0
1
1
0
1
1
1
0
0
0
1
0
1
1
0
1
1
1
0
0
0
1
0
1
1
0
1
1
1
1
0
0
1
0
1
1
0
1
1
1
0
1
0
1
0
1
1
0
1
1
1
0
0
1
1
0
1
1
0
1
1
1
0
0
0
1
0
1
1
0
1
1
1
0
0
0
1
8.6. CODIGOS
DE GOLAY
135
Estas matrices siempre son simetricas y reciben el nombre de matrices circulantes. Entonces tambien la matriz B12 es simetrica, pues su primera fila es
igual que la primera columna.
Definici
on 8.6.2. Se llama codigo de Golay binario G24 al codigo que tiene
a G24 por matriz generadora.
t
No es difcil comprobar que la matriz B12 verifica B12 B12
= I12 , por tanto,
G12 es un codigo (24, 12) autodual. Como hemos dicho con anterioridad, el
peso de las palabras de todo codigo binario autodual es par. A continuacion,
vamos a ver que el codigo de Golay tiene la propiedad de que el peso de
todas las palabras-codigo es m
ultiplo de 4. Para facilitar la comprension,
vamos a considerar una nueva operacion entre cadenas. Si x = (x1 , ..., xn )
e y = (y1 , .., yn ) son dos cadenas de An , se define el producto componente
a componente siguiente: x y = (x1 y1 , .., xn yn ). Se verifica la siguiente
igualdad
(x + y) = (x) + (y) 2(x y).
(8.1)
La igualdad anterior se deduce facilmente, teniendo en cuenta que el codigo de Golay es binario, a partir de la relacion (x + y) = card(sop(x)) +
card(sop(y)) 2card(sop(x) sop(y)), ya que sop(x) sop(y) = sop(x y).
Teorema 8.6.3. Todas las palabras de G24 tienen peso m
ultiplo de 4.
DEMOSTRACION:
A simple vista vemos que las filas de G24 tienen peso
m
ultiplo de 4. Por tanto, basta comprobar que la suma de dos filas cualesquiera, x e y, tambien tiene peso m
ultiplo de 4. Ahora bien, de (8.1) se
sigue que basta probar que (x y) es par, pero esto es obvio por ser el
codigo autodual, ya que entonces debe ser sop(x) sop(y) un conjunto con
un n
umero par de elementos (x y es exactamente la suma de tantos unos
como elementos hay en la interseccion de ambos soportes).
136
DEMOSTRACION:
En virtud de lo que acabamos de decir, basta probar que
el codigo de Golay no contiene palabras de peso 4. Por reduccion al absurdo,
supongamos que c = (a, b) es una palabra-codigo de peso 4, siendo a, b A12 .
Por el Teorema-8.5.5, no hay perdida de generalidad en suponer que se tienen
las relaciones (a) (b) y (a) 2. Sabemos que c debe ser combinacion
lineal de filas de G24 , pero la forma de esta matriz obliga a que c sea suma
de, a lo mas, (a) filas de G24 (notese que G24 = (I12 B12 ) determina que
cualquier combinacion lineal de p filas tenga peso como mnimo igual a p).
Como ninguna fila de G24 tiene peso 4, podemos suponer que (a) 6= 1, luego
(a) = 2. Es decir, c = (a, b) es la suma de dos filas de la matriz generadora.
Sean Fi y Fj dichas filas. De (8.1) se sigue que
(Fi + Fj ) = (c) = 4 = (Fi ) + (Fj ) 2(Fi Fj ).
(8.2)
DEL CODIGO
8.7. DECODIFICACION
DE GOLAY
8.7.
137
Decodificaci
on del c
odigo de Golay
(8.3)
(8.4)
138
DEMOSTRACION:
Demostraremos solamente la segunda igualdad, pues la
prueba de ambas es similar. Partimos de la igualdad sH = e1 B +e2 . Si e1 = 0,
se sigue que sH = e2 , lo que implica que (sH ) = (e2 ) (e) 3.
Consideramos ahora el caso e1 6= 0. En este caso, podemos escribir
(sH ) = (e1 B + e2 ) = (e1 B) + (e2 ) 2(e1 B e2 ).
(8.5)
Para obtener una cota inferior de (sH ), vamos a usar la desigualdad obvia
(a b) min{(a), (b)} (b),
para cualesquiera cadenas a y b. De la relacion anterior y (8.5) se deduce
(sH ) (e1 B) + (e2 ) 2(e2 ) = (e1 B) (e2 ).
(8.6)
Para terminar, necesitamos estimar (e1 B). En primer lugar, vamos a ver
que la cadena no nula (e1 , e1 B) es una palabra-codigo. En efecto, notese que
e1 G = (e1 , e1 B). Entonces, como la distancia mnima del codigo de Golay es
8, se sigue que
(e1 ) + (e1 B) = ((e1 , e1 B)) 8.
Esta u
ltima desigualdad y (8.6) permiten obtener
(sH ) (e1 B) (e2 ) 8 (e1 ) (e2 ) = 8 (e) 8 3 = 5.
DEL CODIGO
8.7. DECODIFICACION
DE GOLAY
139
(B) (sG ) y (sH ) son mayores o iguales que 5. En este caso son no nulos
e1 y e2 . Como (e) 3, se sigue que (e1 ) = 1 u (e2 ) = 1. Vamos a
considerar el caso (e1 ) = 1.
Denotamos por ui la cadena de A12 con todas sus componentes nulas
exceptuando la que ocupa el lugar i-esimo que es igual a 1. Obviamente,
existe un u
nico i tal que e1 = ui . Entonces e1 + ui = 0 y se deduce que la
cadena y + (ui , 0) = x + (0, e2 ) tiene la propiedad de que sus primeras doce
componentes son correctas. Para determinar el valor de i, podemos calcular
los sndromes de las 12 cadenas de la forma y + (uj , 0) y estudiar sus pesos.
Por el teorema precedente
(
(sH (y + (uj , 0))) =
3 si e1 = uj
5 si e1 6= uj .
Por tanto, entre los doce pesos encontrados solo puede haber uno que sea
menor o igual que 3. Si se trata del peso del sndrome sH (y + (ui , 0)), deducimos que e1 = ui . Por otra parte, como la cadena y + (ui , 0) tiene correctas
las primeras doce componentes, podemos aplicar el paso (A) y concluir que
e2 = sH (y + (ui , 0)). Es decir, e = (ui , sH (y + (ui , 0)).
Como, a priori, no sabemos si (e1 ) = 1 o no, puede ocurrir que al calcular
los pesos de los sndromes sH (y + (uj , 0)) no encontremos ninguno que sea
menor o igual que 3. Si esto ocurre, sera porque (e1 ) 6= 1, en cuyo caso
podemos estar seguros de que (sH (e2 )) = 1 y procederamos a determinar
los sndromes (respecto de G) de las doce cadenas de la forma y + (0, uj ).
Si alguno de ellos, digamos sG (y + (0, uj )), tiene peso menor o igual que 3,
entonces e = (sG (y +(0, ui )), ui ). Finalmente, si nuevamente ninguno de estos
12 sndromes tiene peso menor o igual que 3, sera porque el error tena peso
superior a 3.
Vemos, pues, que para decodificar una cadena tendremos que calcular a
lo sumo 2 + 12 + 12 sndromes.
140
8.8.
Ejercicios
1. Consideremos la matriz
1 0 0
0 1 0
H=
0 0 1
0 0 0
0
0
0
1
1
1
0
0
0
0
1
1
0
1
1
0
1
0
0
1
0
1
0
1
1
0
1
0
1
1
1
0
0
1
1
1
1
0
1
1
1
1
0
1
1
1
1
1
1 0 0 1 0 1 0 1 1 2 1 2 0
H= 0 1 0 1 1 0 1 1 2 1 1 1 2
0 0 1 0 1 1 2 1 1 1 2 0 1
Se trata de la matriz de control de un codigo de Hamming sobre el alfabeto
A = Z3 = {0, 1, 2}. a) Determinar la dimension k y la distancia mnima.
b) Codificar el mensaje 1112200010, c) Decodificar las cadenas recibidas:
i) y = 1000001211, ii) y = 0000021210.
3. Elaborar un programa para decodificar un mensaje codificado con un codigo de Hamming, sobre un alfabeto ternario, con redundancia y longitud
dadas.
4. Elaborar un programa para decodificar un mensaje codificado con un codigo binario de Hamming con redundancia y longitud dadas.
5. Elaborar un programa para decodificar un mensaje codificado con el codigo de Golay.