Lección 11 de 11
Corregir errores en Reed-Solomon
Localiza y corrige errores en Reed-Solomon con el sistema lineal de Berlekamp-Welch, mezcla errores y borrones y usa el entrelazado contra las ráfagas.
Borrador: pendiente de que lo revise el autor. Esta página no aparece en Google.
Al terminar sabrás:
- Explicar la decodificación de errores como buscar el polinomio que más coincide
- Plantear y comprobar el sistema de Berlekamp-Welch para un error
- Aplicar la regla 2e + b ≤ n − k a errores y borrones mezclados
- Saber qué hace el entrelazado con las ráfagas
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 recuperamos borrones: sabíamos qué símbolos faltaban y bastaba interpolar con los que quedaban. Con los errores es más difícil, porque nadie avisa de dónde están. Un lector de QR no sabe qué módulos ha manchado el café: lee una palabra, algunos símbolos son falsos y tiene que descubrir cuáles. Veremos cómo se hace con un sistema lineal, y cerraremos el curso.
La idea
Si la palabra recibida tiene como mucho errores, el polinomio correcto coincide con en al menos posiciones. Y es el único que lo hace cuando . Dos polinomios distintos de grado menor que coinciden en como mucho posiciones. Si los dos coincidieran con en posiciones, coincidirían entre ellos en al menos de ellas: imposible.
Seguimos con el ejemplo hilo: el código sobre , el mensaje y su palabra . El canal cambia la posición 2 (punto ): llega en vez de . Recibimos
Buscamos un polinomio de grado menor que 3 que coincida con en al menos 6 posiciones. Una forma ingenua es probar ternas de posiciones e interpolar. Con las posiciones 1, 2 y 3 sale , que solo coincide con en esas 3: descartado. Con 1, 3 y 4 sale , que coincide en 6: es el bueno. En un código habría que probar un número astronómico de combinaciones: hace falta algo mejor.
Berlekamp-Welch: el error como incógnita
El truco es convertir la posición del error en una incógnita más. Si el error está en el punto (que no conocemos), llamamos localizador de errores a
que se anula justo ahí. Y definimos , de grado como mucho 3. Entonces, en cada posición , con punto ,
¿Por qué? Si la posición es correcta, y es la definición de . Si es la del error, los dos lados valen 0, porque . El localizador «tapa» el error.
Lo bueno es que esas ecuaciones son lineales. Las incógnitas son los coeficientes de y el de (en , ). La ecuación de la posición queda
Son 7 ecuaciones con 5 incógnitas. Con errores, tiene grado y grado menor que : salen incógnitas, que no pasan de porque .
Ejemplo resuelto: un error con Berlekamp-Welch
Con los siete puntos y los valores de (usando ), la matriz ampliada del sistema, con columnas y el término independiente, es:
Por ejemplo, la fila 4 es el punto : , , y .
Resolver. Gauss, como con cualquier sistema, da una única solución:
Es decir, y . Puedes comprobar que cumple las siete ecuaciones :
| posición | |||||
|---|---|---|---|---|---|
| 1 | |||||
| 2 | |||||
| 3 | |||||
| 4 | |||||
| 5 | |||||
| 6 | |||||
| 7 |
Dónde está el error. se anula en , el punto de la posición 2.
El mensaje. Dividimos entre :
- . Queda .
- . Queda .
- . Resto 0.
El cociente es : el mensaje . El símbolo correcto de la posición 2 es , y el error valía .
Un detalle: si hay menos errores de los previstos, puede salir con raíces de más (posiciones correctas), pero el cociente siempre es el polinomio del mensaje.
En la práctica: Berlekamp-Massey y Euclides
En un código con , Berlekamp-Welch plantea un sistema de 255 incógnitas, y Gauss es caro. Los decodificadores reales usan Berlekamp-Massey o el algoritmo de Euclides: parten del síndrome (el de las lecciones 6 y 8) y calculan el localizador con un número de operaciones que crece como . Después buscan sus raíces y los valores de los errores. La demo de abajo usa Berlekamp-Massey.
Errores y borrones a la vez
Como vimos en la lección anterior, un borrón gasta un símbolo de redundancia y un error, dos: se corrigen errores y borrones si . Las posiciones borradas simplemente se quitan; las que quedan forman un código de Reed-Solomon más corto.
Ejemplo. En el caben y . El canal borra las posiciones 1 y 7 de y cambia la 4: llega en vez de . Quedan las posiciones 2 a 6, con valores : es un código de longitud 5 con y , que corrige 1 error. Buscamos un polinomio de grado menor que 3 que coincida en al menos 4 de esas 5 posiciones. De las 10 ternas posibles, las 4 que no usan la posición 4 dan , que coincide en las posiciones 2, 3, 5 y 6. Las 6 que la usan dan polinomios que solo coinciden en sus 3 puntos. El error está en la posición 4. (Berlekamp-Welch también vale aquí: basta quitar las ecuaciones de las posiciones borradas.)
Ráfagas y entrelazado
Un arañazo estropea símbolos seguidos, y un código que corrige errores falla si caen más de en una misma palabra. El entrelazado reparte la ráfaga:
- Escribe palabras código una debajo de otra, como filas de una tabla.
- Transmite la tabla por columnas.
- El receptor la reordena y decodifica cada fila.
Símbolos seguidos en la transmisión van a filas distintas. Una ráfaga de hasta símbolos deja a cada fila con errores como mucho.
Pruébalo
En la demo, raya la imagen y pulsa corregir: las rayas cuentan como errores. Sube el daño hasta que falle. Luego repite con la casilla «Sé dónde he dañado» activada: las rayas pasan a ser borrones y el decodificador aguanta aproximadamente el doble. El ruido cuenta siempre como errores.
- Raya con el ratón (o el dedo) la imagen del centro, la recibida.
- Pulsa Corregir: el ordenador intenta reconstruirla con el código elegido.
- Busca el límite: raya cada vez más y vuelve a corregir. Si rayas demasiado, el código ya no puede arreglarlo todo y verás en rojo lo que se ha perdido.
Reed-Solomon RS(255, 191)
Tasa 74,9 % · corrige 32 bytes erróneos por palabra · 1030 palabras
Ver el código
Raya la imagen y pulsa «Corregir» para ver aquí una palabra antes y después del daño.
Polinomio generador de RS(255, 191)
g(x) = (x − α⁰)(x − α¹)···(x − α^63) sobre GF(256), con α = 2 y el polinomio x⁸ + x⁴ + x³ + x² + 1. Coeficientes como potencias de α, del término de mayor grado al independiente:
1 · α^45 · α^51 · α^175 · α^9 · α^7 · α^158 · α^159 · α^49 · α^68 · α^119 · α^92 · α^123 · α^177 · α^204 · α^187 · α^254 · α^200 · α^78 · α^141 · α^149 · α^119 · α^26 · α^127 · α^53 · α^160 · α^93 · α^199 · α^212 · α^29 · α^24 · α^145 · α^156 · α^208 · α^150 · α^218 · α^209 · α^4 · α^216 · α^91 · α^47 · α^184 · α^146 · α^47 · α^140 · α^195 · α^195 · α^125 · α^242 · α^238 · α^63 · α^99 · α^108 · α^140 · α^230 · α^242 · α^31 · α^204 · α^11 · α^178 · α^243 · α^217 · α^156 · α^213 · α^231
Ejercicios
Ejercicio 1
Un código sobre corrige errores por palabra. Se entrelazan palabras (escritas en filas y transmitidas por columnas). ¿Cuántos bytes seguidos puede destruir una ráfaga sin que falle la decodificación?
Ver la solución
En la transmisión por columnas, los bytes van pasando por las filas 1, 2, 3, 4, 5, 1, 2… Una ráfaga de bytes seguidos toca cada fila como mucho veces ( redondeado hacia arriba). Para que ninguna fila pase de 16 errores hace falta , es decir, .
Sin entrelazar, solo aguantaría 16: se multiplica por 5 sin añadir redundancia.
Ejercicio 2
Con el mismo mensaje , ahora llega . El sistema de Berlekamp-Welch da y . ¿En qué posición está el error? Divide entre y di cuánto valía el error.
Ver la solución
se anula en , el punto de la posición 5. Ahí está el error.
División de entre :
- . Queda , porque .
- . Queda , porque .
- . Resto 0.
El cociente es . El símbolo correcto de la posición 5 es (está en ), y llegó . El error valía .
Comprobación de la ecuación de la posición 5: y , así que se cumple valga lo que valga .
En resumen
- Con errores, el polinomio correcto es el único de grado menor que que coincide con lo recibido en al menos posiciones, si .
- Berlekamp-Welch añade el localizador como incógnita: las ecuaciones son lineales, señala el error y .
- En la práctica se usan Berlekamp-Massey o Euclides, que parten del síndrome.
- Errores y borrones se mezclan con la regla .
- El entrelazado reparte una ráfaga entre varias palabras.
Y ahora, ¿qué?
Aquí termina el curso. Has visto qué es un código, los cuerpos finitos, los códigos lineales, la matriz generatriz y la de paridad, los errores y los borrones, el síndrome, los códigos cíclicos y Reed-Solomon, con su decodificación. Para seguir:
- Códigos BCH: los cíclicos con distancia garantizada; Reed-Solomon es un caso particular.
- Códigos LDPC: matrices de paridad muy dispersas, decodificación iterativa, y muy cerca del límite teórico del canal (la capacidad de Shannon).
- Códigos polares: alcanzan esa capacidad de forma asintótica, cuando la longitud tiende a infinito, en los canales binarios simétricos sin memoria.
- Códigos cuánticos: la misma idea de redundancia aplicada a cúbits, necesaria para construir ordenadores cuánticos que funcionen.
Para profundizar, Essential Coding Theory (libre) sigue con la parte algebraica, y el libro de MacKay (también libre) con LDPC y la teoría de la información. Tienes el mapa completo en la guía de códigos correctores, y puedes volver a Raya y corrige cuando quieras.
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).