Anda di halaman 1dari 32

Teora de la Informacin y Teora de Cdigos

Cdigos Convolucionales
Carlos Snchez Snchez
3 de Grado en Ingeniera Informtica
ndice
1. Introduccin 5
2. Aspectos Generales 6
3. Codificacin 8
4. Decodificacin: Algoritmo de Viterbi. 14
5. Distancia Libre 19
6. Capacidad Correctora. 21
7. Mejoras de los Cdigos Convolucionales 26
8. Aplicaciones 28
Anexo A. Programa de Simulacin Codice. 29
Bibliografa 32
32
3
1. Introduccin
En este trabajo se hace una introduccin a los cdigos convolucionales como un tipo de
cdigos correctores de errores diferente a los cdigos de bloques. La principal diferencia entre
ellos es la introduccin del concepto de memoria, esto es, la codicacin en un momento dado
no depender solo de la palabra a codicar, tambin de las codicadas anteriormente. Estos
cdigos presentan una gran ventaja frente a los de bloques en canales con mucho ruido (alta
probabilidad de error). Las comunicaciones inalmbricas o comunicaciones con satlites desta-
can entre sus usos.
Los cdigos convolucionales son un campo de trabajo abierto dentro de la teora de cdigos y
actualmente se pueden encontrar desde distintos enfoques y deniciones. Aqu se tratar de dar
una visin general tratando de destacar los aspectos que suponen una diferencia respecto a los
cdigos de bloques. En todos los casos posibles se han incluido ejemplos de su funcionamiento.
Para los conceptos que por su complejidad excedan el objetivo del trabajo se han aadido
algunas referencias.
En primer lugar se describirn las caractersticas y parmetros que denen estos cdigos. En
la seccin 3 se explica la codicacin, tanto desde un punto de vista matemtico como desde el
necesario para su implementacin en hardware.
Los tres apartados siguientes se dedican a la decodicacin. En el apartado 4 se muestra el
proceso de decodicacin, para el que se describe el agoritmo de Viterbi. En el 5 se introduce el
concepto de distancia, que determinar la capacidad correctora del cdigo y en el 6 se mostra-
rn algunas cotas y ejemplos de esta capacidad. Tambin se realizar una comparacin terica
y prctica de estos cdigos con cdigos de bloques desde el punto de vista de los errores que
pueden corregir.
En la seccin 7 se mostrar un repaso breve de algunas tcnicas que permiten mejorar la co-
dicacin mediante cdigos convolucionales. Tambin, de forma breve, algunos usos de cdigos
convolucionales en combinacin con otros cdigos que abren nuevas vas en la teora de cdigos.
Finalmente, en la ltima seccin se dar un repaso por algunas aplicaciones y usos prcticos
de los cdigos convolucionales haciendo especial hincapi en la importancia que han tenido para
la historia de la exploracin espacial
Junto al trabajo se ha realizado un pequeo simulador de cdigos que permite realizar la co-
dicacin, transmisin y posterior correccin y decodicacin. Los resultados de este programa
se utilizarn en algunas de las secciones del trabajo y una descripcin de su funcionamiento
puede ser consultada en el Anexo A.
5
2. Aspectos Generales
En los cdigos de bloques el mensaje se divida en palabras y la codicacin era la transfor-
macin de cada palabra de informacin u F
q
k
en una palabra del cdigo x F
q
n
mediante
el producto por la matriz generadora G de forma que x = u G. En este caso la codicacin
es constante en el tiempo. Sin embargo, en los cdigos convolucionales, la codicacin de una
palabra variar en funcin de las palabras transmitidas anteriormente. El nmero de palabras
anteriores de las que depende la codicacin se denomina memoria m del cdigo.
La introduccin a los cdigos convolucionales fue obra de P. Elias 1955 como alternativa a
los cdigos de bloques existentes. Posteriormente, en 1970 Shun Lin trato de forma analtica la
codicacin convolucional, lo que impuls el uso de estos cdigos, un desarrollo desde el punto
de vista algebraico fue realizado por G.D. Forney Jr. en el mismo ao y posteriormente fue
reformulado por R. McEliece en 1998. [6]
Otros nombres dados a estos cdigos son los de cdigos recurrentes o cdigos de rbol, debido
a que es posible realizar una representacin grca estructurada en forma de rbol.
En estos cdigos, entonces, a partir de la palabra que se codica y las m anteriores se ge-
nerarn smbolos de redundancia. Sin embargo, a diferencia de los cdigos de bloques, no se
envan estos smbolos como un aadido a la palabra a codicar. Es habitual que sean estos los
nicos smbolos enviados.
Teniendo esto en cuenta, en el caso de un cdigo convolucional C para un alfabeto A se
tienen tres parmetros (n, k, L) , dos equivalentes a los vistos para los cdigos de bloques y
la restriccin de distancia:
k: nmero de smbolos de la palabra de datos que se codica en cada paso.
n: nmero de smbolos de la palabra codicada a partir de k bits.
L: restriccin de distancia. Siendo m la memora del cdigo, L = m + 1 es el nmero
de fases en las que una palabra ejerce inuencia sobre la salida. Es decir, inuye sobre
s mismo y m ms. Es tambin habitual que la restriccin de distancia se represente con
la letra K, pero aqu se usar la notacin L para distinguirla del nmero de bits de la
palabra a codicar. En ocasiones en lugar de darse en cantidad de smbolos se hace en bits.
Partiendo de estos parmetros es posible entender los cdigos de bloques como cdigos con-
volucionales con m = 0, pues este es el caso en el que no se tiene en cuenta ninguna de las
codicaciones anteriores.
El ratio o tasa del cdigo, denida de igual forma que para los cdigos de bloques es
r =
BITS que se codifican
BITS enviados
=
k
n
Sin embargo, generalmente los smbolos se codican uno a uno, por tanto k = 1 y r =
1
n
,
sin agrupacin en bloques. Esto permite transmitir grandes corrientes de bits cuyas salidas se
combinarn de forma preestablecida en la codicacin. Ser en estos cdigos, por ser los ms
sencillos y ms utilizados, en los que nos centraremos principalmente en este trabajo.
6
En este caso tenemos que para una palabra de un smbolo u
i
enviada en el momento i-simo
se obtiene una serie de bits x
1
, x
2
, ..., x
n
. Y, teniendo en cuenta la memoria, la codicacin de
esta palabra depender de los smbolos u
i
, u
i1
, ..., u
im
.
La palabra codicada ser siempre una combinacin lineal de u
i
, u
i1
, ..., u
im
, y la entrada
nula (0, ..., 0) siempre da la salida nula. Por tanto, pese a no ser cdigos de bloques, s que se
pueden estudiar como cdigos lineales.
Los cdigos convolucionales pueden tomar sus elementos de cualquier cuerpo nito, sin em-
bargo, el ms comn es F
2
y ser el utilizado en los ejemplos.
7
3. Codificacin
La realizacin fsica de un codicador puede realizarse mediante circuitos secuenciales linea-
les. Se pueden utilizar L registros cuyas salidas se suman de forma que se obtiene una palabra
del cdigo para cada entrada. Con la entrada de una nueva palabra a codicar las anteriores se
desplazan al siguiente registro y se obtiene una nueva palabra codicada.
Tomamos como ejemplo el cdigo k = 1 en el que se desea que al codicar el bit i-simo se
obtengan dos bits. El primero ser la suma del bit a codicar y los dos anteriores y el otro la
suma del actual y el que se codic en la penltima codicacin. El codicador sera el de la
siguiente imagen:
El nmero de registros utilizados es 3 y este es el nmero de entradas que afectan a cada
salida, por tanto la restriccin de distancia L es 3 y la memoria m es 2. Se hace referencia a la
palabra actual y, como mucho, a las dos anteriores.
Una visin de caja negra de este codicador implicara una entrada de la palabra u
i
del
cdigo y la salida de dos bits que forman la palabra codicada.
Sin embargo, es posible expresar cada una de las salidas como una funcin, denominada
funcin generadora, de u
i
, ..., u
im
. En el caso anterior se tendran:
x
1
= 1 u
i
+ 0 u
i1
+ 1 u
i2
x
2
= 1 u
i
+ 1 u
i1
+ 1 u
i2
De este modo, es posible establecer el codicador G del cdigo con k = 1 como una aplicacin
lineal entre los subespacios F
L
y F
n
de la siguiente forma:
G : F
L
2
F
n
2
(u
i
, u
i1
, ..., u
im
) (x
1
, x
2
, ..., x
n
)
donde i indica el momento de la codicacin en el que estamos.
Para el caso visto, en concreto:
8
G : F
3
2
F
2
2
(u
i
u
i1
, u
i2
) (x
1
, x
2
)
Las palabras del [n, 1, L] c odigo convolucional son, por tanto, el subespacio generado por
la imagen de esta aplicacin
C ImgG
Y el resultado de la codicacin ser el vector formado por los elementos
x
i
=
m

k=0
u
(mk)
(g
ij
)
siendo g
i
las ecuaciones para cada una de las salidas.
Para verlo ms claro tomamos como ejemplo el [2, 1, 3]-cdigo convolucional visto antes con:
g
1
= (1, 0, 1)
g
2
= (1, 1, 1)
Si codicamos el vector (1, 0, 1, 0), la salida ser:
Al entrar el primer elemento (1), se tienen en cuenta las dos anteriores entradas cticias
como ceros, por tanto, en t = 1:
x
11
= (1, 0, 0)
_
_
1
0
1
_
_
= 1 + 0 + 0 = 1
x
12
= (1, 0, 0)
_
_
1
1
1
_
_
= 1 + 0 + 0 = 1
La salida sera: x
1
= (1, 1)
Para la segunda entrada (0), se tendr que las entradas anteriores son 1 y 0:
x
21
= (0, 1, 0)
_
_
1
0
1
_
_
= 0 + 0 + 0 = 0
x
22
= (0, 1, 0)
_
_
1
1
1
_
_
= 0 + 1 + 0 = 1
Y como consecuencia: x
2
= (0, 1)
Siguiendo del mismo modo se tendr como salida (x
1
, x
2
, x
3
, x
4
), el vector (1, 1, 0, 1, 0, 0, 0, 1).
Es posible ver en el ejemplo que para la codicacin de los primeros dos bits (1, 0) se tiene
como resultado (1, 1, 0, 1). Sin embargo, para los dos siguientes, an siendo iguales, la salida
9
es (0, 0, 0, 1). Esto se debe, como se ha dicho, a que la salida depende tambin de las entradas
anteriores.
La codicacin de un mensaje con N palabras u
i
de k bits se puede generalizar como la
aplicacin tomando polinomios:
G(z) : F
2
[z]
k
F
2
[z]
n
u(z) =

N1
i=0
u
i
z
i
(x
1
(z), ..., x
n
(z)) | x
j
= u(z) g
j
(z)
Donde u(z) es un vector de k polinomios de grado N 1 que representan la entrada. Y los
(x
1
(z), x
2
(z), ..., x
n
(z)) son n polinomios de salida resultado del producto de la entrada por
una matriz de k n polinomios de grado hasta m cuyas columnas son los g
j
.
Ejemplo de codicacin con k = 1
Para ver esto mejor se realiza utilizando este mtodo la misma codicacin realizada antes
para el cdigo con k = 1:
G(z) : F
2
[z] F
2
[z]
n
u(z) =

N1
i=0
u
i
z
i
(x
1
(z), x
2
(z))|x
j
= u(z) g
j
(z)
Los polinomios generadores de esta aplicacin son los polinomios de grado m con los
coecientes de las secuencias generadoras:
g
1
(z) = 1 + z
2
g
2
(z) = 1 + z + z
2
.
Sin embargo suelen representarse con notacin octal. Para este caso 101
2
= 5
8
y 111
2
= 7
8
,
sera por tanto un cdigo con restriccin de distancia 3, longitud 2 y polinomios (5, 7).
La expresin polinmica de la entrada (1, 0, 1, 0) codicada anteriormente es u(z) = (1 +z
2
).
Por lo que la codicacin se realiza del siguiente modo:
x
1
(z) = (1 + z
2
) (1 + z
2
) = 1 + z
4
(1, 0, 0, 0, 1)
x
2
(z) = (1 + z
2
) (1 + z + z
2
) = 1 + z + z
3
+ z
4
(1, 1, 0, 1, 1)
E intercalando ambas salidas tenemos (1, 1, 0, 1, 0, 0, 0, 1, 1, 1). Esta salida corresponde con la
anterior, excepto porque se han aadido algunos bits al nal. Esto se debe a que esta codica-
cin corresponde a la anterior aadiendo ceros al nal de modo que todos los registros estn a
cero al acabar.
Esto se denomina codicacin zero-tailed y el nmero de ceros que se deben aadir es igual a
m. Por tanto la salida anterior se corresponde a codicar (101000), que sera (1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0),
teniendo en cuenta los ceros al nal para los grados restantes. [13]
10
Esta codicacin supone una reduccin del tasa del cdigo, que ahora ser, para un mensaje
de m bits igual a
N
n(N+m)
.
Para mensajes cortos esto supondra una gran prdida pero para secuencias muy largas de
bits el aumento es despreciable.
Otra opcin, aunque ms compleja, se denomina cdigo convolucional con bits de cola (tail-
biting) [13]. En estos se establece el inicio del codicador en el mismo estado que se encontrara
al nal, lo cual complica la decodicacin pero elimina la disminucin de la tasa del cdigo.
Ejemplo de codicacin con k > 1
Esta forma de codicacin es vlida tambin para cdigos con k > 1. Por lo que si estuvie-
ramos hablando de un cdigo con k = 2, n = 3 y L = 2 para un mensaje de 6 bits se tiene que
N = 3.
G(z) : F
2
[z]
2
F
2
[z]
3
u(z) =

2
i=0
u
i
z
i
(x
1
(z), ..., x
n
(z)) | x
j
= u(z) g
j
(z)
La matriz para este codigo ser:
G(z) =
_
1 + z z 1 + z
z 1 1
_
Lo que signica que la primera salida ser la suma del primer y segundo elemento de u
i
con el
segundo de u
i1
. La segunda salida la suma del segundo elemento de u
i
con el primero de u
i1
. Y
la tercera salida de nuevo el primer y segundo elemento de u
i
pero ahora con el primero de u
i1
.
Si se desea transmitir el mensaje u = 110110, este queda dividido en las palabras de 2 bits
u
0
= 11, u
1
= 01 y u
2
= 10, y se tiene:
u(z) =

1
i=0
u
i
z
i
= (1, 1) z
0
+ (0, 1) z
1
+ (1, 0) z
2
= (1 + z
2
, 1 + z)
Por tanto:
x(z) = u(z) G(z) = (1 + z
2
, 1 + z)
_
1 + z z 1 + z
z 1 1
_
= (1 + z
3
, 1 + z
3
, z
2
+ z
3
)
Y las x
i
resultantes, tomadas como los coecientes de los polinomios son:
x
0
= (1, 0, 0, 1)
x
1
= (1, 0, 0, 1)
x
2
= (0, 0, 1, 1)
Por lo que el mensaje codicado, al reordenar las salidas es: x = (1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1)
11
Diagrama de Trellis
Para facilitar la comprensin de la codicacin, se puede utilizar una representacin grca
que permite ver las salidas asociadas con el paso del tiempo. Se denomina diagrama de Trellis.
En la siguiente imagen se ve el ejemplo para el anterior codicador.
En el diagrama de Trellis se ven las entradas anteriores a la actual como estados que se
representan en el eje vertical. Por tanto el nmero de estados sera de q
m
. En este caso,
2
2
= 4, ya que es un cdigo binario de memoria 2.
En el eje horizontal se muestran las distintas entradas. A cada una corresponde una echa,
con linea continua si la entrada i es un 0 y discontinua para las entradas 1. Junto a cada echa
se indica la salida correspondiente a esa entrada.
En un primer momento el estado es 00, ya que se suponen dos entradas anteriores de 0. Si la
primera entrada u
i
es 0, el estado al que se pasa es, de nuevo, 00 (tanto esta entrada como la
anterior son cero) y la salida es (x
1
, x
2
) =
_
_
_
_
(0, 0, 0)
_
_
1
0
1
_
_
_
_
,
_
_
(0, 0, 0)
_
_
1
1
1
_
_
_
_
_
_
= (0, 0).
En caso de que la primera entrada sea u
i
= 1. El nuevo estado ser (1, 0), 1 de esta entrada y 0
de la entrada anterior. La salida en este caso es (x
1
, x
2
) =
_
_
_
_
(1, 0, 0)
_
_
1
0
1
_
_
_
_
,
_
_
(1, 0, 0)
_
_
1
1
1
_
_
_
_
_
_
=
(1, 1). El diagrama de Trellis para este paso es el de la imagen.
Aparece marcada en rojo la entrada uno estudiada en ejemplos anteriores, y, siguiendo el
mismo mecanismo, se llega al diagrama de Trellis para la entrada (1010) con ceros de cola.
12
Y la salida coincide, de nuevo, con la vista anteriormente: (1, 1, 0, 1, 0, 0, 0, 1, 1, 1).
Esta idea de que un estado se corresponde con las entradas anteriores es posible representarla
tambin con un diagrama de estados.
13
4. Decodificacin: Algoritmo de Viterbi.
La decodicacin consiste en encontrar la secuencia de palabras del cdigo correspondiente
a la secuencia recibida. Dado que pueden haberse producido errores, se buscar la palabra ms
probable. Esta ser aquella para la que la distancia de Hamming entre su salida y la secuencia
recibida sea menor.
La decodicacin es ms compleja que la codicacin. Es posible hacerla calculando todas las
distancias entre la secuencia recibida y las posibles secuencias transmitidas, eligiendo despus
la que tiene una menor distancia de Hamming. Sin embargo este mtodo, cuando se tienen
grandes cantidades de informacin, hace que el nmero de clculos sea demasiado alto como
para ser prctico, pues implica una carga computacional excesiva.
Como solucin a esto una de las opciones que se utilizan es el algoritmo de Viterbi. Este
algoritmo, adems de ser sencillo, es capaz de encontrar la entrada con mayor probabilidad de
acierto.
Un decodicador basado en este mtodo almacena cada secuencia de bits recibida y calcula
la secuencia de estados ms probable siguiendo los caminos en el diagrama de Trellis con
menor distancia acumulada, descartando los caminos no viables y los menos probables. Una
vez encontrado este camino se obtiene la cadena de bits asociada a esas transiciones.
Tomemos como ejemplo la recepcin de los bits 1010 codicados con el codicador de poli-
nomios (5, 7) utilizado hasta ahora. El diagrama de Trellis de la codicacin es el visto antes
y el resultado la secuencia 11010001. Supongamos que en la transmisin se ha producido un
error y se recibe 11000001.
El decodicador partir del estado cero, y calcular todos los posibles caminos desde ah, a
cada uno de los estados resultantes les asignar un valor llamado pathmetric. Vamos a tomar
que este valor sea la distancia de Hamming entre la salida asignada a esa transicin y el par de
bits recibidos (branchmetric).
Para los dos primeros bits recibidos se tiene que d(00, 11) = 2 y d (11, 11) = 1, por tanto:
En el nuevo paso se explorarn las rutas que parten de todos los los estados a los que se ha
llegado, en este caso 00 y 01. Al valor de cada estado se le sumar la distancia entre los 2 bits
siguientes y las nuevas transiciones :
14
En una nueva iteracin, habr varios caminos para llegar a un nuevo estado. Se selecciona
el que llegue con un menor valor asociado. En caso de que sean iguales, se selecciona uno cual-
quiera.
Aparecen en verde los valores de los caminos seleccionados y en gris los que se han descartado.
Y para nalizar, con los dos ltimos bits se completa el diagrama de Trellis.
Llegado a este punto, se seleccionara el estado con el valor menor, en este caso 01. Y el
mensaje codicado corregido ser el nico camino superviviente que llega a ese estado, en este
caso: 11010010, que coincide con el enviado.
15
La palabra decodicada ser el camino que se ha seguido para esa salida 1010, marcado en
rojo en el diagrama
En este caso no se han aadido los ceros nales. Si fuera el diagrama debera acabar en el
estado 00 y sera siempre ese el estado del que se parte, independientemente de su valor.
Un posible pseudocdigo para este algoritmo es el siguiente.
1 Vector Viterbi(Vector codificada)
2 {
3 int numero_estados = (2 ^ (m+1)) -1
4 Vector resultado;
5
6
7 Matriz estados(numero_estados , m+1)
8 estados.RellenarEstados ();
9
10 Vector aemAnterior(numero_estados );
11 Vector aem(nestados );
12
13 aem.fill (-1);
14 aemAnterior.fill (0);
15 aem (0)=0;
16
17 int pasos = codificada.rows ();
18 Matriz caminos(num_estados , pasos );
19 caminos.fill (-1);
20 caminos (0 ,0)=1;
21
22 int acumulador;
23 for(int i=0; i<pasos; i++)
24 {
25 for(int j=0; j<nestados)
26 {
27 if(caminos(i,j) != -1)
16
28 {
29 for(int trans = 0; trans <=1; trans ++)
30 {
31 acumulador = aemAnterior(j)
32 + sum(abs(palabra.row(i) - salida(j, k));
33
34 if( aem( destino(j,k) ) > acum || aem(j)== -1 )
35 {
36 aem( destino(j,k) ) = acum;
37 caminos( i+1, destino(j,k)) = j;
38 }
39 }
40 }
41 }
42 aemAnterior = aem;
43 }
44
45 //0 si se usa zero -tailing
46 int anterior = aem.minIndex ();
47
48 //el primer bit del estado es la ltima entrada codifiada.
49 resultado(pasos -1) = estados( efin ,0 );
50
51 for(int i=pasos; i>1; i--)
52 {
53 resultado(i-2,0) = estados( caminos(i,efin), 0 );
54 efin = caminos(i,efin);
55 }
56
57 return resultado;
58 }
La funcin devolver un vector con los bits codicados, para ello hace uso de una matriz de
caminos que se va rellenando con las rutas de peso mnimo. Los vectores aem y aemAnterior se
usan para almacenar entre pasos cuales son los valores de cada una de estas rutas.
Al completar la matriz de caminos, se iterar del nal al principi rellenando el vector de
resultado con los caminos elegidos, que corresponden al primer bit del estado, dado que este es
el bit que entr en la ocasin anterior.
Este cdigo necesita almacenar una gran cantidad de informacin, la relativa al mensaje
completo. Para mensajes muy largos, u ocasiones en las que se envan datos de forma continua
esto no se puede realizar en la prctica.
Una solucin es establecer una profundidad de decodicacin. En lugar de decodicar el men-
saje completo, este se divide en secuencias que se decodican de forma independiente. Gracias
a algunas investigaciones se sabe que una profundidad de 5 L es suciente para no perder
capacidad de correccin mientras que se reduce el tiempo de respuesta y el espacio necesario
17
para la decodicacin.
La complejidad del algoritmo de Viterbi depende linealmente de la longitud del mensaje
y exponencialmente de la restriccin de distancia, dado que el nmero de estados es 2
L
1 y se
itera en un bucle por cada estado. Como consecuencia de esto para cdigos con una memoria
muy grande el rendimiento decrece de forma muy rpida y para valores grandes de L el algorit-
mo de Viterbi no es una opcin. Normalmente se restringe a cdigos de, como mucho, L = 9.
Existen otros algoritmos de decodicacin, entre los que se encuentran los algoritmos de de-
codicacin umbral (threshold decoding), que slo es posible aplicar a algunas clases de cdigos
y no llegan a una decodicacin ptima. Tambin existe otro tipo de algoritmos denominados
de decodicacin secuencial con mejores resultados, y, pese a no ser tampoco ptimos, son uti-
lizados en cdigos con una restriccin de memoria para la que no es posible utilizar el algoritmo
de Viterbi.
Todos estos algoritmos, incluido el de Viterbi, son de decodicacin dura (hard decoding).
Esto signica que el decodicador solamente recibe datos binarios del canal. Los decodicado-
res de decisin blanda reciben ms de un bit en lugar de slo uno, con lo que se tiene una
estimacin de como de able es la informacin recibida. Normalmente son sucientes tres bits
de decisin blanda. 000 sera el cero fuerte, 111 el uno fuerte y en medio se tendran otros
valores.
Para los algoritmos de decisin blanda, en lugar de utilizar una distancia de Hamming se
utiliza otra llamada distancia Euclidea.
18
5. Distancia Libre
En los cdigos convolucionales se ha visto que se puede denir la distancia de Hamming igual
que en los cdigos de bloques, siendo el nmero de smbolos en los que dieren dos secuencias
de bits codicadas.
La distancia libre d
free
de un cdigo convolucional se dene como la mnima distancia de
Hamming entre dos secuencias de bits codicadas y de esta depende el nmero de errores que es
capaz de corregir el cdigo. Del mismo modo que en los cdigos de bloques, esto es equivalente
a comparar el resto de salidas con la entrada nula. Teniendo esto en cuenta, la distancia libre
coincide con el nmero de unos de la secuencia no nula que, empezando en el estado cero, vuelve
a l con la salida con menor nmero de unos entre todas las posibles.
La importancia de la distancia libre se debe a que de este parmetro depender la capacidad
correctora del cdigo.
En el caso del cdigo con polinomios (5, 7) que hemos visto, este recorrido es el correspon-
diente a la entrada 100 con salida 110111, y por tanto d
free
= 5.
Este concepto se puede denir de un modo ms formal de la siguiente forma, sea C un cdigo
convolucional y wt(x) el peso de una secuencia (distancia de Hamming a la palabra nula) .
d
free
(C) = mn{wt(x)| x C, x = 0}
La distancia de un [n, k, L] c odigo convolucional cumple la cota de Singleton generalizada:
d
free
(C) (n k)
__

k
_
+ 1
_
+ + 1
donde es lo que se llama grado externo del cdigo convolucional. [14] El grado externo
de un cdigo convolucional es la suma de los grados mximos de las las en la aplicacin que
relaciona una palabra de la entrada con una de la salida para cada momento de la codicacin:
G(z) : F
2
[z]
k
F
2
[z]
n
En los cdigos con k = 1, el grado externo coincide con la memoria del cdigo, ya que la
matriz de la aplicacin G tiene dimensiones k n.
As, para un cdigo C con k = 1, n = 2 y L = 3, = L 1 = 2, y:
19
d
free
(C) (2 1)
__
2
1
_
+ 1
_
+ 2 + 1 = 5
Y dado que hemos visto antes que d
free
(C) = 5, podemos concluir que el cdigo tiene la
distancia libre mxima para un cdigo con esos parmetros. Este tipo de cdigos se llaman
MDS (Maximum-distance separable).
A continuacin se incluye una imagen con cdigos de distancia mxima para n = 2 y distintos
valores de L.[1]
L g
1
g
2
d
free
3 5 7 5
4 15 17 6
5 23 35 7
6 53 75 8
7 133 171 10
8 247 371 10
9 561 753 12
10 1167 1545 12
11 2335 3661 14
12 4335 5723 15
13 10533 17661 16
14 21675 27123 16
Se puede ver que una mayor memoria aumenta la distancia libre, pero eso tiene un
coste computacional mayor y no es posible aumentarla sin lmite.
Un mayor n hace la distancia libre mayor, aunque la tasa de informacin ser menor y
habr que enviar un nmero mayor de bits.
Para el clculo de la distancia libre en cdigos con k = 2 es posible utilizar el algoritmo de
Viterbi. El algoritmo sera similar al usado en el caso de zero-tailing, que se utilizar para una
entrada de ceros con el aadido de que el resultado no sea cero.[5]
Para conseguir esto basta con obligar a que la primera transicin sea un uno. Dado que se
comienza en el estado cero, si esta fuera cero seguira en el mismo estado y la salida sera de n
ceros. Para que la salida del camino completo no sea cero en algn momento tiene que haber
una primera transicin correspondiente a la entrada de un uno. Como todas las anteriores no
aportaran nada al peso de la palabra se puede tomar esta como la primera.
20
6. Capacidad Correctora.
Determinar la capacidad correctora de un decodicador convolucional es complejo [8], por
lo que en este apartado solo se vern algunos ejemplos y se darn algunas cotas que permitan
aproximar la probabilidad de recibir un mensaje correctamente.
Se podrn detectar errores en un mensaje recibido si el digrama sigue un camino prohibido.
Es decir, si en el resultado del algoritmo de Viterbi no tenemos un camino cuya distancia al
recibido es cero (valor de la mtrica de camino o pathmetric).
El error se podr corregir si el camino ofrecido por el algoritmo de Viterbi coincide con el
original. Si el nmero de errores es demasiado grande no ser posible encontrar este camino y
se llegar a un camino erroneo, con lo que no se podrn corregir correctamente los errores.
Para estimar la probabilidad de errores es posible analizar un mensaje recibido en cadenas de
nL bits, donde L es la restriccin de distancia y n la longitud de la palabra del cdigo. De forma
similar a la que se vio para los cdigos de bloques, en el caso de los convolucionales se tiene que
ser posible la correcin, en cada tira de nL bits, de un mximo de t errores si t
_
d
free
1
2
_
.
Sin embargo, no siempre se podrn corregir t errores, dado que esto depende de si la deco-
dicacin se realiza para un nmero sucientemente grande de bits y de la distribucin de los
errores. Este dato es solo una cota y en otras ocasiones este nmero ser menor, pero en general
se puede decir que corregir t errores si estos se encuentran a la suciente distancia [4]. Esta
no es la mejor forma de medir la capacidad correctora de un cdigo pero puede darnos una
estimacin.
A continuacin se muestran algunos casos en los que es posible, o no, corregir un mensaje.
Usando el cdigo de ejemplos anteriores se tiene que nL = 6 y se podran corrige hasta t
errores si t 2 y estos se encuentran lo sucientemente separados.
Vemos un ejemplo en el que se enva el mensaje 101011001100 y hay tres errores muy prxi-
mos:
21
Como se ve, el mensaje no se ha decodicado correctamente. El diagrama de Trellis es el
siguiente:
Se supera la cota vista y el camino rojo tiene la misma distancia de Hamming al recibido que
el correcto. Dado que el algoritmo uno cualquiera entre ellos y hay dos posibles, no podemos
tener la certeza de cuales fueron las palabras enviadas.
En esta otra ocasin, enviando 101011001100100 se producen 5 errores pero estn todos lo
sucientemente separados como para que el decodicador los corrija.
Por ltimo, un caso en el que no hay ms de 2 errores en una secuencia de 6 bits, pero sin
embargo no es posible corregirlos debido a su distribucin.
22
En este caso el camino ms probable no es el correcto sino el marcado en rojo. Las dos lineas
azules tienen igual probabilidad, por lo que ambas podran haber sido tomadas, aunque en este
caso ese camino sea cortado ms adelante.
A continuacin vamos a comparar varios cdigos convolucionales con otros cdigos en men-
sajes ms largos (de N bits) para un canal con probabilidad de error p. De este canal vamos a
suponer que los errores se producen de manera aleatoria y que no se producen rfagas. Esto se
da en canales con una probabilidad de error baja, en este caso se ha probado hasta p = 10
1
.
Adems el mensaje tendr un largo suciente y la decodicacin se producir utilizando un
nmero suciente de bits.
En un supuesto como este el nmero de errores que se puede corregir se aproximar a t.
Teniendo esto en cuenta calculamos la probabilidad de que una secuencia de n L llegue
correctamente de modo similar a como se hara con los cdigos de blques. Esto es, la pro-
babilidad de que no haya errores ms la probabilidad de que haya un nmero de errores que
pueda corregir.
La probabilidad de que en n L haya t errores es
_
n L
t
_
p
k
(1 p)
(nL)k
.
Entonces, la probabilidad de que un bloque de n L llegue correctamente con un cdigo capaz
de corregir t errores es:
p
B
=
t

k=1
_
n L
t
_
p
t
(1 p)
(nL)t
23
Con esto podemos hacer una estimacin para un mensaje de N bits. La probabilidad de que
llegue correcto es:
p
M
(p
B
)
Nn
Es decir, la probabilidad de ir desplazando una secuencia de n L bits por cada uno de los
bits codicados.
A continuacin se muestra una tabla para N = 10000 bits y distintos cdigos con la proba-
bilidad de que llegue correcto. Para los cdigos convolucionales se muestra la estimacin de la
cota inferior vista y entre parntesis el resultlado de una simulacin para 500 transmisiones:
p = 0,001 p = 0,01 bits enviados
Sin cdigo 0 0 10000
Convolucional L = 3,n = 2 - (5, 7) 0,998 (100 %) 0,676(72 %) 20000
Convolucional L = 4,n = 3 - (11, 15, 17) 1 (100 %) 0,998 (100 %) 30000
Convolucional L = 7,n = 2 - (115, 147) 1 (100 %) 0,996 (100 %) 20000
Triple Repeticin 0,97 0,05 30000
Hamming(3) 0,94 0,006 17500
Hammin(4) 0,91 0,00015 10714
A partir de estos datos podemos ver que los cdigos convolucionales son una buena opcin
en canales con mucha probabilidad de error, ya que son capaces de corregir grandes can-
tidades de errores sin necesidad de enviar muchos bits redundantes. En las capturas siguientes
es posible ver la diferencia entre utilizar un cdigo Hamming y un cdigo convolucional con
memoria 3. Enviando un 14 % ms de bits es capaz de decodicar el cdigo en un nmero
mucho mayor de ocasiones. Utilizando otro de los cdigos convolucionales vistos en la tabla,
esta mejora sera an mayor.
24
25
7. Mejoras de los Cdigos Convolucionales
En esta seccin se muestran algunas de las mejoras que se pueden hacer sobre los cdigos
convolucionales y formas de usarlos para obtener un mayor rendimiento.
Codicadores recursivos
Existen codicadores recursivos. Son aquellos en los que a la entrada se le suma alguna
de las sumas anteriores como en el siguiente ejemplo.
Es posible utilizar un codicador de este tipo para conseguir resultados como los de un co-
dicador no recursivo pero utilizando una circuitera ms sencilla.
Este codicador, adems, es sistemtico. Esto signica que la entrada est incluida en la
salida (salida X
2
), generalmente los codicadores recursivos son sistematicos mientras que los
no-recursivos no lo son. Por lo general un cdigo sistemtico tiene una menor distancia libre
que uno no-sistemtico.
Cdigos catastrcos.
Son aquellos cuyo diagrama de estados contiene un ciclo en el que para una secuencia que no
sea de ceros tiene una salida completa de ceros. Esto supone que entradas que dieren en un
nmero innito de bits pueden producir salidas que dieran en un nmero nito pequeo de
ellos. Este tipo de cdigos se debe evitar ya que un nmero pequeo de errores puede producir
un gran nmero de errores despus de codicar.
Solamente 1/(2
n
>) de los cdigos con ratio 1/n son catastrcos, sin embargo es necesario
prestar atencin para evitarlos y un conjunto de condiciones sucientes para evitarlo han sido
probadas [11].
26
Para este cdigo la entrada 000 . . . 000 producira una salida de ceros, y la entrada 111 . . . 111
tiene como salida 1001000 . . . 000. De este modo, con que se produjeran solo dos errores en la
codicacin de una palabra tan larga como quisiramos, la decodicacin sera incorrecta.
Los cdigos sistemticos nombrados en el apartado anterior no son, en ningn caso, cdigos
catastrcos.
Cdigos perforados
Mediante esta tcnica se eliminan algunos de los bits de salida de forma que no se enven el
canal. Con esto se consigue un cdigo con un ratio mayor, aunque la capacidad de correccin
sea menor.
Se puede denir un cdigo perforado por una matriz cuyos elementos son 1 si se debe enviar
el bit correspondiente o 0 en caso contrario.
Un ejemplo es la matriz siguiente, que genera un cdigo con ratio 2/3 a partir de uno con
ratio 1/2.
P =
_
1 0
1 1
_
El nmero de las es el nmero de polinomios generadores. La matriz se aplicar de forma
cclica. De este modo se indica que del primer polinomio se enviar el bit resultado solo una de
cada dos veces.
Posteriormente el decodicador de Viterbi ignorar estos bits.
Mejora ante rachas de errores
Los cdigos convolucionales con k = 1 y memoria pequea, tal como hemos visto, no per-
miten la correccin de largas rachas de errores (rfagas). Para evitar esto se suelen utilizar en
conjunto con otros cdigos.
Una de las opciones mas comunes es hacerlo junto a cdigos de Reed-Solomon. La tcni-
ca habitual consiste en una codicacin con un cdigo RS, posteriormente un entrelazado y
nalmente la codicacin convolucional. El mismo proceso se realizar al contrario en el deco-
dicador.
De este modo se consiguen cdigos con capacidad de corregir un gran nmero de errores gra-
cias al cdigo convolucional, y an cuando esto se encuentren por rachas, gracias a los cdigos
RS y el entrelazado.
Tubo cdigos
Un camino a seguir despus de los cdigos convolucionales es el de los turbo cdigos. Estos
hacen uso de varios cdigos combinados y consiguen alcanzar la capacidad correctora de
cdigos convolucionales con memorias mayores sin que su decodicacin suponga una comple-
jidad equivalente a la de los convolucionales.
Un caso simple es en el que se hacen varias copias de la entrada y mientras que una copia se
enva por un cdigo convolucional, otra se permuta y se enva por uno distinto.
27
8. Aplicaciones
Estos cdigos, teniendo en cuenta las mejoras vistas, son especialmente tiles en aquellos
canales con una probablidad de error muy alta. Usados en conjunto con otros cdigos
seran muy adecuados tambin en los que por sus carcteristas se producen rfagas de errores.
Por esto junto a otro cdigo se usan en la televisin digital DVB (por cable, DVB-C; sat-
lite, DVB-S; o terrestre, DVB-T) y en telefona movil GSM. En concreto, se utiliza un cdigo
convolucional con parmetros L = 5, k = 1, n = 2.
Tambin encontramos estos cdigos los antiguos modems telefnicos o los estndares actuales
ADSL2+, o en transmisiones en el espacio con sondas o en la direccin de misiones no tripuladas.
El uso de cdigos convolucionales ha tenido un gran peso en la exploracin espacial.
Anteriormente a 1969 no se utilizaban cdigos en las transmisiones y antes de utilizar cdigos
convolucionales se utiliz un cdigo llamado cdigo biortogonal de bloques. A partir de 1977 se
comenz a utilizar un cdigo convolucional con decodicacin por el algoritmo de Viterbi.
Un ejemplo del uso de este cdigo fue en las misiones de ambas Voyager donde se utilizaron
cdigos convolucionales de parmetros L = 7, k = 1, n = 2. La Voyager 1 actualmente se
encuentra en el lmite del sistema solar y an hoy se siguen recibiendo datos.
En 1986 se empezaron a utilizar cdigos con mayor memoria, en concreto con L = 15 y su
combinacin con cdigos RS. Se han usado, por ejemplo, en la sonda Cassini para la exploracin
de Saturno o en los rovers enviados a Marte.
Una muestra de la mejora que han supuesto estos cdigos en la exploracin espacial se puede
ver en la siguiente imagen. En el eje horizontal se muestra lo que se llama SNR por bit, utilizada
para medir el rendimiento del cdigo para cada probabilidad de error del canal en el eje vertical.
Ms informacin sobre los cdigos de la exploracin espacial se puede encontrar en [9].
28
Anexo A. Programa de Simulacin Codice.
Junto al trabajo se ha desarrollado esta aplicacin que permite simular cdigos Convolu-
cionales con k = 1. Se ha aadido adems la posibilidad de utilizar cdigos de Hamming o
mensajes sin codicar para compararlos.
No se ha puesto especial atencin al rendimiento o al diseo del software. Sin embargo ha
sido til para mostrar ejemplos, estudiar las probabilidades de distintos cdigos y crear los
diagramas de Trellis de los cdigos convolucionales.
Uso del programa
La ventana que se muestra al abrir la aplicacin se divide en tres partes. En la parte izquierda
es posible elegir el cdigo y las propiedades as como la probabilidad de error de canal. Tras
una simulacin tambin se mostrar en esta zona, en la parte inferior la distancia calculada
para el cdigo, la dimensin y la longitud.
La forma de introducir los polinomios de un cdigo convolucional es poniendo los coecientes
de menor a mayor grado y separar cada uno mediante punto y coma (;) respetando los espacios
de la forma siguiente:
a
0
, a
1
, ..., a
m
; b
0
, b
1
, ..., b
m
...
29
En el centro de la ventana hay cuatro cajas de texto que permiten visualizar el proceso de
la transmisin. En la primera de ellas se podr introducir el mensaje que se desea enviar. Este
puede ser en binario o texto (ASCII), y la opcin se debe elegir en la parte superior.
Tambin es posible generar un mensaje aleatorio de un nmero determinado de bits mediante
la opcin correspondiente.
Una vez escrito el mensaje, al pulsar la tecla Simular, aparecer en el resto de las cajas de
texto, por este orden, el mensaje codicado, el mensaje recibido y por ltimo el mensaje deco-
dicado con el nmero de errores que haya sido posible corregir corregidos. En los dos ltimos
aparecern en verde los bits o smbolos correctos y en rojo los incorrectos.
En los mensajes codicados se muestra una palabra por la para una visualizacin ms sen-
cilla.
Por ltimo, a la derecha aparecer el nmero de errores en el mensaje recibido (er) y el
nmero de mensajes en el cdigo decodicado (ef). Ms abajo se puede ver una estimacin de
la probabilidad de que el mensaje llegue correctamente (Pb, Probabilidad de mensaje bueno).
En el caso de los cdigos convolucionales esta probabilidad ser una cota inferior teniendo en
cuenta que el mensaje tenga una longitud suciente y el canal no tenga rfagas.
Detalles de implementacin
Para realizar el programa se ha utilizado el lenguaje de programacin C++. La interfaz gr-
ca se ha hecho utilizando las libreras Qt por ser multiplataforma. Para las operaciones con
30
matrices se utiliza la librera Armadillo que permite hacer productos de matrices, modicacio-
nes, etc. de forma sencilla y eciente.
En el caso de los cdigos de Hamming es necesario crear las matrices generadora y de control.
En primer lugar se crea la matriz de control y se permutan sus columnas de forma que aparezca
la identidad. A partir de esta se crea la generadora de forma trivial.
La codicacin consistir en el producto de una matriz con las palabras a codicar por la
generadora y la decodicacin se hace mediante sndromes. Para esto ltimo se mantendr una
lista de sndromes con su error asociado con la que se comparara en la decodicacin de cada
palabra.
En el caso de los cdigos convolucionales se utiliza el enfoque similar a la visin mediante
registros hardware vista. Se crear una matriz de elementos binarios con los coecientes de los
polinomios generadores y otra en la que para cada bit se tendr una la formada por ese bit
y los m anteriores. De este modo la codicacin consistira en el producto de esta matriz por
la generadora. Una implementacin ms eciente de esto se podra realizar utilizando lo visto
sobre codicacin en el apartado correspondiente de este trabajo.
La decodicacin y el clculo de la distancia libre se hacen mediante el algoritmo de Viterbi
tal como est explicado en el pseudocdigo mostrado en el trabajo.
31
Bibliografa
[1] J.G. Proakis, M.Salehi, Communication Systems Engineering. Prentice Hall, 2nd Edition, 2001. Section 9.7
[2] David Forney Principles of Digital Communication II course. MIT OpenCourseWare,
2007 - http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/
6-451-principles-of-digital-communication-ii-spring-2005/
[3] Volker Kuhn Introduction into Error Correcting Codes. Institute of Communications Engineering - www.
euitt.upm.es/uploaded/519/Introduction.pdf
[4] Digital Communication Systems Lectures. Digital Communication Systems, Massachusetts Institute of
Technology - http://web.mit.edu/6.02/www/s2010/
[5] Richard D. Wesel Convolutional Codes. University of California - http://www.ee.ucla.edu/~wesel/
documents/Misc/eot309.pdf
[6] J.I. Iglesias Curto, A Study on Convolutional Codes. Classication, New Families and Decoding . Univer-
sidad de Salamanca, 2008 - http://gredos.usal.es/jspui/handle/10366/22484
[7] Prof. David Forney Introduccion a los Codigos Convolucionales. Asignatura de Comunicaciones Elctricas,
Universidad Nacional de Rosario - http://comunicaciones.eie.fceia.unr.edu.ar/cx/conv.pdf
[8] Inmaculada Hernez Rioja Modulaciones Codicadas Trellis. Asignatura de Procesado Digital de la Seal
en Comunicaciones, Universidad del Pais Vasco - http://aholab.ehu.es/~inma/psc/tema5.pdf
[9] Viterbis Impact on the Exploration of the Solar System. California Institute of Technology - www.ee.
caltech.edu/EE/Faculty/rjm/papers/Viterbi70.pdf
[10] Robin Schriebman Error Correcting Code. Harvey Mudd College, 2006 - www.cs.hmc.edu/~mike/public_
html/courses/security/s06/projects/robin.pdf
[11] Patric Ostergard Convolutional Codes. http://www.comlab.hut.fi/studies/3410/slides_08_8_4.pdf
[12] Viterbi Algorithm for Decoding of Convolutional Codes. Core Technologies http://www.1-core.com/
library/comm/viterbi/
[13] Tail-Biting Convolutional Coding. MathWorks Documentation Center http://www.mathworks.es/es/
help/comm/examples/tail-biting-convolutional-coding.html
[14] J.M. Muoz Porras Cdigos convolucionales y geometra algebraica. http://www.fme.upc.edu/Farxius/
butlleti-digital/riemann/080403_conferencia_porrasdominguez_volum.pdf
32

Anda mungkin juga menyukai