Está en la página 1de 21

Captulo 7

C
odigos Lineales
7.1.

Concepto de c
odigo lineal. Matriz Generadora

Sea A un cuerpo finito de q elementos. Si definimos en An las operaciones


(x1 , ..., xn ) + (y1 , ..., yn ) = (x1 + y1 , .., xn + yn )

(x1 , .., xn ) = (x1 , .., xn )


se obtiene un espacio vectorial sobre el cuerpo A de dimension n. Un codigo
C An se llama lineal si C es un subespacio vectorial de An . Si la dimension
de C es k, se dira que C es un (n, k)-codigo lineal o, si se quiere especificar
la distancia mnima d, un (n, k, d)-codigo. El n
umero de elementos de un
k
(n, k)-codigo es q . En efecto, basta recordar que, dada una base {v1 , .., vk }
de C, cada palabra-codigo x de C puede expresarse en la forma
x = 1 v1 + ... + k vk
con i K. Los escalares 1 , .., k son las coordenadas de x en la base
escogida. Sabemos que las coordenadas estan unvocamente determinadas
103


CAPITULO 7. CODIGOS
LINEALES

104

por x, una vez escogida la base. Por tanto, el n


umero de palabras-codigo en
0
C viene dado por Vq,k
= q k (= variaciones con repeticion de q elementos
tomados de k en k), mientras que An tiene q n elementos.
Ya vimos en el tema anterior que el hecho de ser C un codigo de grupo
nos ofrece un calculo sencillo de la distancia mnima y un metodo de decodificacion mas eficiente por medio de la b
usqueda de la palabra de peso mnimo
en la clase lateral del mensaje recibido. Otra ventaja de los codigos lineales
es la posibilidad de quedar especificados dando k palabras-codigo linealmente
independientes. Una matriz kn, formada por k filas que son palabras-codigo
linealmente independientes, se dira que es una matriz generadora para el
codigo C.
Recordamos que el alfabeto binario no es otra cosa que Z2 (clases de
restos modulo 2). Ya hemos usado su estructura de grupo para la suma. Con
el producto dado por la tabla siguiente, Z2 es un cuerpo commutativo.

0
1

0
0
0

1
0
1

Ejemplos 7.1.1. (a) (11111) es la matriz generadora del codigo binario


de repeticion de longitud 5.
(b) El codigo binario
C = {000, 011, 101, 110}
tiene por matriz generadora

G=

0 1 1
1 0 1

En este caso n = 3, k = 2 y Card(C) = 2k = 4.


Mas adelelante, veremos que para estos codigos existen metodos de decodificacion mas adecuados que el de Slepian.


7.2. EQUIVALENCIA DE CODIGOS
LINEALES.

7.2.

105

Equivalencia de C
odigos Lineales.

La definicion usual de equivalencia de codigos lineales es diferente de la


dada para codigos generales. Solo se permiten permutaciones de smbolos en
una posicion determinada que consistan en la multiplicacion de los elementos
de dicha posicion por un escalar dado.

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.

Teorema 7.2.2. Dos matrices k n generan codigos lineales equivalentes


si una de ellas se obtiene de la otra por una sucesi
on de operaciones de los
tipos siguientes:
(F1) permutaci
on de filas,
(F2) multiplicaci
on de una fila por un escalar no nulo,
(F3) sumar a una fila un m
ultiplo escalar de otra,
(C1) permutaci
on de columnas,
(C2) multiplicar una columna 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

Sea C un codigo (k, n)-lineal (sobre el alfabeto A) con matriz generadora


G. C contiene q k palabras-codigo (q es el n
umero de smbolos de A)); por
k
tanto, puede ser usado para transmitir q mensajes diferentes. Los mensajes
en cuestion se identifican con las palabras de Ak . Se codifica el mensaje
u = u1 , , , , uk poniendo
k
X
uG =
ui Fi C.
i=1


7.4. EL CODIGO
DUAL

107

La funcion de codificacion esta dada por


u Ak uG C An .
La regla de codificacion es mas simple a
un cuando la matriz generadora esta
en la forma estandar (Ik |B), donde B = (bij ) es una matriz k (n k). El
mensaje u = u1 ...uk se codifica como:
x = uG = x1 x2 ...xk xk+1 ..xn
donde:
xi = ui , si i k
son los dgitos del mensaje y
xk+i =

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

Usaremos el producto escalar uv de dos palabras u = u1 ...un y v = v1 ...vn


de An que se define por
u v = u1 v1 + u2 v2 + ... + un vn A
Propiedades obvias son las siguientes:


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.

Teorema 7.4.1. C es un codigo lineal (n, n k).

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

Encontramos v1 , .., vn resolviendo un sistema homogeneo de k ecuaciones con


n incognitas v1 , .., vn . Es conocido del algebra que la solucion es un subespacio
vectorial de dimension n k (el rango de G es k).
Cuando la matriz G esta en la forma estandar, es facil la prueba. Si
G = (Ik |B), siendo A = (bij ) una matriz k (n k), el sistema tiene la
forma:
nk
X
vi +
bij vk+j = 0 (i = 1, .., k).
j=1

7.5. MATRIZ DE CONTROL


Por tanto
vi =

109

nk
X

bij vk+j .

j=1

Luego vk+1 , .., vn son arbitrarios y v1 , .., vk estan determinados unvocamente


por los anteriores.

Teorema 7.4.2. Si C es un codigo lineal, entonces C = C.

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

para C se dira que es una matriz de control (o de verificaci


on de paridad)
para C. Entonces H es una matriz (n k) n que satisface
HGt = 0 ( vi Gt = 0, i = 1, ..., n k).
donde las vi son las filas de H.
El siguiente Teorema muestra que la matriz de control determina completamente el codigo C.

Teorema 7.5.2. Si H es una matriz de control para el codigo lineal C,


entonces:
C = {x An : Hxt = 0}


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.

Ejemplo 7.5.3. Sea H la matriz

1 1 0 0
0 0 1 1

Entonces (x1 , x2 , x3 , x4 ) C si y solo si

1 1 0 0
0 0 1 1

x1
x2
x3
x4

= 0.

La igualdad anterior conduce a las ecuaciones


)
x1 + x2 = 0
x3 + x4 = 0
que se llaman ecuaciones de control o de verificaci
on de paridad.

Teorema 7.5.4. Si G = (Ik |B) es la matriz generadora en forma estandar


de un (n, k)-c
odigo lineal, entonces H = (B t |Ink ) es una matriz de control
para C.

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

Ademas, las filas de H son linealmente independientes por serlo las de G.


Vamos a ver como puede determinarse la distancia mnima a partir de una
matriz de control.

Teorema 7.5.5 (Matriz de control y distancia mnima). La distancia mnima


d de un codigo lineal coincide con el mnimo n
umero de columnas linealmente
dependientes que hay en la matriz de control.

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

con xij 6= 0. Esto prueba que hay d columnas linealmente independientes. No


es difcil probar la vuelta.

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

3. Dos vectores u y v pertenecen a la misma clase adjunta si y solo si


S(u) = S(v).
Veamos la prueba de (3):
u + C = v + C u v C S(u v) = 0
La u
ltima equivalencia se sigue de (2). Ahora basta recurrir a la definicion
para obtener (u v)H t = 0, es decir, uH t = vH t .
Ahora vamos a explotar el hecho de que haya una correspondencia biunvoca entre las clases adjuntas y los sndromes.
La decodificacion mediante sndromes consiste en los siguientes pasos:
a) Se obtienen los lderes ei de cada clase adjunta
b) Se obtienen los sndromes S(ei ).
c) Se mantienen en memoria dos columnas, una de lderes y la otra con
los sndromes.
d) Si al enviar la palabra-codigo x C, se recibe el vector y, calculamos
su sndrome S(y) = yH t y se localiza el lugar que ocupa en la columna con
los sndromes.
e) Se localiza el lder e que ocupa el mismo lugar en la otra columna.
f) Se decodifica y como y e.
La ventaja de este metodo radica en que solo hay que mantener en memoria dos columnas, en lugar de todo el espacio An .

Ejemplo 7.6.1. Consideremos el codigo lineal (binario) determinado por la


matriz de control

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

Supongamos que se transmite por el canal la palabra-codigo c = 1001011


y se recibe y = 1001111. Para decodificar por el procedimiento anterior,
procedemos a calcular la tabla de sndromes y lderes
Sndrome
000
100
010
001
110
011
111
101

Lder
0000000
1000000
0100000
0010000
0001000
0000100
0000010
0000001

Seguidamente, encontramos el sndrome de la palabra recibida: s(y) =


(011). En la tabla vemos que se trata del sndrome del lder 0000100. Entonces
decodificamos poniendo x = y 0000100 = 1001011.

7.7.

Errores a r
afagas

Puede ocurrir que un determinado canal de transmision produzca errores


localizados en un corto intervalo de cada cadena de longitud n. Por ejemplo,
los errores producidos por irregularidades fsicas o estructurales en los medios
de grabacion suelen estar concentrados espacialmente. De igual forma, las
interferencias que se producen en un corto periodo de tiempo en las se
nales
de radio causan errores que aparecen a rafagas. Existen codigos especiales
para corregir este tipo de errores; por ejemplo, los codigos cclicos que seran
estudiados en el captulo siguiente.

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

1) contiene un trozo de longitud t cuyos primer y u


ltimo elementos son
no nulos
2) todos los elementos que no pertenecen a dicho trozo son nulos.

Ejemplos 7.7.2. 1) (01010110000) es una rafaga de longitud 6.


2) (010000100) es una rafaga cclica de longitud 5.
Al trnasmitir una palabra-codigo c, si se recibe y = c + e, siendo e una
rafaga cclica de longitud t, diremos que se ha producido un error a rafagas.

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

Hay muy diversas formas de obtener buenos codigos a partir de codigos


previamente construidos. En esta seccion veremos algunas de estas formas.
1) Extensi
on de un codigo. Dado un codigo C(n, m, d), a
nadiendo un
smbolo extra, cn+1 , a cada palabra-codigo, c1 c2 cn , de modo que c1 + c2 +
cn + cn+1 = 0, se obtiene un codigo de longitud n + 1. cn+1 recibe el
nombre de dgito de verificacion de paridad y el nuevo codigo se dira que es
una extension de C. Se trata de un codigo lineal y sus ecuaciones de control
son las del inicial mas la ecuacion x1 + x2 + + xn + xn+1 = 0.
2) Codigo reducido. Consideremos un codigo C(n, k) con una matriz generadora en forma estandar: G = (Ik B). Sea t un n
umero natural tal que t k

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.

Ejemplo 7.8.1. Sea C el codigo

G = 0
0

determinado por la matriz generadora

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

Se denomina de esta forma a una importante tecnica que se usa para


aumentar la capacidad de un codigo para corregir errores a rafagas (interleaving, en lengua inglesa). Para facilitar la comprension, vamos a desarrollar
las ideas considerando un ejemplo. Sea C(7, 4) el codigo lineal binario determinado por la matriz generadora

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

Ahora, a la vista de H, es facil comprobar que C es 1-corrector. En


efecto, basta notar que el n
umero mnimo de columnas de H linealmente
dependientes es tres. Sin embargo, nuestro codigo no podra corregir un error
que consistiera en una rafaga de longitud tres. Vamos a ver como con un
intercalado de profundidad tres podemos conseguir que los mensajes queden
protegidos contra este tipo de errores.
Supongamos que deseamos transmitir las palabras-codigo c1 = 0011110, c2 =
0110101 y c3 = 1000111. En lugar de transmitir las tres cadenas una detras
de otra, vamos a transformar la cadena de 21 dgitos de la forma siguiente.
En primer lugar, formamos con las tres cadenas una matriz de la forma
0 0 1 1 1 1 0
0 1 1 0 1 0 1.
1 0 0 0 1 1 1

7.9. INTERCALADO

117

Seguidamente, se concatenan las columnas de esta matriz


0 0 1 0 1 0 1 1 0 1 0 0 1 1 1 1 0 1 0 1 1.
En definitiva, se han colocado en primer lugar las primera componentes de
c1 , c2 y c3 (en este orden), a continuacion las segundas componentes y as
sucesivamente. Si hacemos esto con todas las ternas que pueden formarse
con cadenas de C, resulta un codigo C cuya longitud es 21. Diremos que
C se ha obtenido a partir de C con un intercalado de profundidad tres. No
resulta difcil probar que su dimension es 12. Para obtener una base de C ,
podemos tomar una base de C y, por cada cadena c de dicha base, formar
tres palabras de longitud 21 que contienen los dgitos de c en los lugares: a)
1, 4, 7, 10, 13, 16, 19, b) 2, 5, 8, 11, 14, 17, 20 y c) 3, 6, 9, 12, 15, 18, 21. De este
modo obtenemos 12 vectores que forman una base de C . As, si consideramos
la base formada por las filas de G, de su primera fila obtendramos las tres
cadenas de longitud 21 siguientes (se ha dibujado un trazo debajo de las
componentes que se corresponden con las de la primera fila de G):
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, obtendramos 12 cadenas que
formaran una base de C . Recapitulando, hemos obtenido, intercalando de
tres en tres las palabras-codigo de C(7, 4), un codigo C (21, 12). Este codigo
tiene la propiedad de que corrige errores a rafagas de longitud tres. En efecto,
un tal error en una palabra-codigo de C que transmitamos se traduce en
errores de peso uno en palabras-codigo de C y estos pueden ser corregidos.
En general, dados un codigo C(n, k) y una profundidad p, intercalando
cada conjunto de p palabras de C, se obtiene un codigo C (n p, k p), capaz
de corregir errores a rafagas de longitud p c, donde c denota la capacidad
correctora de C.


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

Ahora se concatenan las columnas de esta matriz, escogiendo previamente


la profundidad. Por ejemplo, si escogemos profundidad 2, concatenaramos


7.10. CODIGOS
LINEALES CON MATLAB

119

las columnas de cada par de filas consecutivas. Como hay 7 filas, la u


ltima
se intercalara con la primera de las producidas al considerar el siguiente
bloque de tres palabras-codigo de C1 . El resultado de la concatenacion 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.
En el sistema ideado por Sony y Philips para el compact disc se usa un
intercalado cruzado con dos codigos de Reed-Solomon: C1 = RS(28, 24) y
C2 = RS(32, 28).

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

1. Determinar el menor valor de n con la propiedad de que exista un codigo


lineal binario 1-corrector de longitud n y de forma que cada palabra-codigo
contenga 62 bits de informacion.
2. Se asignan cadenas de ceros y unos de longitud 4 como sigue

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

Las cadenas de longitud 4 se codifican usando


beto binario)

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

la matriz generadora (alfa0


0
0
1

Suponiendo que se produce a lo mas 1 error en la transmision de una


cadena de longitud 7, decodificar el siguiente mensaje recibido:
1110001 1100011 1001100 0100111 0110000.
3. (a) Probar que las palabras de peso par en un codigo lineal binario forman
un subgrupo aditivo.
b) Probar que en un codigo lineal binario todas las palabras-codigo tienen
paso par o exactamente la mitad tienen peso par y la otra mitad peso
impar.
4. Probar que en un codigo lineal binario todas las palabras-codigo comienzan
por 0 o exactamente la mitad empieza con 0.
5. Consideremos la matriz

1
1

0
1

de control de un codigo lineal binario C

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

a) Determinar los valores de n, k y d.


b) Encontrar una matriz generadora G para C.
c) Decodificar los siguientes mensajes: (i) 1110110000 y (ii) 0100110010.
6. Sea C el codigo anterior. Denotamos por C 0 el codigo formado por las
palabras-codigo que se obtienen a
nadiendo a la derecha de cada palabracodigo c C un dgito del modo siguiente: si el peso de c es impar el
dgito a
nadido es 1 y 0 si el peso es par.


CAPITULO 7. CODIGOS
LINEALES

122

a) Determinar la distancia en el nuevo codigo.


b) Determinar una matriz de control para C 0 a
nadiendo a H una columna
y una fila apropiadas.
7. Sea C un codigo que tiene por matriz generadora

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

Encontrar una matriz de control para C y explicar si el codigo es realmente


u
til.
8. Supongamos que la matriz de control
H = [I5 B], siendo B la matriz

1 0 0

1 0 1

B=
1 1 1

0 1 0
0 1 1

de un codigo lineal binario C es

0
1
0
1
1

0
1
1
1
0

1
1
1
1
1

a) Probar que todas las palabras-codigo de C tienen peso par.


b) Determinar la distancia d.
c) Si se recibe y = 01110001111, que puede concluirse?
d) Si suponemos que se produce a lo mas un error en la transmision de cada
cadena de 11 dgitos, decodificar la palabra recibida y = 11100101000.

7.12.

Pr
acticas de Programaci
on

1. Elaborar un programa para determinar el codigo a partir de una matriz


de control.

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.

También podría gustarte