You are on page 1of 17

Código Convolucional sistemático

El termino sistemático se refiere a aquellos códigos en los que una de sus ramas generadoras
de los símbolos de código emite justamente los bits de datos originales.

Así con un codificador sistemático tendrá sus etapas conectadas solamente a r -1 sumadores,
y la r-esima se reemplaza por una conexión directa desde la etapa correspondiente al
conmutador.
La siguiente figura muestra un codificador sistemático con R=1/2 y M=3

Código
Datos

2. EL DECODIFICADOR DE MÁXIMA VEROSIMILITUD

Sea Y una secuencia codificada recibida. Esta palabra codificada puede ser una de las “L”
posibles palabras codificadas transmitidas Xi (i=1,…,L). El problema consiste en a partir de Y
seleccionar cual fue la palabra Xi transmitida.

Según el teorema de Bayes, se puede escribir que:

p Y  p( X i )
 Xi 
p i  =
X
; i = 1,..., L (1)
 Y  
∑ p Y  p( X i )
∀L  Xi 

X 
Donde se supone conocidas las probabilidades de error “ p i Y  ”, las probabilidades de
 
ocurrencia dentro de las palabras codificadas transmitidas p(Xi).

Resulta entonces de comparar la ecuación (1) para los diferentes valores de i. Por ejemplo si
sucede que:
X 
p i  > p j  (2)
X
 Y  Y

1
Esto significa que, para la secuencia recibida Y, resulta más probable que se haya transmitido
Xi que Xj y por tanto se decide a favor de Xi. Utilizando (1) se tiene que:
 p( X j )
p Y  p ( X ) = p Y 
  (3)
 Xi   Xj
i

Sí se admite que todas las secuencias: Xi; i=1,2,…,L son equiprobables, entonces:
 
p Y  = p Y  (4)
 X i   X j 

Un receptor que toma decisiones con base en la relación (4) se denomina “receptor de
 
máxima verosimilitud”. La probabilidad condicional p Y X  se denomina “función de
 i 

verosimilitud”.

Consideres un canal binario Simétrico(CBS), es decir, un canal que se puede representar por
el siguiente grafo:

P(0/0)=q
0 0
P(1/0)= P(0/1)=p

1
1
P(1/1)=q

En la secuencia (tanto Y, como X) contienen N dígitos binarios entonces tomando p como


probabilidad de cambio de digito por otro y considerando que la distancia(en el sentido de
Hamming) entre Y y X es “d”, se puede escribir que: pY( X ) = p (1 − p )
d N−d

(Función de verosimilitud)
Tomando el logaritmo de la función de verosimilitud se tiene que:

(
log p Y
X
) = d log p + ( N − d ) log (1 − p ) − d log (1 − p ) = −d log 1 −p p + N log (1 − p ) (5)
Para decir de forma abreviada: Para canales en general se demuestra que si todas las
secuencias de datos de entrada son equiprobables, el decodificador que minimiza la
probabilidad de error esd aquel que compara las probabilidades condicionales, también
llamadas “funciones de verosimilitud” p(Y/Xi) donde Y es la secuencia total recibida y Xi es
una de las posibles secuencias transmitidas y se decide a favor de un máximo.

Este es llamado decodificador de máxima verosimilitud.

2
Las funciones de verosimilitud se dan para cada canal en específico.

Conjunto de
secuencias
transmitidas

X1 P(Y/X1)

X2 Y Secuencia de salida
.
.
.
P(Y/XM)
XM

El problema consiste en maximizar la función (probabilidad a posteriori)


MaxP  X i ∀i (Función de máxima verosimilitud)
 Y
Según el Teorema de Bayes y considerando equiprobables el conjunto de secuencias
 
(posibles) a transmitir entonces será MaxP  Y X ∀i .
 i 

Si p y N son constantes entonces la expresión (5) se puede escribir


log p Y  = −α d + β (6)
 Xi 
donde α y β son las constantes que dependen de N y p.

Resulta claro que maximizando la función log verosimilitud se minimiza la distancia de


Hamming

Código de Trellis1

El código Trellis genera símbolos para la transmisión utilizando una máquina secuencial de
estados finitos utilizando longitudes de palabras arbitrarias. Este proceso de codificación inserta
las propiedades claves de memoria y de redundancia dentro de un flujo de datos, como en el caso
de los códigos de bloque. El proceso de codificación busca cantidades secuenciales para ser
relacionadas. Desde una perspectiva formal, no hay necesidad de bloques de mensajes en
segmentos de una misma longitud.

1
Tomado de Tutor de Código de Trellis en:

3
Una descripción genérica de un codificador Trellis es representada en la Fig. 2.1. Cada cambio de
tiempo, es notado como j, un vector de k entradas de símbolos (usualmente bits) es designada por
, símbolos que pueden haber sido extraídos desde una serie de símbolos
originales escritos en la forma de . El codificador produce un
vector de n símbolos de código, usualmente del mismo alfabeto, con n >
k, introduciendo redundancia. Se define la memoria (también llamada el orden de la memoria m)
del codificador como el número de vectores de entrada, que junto con el vector uj, condiciona la
salida activa de xj. Así como lo muestra la Figura 2.1, el codificador posee m (vectores) celdas de
memoria o retraso.

El símbolo de código producido cada cambio de tiempo puede ser conectado a un modulador en
varias formas. Las aplicaciones más sencillas involucran codificación binaria, en la cual n
símbolos binarios son serializados y cargados en un modulador binario, como el caso del PSK. Se
puede alternativamente igualar la salida de los símbolos con un carácter dentro de un campo más
grande y producir un simple M-aria de un conjunto más grande para cada intervalo de reloj. El
método preferido depende del tipo de aplicación en la que se trabaje.

Se puede observar una cierta similaridad con la codificación de bloque. Específicamente, si se


tiene m = 0 entonces el codificador trellis produce n símbolos de código estrictamente definidos
por k entrada de símbolos que están descritos para un codificador genérico. Se puede ver a la
codificación trellis como una generalización de los códigos de bloque, donde la función de
codificación es permitida en bloques de entrada anteriores al bloque actual. Sin embargo, en la
codificación de bloque práctica n y k, normalmente son más grandes, considerando que en la
codificación Trellis n y k son típicamente pequeños, en un rango de 1 a 8. El poder de los códigos
trellis no deriva de hacer n y k grandes, pero si de adoptar una gran memoria de orden m. Una
vez la entrada de secuencia del codificador Trellis es terminada, como con datos en paquetes,
entonces el mapeo completo de los datos de entrada a la salida puede ser visto como un gran
código de bloque.

4
La primera apariencia de tales códigos fue dada por Elias, quien formuló el código como una
alternativa a los entonces códigos de bloque estructurados existentes. Elias llamó a esta clase de
códigos como: códigos convolucionales. Desde entonces estos códigos lineales fueron mapeados
linealmente con datos de entrada codificados. Por medio de la interacción de los datos, en un
tiempo discreto, se puede obtener un alfabeto finito convolucional. Otro nombres, para el código
Trellis fueron códigos recurrentes y códigos de árbol, debido a su representación gráfica
estructurada en forma de árbol. En el presente el nombre general de código Trellis es usado para
incorporar en estos códigos clásicos un nuevo acercamiento no lineal de modulación /
codificación que aún mantiene un fundamento en máquinas de estados finitos.

El termino Trellis es debido a Forney, quien vio la asociación de palabras de código con caminos
en una dirección regular sobre una gráfica haciendo una reminiscencia al un jardín de trellis.

El código convolucional fue introducido por P. Elias (1955) y consiste en una correspondencia de
cualquier palabra de código de longitud n con cualquiera de sus vecinas. Depende no solo de la
información del mensaje correspondiente de longitud k (como en la teoría de los códigos lineales)
sino también de la información de otros mensajes previamente codificado por lo cual es
realmente importante porque se concatena la información, es decir, el proceso de codificación
posee memoria. En 1970 Shu Lin le dio la codificación convolucional un tratamiento analítico
que impulso al desarrollo formal y al uso de este código.

El tratamiento que se le dará al código trellis comenzará con lo más simples y sencillo de los
códigos convolucionales. Conceptos que serán introducidos a través de la codificación binaria,
extendiéndolo hasta la extensión de los códigos convolucionales no binarios. El tipo de
demodulación-decodificación usado para este tipo de código es conocido como Viterbi, (debido a
su inventor Viterbi A. J), que es capas de implementar un dispositivo con la máxima probabilidad
de decodificación para un canal general sin memoria.

En el ámbito actual de las técnicas de codificación, las aplicaciones de los códigos


convolucionales (de hecho las binarias) han sido sin duda de gran importancia dentro de los
sistemas de comunicaciones digitales. Su fuerza radica en la existencia de muchas posibilidades
de decodificación que proveen un rango de complejidad contra otras opciones de desempeño, y lo
más importante, es un algoritmo que provee una secuencia de decodificación de máxima
probabilidad en dispositivos sencillos para códigos de memoria corta. Otro aspecto que ha
llevado a los códigos convolucionales a ser muy populares es la sincronización provista por un
simple codificador, lo que en la práctica resulta ser de suma importancia.

Ejemplo 1. Código Convolucional R = ½ , m = 2.

5
Se toma como referencia la Fig. 2.2 (a) donde se puede hallar un simple registro teniendo dos
celdas de retraso, así que el orden de la memoria es m = 2 y la constante de longitud es nE = n (m
+1) = 6. Donde n denota el número de salidas. Este sistema de codificación no sistemático
produce dos símbolos de salida de acuerdo con:

Así que a la entrada de un 1, con un estado inicial de ceros. Se tendrá y .


En estos dos tiempos el vector convolucional llega a ser:

con G0 = [1 1], G1 = [1 0], G2 = [1 1]. En las tablas del codificador la información sobre el
vector generador es comúnmente expresada en representación octal. Por ejemplo, el vector
sería representado como 78 y . La notación polinomial también es
importante, el primer generador puede ser representado de esta forma por .

Si una entrada de mensajes es (110000....) y el codificador inicia su trabajo con todos sus
registros en cero, entonces usando la ecuación que representa el vector convolucional se tendrá la
siguiente secuencia:

x0 = (1,1), x1 = (0,1), x2 = (0,1), x3 = (1,1),...., xj = (0,0), con .

Estos bits pueden ser serializados en un flujo de salida (11010111000...) conservando el ancho de
banda de una transmisión de dos bits producidos cada unidad de tiempo que podrían ser
mapeados en unas señal QPSK.

Ejemplo 2. Codificador convolucional R=2/3 m = 1.

6
El codificador de la Fig 2.2(d) se presenta como k = 2 por cada cambio de tiempo
en dos registros, cada uno con una celda de retraso. Consecuentemente se puede
decir que el orden de la memoria es m = 1 y que la constante de longitud es nE = 3 x
2 = 6. La siguiente ecuación ayuda a analizar la Fig. 2.2(d) en la que se demuestra
que kn = 6 que corresponde a las influencias de bits de entrada en las salidas.

, ,
, ,

Expresado en forma octal se tiene: 3,1,3 y 1,2,2 respectivamente.


Se puede también representar la acción del codificador en forma de vector
convolucional:

Donde

Hay que anotar que la i-ésima fila de la matiz Gi es simplemente la conexión del
estado i-ésimo de un i-ésimo registro. Así que la primera fila de G0 = (1,0,1),
implica que la entrada de un bit 1 al registro de arriba. Una ayuda para construir la
matriz Gi se muestra en la Fig. 2.4 donde se hace un manejo del los vectores

7
dentro de un arreglo de k por (m +1)n. Entonces se reconoce que la matriz Gi es
obtenida de la extracción de las columnas del arreglo espaciado por m +1 unidades.

Ejemplo 3. Codificador Convolucional R = ¾, m = 2.

En la Fig. 2.2 (e) se encuentra dibujado un codificador R = ¾, el cual es casi sistemático. Dando
12 respuestas a impulsos, cada una de una longitud m +1= 3, ubicando estas filas y columnas para
determinar la matriz Gi. Si se toma la secuencia (1,0,0) y se distribuye cada bit como propone el
codificador se tiene:

Una representación alternativa de la relación entrada salida para un codificador convolucional es


provista por la representación polinomial. Específicamente, se puede escribir la secuencia de
entrada como un polinomio.

8
Donde es la representación polinomial para la secuencia de la línea de entrada i-
ésima. De igual manera se puede denotar la secuencia del vector de salida en forma polinomial de
x (D), mediante la definición de la matriz de transferencia G(D) como:

Entonces se puede expresar la relación entrada salida:


x(D) = u(D) G(D)
Así la respuesta del codificador de la Fig. 2.2(a) a una secuencia de entrada de 11000... puede ser
representada por:

La cual corresponde a secuencias de salida de los sumadores 100100... y 111100.., cuando se


multiplexan juntos.

OTRA VEZ ÁRBOL DE CÓDIGO

Los métodos gráficos son una ayuda para simplificar los cálculos operacionales, en lo referente al
dominio del tiempo y de la frecuencia. El procedimiento del árbol es el siguiente: cada rama de
árbol representa la entrada de un símbolo; un cero en la entrada del árbol implica seguir hacia la
rama superior, codificándose con 00 y un 1 implica seguir hacia la rama inferior, codificándose
11, una vez se sigue avanzando de izquierda a derecha del árbol se continúan codificando los
datos de entrada según los valores que obtiene cada rama.

El árbol de código se vuelve repetitivo después de la tercera rama. Esta repetición del árbol
implica que la salida del cuarto digito es la misma, ya sea que el bit de entrada sea un 1 o un 0, lo
cual es debido a que el bit que apenas entra ya no es afectado por el bit que acaba de salir de los
registros, significando que generan la misma salida después del
tercer grupo de dígitos.

Por ejemplo: una secuencia de datos de entrada para el circuito de la Fig. 2.2 (a) 10011 y dos bits
en cero, estado inicial: registros 00, siguiendo la trayectoria por el árbol de código tendremos la
secuencia de codificación como:

9
{Xi}= {11,10,11,11,01}

Los nodos marcados como a, b, c y d, pueden verse como estados del codificador, por esta razón
se utiliza también otro método para codificar la secuencia de entrada denominado diagrama de
estados.

DIAGRAMA DE ESTADOS

El diagrama de estados se basa en el número de elementos de la memoria del circuito. Los bits
utilizados para la codificación del mensaje se representan como cambios de estado en un tiempo
j. Estos estados pueden escribirse de la siguiente manera: para el ejemplo
anterior se asumen los estados iniciales del codificador según la siguiente tabla.

ESTADO REPRESENTACIÓN BINARIA


a 00
b 01
c 10
d 11

Una vez establecido esto se puede dar una representación gráfica dándole a cada nodo un estado.
Tomemos en consideración la posibilidad de ir de un estado (a) a un estado d, o sea de 00 a 11
puede irse por dos caminos, el primero es que entre un 1 y tendríamos 01, que es un estado c, y
después que entre otro 1 para llegar al estado d, 11.

10
Ejemplo 1): para la entrada 011001, la secuencia es a a b d c a b que provoca siguiendo el
diagrama, la siguiente serie.

{Xi}={00,11,01,01,11,11}

Ejemplo 2): para el circuito convolucional trabajado anteriormente con la entrada en 01001100
da como resultado la secuencia a b c b d c a, que provoca la codificación:

{Xi} ={11,10,11,11,01}

lo que es exactamente igual a la formulada por árbol de código. El diagrama de estados también
es conocido como máquina de estados finitos, FSM, (Finite-state machine).

ÁRBOL DE CODIFICACIÓN DE TRELLIS

El árbol de Trellis es otra forma de representación del árbol de código. El árbol de Trellis se basa
en los estados del codificador y en sus posibles caminos. De cada nodo parten ramas hacia los
nodos siguientes; por ejemplo del nodo "a" puede ir al nodo "b", o al mismo "a" pero no puede
directamente al "c".

Si al codificador de Trellis entra un 1 se pinta la trayectoria hacia el otro estado con línea
puntada, de lo contrario se pinta con línea continúa. El estado inicial es el estado "a" = 00 y las
trayectorias se pintan de izquierda a derecha. El número de niveles del codificador es L + k

Una vez se tiene el árbol de Trellis dibujado, el código aparece siguiendo las trayectorias que
indica la secuencia de datos de entrada. Cada trayectoria se marca con el valor de la salida del
circuito codificado dependiendo del estado en que se encuentre.

En la siguiente gráfica se representa un árbol de trellis.

11
Ejemplo: si tenemos una secuencia de datos para codificador 01110 y 00 para borrar los datos,
en el circuito convolucional anteriormente estudiado. Entramos por la línea superior, estado
inicial a.

Y siguiendo el algoritmo tenemos,

{Xi}={00,11,01,10,01,11,00}.

3. EL ALGORITMO DE VITERBI. DECODIFICACION DE LOS CODIGOS


CONVOLUCIONALES

Un método de fuerza bruta de decodificar una secuencia utilizando el principio de máxima


verosimilitud es calcular la distancia entre la secuencia recibida y todas las posibles
secuencias transmitidas, seleccionado entonces la de mínima distancia. Es decir, si se reciben
palabras codificadas de N bits de longitud, entonces habrá que hacer 2 N cálculos de distancia.
Esto implica que a medida que N aumenta se hace impractica la carga computacional de tal
método.
El algoritmo de Viterbi esencialmente lleva a cabo el proceso de decodificación según el
principio de máxima verosimilitud; sin embargo reduce la carga de código, pero tomando
ventaja del árbol de código.

Principio general:

12
Se basa en el principio de calñcular la distancia entre la señal recibida en el tiempo ti y todas
las trayectorias o caminos del esquema del enrejado de Trellis en cada tiempo ti, desechando
aquellos caminos que no son candidatos posibles para escoger los de máxima probabilidad.
Cuando 2 caminos entran al mismo estado, se escoge el que tenga mayor métrica, el cual se llama
camino superviviente.
La selección de caminos supervivientes se efectua por todos los estados.
El decodificador continua de esta forma avanzando en profundidad en el enrejado ejecutando
decisiones que eliminan los caminos menos probables.

TALLER CODIGOS CONVOLUCIONALES

1. ¿En que se difieren los códigos sistemáticos de los no sistemáticos?


2. Explique con un ejemplo en que consiste el algoritmo de máxima verosimilitud
3. Realice dos ejemplos en los que se determine el uso de un árbol de código, un diagrama
de estados y el árbol de codificación de Trellis
4. ¿Cuál es el camino en el árbol de código para la serie 01010?

5. ¿Cuál es el camino en el árbol de código para la serie 11011?

13
6. Para el camino ¿cuál es la serie codificada?

7. Para el camino ¿Cuáles son los bits de entrada?

14
8. ¿Utilizando el diagrama de estados del codificador convolucional (3,2,2) la salida
codificada de la serie de entrada 10110100 cual es?: (tenga en cuenta condiciones
iniciales)

15
9. Utilizando el diagrama de estados del codificador convolucional (3,2,2) si la salida es:
{111,000,110,111} partiendo de condiciones iniciales la secuencia de estados cuál es:

10. ¿Cuál es el camino en el árbol trellis para la serie de entrada 1101000100?

11. Para el árbol de trellis diga: ¿Cuál es el camino en el árbol trellis para la serie de entrada
1010010000?

16
12. Para el árbol de trellis diga: Para el camino en el árbol trellis ¿cuál es la serie
codificada?

13. Averigüe más sobre el algoritmo de Viterbi y Ejemplifique


14.

17

You might also like