Articulo de referencia

Código convolucional

En telecomunicaciones , un código convolucional es un tipo de código corrector de errores que genera símbolos de paridad mediante la aplicación deslizante de una función polinóm...

En telecomunicaciones , un código convolucional es un tipo de código corrector de errores que genera símbolos de paridad mediante la aplicación deslizante de una función polinómica booleana a un flujo de datos. Esta aplicación deslizante representa la convolución del codificador sobre los datos, lo que da origen al término «codificación convolucional». La naturaleza deslizante de los códigos convolucionales facilita la decodificación de enrejado mediante un enrejado invariante en el tiempo. La decodificación de enrejado invariante en el tiempo permite decodificar los códigos convolucionales mediante decisión suave de máxima verosimilitud con una complejidad razonable.

La capacidad de realizar una decodificación de decisión suave de máxima verosimilitud económica es uno de los principales beneficios de los códigos convolucionales. Esto contrasta con los códigos de bloque clásicos, que generalmente se representan mediante una estructura enrejada variable en el tiempo y, por lo tanto, suelen decodificarse mediante una decisión dura. Los códigos convolucionales se caracterizan a menudo por la tasa de codificación base y la profundidad (o memoria) del codificador.[norte,k,K]{\displaystyle [n,k,K]}La tasa de código base se suele dar comok/norte{\displaystyle k/n}donde k es la tasa de datos de entrada sin procesar y n es la tasa de datos del flujo codificado del canal de salida. k es menor que n porque la codificación de canal inserta redundancia en los bits de entrada. La memoria a menudo se denomina "longitud de restricción" K , donde la salida es una función de la entrada actual, así como de la anterior.K1{\displaystyle K-1}entradas. [ 1 ] La profundidad también puede darse como el número de elementos de memoria v en el polinomio o el número máximo posible de estados del codificador (típicamente:2v{\displaystyle 2^{v}}).

Los códigos convolucionales suelen describirse como continuos. Sin embargo, también puede decirse que tienen una longitud de bloque arbitraria, en lugar de ser continuos, ya que la mayoría de las codificaciones convolucionales en el mundo real se realizan sobre bloques de datos. Los códigos de bloque codificados convolucionalmente suelen emplear terminación. La longitud de bloque arbitraria de los códigos convolucionales contrasta con la de los códigos de bloque clásicos , que generalmente tienen longitudes de bloque fijas determinadas por propiedades algebraicas.

La tasa de codificación de un código convolucional se modifica comúnmente mediante perforación de símbolos . Por ejemplo, un código convolucional con una tasa de código 'madre'norte/k=1/2{\displaystyle n/k=1/2}puede perforarse a una tasa más alta de, por ejemplo,7/8{\displaystyle 7/8}Simplemente al no transmitir una parte de los símbolos del código. El rendimiento de un código convolucional perforado generalmente aumenta con la cantidad de paridad transmitida. La capacidad de realizar una decodificación de decisión suave económica en códigos convolucionales, así como la flexibilidad en la longitud del bloque y la tasa de codificación de estos códigos, los hace muy populares para las comunicaciones digitales.

Historia

Los códigos convolucionales fueron introducidos en 1955 por Peter Elias . Se creía que podían decodificarse con una calidad arbitraria a costa de un mayor coste computacional y una mayor latencia. En 1967, Andrew Viterbi determinó que los códigos convolucionales podían decodificarse mediante máxima verosimilitud con una complejidad razonable utilizando decodificadores basados ​​en enrejados invariantes en el tiempo: el algoritmo de Viterbi . Posteriormente se desarrollaron otros algoritmos de decodificación basados ​​en enrejados, incluido el algoritmo de decodificación BCJR .

Los códigos convolucionales sistemáticos recursivos fueron inventados por Claude Berrou alrededor de 1991. Estos códigos demostraron ser especialmente útiles para el procesamiento iterativo, incluido el procesamiento de códigos concatenados como los códigos turbo . [ 2 ]

Utilizando la terminología "convolucional", un código convolucional clásico podría considerarse un filtro de respuesta de impulso finito (FIR), mientras que un código convolucional recursivo podría considerarse un filtro de respuesta de impulso infinito (IIR).

Donde se utilizan códigos convolucionales

Etapas de codificación de canal en GSM. [ 3 ] Codificador de bloques y verificación de paridad: parte de detección de errores. Codificador convolucional y decodificador Viterbi: parte de corrección de errores. Entrelazado y desentrelazado: separación de palabras clave que aumenta en el dominio del tiempo y para evitar distorsiones en ráfagas.

Los códigos convolucionales se utilizan ampliamente para lograr una transferencia de datos confiable en numerosas aplicaciones, como video digital , radio, comunicaciones móviles (por ejemplo, en redes GSM, GPRS, EDGE y 3G (hasta la versión 7 de 3GPP) [ 4 ] [ 5 ] ) y comunicaciones por satélite . [ 6 ] Estos códigos a menudo se implementan en concatenación con un código de decisión dura, en particular Reed-Solomon . Antes de los códigos turbo, tales construcciones eran las más eficientes, acercándose más al límite de Shannon .

Codificación convolucional

Para codificar datos de forma convolucional, se empieza con k registros de memoria , cada uno con un bit de entrada. Salvo que se especifique lo contrario, todos los registros de memoria comienzan con un valor de 0. El codificador tiene n sumadores módulo 2 (un sumador módulo 2 se puede implementar con una sola puerta XOR booleana , donde la lógica es: 0+0 = 0 , 0+1 = 1 , 1+0 = 1 , 1+1 = 0 ) y n polinomios generadores , uno para cada sumador (véase la figura siguiente). Se introduce un bit de entrada m 1 en el registro más a la izquierda. Utilizando los polinomios generadores y los valores existentes en los registros restantes, el codificador genera n símbolos. Estos símbolos pueden transmitirse o descartarse según la tasa de codificación deseada. A continuación, se desplazan todos los valores de los registros hacia la derecha ( m 1 se mueve a m 0 , m 0 se mueve a m −1 ) y se espera el siguiente bit de entrada. Si no quedan bits de entrada, el codificador continúa desplazándose hasta que todos los registros hayan vuelto al estado cero (terminación por borrado de bits).        

Imagen 1. Codificador convolucional no recursivo y no sistemático de tasa 1/3 con longitud de restricción 3.

La figura siguiente muestra un codificador de tasa 1/3 ( m / n ) con una longitud de restricción ( k ) de 3. Los polinomios generadores son G1 = (1,1,1), G2 = (0,1,1) y G3 = (1,0,1) . Por lo tanto, los bits de salida se calculan (módulo 2) de la siguiente manera:

n 1 = m 1 + m 0 + m −1
n 2 = m 0 + m −1
n 3 = m 1 + m −1 .

Los códigos convolucionales pueden ser sistemáticos o no sistemáticos:

  • El método sistemático repite la estructura del mensaje antes de la codificación.
  • cambios no sistemáticos en la estructura inicial

Los códigos convolucionales no sistemáticos son más populares debido a su mejor inmunidad al ruido. Esto se relaciona con la distancia libre del código convolucional. [ 7 ]

Códigos recursivos y no recursivos

El codificador de la imagen superior es un codificador no recursivo . Aquí hay un ejemplo de uno recursivo y, como tal, admite una estructura de retroalimentación:

Imagen 2. Codificador convolucional sistemático recursivo de 8 estados con tasa 1/2. Se utiliza como código constituyente en el código Turbo 3GPP 25.212.

El codificador de ejemplo es sistemático porque los datos de entrada también se utilizan en los símbolos de salida (Salida 2). Los códigos cuyos símbolos de salida no incluyen los datos de entrada se denominan no sistemáticos.

Los códigos recursivos suelen ser sistemáticos y, a la inversa, los códigos no recursivos suelen ser no sistemáticos. No es un requisito estricto, pero sí una práctica común.

El codificador de ejemplo en la imagen 2 es un codificador de 8 estados porque los 3 registros crearán 8 estados posibles del codificador (2 3 ). Un decodificador enrejado correspondiente también utilizará normalmente 8 estados.

Los códigos convolucionales sistemáticos recursivos (RSC) se han popularizado gracias a su uso en los códigos Turbo. Estos códigos también se conocen como códigos pseudosistemáticos.

Otros códigos RSC y ejemplos de aplicaciones incluyen:

Imagen 3. Código convolucional sistemático recursivo (RSC) de dos estados. También llamado «acumulador».

Útil para la implementación de códigos LDPC y como código constituyente interno para códigos convolucionales concatenados en serie (SCCC).

Imagen 4. Código convolucional sistemático recursivo (RSC) de cuatro estados.

Útil para códigos turbo SCCC y multidimensionales.

Imagen 5. Código convolucional sistemático recursivo (RSC) de dieciséis estados.

Útil como código constituyente en códigos turbo de baja tasa de error para aplicaciones como enlaces satelitales. También es adecuado como código externo SCCC.

Respuesta impulsional, función de transferencia y longitud de restricción

Un codificador convolucional se denomina así porque realiza una convolución del flujo de entrada con las respuestas impulsionales del codificador :

yij=k=0hkjincógnitaik=(incógnitahj)[i],{\displaystyle y_{i}^{j}=\sum _ {k=0}^{\infty }h_{k}^{j}x_{ik}=(x*h^{j})[i],}

donde x es una secuencia de entrada, y j es una secuencia de salida j , h j es una respuesta impulsional para la salida j y{\displaystyle {*}}denota convolución.

Un codificador convolucional es un sistema discreto lineal invariante en el tiempo . Cada salida de un codificador puede describirse mediante su propia función de transferencia , que está estrechamente relacionada con el polinomio generador. Una respuesta impulsional está conectada con una función de transferencia a través de la transformada Z.

Las funciones de transferencia para el primer codificador (no recursivo) son:

  • H1(z)=1+z1+z2,{\displaystyle H_{1}(z)=1+z^{-1}+z^{-2},\,}
  • H2(z)=z1+z2,{\displaystyle H_{2}(z)=z^{-1}+z^{-2},\,}
  • H3(z)=1+z2.{\displaystyle H_{3}(z)=1+z^{-2}.\,}

Las funciones de transferencia para el segundo codificador (recursivo) son:

  • H1(z)=1+z1+z31z2z3,{\displaystyle H_{1}(z)={\frac {1+z^{-1}+z^{-3}}{1-z^{-2}-z^{-3}}},\,}
  • H2(z)=1.{\displaystyle H_{2}(z)=1.\,}

Definir m por

metro=máximoipolideg(Hi(1/z)){\displaystyle m=\max _{i}\operatorname {polydeg} (H_{i}(1/z))\,}

donde, para cualquier función racionalF(z)=PAG(z)/Q(z){\displaystyle f(z)=P(z)/Q(z)\,},

polideg(F)=máximo(grados(PAG),grados(Q)){\displaystyle \operatorname {polydeg} (f)=\max(\deg(P),\deg(Q))\,}.

Entonces m es el máximo de los grados polinómicos de la

Hi(1/z){\displaystyle H_{i}(1/z)\,}y la longitud de la restricción se define comoK=metro+1{\displaystyle K=m+1\,}Por ejemplo, en el primer ejemplo la longitud de la restricción es 3, y en el segundo la longitud de la restricción es 4.

Diagrama de enrejado

Un codificador convolucional es una máquina de estados finitos . Un codificador con n celdas binarias tendrá 2ⁿ estados .

Imaginemos que el codificador (mostrado en la imagen 1) tiene un '1' en la celda de memoria izquierda ( m₀ ) y un '0' en la derecha ( mₒ1 ). ( m₁ no es realmente una celda de memoria , ya que representa un valor actual). Designaremos este estado como "10". Según el bit de entrada , en el siguiente turno el codificador puede pasar al estado "01" o al estado "11". Cabe destacar que no todas las transiciones son posibles (por ejemplo, un decodificador no puede pasar del estado "10" al estado "00" ni permanecer en el estado "10").

Todas las transiciones posibles se pueden mostrar como se indica a continuación:

Imagen 6. Diagrama de celosía para el codificador de la imagen 1. La trayectoria a través de la celosía se muestra como una línea roja. Las líneas continuas indican las transiciones donde se introduce un "0" y las líneas discontinuas donde se introduce un "1".

Una secuencia codificada real puede representarse como una ruta en este gráfico. Una ruta válida se muestra en rojo a modo de ejemplo.

Este diagrama nos da una idea sobre la decodificación : si una secuencia recibida no se ajusta a este gráfico, entonces se recibió con errores, y debemos elegir la secuencia correcta más cercana (que se ajuste al gráfico). Los algoritmos de decodificación reales aprovechan esta idea.

Distancia libre y distribución de errores

Curvas teóricas de tasa de error de bits de un canal de ruido gaussiano blanco aditivo codificado en QPSK (recursivo y no recursivo, decisión suave). Las curvas presentan pequeñas diferencias debido a que las distancias libres y los pesos son aproximadamente iguales.

La distancia libre [ 8 ] ( d ) es la distancia de Hamming mínima entre diferentes secuencias codificadas. La capacidad de corrección ( t ) de un código convolucional es el número de errores que puede corregir el código. Se puede calcular como

t=d12.{\displaystyle t=\left\lfloor {\frac {d-1}{2}}\right\rfloor .}

Dado que un código convolucional no utiliza bloques, sino que procesa un flujo de bits continuo, el valor de t se aplica a una cantidad de errores ubicados relativamente cerca unos de otros. Es decir, generalmente se pueden corregir varios grupos de t errores cuando están relativamente alejados entre sí.

La distancia libre puede interpretarse como la longitud mínima de una "ráfaga" errónea en la salida de un decodificador convolucional. El hecho de que los errores aparezcan como "ráfagas" debe tenerse en cuenta al diseñar un código concatenado con un código convolucional interno. La solución más común para este problema consiste en intercalar los datos antes de la codificación convolucional, de modo que el código de bloque externo (generalmente Reed-Solomon ) pueda corregir la mayoría de los errores.

Decodificación de códigos convolucionales

Curvas de tasa de error de bits para códigos convolucionales con diferentes opciones de modulaciones digitales ( QPSK, 8-PSK , 16-QAM, 64-QAM ) y algoritmos LLR . [ 9 ] [ 10 ] (Exacto [ 11 ] y Aproximado [ 12 ] ) sobre un canal de ruido gaussiano blanco aditivo.

Existen varios algoritmos para decodificar códigos convolucionales. Para valores relativamente pequeños de k , el algoritmo de Viterbi es el más utilizado, ya que ofrece un rendimiento de máxima verosimilitud y es altamente paralelizable. Por lo tanto, los decodificadores de Viterbi son fáciles de implementar en hardware VLSI y en software en CPU con conjuntos de instrucciones SIMD .

Los códigos de mayor longitud de restricción se decodifican de forma más práctica con cualquiera de los diversos algoritmos de decodificación secuencial , de los cuales el algoritmo de Fano es el más conocido. A diferencia de la decodificación de Viterbi, la decodificación secuencial no es de máxima verosimilitud, pero su complejidad aumenta solo ligeramente con la longitud de la restricción, lo que permite el uso de códigos robustos de gran longitud de restricción. Dichos códigos se utilizaron en el programa Pioneer de principios de la década de 1970 para las misiones a Júpiter y Saturno, pero posteriormente fueron reemplazados por códigos más cortos decodificados mediante Viterbi, generalmente concatenados con códigos de corrección de errores Reed-Solomon de gran tamaño que acentúan la curva general de tasa de error de bits y producen tasas de error residual no detectado extremadamente bajas.

Tanto el algoritmo de Viterbi como el de decodificación secuencial devuelven decisiones definitivas: los bits que forman la palabra clave más probable. Se puede añadir una medida de confianza aproximada a cada bit mediante el algoritmo de Viterbi de salida suave . Las decisiones suaves de máxima probabilidad a posteriori (MAP) para cada bit se pueden obtener mediante el algoritmo BCJR .

Registro de desplazamiento para el polinomio de código convolucional (7, [171, 133]). Ramas:h1=171o=[1111001]b{\displaystyle h^{1}=171_{o}=[1111001]_{b}},h2=133o=[1011011]b{\displaystyle h^{2}=133_{o}=[1011011]_{b}}Todas las operaciones matemáticas deben realizarse mediante el módulo 2.
Curvas teóricas de tasa de error de bits de un canal de ruido gaussiano blanco aditivo con codificación QPSK (decisión suave). Las restricciones de mayor longitud generan códigos más potentes, pero la complejidad del algoritmo de Viterbi aumenta exponencialmente con dichas restricciones, lo que limita el uso de estos códigos más potentes en misiones espaciales profundas, donde el rendimiento adicional compensa con creces la mayor complejidad del decodificador.

De hecho, en la industria se utilizan estructuras de códigos convolucionales predefinidas obtenidas durante investigaciones científicas. Esto se relaciona con la posibilidad de seleccionar códigos convolucionales catastróficos (que provocan un mayor número de errores).

Un código convolucional decodificado por Viterbi especialmente popular, utilizado al menos desde el programa Voyager , tiene una longitud de restricción K de 7 y una tasa r de 1/2. [ 13 ]

Mars Pathfinder , Mars Exploration Rover y la sonda Cassini a Saturno utilizan un K de 15 y una tasa de 1/6; este código funciona aproximadamente 2  dB mejor que el más simple.K=7{\displaystyle K=7}codificar a un coste 256 veces mayor en complejidad de decodificación (en comparación con los códigos de las misiones Voyager).

El código convolucional con una longitud de restricción de 2 y una tasa de 1/2 se utiliza en GSM como técnica de corrección de errores. [ 14 ]

Códigos convolucionales perforados

Códigos convolucionales con tasas de codificación de 1/2 y 3/4 (y longitud de restricción 7, decisión suave, 4-QAM / QPSK / OQPSK). [ 15 ]

Se puede diseñar un código convolucional con cualquier tasa de codificación mediante selección polinómica; [ 16 ] sin embargo, en la práctica, a menudo se utiliza un procedimiento de perforación para lograr la tasa de codificación requerida. La perforación es una técnica que se utiliza para crear un código de tasa m / n a partir de un código básico de baja tasa (por ejemplo, 1/ n ). Se logra eliminando algunos bits en la salida del codificador. Los bits se eliminan según una matriz de perforación . Las siguientes matrices de perforación son las más utilizadas:

Por ejemplo, si queremos generar un código con una tasa de 2/3 utilizando la matriz correspondiente de la tabla anterior, debemos tomar la salida de un codificador básico y transmitir el primer bit de cada rama y el primer bit de cada rama de la segunda. El orden específico de transmisión viene definido por el estándar de comunicación correspondiente.

Los códigos convolucionales punteados se utilizan ampliamente en las comunicaciones por satélite , por ejemplo, en los sistemas Intelsat y en la radiodifusión de vídeo digital .

Los códigos convolucionales punteados también se denominan "perforados".

Códigos turbo: reemplazando los códigos convolucionales

Un código turbo con códigos componentes 13, 15. [ 17 ] Los códigos turbo reciben su nombre porque el decodificador utiliza retroalimentación, como un motor turbo. Permutación significa lo mismo que entrelazado. C1 y C2 son códigos convolucionales recursivos. Los códigos convolucionales recursivos y no recursivos no difieren mucho en el rendimiento BER; sin embargo, el tipo recursivo se implementa en los códigos convolucionales turbo debido a sus mejores propiedades de entrelazado. [ 18 ]

Los códigos convolucionales simples decodificados con Viterbi están dando paso a los códigos turbo , una nueva clase de códigos convolucionales cortos iterados que se aproximan a los límites teóricos impuestos por el teorema de Shannon con una complejidad de decodificación mucho menor que la que requeriría el algoritmo de Viterbi para los códigos convolucionales largos con el mismo rendimiento. La concatenación con un código algebraico externo (por ejemplo, Reed-Solomon ) resuelve el problema de los umbrales de error inherentes a los diseños de códigos turbo.

Véase también

Referencias

  1. Sklar, Harris, Bernard, Fred. Comunicaciones digitales (3.ª ed.). Pearson Education. pág. 376. ISBN   978-0-13-458856-8.{{cite book}}: CS1 maint: varios nombres: lista de autores ( enlace )
  2. Benedetto, Sergio y Guido Montorsi. " El papel de los códigos convolucionales recursivos en los códigos turbo ". Electronics Letters 31.11 (1995): 858-859.
  3. Eberspächer J. et al. Arquitectura, protocolos y servicios GSM. John Wiley & Sons, 2008. pág. 97
  4. Proyecto de Asociación de Tercera Generación (septiembre de 2012). "3GGP TS45.001: Grupo de especificaciones técnicas Red de acceso radioeléctrico GSM/EDGE; Capa física en la ruta de radio; Descripción general". Consultado el 20 de julio de 2013.
  5. Halonen, Timo, Javier Romero y Juan Melero, eds. Rendimiento de GSM, GPRS y EDGE: evolución hacia 3G/UMTS. John Wiley & Sons, 2004. pág. 430
  6. Butman, SA, LJ Deutsch y RL Miller. "Rendimiento de códigos concatenados para misiones en el espacio profundo". The Telecommunications and Data Acquisition Progress Report 42-63, marzo-abril de 1981 (1981): 33-39.
  7. Moon, Todd K. "Codificación de corrección de errores". Métodos matemáticos y algoritmos. John Wiley and Son (2005). pág. 508
  8. Moon, Todd K. " Codificación de corrección de errores ". Métodos matemáticos y algoritmos. John Wiley and Son (2005). - pág. 508
  9. LLR frente a demodulación de decisión dura (MathWorks)
  10. Estimación de BER para la decodificación de Viterbi de decisión dura y blanda (MathWorks)
  11. Modulación digital: Algoritmo LLR exacto (MathWorks)
  12. Modulación digital: Algoritmo LLR aproximado (MathWorks)
  13. Butman, SA, LJ Deutsch y RL Miller. "Rendimiento de códigos concatenados para misiones en el espacio profundo". The Telecommunications and Data Acquisition Progress Report 42-63, marzo-abril de 1981 (1981): 33-39.
  14. Sistema global para comunicaciones móviles (GSM)
  15. Codificación convolucional perforada (MathWorks)
  16. "Convertir polinomios de código convolucional a descripción de enrejado – MATLAB poly2trellis" .
  17. Código Turbo
  18. Benedetto, Sergio y Guido Montorsi. " El papel de los códigos convolucionales recursivos en los códigos turbo ". Electronics Letters 31.11 (1995): 858-859.
  • El libro de texto en línea "Teoría de la información, inferencia y algoritmos de aprendizaje" , de David JC MacKay , trata sobre los códigos convolucionales en el capítulo 48.
  • La página de códigos de corrección de errores (ECC)
  • Explicaciones de Matlab
  • Fundamentos de los decodificadores convolucionales para mejorar las comunicaciones digitales.
  • Códigos convolucionales (MIT)
  • El libro "Teoría de la Información y la Codificación" (TU Ilmenau), archivado el 30 de agosto de 2017 en Wayback Machine , trata sobre códigos convolucionales en la página 48.

Lecturas adicionales

Publicaciones

  • Francis, Michael. "Decodificación de bloques del decodificador Viterbi: terminación en enrejado y terminación de cola." Xilinx XAPP551 v2.0, DD (2005): 1-21.
  • Chen, Qingchun, Wai Ho Mow y Pingzhi Fan. «Algunos resultados nuevos sobre códigos convolucionales recursivos y sus aplicaciones». Taller de Teoría de la Información, 2006. ITW'06 Chengdu. IEEE. IEEE, 2006.
  • Fiebig, UC., y Patrick Robertson. "Decodificación de decisión suave y borrado en sistemas de salto de frecuencia rápido con códigos convolucionales, turbo y Reed-Solomon". IEEE Transactions on Communications 47.11 (1999): 1646-1654.
  • Bhaskar, Vidhyacharan y Laurie L. Joiner. "Rendimiento de códigos convolucionales perforados en comunicaciones CDMA asíncronas bajo condiciones de seguimiento de fase perfecto". Computers & Electrical Engineering 30.8 (2004): 573-592.
  • Modestino, J., y Shou Mui. "Rendimiento del código convolucional en el canal de desvanecimiento de Rice". IEEE Transactions on Communications 24.6 (1976): 592-606.
  • Chen, Yuh-Long y Che-Ho Wei. «Evaluación del rendimiento de códigos convolucionales con MPSK en canales de desvanecimiento Rice». IEE Proceedings F-Communications, Radar and Signal Processing. Vol. 134. Núm. 2. IET, 1987.