Códigos de corrección de errores utilizados en la comunicación inalámbrica
Los códigos Reed-Muller son códigos de corrección de errores que se utilizan en aplicaciones de comunicaciones inalámbricas, en particular en comunicaciones en el espacio profundo. [1] Además, el estándar 5G propuesto [2] se basa en los códigos polares [3], estrechamente relacionados , para la corrección de errores en el canal de control. Debido a sus favorables propiedades teóricas y matemáticas, los códigos Reed-Muller también se han estudiado ampliamente en la informática teórica .
Los códigos Reed-Muller generalizan los códigos Reed-Solomon y el código Walsh-Hadamard . Los códigos Reed-Muller son códigos de bloques lineales que se pueden probar localmente , decodificar localmente y decodificar en listas . Estas propiedades los hacen particularmente útiles en el diseño de pruebas probabilísticamente comprobables .
Los códigos tradicionales de Reed-Muller son códigos binarios, lo que significa que los mensajes y las palabras clave son cadenas binarias. Cuando r y m son números enteros con 0 ≤ r ≤ m , el código de Reed-Muller con parámetros r y m se denota como RM( r , m ). Cuando se le pide que codifique un mensaje que consta de k bits, donde se cumple, el código RM( r , m ) produce una palabra clave que consta de 2 m bits.
Los códigos Reed-Muller reciben su nombre de David E. Muller , quien descubrió los códigos en 1954, [4] e Irving S. Reed , quien propuso el primer algoritmo de decodificación eficiente. [5]
Descripción utilizando polinomios de bajo grado
Los códigos Reed-Muller pueden describirse de varias maneras diferentes (pero en última instancia equivalentes). La descripción que se basa en polinomios de bajo grado es bastante elegante y particularmente adecuada para su aplicación como códigos comprobables localmente y códigos decodificables localmente . [6]
Codificador
Un código de bloque puede tener una o más funciones de codificación que asignan mensajes a palabras de código . El código Reed-Muller RM( r , m ) tiene longitud de mensaje y longitud de bloque . Una forma de definir una codificación para este código se basa en la evaluación de polinomios multilineales con m variables y grado total como máximo r . Cada polinomio multilineal sobre el cuerpo finito con dos elementos se puede escribir de la siguiente manera:
Las son las variables del polinomio y los valores son los coeficientes del polinomio. Nótese que hay exactamente coeficientes. Con esto en mente, un mensaje de entrada consta de valores que se utilizan como estos coeficientes. De esta manera, cada mensaje da lugar a un polinomio único en m variables. Para construir la palabra de código , el codificador evalúa el polinomio en todos los puntos , donde el polinomio se toma con multiplicación y adición módulo 2. Es decir, la función de codificación se define mediante
El hecho de que la palabra clave sea suficiente para reconstruir de forma única se desprende de la interpolación de Lagrange , que establece que los coeficientes de un polinomio se determinan de forma única cuando se dan suficientes puntos de evaluación. Dado que y se cumple para todos los mensajes , la función es una función lineal . Por lo tanto, el código de Reed-Muller es un código lineal .
Ejemplo
Para el código RM( 2 , 4 ) , los parámetros son los siguientes:
Sea la función de codificación que acabamos de definir. Para codificar la cadena x = 1 1010 010101 de longitud 11, el codificador primero construye el polinomio en 4 variables: Luego evalúa este polinomio en los 16 puntos de evaluación (0101 significa :
Como resultado, se cumple C(1 1010 010101) = 1101 1110 0001 0010.
Descifrador
Como ya se ha mencionado, la interpolación de Lagrange se puede utilizar para recuperar de forma eficiente el mensaje de una palabra clave. Sin embargo, un decodificador debe funcionar incluso si la palabra clave se ha corrompido en algunas posiciones, es decir, cuando la palabra recibida es diferente de cualquier palabra clave. En este caso, un procedimiento de decodificación local puede resultar de ayuda.
El algoritmo de Reed se basa en la siguiente propiedad: se parte de la palabra clave, es decir, una secuencia de puntos de evaluación de un polinomio desconocido de grado máximo que se desea encontrar. La secuencia puede contener cualquier número de errores hasta incluido.
Si consideramos un monomio de grado más alto en y sumamos todos los puntos de evaluación del polinomio donde todas las variables en tienen los valores 0 o 1, y todas las demás variables tienen el valor 0, obtenemos el valor del coeficiente (0 o 1) de en (Existen tales puntos). Esto se debe al hecho de que todos los divisores monomiales inferiores de aparecen un número par de veces en la suma, y solo aparecen una vez.
Para tener en cuenta la posibilidad de errores, también se puede observar que se puede fijar el valor de otras variables a cualquier valor. Así, en lugar de hacer la suma una sola vez para otras variables que no tengan el valor 0, se hace varias veces para cada valor fijo de las otras variables. Si no hay ningún error, todas esas sumas deben ser iguales al valor del coeficiente buscado. El algoritmo consiste aquí en tomar la mayoría de las respuestas como el valor buscado. Si la minoría es mayor que el número máximo de errores posibles, el paso de decodificación falla sabiendo que hay demasiados errores en el código de entrada.
Una vez que se calcula un coeficiente, si es 1, actualice el código para eliminar el monomio del código de entrada y continúe con el siguiente monomio, en orden inverso a su grado.
Ejemplo
Consideremos el ejemplo anterior y comencemos por el código. Con esto podemos corregir como máximo 1 error en el código. Consideremos el código de entrada como 1101 1110 0001 0110 (este es el código anterior con un error).
Sabemos que el grado del polinomio es como máximo , comenzamos buscando el monomio de grado 2.
- Comenzamos buscando puntos de evaluación con . En el código esto es: 1101 1110 0001 0110. La primera suma es 1 (número impar de 1).
- Buscamos puntos de evaluación con . En el código esto es: 1101 1110 0001 0110. La segunda suma es 1.
- Buscamos puntos de evaluación con . En el código esto es: 1101 1110 0001 0110. La tercera suma es 1.
- Buscamos puntos de evaluación con . En el código esto es: 1101 1110 0001 0110 . La tercera suma es 0 (número par de 1).
Las cuatro sumas no concuerdan (por lo que sabemos que hay un error), pero el informe de la minoría no es mayor que el número máximo de errores permitido (1), por lo que tomamos la mayoría y el coeficiente de es 1.
Eliminamos del código antes de continuar: código: 1101 1110 0001 0110, la valoración es 0001000100010001, el nuevo código es 1100 1111 0000 0111
- 11 00 11 11 0000 0111. La suma es 0
- 11 00 11 11 0000 0111. La suma es 0
- 1100 1111 00 00 01 11. La suma es 1
- 1100 1111 00 00 01 11 . La suma es 0
Se detectó un error, el coeficiente es 0, no hay cambios en el código actual.
- 11 00 1111 00 00 0111. La suma es 0
- 11 00 1111 00 00 0111. La suma es 0
- 1100 11 11 0000 01 11. La suma es 1
- 1100 11 11 0000 01 11 . La suma es 0
Se detectó un error, el coeficiente es 0, no hay cambios en el código actual.
- 1 1 0 0 1 1 1 1 0000 0111. La suma es 1
- 1 1 0 0 1 1 1 1 0000 0111. La suma es 1
- 1100 1111 0 0 0 0 0 1 1 1. La suma es 1
- 1100 1111 0 0 0 0 0 1 1 1 . La suma es 0
Se detectó un error, el coeficiente es 1, la valoración es 0000 0011 0000 0011, el código actual ahora es 1100 1100 0000 0100.
- 1 1 0 0 1100 0 0 0 0 0100. La suma es 1
- 1 1 0 0 1100 0 0 0 0 0100. La suma es 1
- 1100 1 1 0 0 0000 0 1 0 0. La suma es 1
- 1100 1 1 0 0 0000 0 1 0 0. La suma es 0
Se detectó un error, el coeficiente es 1, la valoración es 0000 0000 0011 0011, el código actual ahora es 1100 1100 0011 0111.
- 1 100 1 100 0 011 0 111. La suma es 0
- 1 1 00 1 1 00 0 0 11 0 1 11. La suma es 1
- 11 0 0 11 0 0 00 1 1 01 1 1. La suma es 0
- 110 0 110 0 001 1 011 1 . La suma es 0
Se detectó un error, el coeficiente es 0, no hay cambios en el código actual. Ahora conocemos todos los coeficientes de grado 2 para el polinomio, podemos comenzar con mononios de grado 1. Observe que para cada grado siguiente, hay el doble de sumas y cada suma es la mitad más pequeña.
- 11 00 1100 0011 0111. La suma es 0
- 11 00 1100 0011 0111. La suma es 0
- 1100 11 00 0011 0111. La suma es 0
- 1100 11 00 0011 0111. La suma es 0
- 1100 1100 00 11 0111. La suma es 0
- 1100 1100 00 11 0111. La suma es 0
- 1100 1100 0011 01 11. La suma es 1
- 1100 1100 0011 01 11 . La suma es 0
Se detectó un error, el coeficiente es 0, no hay cambios en el código actual.
- 1 1 0 0 1100 0011 0111. La suma es 1
- 1 1 0 0 1100 0011 0111. La suma es 1
- 1100 1 1 0 0 0011 0111. La suma es 1
- 1100 1 1 0 0 0011 0111. La suma es 1
- 1100 1100 0 0 1 1 0111. La suma es 1
- 1100 1100 0 0 1 1 0111. La suma es 1
- 1100 1100 0011 0 1 1 1. La suma es 1
- 1100 1100 0011 0 1 1 1 . La suma es 0
Se detectó un error, el coeficiente es 1, la valoración de es 0011 0011 0011 0011, el código actual ahora es 1111 1111 0000 0100.
Luego encontraremos 0 para , 1 para y el código actual se convertirá en 1111 1111 1111 1011.
Para el grado 0, tenemos 16 sumas de solo 1 bit. La minoría sigue siendo de tamaño 1, y encontramos la palabra inicial correspondiente 1 1010 010101
Generalización a alfabetos más grandes mediante polinomios de bajo grado
Utilizando polinomios de bajo grado sobre un campo finito de tamaño , es posible extender la definición de códigos Reed-Muller a alfabetos de tamaño . Sean y números enteros positivos, donde se deben considerar mayores que . Para codificar un mensaje de ancho , el mensaje se interpreta nuevamente como un polinomio de -variante de grado total como máximo y con coeficiente de . Un polinomio de este tipo tiene coeficientes. La codificación Reed-Muller de es la lista de todas las evaluaciones de sobre todo . Por lo tanto, la longitud del bloque es .
Descripción mediante una matriz generadora
Se puede construir una matriz generadora para un código Reed–Muller RM( r , m ) de longitud N = 2 m de la siguiente manera. Escribamos el conjunto de todos los vectores binarios de dimensión m como:
Definimos en el espacio N -dimensional los vectores indicadores
sobre subconjuntos por:
junto con, también en , la operación binaria
denominado producto cuña (que no debe confundirse con el producto cuña definido en álgebra exterior). Aquí, y son puntos en ( vectores binarios N -dimensionales), y la operación es la multiplicación habitual en el campo .
es un espacio vectorial m -dimensional sobre el campo , por lo que es posible escribir
Definimos en el espacio N -dimensional los siguientes vectores con longitud y
donde 1 ≤ i ≤ m y los H i son hiperplanos en (con dimensión m − 1 ):
La matriz generadora
El código RM( r , m ) de Reed–Muller de orden r y longitud N = 2 m es el código generado por v 0 y los productos de cuña de hasta r de los v i , 1 ≤ i ≤ m (donde por convención un producto de cuña de menos de un vector es la identidad para la operación). En otras palabras, podemos construir una matriz generadora para el código RM( r , m ) , usando vectores y sus permutaciones de productos de cuña hasta r a la vez , como las filas de la matriz generadora, donde 1 ≤ i k ≤ m .
Ejemplo 1
Sea m = 3. Entonces N = 8, y
y
El código RM(1,3) es generado por el conjunto
o más explícitamente por las filas de la matriz:
Ejemplo 2
El código RM(2,3) es generado por el conjunto:
o más explícitamente por las filas de la matriz:
Propiedades
Se cumplen las siguientes propiedades:
- El conjunto de todos los posibles productos de cuña de hasta m de v i forman una base para .
- El código RM ( r , m ) tiene rango
- RM ( r , m ) = RM ( r , m − 1) | RM ( r − 1, m − 1) donde '|' denota el producto de barras de dos códigos.
- RM ( r , m ) tiene un peso de Hamming mínimo de 2 m − r .
Prueba
- Hay
tales vectores y tienen dimensión N por lo que es suficiente comprobar que los N vectores abarcan; equivalentemente es suficiente comprobar que .
Sea x un vector binario de longitud m , un elemento de X . Sea ( x ) i el i ésimo elemento de x . Definir
donde 1 ≤ i ≤ m .
Entonces
La expansión a través de la distributividad del producto de cuña da . Entonces, como los vectores son generadores, tenemos . - Por 1 , todos estos productos de cuña deben ser linealmente independientes, por lo que el rango de RM( r, m ) debe ser simplemente el número de dichos vectores.
- Omitido.
- Por inducción.
- El código RM(0, m ) es el código de repetición de longitud N = 2 m y peso N = 2 m −0 = 2 m − r . Por 1 y tiene peso 1 = 2 0 = 2 m − r .
El artículo producto de barras (teoría de codificación) proporciona una prueba de que el peso del producto de barras de dos códigos C 1 , C 2 está dado por
- Si 0 < r < m y si
- RM( r , m − 1) tiene peso 2 m −1− r
- RM( r − 1, m − 1) tiene peso 2 m −1−( r −1) = 2 m − r
- Entonces el producto de la barra tiene peso.
Descifrando códigos RM
Los códigos RM( r , m ) se pueden decodificar utilizando la decodificación de lógica mayoritaria . La idea básica de la decodificación de lógica mayoritaria es construir varias sumas de comprobación para cada elemento de palabra de código recibido. Dado que cada una de las diferentes sumas de comprobación debe tener el mismo valor (es decir, el valor del peso del elemento de palabra de mensaje), podemos utilizar una decodificación de lógica mayoritaria para descifrar el valor del elemento de palabra de mensaje. Una vez que se decodifica cada orden del polinomio, la palabra recibida se modifica en consecuencia eliminando las palabras de código correspondientes ponderadas por las contribuciones del mensaje decodificado, hasta la etapa actual. Entonces, para un código RM de orden r , tenemos que decodificar iterativamente r+1, veces antes de llegar a la palabra de código recibida final. Además, los valores de los bits del mensaje se calculan a través de este esquema; finalmente, podemos calcular la palabra de código multiplicando la palabra de mensaje (recién decodificada) con la matriz generadora.
Una pista de que la decodificación tuvo éxito es que se recibió una palabra modificada con todos los ceros al final de la etapa de decodificación ( r + 1) a través de la decodificación de lógica mayoritaria. Esta técnica fue propuesta por Irving S. Reed y es más general cuando se aplica a otros códigos de geometría finita.
Descripción mediante una construcción recursiva
Existe un código Reed-Muller RM( r,m ) para cualquier número entero y . RM( m , m ) se define como el código del universo ( ). RM(−1,m) se define como el código trivial ( ). Los códigos RM restantes se pueden construir a partir de estos códigos elementales utilizando la construcción de duplicación de longitud.
A partir de esta construcción, RM( r,m ) es un código de bloque lineal binario ( n , k , d ) con longitud n = 2 m , dimensión y distancia mínima para . El código dual para RM( r,m ) es RM( m - r -1, m ). Esto muestra que los códigos de repetición y SPC son duales, los códigos de Hamming biortogonales y extendidos son duales y que los códigos con k = n /2 son autoduales.
Casos especiales de códigos Reed-Muller
Tabla de todos los códigos RM(r,m) para m≤5
Aquí se muestran todos los códigos RM( r , m ) con un tamaño de alfabeto de 2, anotados con la notación de la teoría de codificación estándar [n,k,d] para códigos de bloque . El código RM( r , m ) es un código -, es decir, es un código lineal sobre un alfabeto binario , tiene una longitud de bloque , una longitud de mensaje (o dimensión) k y una distancia mínima .
Propiedades de los códigos RM(r,m) para r≤1 o r≥m-1
- Los códigos RM(0, m ) son códigos de repetición de longitud N = 2 m , tasa y distancia mínima .
- Los códigos RM(1, m ) son códigos de verificación de paridad de longitud N = 2 m , tasa y distancia mínima .
- Los códigos RM( m − 1, m ) son códigos de verificación de paridad simple con una longitud N = 2 m , una tasa y una distancia mínimas .
- Los códigos RM( m − 2, m ) son la familia de códigos Hamming extendidos de longitud N = 2 m con distancia mínima . [7]
Referencias
- ^ Massey, James L. (1992), "Comunicaciones y codificación en el espacio profundo: un matrimonio perfecto", Métodos avanzados para comunicaciones satelitales y en el espacio profundo , Notas de clase en ciencias de la información y el control, vol. 182, Springer-Verlag, págs. 1–17, CiteSeerX 10.1.1.36.4265 , doi :10.1007/bfb0036046, ISBN 978-3540558514pdf
- ^ "Informe final de la reunión 3GPP RAN1 nº 87". 3GPP . Consultado el 31 de agosto de 2017 .
- ^ Arikan, Erdal (2009). "Polarización de canal: un método para construir códigos que logren capacidad para canales sin memoria de entrada binaria simétricos - Revistas y revistas IEEE". IEEE Transactions on Information Theory . 55 (7): 3051–3073. arXiv : 0807.3917 . doi :10.1109/TIT.2009.2021379. hdl :11693/11695. S2CID 889822.
- ^ Muller, David E. (1954). "Aplicación del álgebra de Boole al diseño de circuitos de conmutación y a la detección de errores". Transactions of the IRE Professional Group on Electronic Computers . EC-3 (3): 6–12. doi :10.1109/irepgelc.1954.6499441. ISSN 2168-1740.
- ^ Reed, Irving S. (1954). "Una clase de códigos de corrección de errores múltiples y el esquema de decodificación". Transacciones del Grupo Profesional de Teoría de la Información del IRE . 4 (4): 38–49. doi :10.1109/tit.1954.1057465. hdl : 10338.dmlcz/143797 . ISSN 2168-2690.
- ^ Prahladh Harsha et al., Límites de algoritmos de aproximación: PCP y juegos únicos (Notas de la clase del tutorial DIMACS), Sección 5.2.1.
- ^ Codificación Trellis y Turbo, C. Schlegel y L. Pérez, Wiley Interscience, 2004, p149.
Lectura adicional
- Shu Lin; Daniel Costello (2005). Codificación de control de errores (2.ª edición). Pearson. ISBN 978-0-13-017973-9.Capítulo 4.
- JH van Lint (1992). Introducción a la teoría de la codificación . GTM . Vol. 86 (2.ª ed.). Springer-Verlag . ISBN. 978-3-540-54894-2.Capítulo 4.5.
Enlaces externos
- MIT OpenCourseWare, 6.451 Principios de la comunicación digital II, Notas de clase, sección 6.4
- Implementación de códigos RM en Matlab con licencia GPL
- Implementación Matlab de códigos RM en formato GPL
- Weiss, E. (septiembre de 1962). "Códigos Reed-Muller generalizados". Información y control . 5 (3): 213–222. doi :10.1016/s0019-9958(62)90555-7. ISSN 0019-9958.