Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema7 Codigos Lineales
Tema7 Codigos Lineales
C
odigos Lineales
7.1.
Concepto de c
odigo lineal. Matriz Generadora
CAPITULO 7. CODIGOS
LINEALES
104
0
1
0
0
0
1
0
1
G=
0 1 1
1 0 1
7.2. EQUIVALENCIA DE CODIGOS
LINEALES.
7.2.
105
Equivalencia de C
odigos Lineales.
Definici
on 7.2.1. Dos codigos lineales se llaman equivalentes si uno puede
obtenerse del otro por una combinaci
on de operaciones del tipo:
(a) Permutaci
on de posiciones,
(b) multiplicaci
on de todos los elementos que ocupan una posici
on dada por
un escalar no nulo.
DEMOSTRACION:
Las tres operaciones (F1), (F2) y (F3) preservan la independencia lineal
de las filas de la matriz generadora de partida. Por tanto, solo implican
reemplazar una base por otra del mismo codigo. Las operaciones (C1) y (C2)
convierten la matriz generadora en otra que genera un codigo equivalente.
CAPITULO 7. CODIGOS
LINEALES
106
Teorema 7.2.3. Sea G la matriz generadora de un (n, k)-codigo lineal. Realizando operaciones del tipo anterior puede transformarse en una matriz de
la forma (Ik |B), siendo B una matriz k (n k).
DEMOSTRACION:
Durante las sucesivas transformaciones de la matriz
G, denotamos por gij los elementos de la matriz en consideracion en ese
momento. F1 , ..., Fk y C1 , .., Cn son las filas y columnas, respectivamente.
Se desea que aparezca un 1 en el lugar (1,1). Si g11 6= 0, se multiplica la
1
fila F1 por g11
. Si g11 = 0, se busca en el primer lugar de las otras filas un
gi1 6= 0. Si lo hay, se intercambian las filas F1 y Fi y la nueva fila 1 se multipli1
ca por gi1
. Si no lo hay se busca en la primera fila un elemento g1j 6= 0. Si lo
hay se intercambian las columnas C1 y Cj . Si este es el caso, se multiplica la
1
nueva fila 1 por g1j
. Se procede de este modo hasta conseguir que en el lugar
1
(1,1) figure un 1. Ahora se suma a cada fila posterior a la primera F1 g11
.
De esta forma se consigue que la columna C1 sea como la primera columna
de la matriz unidad Ik .
Nota 7.2.4. Cuando G0 puede obtenerse de G realizando solo transformaciones de filas, entonces G0 genera el mismo codigo. Sus filas son otra base
del mismo codigo lineal.
7.3.
Codificaci
on
7.4. EL CODIGO
DUAL
107
k
X
bji uj 1 i n k
j=1
son los dgitos de control (redundantes). Es decir, xk+1 , ..xn es la informacion redundante que se a
nade al mensaje para conseguir que quede protegido
contra los errores.
Se decodifica por el procedimiento considerado para los codigos de grupo.
Para codigos grandes este metodo de decodificacion es demasiado lento y
costoso en terminos de almacenamiento. Para obtener un metodo que mejora
estos dos aspectos de la decodificacion, necesitamos el concepto de codigo
dual.
7.4.
El c
odigo dual
CAPITULO 7. CODIGOS
LINEALES
108
1. u v = v u
2. (u + v) w = (u v) + (v w)
u y v se llaman ortogonales si u v = 0.
Dado un (n, k)-codigo lineal C, se define el codigo dual por
C = {v An : v u = 0(u C)}.
Si G es una matriz generadora del codigo C, entonces
v C v es ortogonal a cada fila de G.
Es decir:
v C vGt = 0.
Basta tener en cuenta que v es ortogonal a un subespacio si y solo si es
ortogonal a los elementos de una base.
DEMOSTRACION:
Es muy facil probar que C es un subespacio vectorial. Por tanto, C es
un codigo lineal. Ahora veamos que su dimension es n k. Si G = (gij )kn
es una matriz generadora para C, entonces
v C
n
X
vj gij = 0 i = 1, .., k.
j=1
109
nk
X
bij vk+j .
j=1
DEMOSTRACION:
Es obvio que C C . Pero dim(C) = k y dim(C ) = n (n k) = k.
Por tanto, C = C .
7.5.
Matriz de control
Definici
on 7.5.1. Sea C(n, k) un codigo lineal. Una matriz generadora H
CAPITULO 7. CODIGOS
LINEALES
110
DEMOSTRACION:
Como C = (C ) , resulta que las palabras-codigo de C deben ser las
x An tales que xH t = 0, pues H es la matriz generadora de C . Equivalentemente, Hxt = 0.
1 1 0 0
0 0 1 1
1 1 0 0
0 0 1 1
x1
x2
x3
x4
= 0.
DEMOSTRACION:
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
MEDIANTE SINDROMES
7.6. DECODIFICACION
111
DEMOSTRACION:
Si la distancia mnima es d, entonces existe x C de peso mnimo 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 terminos
de las columnas de H
n
X
i=1
xi c i =
d
X
xij cij = 0
j=1
7.6.
Decodificaci
on mediante sndromes
Sea H una matriz de control para un (n, k)-codigo lineal C. Para cada
y An , se define el sndrome de y por S(y) = yH t . Se trata de una fila
1 (n k). Veamos algunas propiedades que necesitaremos:
1. Si las filas de H son h1 , .., hnk , entonces
S(y) = (y h1 , ..., y hnk ).
2. S(y) = 0 y C = C (las filas de H son ortogonales a C).
CAPITULO 7. CODIGOS
LINEALES
112
1 0 0 1 0 1 1
H= 0 1 0 1 1 1 0
0 0 1 0 1 1 1
7.7. ERRORES A RAFAGAS
113
Lder
0000000
1000000
0100000
0010000
0001000
0000100
0000010
0000001
7.7.
Errores a r
afagas
Definici
on 7.7.1. Una rafaga cclica de longitud t en An es una cadena con
las siguientes propiedades:
114
CAPITULO 7. CODIGOS
LINEALES
Teorema 7.7.3. Un codigo lineal puede corregir todos los errores a rafagas
cclicas de longitud menor o igual que t si y solo si tales errores aparecen en
clases adjuntas distintas.
DEMOSTRACION:
(1) Sea C un codigo lineal que tiene la propiedad de que
todas las rafagas ciclicas de longitud menor o igual que t pertenecen a clases
adjuntas diferentes. Si transmitimos la palabra-codigo c y se recibe y = c + e,
siendo e una rafaga cclica de longitud menor o igual que t, bastara buscar en
la clase adjunta de y la u
nica rafaga e de tal estilo y decodificamos poniendo
c = y e.
(2) Sea C un codigo capaz de corregir todos los errores a rafagas cclicas de longitud menor o igual que t. Razonando por reduccion al absurdo,
supongamos que e1 y e2 son dos de tales errores que pertenecen a una misma
clase adjunta, es decir, c = e1 e2 C. Entonces las palabras-codigo 0 y c
tienen la propiedad de que al producirse un error a rafagas se convierten en
la misma cadena e1 . Concretamente, un error e1 convierte 0 en e1 y un error
e2 convierte c tambien en e1 . Esto prueba que no pueden corregirse todos
los errores a rafagas de longitud menor o igual que t y hemos llegado a una
contradiccion.
DE NUEVOS CODIGOS
7.8. CONSTRUCCION
A PARTIR DE OTROS115
7.8.
Construcci
on de nuevos c
odigos a partir
de otros
y denotemos por C el subconjunto de C formado por todas las palabrascodigo que tienen sus primeras t componentes nulas. C es un codigo lineal
de dimension k t. Si eliminamos las t primeras componentes de las palabras
de C , resulta un codigo C 0 (n t, k t). Diremos que C 0 es una reduccion
de C.
G = 0
0
0 0 1 1 1
1 0 1 1 0 .
0 1 0 1 1
Como la dimension es tres, C consta de ocho palabras que pueden determinarse facilmente
C = {000000, 010110, 001011, 100111, 111010, 110001, 011101, 101100}.
Si escogemos t = 1, resulta C = {000000, 010110, 001011, 01110} y el codigo
reducido sera C 0 = {00000, 10110, 01011, 1110}.
CAPITULO 7. CODIGOS
LINEALES
116
7.9.
Intercalado
1
0
G=
0
0
0
1
0
0
0
0
1
0
0
0
0
1
1
1
0
1
1
1
1
0
1
0
.
1
(7.1)
Seg
un 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
7.9. INTERCALADO
117
CAPITULO 7. CODIGOS
LINEALES
118
Intercalado cruzado. Se trata de una variacion del intercalado que usa mas
de un codigo. Esta tecnica 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 dispondremos de dos codigos lineales (binarios). C1 es el codigo del ejemplo anterior
y denotamos la matriz generadora (7.1) por G1 . Consideramos un segundo
codigo 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
Una matriz de control para C2 tiene la forma H2 = (B t I3 ), por lo que
es facil concluir que tambien es 1-corrector. Para intercalar C1 a la profundidad tres, escogemos una terna de palabras-codigo de C1 ; por ejemplo,
c1 = 1111111, c2 = 0111000 y c3 = 0100110. Las disponemos, como antes, en
forma de una matriz 3 7
1 1 1 1 1 1 1
0 1 1 1 0 0 0.
0 1 0 0 1 1 0
Pero ahora, en lugar de concatenar sus columnas, estas se codifican con el
codigo C2 y las disponemos formando la matriz
1
1
1
1
1
1
1
0
1
1
1
0
0
0
0
1
0
0
1
1
0
1
0
0
0
1
1
1
1
1
0
0
0
0
1
1
0
1
1
0
0
1
7.10. CODIGOS
LINEALES CON MATLAB
119
7.10.
C
odigos lineales con Matlab
Para codificar y decodificar con un codigo lineal, Matlab posee las funciones encode y decode. Supongamos que deseamos codificar un mensaje
(msg = [1 1 1 0 1 0 1 1 0 1 1 0]) con un codigo lineal C(7, 4). Si la matriz
G = [1101000; 0110100; 1110010; 1010001]
es una matriz generadora para el codigo C, el programa
>> n=7;k=4;
genmat=G;
msg=[1 1 1 0 1 0 1 1 0 1 1 0]; % el mensaje consta de tres palabras
codmsg=encode(msg,n,k,linear,genmat)
produce como resultado una columna de 21 dgitos que es el mensaje
codificado:
codmsg=[0 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 0 0 1 1 0].
Supongamos que, al transmitir por cierto canal el mensaje codificado, se
producen algunos errores y se recibe recmsg=[0 1 1 1 1 1 0 1 0 0 1 0 0 1
1 0 0 0 1 1 1]. Es decir, se han producido tres errores de forma que son
incorrectos el tercero en el primer grupo de siete dgitos, el pen
ultimo en el
segundo grupo y el dgito final. El codigo que estamos considerando es un
codigo de Hamming que estudiaremos en el tema siguiente y se sabe que su
CAPITULO 7. CODIGOS
LINEALES
120
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
funcion 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
tambien proporciona una matriz con los lderes (palabras de peso mnimo)
de las clases adjuntas:
>>trt=syndtable(parmat)
Las filas de la matriz trt son los lderes 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 sndromes poniendo
>> sindrome=rem(trt*parmat,2)
7.11.
Ejercicios
espacio
A
B
C
D
E
F
G
0000
0001
0010
0100
1000
0011
0110
1100
M
N
O
R
S
T
U
Y
1001
1010
0101
0111
1110
1011
1101
1111
7.11. EJERCICIOS
121
1 1 1 0 0 0
1 0 0 1 1 0
G=
0 1 0 1 0 1
1 1 0 1 0 0
1
1
0
1
0 0 0 1 0 1 1 1 1
1 0 0 0 0 1 0 0 1
1 1 0 1 1 1 0 0 1
1 0 1 0 1 1 0 1 0
CAPITULO 7. CODIGOS
LINEALES
122
G=
1
1
1
1
0
1
1
0
1
0
1
0
0
1
1
0
1
0
0
1
1
1
1
1
1 0 0
1 0 1
B=
1 1 1
0 1 0
0 1 1
0
1
0
1
1
0
1
1
1
0
1
1
1
1
1
7.12.
Pr
acticas de Programaci
on
7.12. PRACTICAS
DE PROGRAMACION
123
2. Crear un archivo de funcion para determinar, dada una matriz de control, la distancia mnima de un codigo lineal binario.
3. Elaborar un programa para decodificar un codigo lineal por el metodo
de los sndromes.