stringtranslate.com

Descodificador Viterbi

Un decodificador Viterbi utiliza el algoritmo Viterbi para decodificar un flujo de bits que ha sido codificado utilizando un código convolucional o un código trellis .

Existen otros algoritmos para decodificar un flujo codificado de forma convolucional (por ejemplo, el algoritmo Fano ). El algoritmo de Viterbi es el que consume más recursos, pero realiza la decodificación de máxima verosimilitud . Se utiliza con mayor frecuencia para decodificar códigos convolucionales con longitudes de restricción k≤3, pero en la práctica se utilizan valores de hasta k=15.

La decodificación de Viterbi fue desarrollada por Andrew J. Viterbi y publicada en el artículo Viterbi, A. (abril de 1967). "Error Bounds for Convolutional Codes and an Asymptotically Optimum Decoding Algorithm". IEEE Transactions on Information Theory . 13 (2): 260–269. doi :10.1109/tit.1967.1054010.

Existen implementaciones tanto de hardware (en módems) como de software de un decodificador Viterbi.

La decodificación de Viterbi se utiliza en el algoritmo de decodificación de Viterbi iterativo .

Implementación de hardware

Una forma común de implementar un decodificador Viterbi de hardware

Un decodificador Viterbi de hardware para código básico (no perforado) generalmente consta de los siguientes bloques principales:

Unidad métrica de rama (BMU)

Una implementación de muestra de una unidad métrica de rama

La función de una unidad métrica de rama es calcular métricas de rama , que son distancias normalizadas entre cada símbolo posible en el alfabeto del código y el símbolo recibido.

Existen decodificadores de Viterbi de decisión dura y de decisión blanda. Un decodificador de Viterbi de decisión dura recibe un flujo de bits simple en su entrada y se utiliza una distancia de Hamming como métrica. Un decodificador de Viterbi de decisión blanda recibe un flujo de bits que contiene información sobre la fiabilidad de cada símbolo recibido. Por ejemplo, en una codificación de 3 bits, esta información de fiabilidad se puede codificar de la siguiente manera:

Por supuesto, no es la única forma de codificar datos de confiabilidad.

La distancia euclidiana al cuadrado se utiliza como métrica para decodificadores de decisiones suaves.

Unidad métrica de trayectoria (PMU)

Una implementación de muestra de una unidad métrica de ruta para un decodificador K=4 específico

Una unidad de métrica de ruta resume las métricas de las ramas para obtener métricas para las rutas, donde K es la longitud de restricción del código, una de las cuales puede eventualmente elegirse como óptima . Cada reloj toma decisiones, descartando rutas deliberadamente no óptimas. Los resultados de estas decisiones se escriben en la memoria de una unidad de seguimiento.

Los elementos centrales de una PMU son las unidades ACS (Add-Compare-Select) . La forma en que se conectan entre sí está definida por un diagrama de enrejado de un código específico .

Dado que las métricas de las ramas son siempre , debe haber un circuito adicional (no se muestra en la imagen) que evite que los contadores de métricas se desborden. Un método alternativo que elimina la necesidad de monitorear el crecimiento de las métricas de ruta es permitir que las métricas de ruta se "reinicien"; para usar este método es necesario asegurarse de que los acumuladores de métricas de ruta contengan suficientes bits para evitar que los valores "mejores" y "peores" estén dentro de 2 (n-1) entre sí. El circuito de comparación permanece esencialmente sin cambios.

Una implementación de muestra de una unidad ACS

Es posible monitorear el nivel de ruido en el flujo de bits entrante monitoreando la tasa de crecimiento de la métrica de la ruta "mejor". Una forma más sencilla de hacerlo es monitorear una sola ubicación o "estado" y observar cómo pasa "hacia arriba" a través de, digamos, cuatro niveles discretos dentro del rango del acumulador. A medida que pasa hacia arriba a través de cada uno de estos umbrales, se incrementa un contador que refleja el "ruido" presente en la señal entrante.

Unidad de rastreo (TBU)

Una implementación de muestra de una unidad de rastreo

La unidad de rastreo inverso restaura una ruta de máxima verosimilitud (casi) a partir de las decisiones tomadas por la PMU. Como lo hace en dirección inversa, un decodificador de Viterbi incluye un búfer FILO (primero en entrar, último en salir) para reconstruir un orden correcto.

Tenga en cuenta que la implementación que se muestra en la imagen requiere el doble de frecuencia. Hay algunos trucos que eliminan este requisito.

Problemas de implementación

Cuantificación para decodificación de decisiones suaves

Para aprovechar al máximo los beneficios de la decodificación de decisión suave, es necesario cuantificar correctamente la señal de entrada. El ancho óptimo de la zona de cuantificación se define mediante la siguiente fórmula:

donde es una densidad espectral de potencia de ruido y k es un número de bits para una decisión suave.

Cálculo métrico euclidiano

La distancia de la norma al cuadrado ( ) entre los símbolos recibidos y los reales en el alfabeto del código se puede simplificar aún más en una forma de suma/diferencia lineal, lo que la hace menos intensiva en términos computacionales.

Considere un código convolucional 1/2 , que genera 2 bits ( 00 , 01 , 10 u 11 ) por cada bit de entrada ( 1 o 0 ). Estas señales de retorno a cero se traducen a una forma sin retorno a cero que se muestra al lado.

Cada símbolo recibido puede representarse en forma vectorial como v r = {r 0 , r 1 }, donde r 0 y r 1 son valores de decisión suave, cuyas magnitudes significan la confiabilidad conjunta del vector recibido, v r .

Cada símbolo del alfabeto codificado puede, asimismo, representarse mediante el vector v i = {±1, ±1}.

El cálculo real de la métrica de la distancia euclidiana es:

Cada término cuadrado es una distancia normalizada que representa la energía del símbolo. Por ejemplo, la energía del símbolo v i = {±1, ±1} puede calcularse como

Por lo tanto, el término de energía de todos los símbolos del alfabeto codificado es constante (en el valor ( normalizado ) 2).

La operación Agregar-Comparar-Seleccionar ( ACS ) compara la distancia métrica entre el símbolo recibido ||v r || y cualesquiera 2 símbolos en el alfabeto de código cuyas rutas se fusionan en un nodo en el enrejado correspondiente, ||v i (0) || y ||v i (1) || . Esto es equivalente a comparar

y

Pero, de lo anterior sabemos que la energía de v i es constante (igual al valor (normalizado) de 2), y la energía de v r es la misma en ambos casos. Esto reduce la comparación a una función mínima entre los 2 términos del producto escalar (del medio) ,

ya que una operación mínima sobre números negativos puede interpretarse como una operación máxima equivalente sobre cantidades positivas.

Cada término del producto escalar puede expandirse como

donde los signos de cada término dependen de los símbolos, v i (0) y v i (1) , que se comparan. Por lo tanto, el cálculo de la distancia métrica euclidiana al cuadrado para calcular la métrica de la rama se puede realizar con una simple operación de suma/resta.

Rastreo

El enfoque general para el rastreo es acumular métricas de ruta de hasta cinco veces la longitud de restricción (5 ( K - 1)), encontrar el nodo con el mayor costo acumulado y comenzar el rastreo desde este nodo.

La regla general de uso común de una profundidad de truncamiento de cinco veces la memoria (longitud de restricción K -1) de un código convolucional es precisa solo para códigos de tasa 1/2. Para una tasa arbitraria, una regla general precisa es 2,5( K - 1)/(1− r ), donde r es la tasa del código. [1]

Sin embargo, calcular el nodo que ha acumulado el mayor costo (ya sea la métrica de ruta integral más grande o más pequeña) implica encontrar los máximos o mínimos de varios números (generalmente 2 K -1 ), lo que puede llevar mucho tiempo cuando se implementa en sistemas de hardware integrados.

La mayoría de los sistemas de comunicación emplean la decodificación Viterbi, que implica paquetes de datos de tamaños fijos, con un patrón de bits / bytes fijo al principio o al final del paquete de datos. Al utilizar el patrón de bits / bytes conocido como referencia, el nodo de inicio puede configurarse en un valor fijo, obteniendo así una ruta de máxima verosimilitud perfecta durante el rastreo.

Limitaciones

Una implementación física de un decodificador Viterbi no producirá un flujo de máxima verosimilitud exacto debido a la cuantificación de la señal de entrada, las métricas de ramificación y ruta y la longitud finita del rastreo . Las implementaciones prácticas se aproximan dentro de 1 dB del ideal.

La salida de un decodificador Viterbi, al decodificar un mensaje dañado por un canal gaussiano aditivo, tiene errores agrupados en ráfagas de errores. [2] [3] Los códigos de corrección de errores individuales por sí solos no pueden corregir dichas ráfagas, por lo que el código convolucional y el decodificador Viterbi deben diseñarse lo suficientemente potentes para reducir los errores a una tasa aceptable, o se deben utilizar códigos de corrección de errores en ráfagas .

Códigos perforados

Un decodificador de hardware Viterbi de códigos perforados se implementa comúnmente de la siguiente manera:

Implementación de software

Una de las operaciones que consume más tiempo es una mariposa ACS, que generalmente se implementa utilizando un lenguaje ensamblador y extensiones de conjunto de instrucciones apropiadas (como SSE2 ) para acelerar el tiempo de decodificación.

Aplicaciones

El algoritmo de decodificación de Viterbi se utiliza ampliamente en las siguientes áreas:

Referencias

  1. ^ B. Moision, "Una regla general de profundidad de truncamiento para códigos convolucionales", Taller de teoría y aplicaciones de la información de 2008, San Diego, CA, 2008, págs. 555-557, doi :10.1109/ITA.2008.4601052.
  2. ^ Stefan Host, Rolf Johannesson, Dmitrij K. Zigangirod, Kamil Sh. Zigangirod y Viktor V. Zyablod. "Sobre la distribución de las longitudes de ráfagas de error de salida para la decodificación de Viterbi de códigos convolucionales".
  3. ^ Curry, SJ; Harmon, WD "Un límite en la longitud de ráfaga de errores del decodificador de Viterbi".

Enlaces externos