Lección 10 de 11
Decodificar Reed-Solomon: recuperar borrones por interpolación
Recupera un mensaje de Reed-Solomon con borrones por interpolación de Lagrange o resolviendo un sistema, y entiende por qué un borrón cuesta la mitad que un error.
Borrador: pendiente de que lo revise el autor. Esta página no aparece en Google.
Al terminar sabrás:
- Recuperar el polinomio con borrones usando la interpolación de Lagrange
- Plantear la interpolación como un sistema lineal y resolverlo
- Saber cuántos borrones se pueden recuperar y por qué no más
- Entender por qué un borrón cuesta la mitad que un error
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 la lección anterior construimos el código sobre : un mensaje de 3 símbolos es un polinomio de grado menor que 3 y se envía como sus valores en 7 puntos. Ahora toca recuperarlo cuando el canal estropea parte de la palabra. Empezamos por el caso fácil, los borrones: cuando en un RAID 6 se estropea un disco, el sistema sabe cuál es, y solo tiene que reconstruir lo que había. En la próxima lección veremos los errores, en los que ni siquiera sabes dónde está el daño.
La idea
Un polinomio de grado menor que queda fijado por puntos cualesquiera de su gráfica. Si sabemos qué posiciones se han perdido, nos quedamos con de las que sobreviven y buscamos la única curva que pasa por ellas. Eso se llama interpolación.
Hay dos formas de hacerlo. Una es una fórmula que construye la curva pieza a pieza (Lagrange). La otra es plantear un sistema lineal cuyas incógnitas son los coeficientes del polinomio, y resolverlo como siempre. Las dos dan lo mismo.
Interpolación de Lagrange
Supongamos que conocemos los valores del polinomio en puntos distintos . La fórmula de Lagrange da directamente:
El símbolo es una suma y un producto: multiplica las fracciones para todos los distintos de . Así, vale 1 en y 0 en los demás , y la suma pasa por todos los puntos. La fórmula funciona en cualquier cuerpo, también en .
Como sistema lineal. Escribe . Cada punto conocido da una ecuación , lineal en los coeficientes. Son ecuaciones con incógnitas, y la matriz tiene filas (en el ejemplo, : ). Es una matriz de Vandermonde, invertible porque los son distintos, así que la solución es única.
Con se recuperan hasta borrones, porque sobreviven al menos posiciones. Con más no se puede: con menos de puntos pasan varios polinomios.
Ejemplo resuelto: 4 borrones
Seguimos con el ejemplo hilo, en con y . Enviamos la palabra
que viene del mensaje , o sea . La posición corresponde al punto .
El canal borra las posiciones 1, 2, 4 y 6 (son 4 borrones, el máximo que corrige el código). Recibimos:
Quedan tres puntos de la gráfica de : , y . Como , bastan. Recuerda que en restar es sumar.
(punto ). El numerador es , porque . El denominador es . Dividir entre es multiplicar por :
(punto ). El numerador es , porque . El denominador es , y su inverso es :
(punto ). El numerador es . El denominador es , y su inverso es :
La suma. . Coeficiente a coeficiente:
- Término en : .
- Término en : .
- Término independiente: .
(Cada suma se hace pasando a vectores de la tabla: por ejemplo, .)
Resultado: , el polinomio original, y el mensaje es . Para recuperar la palabra entera, evaluamos en los puntos borrados: , , y , que son los símbolos de las posiciones 1, 2, 4 y 6.
Con otras tres posiciones cualesquiera habría salido el mismo : los siete valores de son puntos de , y por tres puntos pasa un solo polinomio de grado menor que 3.
Por qué un borrón vale la mitad que un error
Ante un borrón conoces la posición y solo te falta el valor: una incógnita. Ante un error te faltan las dos cosas, la posición y el valor. Cada incógnita cuesta un símbolo de redundancia, así que un borrón gasta uno y un error gasta dos. Con símbolos de redundancia se recuperan borrones, pero solo errores. Y en general, con errores y borrones, la regla es .
Puedes verlo en Raya y corrige: raya la imagen hasta que el decodificador falle, y repite con la casilla «Sé dónde he dañado» activada. Con ella, los símbolos rayados pasan a ser borrones (el decodificador sabe dónde están) y aguanta aproximadamente el doble de rayas.
Ejercicios
Ejercicio 1
En (los restos módulo 7) se usa un código de Reed-Solomon con los puntos y : el mensaje es una recta . Se recibe . Recupera el mensaje y la palabra enviada.
Ver la solución
Sobreviven las posiciones 2 y 5: y . Es decir,
Restando, , así que . Entonces (en , ). El mensaje es , es decir, .
Evaluando en los seis puntos: , , , , , . La palabra es . Es un código : aguanta borrones, justo los que había.
Ejercicio 2
En el código del ejemplo se recibe . Recupera el mensaje resolviendo el sistema lineal (no con Lagrange).
Ver la solución
Sobreviven las posiciones 1, 4 y 6, es decir, los puntos , y . Con y :
Sumamos la primera ecuación a las otras dos (en , sumar es restar), con , y :
Multiplicamos la primera por : . Sumada a la segunda queda , es decir, , y . Entonces , así que . Y .
El mensaje es : el del ejercicio 1 de la lección 9, cuya palabra es .
Ejercicio 3
Del código solo llegan las posiciones 6 y 7 de la palabra del ejemplo, y , y se sabe cuáles son: hay 5 borrones. Encuentra un polinomio de grado menor que 3, distinto de , que también encaje. ¿Cuántos encajan en total?
Ver la solución
El polinomio constante vale en todos los puntos, también en y . Así que los mensajes y son compatibles con lo recibido, y no hay forma de saber cuál se envió.
En total encajan 8: si además se fija el valor en un tercer punto, hay un único polinomio por los tres, y ese valor se puede elegir de 8 maneras (los 8 elementos de ). Por eso 5 borrones son demasiados: .
En resumen
- Con borrones, símbolos que sobrevivan bastan: se interpola y se recupera el polinomio, y con él el mensaje.
- La interpolación se hace con la fórmula de Lagrange o resolviendo un sistema lineal con matriz de Vandermonde.
- Se recuperan hasta borrones; con uno más, pasan varios polinomios por lo que queda.
- Un borrón cuesta un símbolo de redundancia y un error, dos: .
Siguiente lección: Corregir errores en Reed-Solomon
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).
- D. J. C. MacKay, Information Theory, Inference, and Learning Algorithms (2003).