Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Bryan Allauca
LOS TURBO CÓDIGOS
Los Turbo Códigos son un método de corrección de errores basado en los códigos
convolucionales más intercalación y realimentación. Consiste en una estructura de codificación
concatenada más un algoritmo iterativo; estos fueron introducidos en 1993 por Berrou y Glavieux
en la conferencia internacional de la IEEE en Ginebra, Suiza. El esquema propuesto en dicho
trabajo alcanzaba un BER de 10-5 usando una tasa de codificación de 1/2 sobre un canal AWGN,
modulación BPSK con una relación Eb/No de 0.7 dB, lo cual está cercano al límite de Shannon
que es 0.1dB [6]. Las tres áreas clave en que los Turbo Códigos proveen un mejoramiento en el
desempeño son:
Capacidad: los Turbo Códigos logran un desempeño cercano a los límites teóricos de la
capacidad);
Eficiencia en el Costo del Sistema: un usuario es capaz de enviar la misma cantidad de
información empleando únicamente la mitad del ancho de banda y;
Número de Usuarios: un proveedor de servicio satelital es capaz de duplicar el número
de usuarios sin incrementar la capacidad del satélite.
En 1989 Hagenauer y Hoeher propusieron una modificación al algoritmo de Viterbi que produce
las probabilidades a-posteriori de las transiciones de estado, o equivalentemente la confiabilidad
de los estimados de bit. Este algoritmo se conoce como SOVA (Soft Output Viterbi Algorithm)
y tiene dos modificaciones con respecto al algoritmo de Viterbi clásico que lo hacen adecuado
para ser utilizado en Turbo Decodificación: la primera consiste en que las métricas de trayectoria
usadas son modificadas para tomar en cuenta información a- priori cuando se selecciona la
trayectoria de máxima probabilidad a través del trellis, y la segunda radica en que el algoritmo
provee una salida suave en forma del LLR a-posteriori 𝐿(𝑢𝑘│𝑦) para cada bit decodificado.
EL CODIFICADOR
El codificador Turbo consiste en la concatenación de dos códigos continuos recursivos y
sistemáticos, denominados codificadores constituyentes, que operan uno sobre la información a
codificar (la parte sistemática) y el otro sobre una versión permutada (entrelazada) de la misma,
tal y como muestra la Figura 5.
Codiflcadores Constituyentes
A los codificadores continuos que se concatenan en paralelo se les denomina constituyentes,
caracterizados por dos polinomios: uno defeedback ( 𝑔1 (𝐷)) y otro de feedforward ( 𝑔2 (𝐷)).
𝑔2 (𝐷)
Estos codificadores son recursivos y sistemáticos, siendo su matriz generadora 𝐺𝑅𝑆 = [1 𝑔1 (𝐷)
],
de la cual se extrae únicamente la rama de paridad. Su implementación con registros de
desplazamiento se muestra en la Figura 6.
Figura 6 Estructura de un codificador continuo, recursivo y
Cualquier diseño de un codificador de canal intenta maximizar la distancia mínima entre dos
palabras código. Para un código lineal, esta distancia se corresponde con el peso mínimo de entre
todas las palabras código distintas de la todo ceros. Como todos los bloques que conforman el
codificador Turbo son lineales, este en su conjunto también lo es. Por lo tanto, para maximizar su
distancia interesa que las paridades sean de mucho peso. Es por ello que los constituyentes se
implementan recursivamente ya que únicamente aquellas secuencias de entrada múltiples de
𝑔1 (𝐷) darán una paridad finita (poco peso). En caso contrario, el enrejado nunca converge al
estado de reposo y al truncar la paridad a un número de bits igual al tamaño de bloque de la
entrada (𝑁) es de esperar que hayan tantos unos como ceros en media (mucho peso). Interesa que
haya pocas secuencias divisibles entre y por ello este polinomiJ se escoge primitivo. La notación
usada en la literatura para describir estos códigos consiste en la representación octal de los dos
polinomios. En la figura 7 se adjunta un ejemplo.
Entrelazador (Interleaver)
Un entrelazador π es una bloque lineal que mapea una secuencia de N bits de entrada 𝑢 =
(𝑢1 , 𝑢2 , . . , 𝑢𝑁 ) en otra secuencia de salida que corresponde a una permutación de la entrada, de
manera que para describir el entrelazador empleamos un vector conteniendo las transposiciones
′
denotadas por 𝜋 = (𝜋1 , 𝜋2 , . . , 𝜋𝑁 ) de manera que la salida 𝜋(𝑢) se obtiene como 𝑢𝜋(𝑖) =
𝑢𝑖 𝑝𝑎𝑟𝑎 𝑖 = 1, … 𝑁. La función del entrelazador es desordenar suficientemente la secuencia de
bits de entrada para que si ésta era divisible por 𝑔1 (𝐷) a la entrada del primer constituyente, no
lo sea a la entrada del segundo. Así reduciremos la probabilidad de que ambas ramas de paridad
tengan un peso pequeño, aumentando la distancia mínima del código y mejorando con ello sus
prestaciones. Los más utilizados son los llamados Srandom, aunque debido al excesivo tiempo de
cálculo que se requiere para encontrarlos cuando el tamaño de bloque es grande también se usan
los entrelazadores rectangulares (block interleavers). Estos últimos se implementan escribiendo
fila a fila los bits en una matriz y leyéndolos columna a columna.
Puncturing
La tasa que ofrece un código turbo sin puncturing es 𝑟 = 1𝐼3 (por cada N bits de infdrmación
obtenemos 3N bits de palabra código a la salida). Este overhead, aunque necesario en algunas
aplicaciones que exijan mu~ha robustez, puede ser excesivo en escenarios con restricciones de
retardo donde es más apropiada una tasa mayor. Es por ello que puede incluirse un bloque de
puncturing que elimine ciertos bits de redundancia. Esta eliminación aunque puede hacerse, por
ejemplo, quedándose con los bits pares del primer constituyente y los impares del segundo existen
otros métodos más sofisticados para eliminar periódicamente ciertos bits.
DECODIFICACIÓN
La decodificación de los códigos turbo puede que se trate en profundidad en próximos trabajos
así que en el 'presente sólo se pretenden introducir aquellos aspectos más básicos. Se considerará
que se usa una modulación BPSK sobre canal AWGN. Todo algoritmo de decodificación turbo
consiste en obtener iterativamente la siguiente métrica para cada bit de información:
𝑃(𝑏𝑘 = 1) 𝑃(𝑏𝑘 = 1/𝑦)
𝐿𝐿𝑅(𝑏𝑘 ) = log ( ) = log ( )
𝑃(𝑏𝑘 = 0) 𝑃(𝑏𝑘 = 0/𝑦)
Esta métrica se denomina Log-Likelihood Ratio y es novedosa en el sentido que no está basada
en el criterio ML ('Maximum Likelihood') como el algoritmo de Viterbi, que es el que
tradicionalmente se ha usado para la decodificación de los códigos continuos. Este cambio fue
necesario debido a la complejidad de la aplicación de este criterio a los códigos Turbo (se
describirían con un enrejado de tamaño prohibitivo), que emplean el algoritmo BCJR y sus
modificaciones de menor complejidad, Log-MAP y max-Log-MAP, para aplicar el MAP
('MaximumA Posteriori').
La decisión a partir del LLR se basa en su signo. Cuando es positivo se decide 1 y O en caso
contrario. Este modo de proceder constituye lo que se denomina una decodificación softporque el
valor absoluto del LLR es una medida de la confianza en la decisión. Además, cuantas más
iteraciones realicemos para calcular esta métrica con más precisión obtendremos su valor real.
REFERENCIAS