Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Codigo 2
Codigo 2
Códigos Lineales
117
CAPÍTULO 7. CÓDIGOS LINEALES 118
x = α1 v1 + ... + αk vk
· 0 1
0 0 0
1 0 1
Más adelante, veremos que para estos códigos existen métodos de correc-
ción más adecuados que el de Slepian.
7.2. Codificación
Sea C un código (k, n)-lineal (sobre el alfabeto A) con matriz generado-
ra G. C contiene q k palabras-código (q es el número de sı́mbolos de A));
por tanto, puede ser usado para codificar q k sı́mbolos fuente diferentes ( los
sı́mbolos en cuestión se identifican con las palabras de Ak ).
Se codifica la cadena u = u1 , , , , uk poniendo
k
X
uG = ui Fi ∈ C.
i=1
u ∈ Ak → uG ∈ C ⊂ An .
donde:
xi = ui , si i ≤ k
son los dı́gitos de la cadena fuente y
k
X
xk+i = bji uj 1 ≤ i ≤ n − k
j=1
u · v = u1 v1 + u2 v2 + ... + un vn ∈ A
Propiedades obvias son las siguientes:
1. u · v = v · u
u y v se llaman ortogonales si u · v = 0.
Dado un (n, k)-código lineal C, se define el código dual por
C ⊥ = {v ∈ An : v · u = 0(∀u ∈ C)}.
CAPÍTULO 7. CÓDIGOS LINEALES 121
DEMOSTRACIÓN:
Es muy fácil probar que C ⊥ es un subespacio vectorial. Por tanto, C ⊥ es
un código lineal. Ahora veamos que su dimensión es n − k. Si G = (gij )k×n
es una matriz generadora para C, entonces
n
X
⊥
v ∈ C ⇐⇒ vj gij = 0 ∀i = 1, .., k.
j=1
Por tanto
n−k
X
vi = − bij vk+j .
j=1
DEMOSTRACIÓN:
Es obvio que C ⊂ C ⊥⊥ . Pero dim(C) = k y dim(C ⊥ )⊥ = n − (n − k) = k.
Por tanto, C = C ⊥⊥ . ¤
DEMOSTRACIÓN:
Como C = (C ⊥ )⊥ , resulta que las palabras-código de C deben ser las
x ∈ An tales que xH t = 0, pues H es la matriz generadora de C ⊥ . Equiva-
lentemente, Hxt = 0. ¤
à !
1 1 0 0
0 0 1 1
Entonces (x1 , x2 , x3 , x4 ) ∈ C si y sólo si
à ! x1
1 1 0 0 x2
= 0.
0 0 1 1 x3
x4
DEMOSTRACIÓN:
Tenemos que probar que cada fila de H es ortogonal a toda fila de G. La
fila i de H por la columna j de Gt da exactamente
0 + (−bij + bij ) + 0 = 0
DEMOSTRACIÓN:
Si la distancia mı́nima es d, entonces existe x ∈ C de peso mı́nimo igual a
d. Pero x ∈ C ⇒ Hxt = 0. Entonces las columnas de H que se corresponden
con los lugares donde x no tiene un cero (d de ellos) deben ser linealmente
dependientes. Para ver esto, basta escribir la igualdad Hxt = 0 en términos
de las columnas, ci , de H
n
X d
X
xi c i = xij cij = 0
i=1 j=1
u + C = v + C ⇐⇒ u − v ∈ C ⇐⇒ S(u − v) = 0
Sı́ndrome Lı́der
000 0000000
100 1000000
010 0100000
001 0010000
110 0001000
011 0000100
111 0000010
101 0000001
(b) Multiplicación de todos los elementos que ocupan una posición dada por
un escalar no nulo.
DEMOSTRACIÓN:
Las tres operaciones (F1), (F2) y (F3) preservan la independencia lineal
de las filas de la matriz generadora de partida. Por tanto, sólo implican
reemplazar una base por otra del mismo código. Las operaciones (C1) y (C2)
convierten la matriz generadora en otra que genera un código equivalente. ¤
7.8. Intercalado
Se denomina de esta forma a una importante técnica que se usa para
aumentar la capacidad de un código para corregir errores a ráfagas (inter-
leaving, en lengua inglesa). Para facilitar la comprensión, vamos a desarrollar
las ideas considerando un ejemplo. Sea C(7, 4) el código lineal binario deter-
minado por la matriz generadora
1 0 0 0 1 1 1
0 1 0 0 1 1 0
G= . (7.1)
0 0 1 0 0 1 1
0 0 0 1 1 0 1
Según hemos visto, como G tiene la forma (I4 B), una matriz de control viene
dada por H = (B t I3 ); es decir, H es la matriz
1 1 0 1 1 0 0
1 1 1 0 0 1 0 .
1 0 1 1 0 0 1
Ahora, a la vista de H, es fácil comprobar que C es 1-corrector. En
efecto, basta notar que el número mı́nimo de columnas de H linealmente
CAPÍTULO 7. CÓDIGOS LINEALES 130
0 0 1 0 1 0 1 1 0 1 0 0 1 1 1 1 0 1 0 1 1.
100000000000100100100
010000000000010010010
0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1.
Haciendo lo mismo con cada fila de G, obtendrı́amos 12 cadenas que
formarı́an una base de C ∗ . Recapitulando, hemos obtenido, intercalando de
tres en tres las palabras-código de C(7, 4), un código C ∗ (21, 12). Este código
tiene la propiedad de que corrige errores a ráfagas de longitud tres. En efecto,
un tal error en una palabra-código de C ∗ que transmitamos se traduce en
errores de peso uno en palabras-código de C y éstos pueden ser corregidos.
En general, dados un código C(n, k) y una profundidad p, intercalando
cada conjunto de p palabras de C, se obtiene un código C ∗ (n · p, k · p), capaz
de corregir errores a ráfagas de longitud p · c, donde c denota la capacidad
correctora de C.
CAPÍTULO 7. CÓDIGOS LINEALES 132
Intercalado cruzado. Se trata de una variación del intercalado que usa más
de un código. Esta técnica se emplea, entre otros, en el sistema desarrollado
conjuntamente por Sony y Philips en el compact disc.
De nuevo, vamos a desarrollar las ideas sobre un ejemplo. Ahora dispon-
dremos de dos códigos lineales (binarios). C1 es el código del ejemplo anterior
y denotamos la matriz generadora (7.1) por G1 . Consideramos un segundo
código C2 con matriz generadora
1 0 0 1 1 1
G2 = (I3 B) = 0 1 0 1 1 0 .
0 0 1 0 1 1
1 1 1 1 1 1 1
0 1 1 1 0 0 0.
0 1 0 0 1 1 0
1 0 0 1 1 1
1 1 1 0 1 0
1 1 0 0 0 1
1 1 0 0 0 1
1 0 1 1 0 0
1 0 1 1 0 0
1 0 0 1 1 1
las columnas de cada par de filas consecutivas. Como hay 7 filas, la última
se intercaları́a con la primera de las producidas al considerar el siguiente
bloque de tres palabras-código de C1 . El resultado de la concatenación de las
6 primeras filas, de dos en dos, es la siguiente cadena
1 1 0 1 0 1 1 0 1 1 1 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 0 0.
capacidad correctora es igual a uno. Por tanto, pueden corregirse los errores
producidos. Si se quiere ahora decodificar el mensaje recmsg, se recurre a la
función decode cuya sintaxis es la siguiente
>> decomsg=decode(recmsg,n,k,’linear’,genmat)
y obtenemos el mensaje original msg.
Si se dispone de una matriz de control que llamaremos parmat, Matlab
también proporciona una matriz con los lı́deres (palabras de peso mı́nimo)
de las clases adjuntas:
>>trt=syndtable(parmat)
Las filas de la matriz trt son los lı́deres de las clases adjuntas, por tanto,
son los vectores que debemos sumar a la cadena recibida para corregirla.
Podemos obtener una matriz cuyas filas sean los sı́ndromes poniendo
>> sindrome=rem(trt*parmat’,2)
7.10. Ejercicios
1. Determinar el menor valor de n con la propiedad de que exista un código
lineal binario 1-corrector de longitud n y de forma que cada palabra-código
contenga 62 bits de información.
3. (a) Probar que las palabras de peso par en un código lineal binario forman
un subgrupo aditivo.
b) Probar que en un código lineal binario todas las palabras-código tienen
paso par o exactamente la mitad tienen peso par y la otra mitad peso
impar.