Lección 9 de 11
Códigos de Reed-Solomon: polinomios que se dejan rayar
Define los códigos de Reed-Solomon por evaluación de polinomios, entiende por qué su distancia es n−k+1 y calcula una palabra código completa en F_8.
Borrador: pendiente de que lo revise el autor. Esta página no aparece en Google.
Al terminar sabrás:
- Construir una palabra de Reed-Solomon evaluando un polinomio
- Deducir la distancia mínima n−k+1 y los errores y borrones que se corrigen
- Reconocer la versión cíclica con polinomio generador
- Saber para qué sirven estos códigos en la vida real
Si sabes multiplicar matrices, resolver un sistema de ecuaciones lineales y operar con polinomios (sumar, multiplicar, dividir), puedes seguirlo. Lo demás (aritmética módulo 2, subespacios, cuerpos finitos) se explica sobre la marcha.
En las dos lecciones anteriores vimos que un polinomio puede servir de código: la palabra es un polinomio y el código, el conjunto de múltiplos de . Ahora los usaremos de otra manera: la que protege un QR rayado, un CD con arañazos y las imágenes de una sonda espacial. Son los códigos de Reed-Solomon y salen de una idea que ya conoces del instituto: por dos puntos pasa una sola recta.
La idea
Una recta queda fijada por dos puntos. Una parábola, por tres. En general, un polinomio de grado menor que queda fijado por puntos cualesquiera de su gráfica.
Ahora imagina que tu mensaje son los coeficientes de un polinomio. No los mandas a ellos, sino los valores del polinomio en puntos, con mayor que : como apuntar siete puntos de una parábola cuando bastan tres.
Si el canal destroza algunos valores, mientras sobrevivan la parábola se recupera, y con ella el mensaje. La redundancia son los puntos de más.
Los valores viven en un cuerpo finito, porque hay que sumar, multiplicar y dividir sin salirse de un conjunto de símbolos (por eso la lección 2 iba antes). Aquí usaremos .
Definición
Sea un cuerpo finito y el conjunto de los polinomios con coeficientes en . Elige elementos distintos de (los puntos de evaluación; por eso ) y un número .
El código de Reed-Solomon es el conjunto de las palabras
El mensaje son los coeficientes de . Es un código lineal (la suma de dos polinomios de grado menor que tiene grado menor que ) de dimensión y longitud . Su matriz generatriz tiene en la fila las potencias , para .
Distancia mínima. Es . Dos palabras distintas vienen de dos polinomios distintos y , y su diferencia es un polinomio no nulo de grado menor que . Un polinomio así tiene como mucho raíces (recuadro de abajo), de modo que las dos palabras coinciden en como mucho posiciones. Difieren, pues, en al menos .
Repaso Raíces de un polinomio
Un polinomio no nulo de grado tiene como mucho raíces en un cuerpo. Si , la división entre da resto , así que con de grado . Si es otra raíz, , y como en un cuerpo se puede dividir entre , sale . Se repite con , y cada raíz gasta un grado.
Por eso una recta corta al eje como mucho una vez y una parábola, dos. Sin cuerpo falla: en , el polinomio tiene cuatro raíces (1, 3, 5 y 7).
Como la cota de Singleton de la lección 5 dice que , estos códigos llegan al máximo posible: son MDS (de distancia máxima separable).
Con , un código de Reed-Solomon corrige:
- borrones (también se dice borrados; son los símbolos perdidos de los que se sabe la posición),
- errores,
- o una mezcla con .
Cada símbolo extra de redundancia corrige un borrón, pero hacen falta dos para corregir un error. Lo veremos en las dos próximas lecciones.
Símbolos, no bits
Los símbolos de son bytes. Un código de Reed-Solomon sobre (el GF(256) de los códigos QR) cuenta errores por byte: da igual que dentro del byte se hayan estropeado un bit o los ocho, es un símbolo erróneo.
Eso lo hace ideal para ráfagas: un arañazo estropea muchos bits seguidos, que caen en pocos bytes. Una ráfaga de 16 bits toca como mucho 3 bytes; bit a bit, serían 16 errores.
Versión cíclica
Cuando se toman como puntos todos los elementos no nulos de en el orden , donde genera los elementos no nulos del cuerpo, el código es cíclico (con ). Lo escribimos como en las lecciones 7 y 8, con índices desde 0: la palabra es el polinomio , con , y el código está formado por los múltiplos de
Su grado es , como corresponde a un código cíclico de dimensión . Es el mismo código, visto como múltiplos de . La ventaja es práctica: se codifica y se calcula el síndrome con divisiones de polinomios, como en la lección 8, que es lo que hacen los circuitos.
Ejemplo resuelto
Usamos el cuerpo , con (la tabla de la lección 2):
| potencia | polinomio en |
|---|---|
Sumar es sumar coeficientes módulo 2. Multiplicar es sumar exponentes módulo 7.
Tomamos puntos, que son los siete elementos no nulos , y . Es un código sobre , con palabras: corrige 2 errores, o 4 borrones, o 1 error y 2 borrones.
Ojo con la numeración. Como siempre en el curso, las posiciones van de 1 a 7, y la posición corresponde al punto : la posición 1 es el punto y la 7 es . En la versión cíclica, el símbolo es el de la posición .
Mensaje: , es decir, .
Evaluamos en cada punto:
- .
- .
- .
- .
- .
- .
- .
(Hemos usado para bajar los exponentes.) La palabra código es
La distancia 5 se alcanza. El polinomio tiene grado 2 y se anula en los puntos y . Su palabra es , de peso 5. Más ceros no puede tener, porque un polinomio de grado 2 tiene como mucho 2 raíces.
Repaso Para quien quiera comprobarlo: la versión cíclica
Con y sumando exponentes, se obtiene
Por ejemplo, el coeficiente de es (en , restar es sumar).
La palabra se escribe . Al dividirla entre sale el cociente y resto 0, así que también es con ese de grado 2.
Dónde se usan
- Códigos QR. Usan Reed-Solomon sobre GF(256). Por eso un QR se lee con un trozo tapado, y los niveles L, M, Q y H difieren en la redundancia (puedes probarlo en QR corrige errores).
- CD y DVD. Usan Reed-Solomon junto con entrelazado de símbolos para sobrevivir a arañazos y huellas.
- Comunicaciones espaciales. Es uno de los códigos estándar de las sondas lejanas, normalmente combinado con otro código.
- Almacenamiento RAID. El RAID 6 aguanta perder dos discos a la vez, y muchas implementaciones usan códigos de tipo Reed-Solomon: dos discos de redundancia reconstruyen dos borrones.
El CD y el espacio se cuentan en el libro de Wicker y Bhargava, y el RAID 6, en el artículo de Anvin (ver las fuentes).
Ejercicios
Ejercicio 1
En el código de arriba, calcula la palabra que corresponde al mensaje , es decir, a .
Ver la solución
Evaluamos en los siete puntos, usando y :
- .
- .
- .
- .
- .
- .
- .
La palabra es , de peso 6: un polinomio de grado 1 tiene una sola raíz.
Ejercicio 2
Un código de Reed-Solomon sobre tiene y . ¿Cuál es su distancia mínima? ¿Cuántos errores corrige? ¿Y cuántos borrones? ¿Cuál es su tasa?
Ver la solución
Por ser MDS, .
- Errores: .
- Borrones: .
- Tasa: .
Frente al , ganas tasa a costa de corregir 1 error en vez de 2.
Ejercicio 3
Un código de Reed-Solomon sobre tiene y . Calcula , los errores que corrige y la tasa (en porcentaje, con un decimal). ¿Cuántos bytes puede perder, si se sabe cuáles son?
Ver la solución
- .
- Corrige errores (bytes erróneos, sea cual sea el daño en sus bits).
- La tasa es , es decir, .
- Si se conocen las posiciones, son borrones, y se corrigen hasta bytes perdidos, seguidos o no.
En resumen
- Un código de Reed-Solomon codifica un mensaje de símbolos como los valores en puntos de un polinomio de grado menor que .
- Dos polinomios distintos coinciden en como mucho puntos, y de ahí sale , el máximo posible (código MDS).
- Corrige borrones, o errores, o una mezcla con .
- Trabaja con símbolos (por ejemplo, bytes), así que soporta muy bien las ráfagas.
- Con todos los puntos no nulos, en el orden , es un código cíclico con .
Siguiente lección: Decodificar Reed-Solomon: recuperar borrones por interpolación
Pruébalo: Raya y corrige
Para profundizar
- V. Guruswami, A. Rudra y M. Sudan, Essential Coding Theory (2023).
- W. C. Huffman y V. Pless, Fundamentals of Error-Correcting Codes, Cambridge University Press (2003).
- S. B. Wicker y V. K. Bhargava (eds.), Reed-Solomon Codes and Their Applications, IEEE Press (1994).
- H. P. Anvin, The mathematics of RAID-6 (2004, revisado en 2011).