Está en la página 1de 7

DEPARTAMENTO DE CIENCIA Y TECNOLOGÍA

UNIVERSIDAD NACIONAL DE QUILMES


Roque Sáenz Peña 352 – (B1876BXD) Bernal – Buenos Aires – Argentina

TEORÍA DE LAS TELECOMUNICACIONES - IACI

13 CÓDIGOS CONVOLUCIONALES

Como último tema referido a los códigos detectores y correctores de errores


estudiaremos los códigos convolucionales. Hasta ahora hemos estudiado códigos de bloque.
Éstos reciben este nombre en virtud de que están constituidos por bloques bien definidos de
longitud fija (dado un cierto código). Es decir que, contamos con una “dispositivo” que recibe k
bits a su entrada y entrega n bits a su salida, existiendo una relación biunívoca entre la
secuencia de k bits de mensaje y la secuencia final de n bits. Además, en el caso de los
códigos sistemáticos, también quedan bien definidos dentro del bloque, cuáles son los bits de
mensaje y cuáles los de bits de paridad.

Los códigos convolucionales se describen normalmente mediante tres números enteros,


n, k, y K, en donde k/n sigue siendo la tasa de código al igual que en los códigos de bloque.
Sin embargo, a diferencia de estos últimos, n no define la longitud de bloque de un
código convolucional. De hecho, la característica distintiva de los códigos
convolucionales es que no tienen un formato de bloque y por lo tanto no tienen una
longitud de bloque. El entero K indica el número de registros de desplazamiento que forman
el codificador. Como veremos más adelante, la característica del código convolucional es que la
salida del codificador no sólo depende de los k bits de entrada sino de los K – 1 bits
precedentes.

Un codificador convolucional se puede construir con K registros de desplazamiento y n


sumadores en módulo 2, como se muestra en la Figura 1. Por cada unidad de tiempo que pasa
entran al registro k bits y simultáneamente se producen k desplazamientos hacia la derecha de
los bits que ya están dentro de los registros. Las salidas de los sumadores son muestreadas
secuencialmente produciendo el código de salida. Ya que por cada k bits que entran en el
registro salen n bits, resulta que la tasa de código es k/n, con k < n.

Figura 1. Codificador convolucional.

13 Códigos convolucionales 1
A fin de simplificar el desarrollo del tema utilizaremos k = 1, que por otra parte
pertenece al codificador convolucional más común.

Representación del codificador convolucional

La descripción de un código convolucional puede hacerse de varias maneras: conexión


de vectores o polinomios, diagrama de estado, diagrama de árbol y diagrama trellis son los
esquemas utilizados.

Figura 2. Codificador convolucional (tasa ½, K = 3).

Para discutir este tema utilizaremos el esquema de la Figura 2 como modelo. La figura
muestra un codificador (2, 1) con K = 3. Hay n = 2 sumadores en módulo 2, y como k = 1 la
tasa de código es k/n = ½. Cada vez que ingresa un bit se produce un desplazamiento de una
posición, de izquierda a derecha. Seguidamente, la llave de la salida muestrea la salida de
cada sumador (por ejemplo, primero el de arriba, luego el de abajo) formando el código de
salida. Por cada bit que ingresa este código está formado por u 1 y u2, como se muestra en la
Figura 2. Este proceso entonces se repite por cada bit de entrada. La elección de las
conexiones de los sumadores le da una característica definida a cada codificador. Desde luego,
esta elección no se hace en forma arbitraria sino que se hace de manera conveniente para
obtener buenas propiedades de distancia entre los códigos generados, cosa que no es para
nada sencilla y que normalmente requiere soluciones asistidas por computadoras.

Una manera de representar el codificador es especificando un conjunto de n vectores


binarios de conexión, o sea, un vector de conexión por cada sumador. Cada vector tiene
dimensión K y describe las conexiones de los registros con los sumadores. Un 1 en la i-ésima
posición del vector indica que el i-ésimo registro está conectado al sumador. Un 0 en tal
posición indica que ese registro no está conectado a ese sumador. Por ejemplo, los vectores
que describen al codificador de la Figura 2, son

g1  111
g2  101

donde g1 describe a la rama superior y g2 describe a la rama inferior.

Supongamos que el mensaje m = 101 ingresa al codificador. Los tres bits que
conforman este mensaje (en realidad, y esto no hay que perderlo de vista, es un fragmento de
una secuencia de bits de longitud indefinida) ingresan de a uno a la vez, en los tiempos t1, t2 y
t3, como se muestra en la Figura 3. Al final de la secuencia, en los tiempos t4 y t5, ingresan dos
ceros para permitir que el último 1 del mensaje m pueda llegar hasta el registro K. La
secuencia de salida obtenida es 1110001011, donde los bits de más a la izquierda se
corresponden a los bits de mensaje que ingresaron primero.

2 13 Códigos convolucionales
Figura 3. Secuencia de codificación para el codificador
convolucional de la Figura 2.

También es posible ver el codificador en términos de su respuesta impulsiva, es decir la


respuesta a una entrada que es un solo bit “1” que se mueve a través de los registros,
completado con los ceros necesarios. Teniendo en cuenta esto y considerando otra vez el
codificador de la Figura 2, los registros y la salida varían de la siguiente manera:

13 Códigos convolucionales 3
Registros u1 u2
100 1 1
010 1 0
001 1 1

Secuencia de entrada: 1 0 0
Secuencia de salida: 11 10 11

La secuencia de salida correspondiente a esta entrada “1” se llama respuesta impulsiva


del codificador. Luego, para conocer la salida correspondiente al mensaje de entrada m = 101,
se debe hacer la suma superpuesta del producto entrada por respuesta impulsiva, de la
siguiente manera:

Entrada m Salida
1 11 10 11
0 00 00 00
1 11 10 11
Suma 11 10 00 10 11

Nótese que la salida obtenida es igual a la de la Figura 3. El resultado de la tabla


anterior da cuenta de por qué estos códigos se llaman convolucionales (la operación hecha en
dicha tabla es una convolución) y pone de manifiesto que se trata de un código lineal.

También hay que observar en la Figura 3 que a una entrada de tres bits le correspondió
una salida de 10 bits, es decir que k/n = 3/10, bastante menos que ½, que es lo que debería
ser. La razón de esta diferencia está en el agregado de dos bits al final para permitir que el
mensaje de entrada recorra por completo a los tres registros de este codificador. Si el mensaje
es mucho más largo (como en realidad deben ser tratados los codificadores convolucionales)
entonces la relación entre bits de entrada y bits de salida sí tiende al valor ½.

Otra manera de representar al codificador es mediante polinomios, similarmente al caso


de códigos cíclicos. En este caso la representación se hace mediante n generadores
polinomiales, uno para cada sumador. Cada polinomio es de grado K – 1 o menor y describe la
conexión de los registros de desplazamiento con los sumadores, de manera parecida a los
vectores de conexión. El coeficiente de cada término del polinomio es 1 o 0, según haya o no
haya conexión con el sumador, respectivamente. Una vez más para el codificador de la
Figura 2, la representación es:

g1  1  X  X 2
g2  1  X 2

El término de menor grado corresponde al registro por donde entra el mensaje. La


secuencia de salida se obtiene haciendo:

U(X )  m(X )g1(X ) intercalado con m(X )g2 (X )

Siguiendo con el ejemplo de la Figura 2 la operación sería:

4 13 Códigos convolucionales
m( X )g1 ( X )  (1  X 2 )(1  X  X 2 )  1  X  X 3  X 4
m( X )g2 ( X )  (1  X 2 )(1  X 2 )  1  X 4
m( X )g1 ( X )  1  X  0 X 2  X 3  X 4
m( X )g2 ( X )  1  0 X  0 X 2  0 X 3  X 4
U( X )  (1,1)  (1,0)X  (0,0)X 2  (1,0)X 3  (1,1)X 4
U  11 10 00 10 11

Representación con diagrama de estados

El estado de un codificador convolucional de tasa 1/n está representado por el


contenido de los K – 1 registros de más a la derecha. El conocimiento de este estado más el
conocimiento del bit de entrada son suficientes para determinar la salida y el estado siguiente.
Para el ejemplo que nos ocupa existen cuatro estados posibles, ya que K – 1 = 2. En el
diagrama de estados, por convención, los estados de transición se indican con una línea
continua cuando la entrada es un 0 y con una línea punteada cuando la entrada es un 1. Por
cada estado de transición se indica además la salida correspondiente. En nuestro caso, el
diagrama de estados queda como lo muestra la Figura 4.

Figura 4. Diagrama de estados para el codificador de la Figura 2.

Puede verse en la Figura 4 que existen solamente dos estados de transición posibles
para cada estado, correspondientes a los dos valores posibles de los bits de entrada. También
puede verse que hay transiciones que no son posibles, como por ejemplo del estado 00 al 11.

Aunque el diagrama de estado describe completamente al codificador, no hace una


representación en función del tiempo. Es decir, con la observación del diagrama de estados no
es posible determinar cuál es la secuencia de salida del codificador. Para darle una dimensión
temporal, se recurre al diagrama de árbol, cuyo ejemplo para el codificador de la Figura 2 se
ve en la Figura 5. Por cada bit de entrada se manifiesta un movimiento hacia la derecha en el
diagrama de árbol. Cada rama del árbol indica la salida del codificador. Este diagrama es
construido a partir del diagrama de estados. Una vez construido el diagrama de árbol se puede
armar el recorrido para determinar la secuencia de salida correspondiente a una determinada
entrada.

Estando en un estado determinado (a, b, c o d para este ejemplo), la regla es moverse


hacia abajo cuando el bit de entrada es un 1 o moverse hacia arriba cuando el bit de entrada

13 Códigos convolucionales 5
es un 0, siempre avanzando hacia la derecha. Si suponemos que el estado inicial es cero, para
este ejemplo, entonces partimos del estado a de más a la izquierda. Si suponemos que el
mensaje de entrada es m = 11011 y nos movemos dentro del árbol según la regla descripta,
obtenemos el camino resaltado en negro en la Figura 5, que nos da la secuencia de salida
U = 1101010001.

Figura 5. Diagrama de árbol para el codificador de la Figura 2.

La gran dificultad que presenta el diagrama de árbol es el crecimiento exponencial del


número de ramas. Si la secuencia de entrada tiene L bits el número de ramas es de 2L.

Diagrama trellis1

Observando el diagrama de árbol de la Figura 4 puede verse que para este ejemplo, a
partir del tiempo t4 las sucesivas divisiones de las ramas comienzan a ser iguales. Es decir que
1
En Inglés significa enrejado.

6 13 Códigos convolucionales
la estructura se repite (en general comienza a repetirse luego de K ramas o avances hacia la
derecha). En la figura se han etiquetado los cuatro estados posibles como a = 00, b = 10,
c = 01 y d = 11. La primera rama del árbol, en t1, produce dos nodos, a y b. Por cada rama
nueva el número de nodos se duplica. Después del tercer desplazamiento hay un total de 8
nodos: dos a, dos b, dos c y dos d. Se puede observar que, a partir de aquí, cada rama que
nace de nodos con iguales etiquetas (iguales estados) generan la misma secuencia de salida.
Es decir que, a partir de este punto (t4 en este caso) la mitad superior del árbol es igual a la
mitad inferior, por lo tanto es indistinto estar en el mismo estado en la parte superior o en la
parte inferior. Esta situación sugiere la idea de dibujar sólo una mitad del árbol, a partir de t4.
El resultado es la obtención de un nuevo tipo de diagrama llamado trellis. El diagrama trellis
para el codificador de la Figura 2 se muestra en la Figura 6.

Figura 6. Diagrama trellis para el codificador de la Figura 2.

Para dibujar el trellis usamos la misma convención que para el diagrama de estados.
Una línea continua implica la entrada de un “0” y una línea punteada significa la entrada de un
“1”. Los nodos del trellis corresponden a los estados del codificador: la primera fila
corresponde al estado a = 00, la segunda al estado b = 10, etc. Los números encima de las
ramas del trellis indican la salida producida durante ese estado de transición.

13 Códigos convolucionales 7

También podría gustarte