Algoritmo de corrección de errores
El algoritmo Berlekamp–Welch , también conocido como algoritmo Welch–Berlekamp , debe su nombre a Elwyn R. Berlekamp y Lloyd R. Welch . Se trata de un algoritmo decodificador que corrige de forma eficiente los errores en los códigos Reed–Solomon para un código RS( n , k ), basado en la visión original de Reed Solomon, donde un mensaje se utiliza como coeficiente de un polinomio o se utiliza con interpolación de Lagrange para generar el polinomio de grado < k para las entradas y luego se aplica para crear una palabra de código codificada .
El objetivo del decodificador es recuperar el polinomio de codificación original , utilizando las entradas conocidas y la palabra de código recibida con posibles errores. También calcula un polinomio de error donde corresponde a los errores en la palabra de código recibida.
Las ecuaciones clave
Definiendo e = número de errores, el conjunto clave de n ecuaciones es
Donde E( a i ) = 0 para los casos e cuando b i ≠ F( a i ), y E( a i ) ≠ 0 para los n - e casos sin error donde b i = F( a i ) . Estas ecuaciones no se pueden resolver directamente, pero definiendo Q() como el producto de E() y F():
y añadiendo la restricción de que el coeficiente más significativo de E(a i ) = e e = 1, el resultado conducirá a un conjunto de ecuaciones que pueden resolverse con álgebra lineal.
donde q = n - e - 1. Como e está restringido a ser 1, las ecuaciones se convierten en:
resultando en un conjunto de ecuaciones que pueden resolverse usando álgebra lineal, con complejidad temporal .
El algoritmo comienza suponiendo que el número máximo de errores es e = ⌊( n - k )/2⌋. Si las ecuaciones no se pueden resolver (debido a la redundancia), e se reduce en 1 y el proceso se repite hasta que las ecuaciones se puedan resolver o e se reduzca a 0, lo que indica que no hay errores. Si Q()/E() tiene un resto = 0, entonces F() = Q()/E() y los valores de las palabras de código F( a i ) se calculan para las ubicaciones donde E( a i ) = 0 para recuperar la palabra de código original. Si el resto ≠ 0, entonces se ha detectado un error incorregible.
Ejemplo
Consideremos RS(7,3) ( n = 7, k = 3) definido en GF (7) con α = 3 y valores de entrada: a i = i-1 : {0,1,2,3,4,5,6}. El mensaje que se va a codificar sistemáticamente es {1,6,3}. Utilizando la interpolación de Lagrange, F(a i ) = 3 x 2 + 2 x + 1, y aplicando F(a i ) para a 4 = 3 a a 7 = 6, se obtiene la palabra de código {1,6,3,6,1,2,2}. Supongamos que se producen errores en c 2 y c 5, lo que da como resultado la palabra de código recibida {1,5,3,6,3,2,2}. Empecemos con e = 2 y resolvamos las ecuaciones lineales:
Comenzando desde la parte inferior de la matriz derecha y la restricción e 2 = 1:
con resto = 0.
E( a i ) = 0 en a 2 = 1 y a 5 = 4 Calcule F( a 2 = 1) = 6 y F( a 5 = 4) = 1 para producir la palabra de código corregida {1,6,3,6,1,2,2}.
Véase también
Enlaces externos
- Notas de la conferencia del MIT sobre teoría de codificación esencial: Dra. Madhu Sudan
- Notas de la conferencia sobre teoría de la codificación de la Universidad de Buffalo: Dr. Atri Rudra
- Códigos algebraicos sobre líneas, planos y curvas: un enfoque de ingeniería – Richard E. Blahut
- Descodificación de códigos Reed-Solomon por Welch Berlekamp – LR Welch
- US 4,633,470, Welch, Lloyd R. & Berlekamp, Elwyn R. , "Error Correction for Algebraic Block Codes", publicada el 27 de septiembre de 1983, emitida el 30 de diciembre de 1986 – La patente de Lloyd R. Welch y Elewyn R. Berlekamp