Algoritmo de Berlekamp-Welch

El algoritmo de Berlekamp-Welch, también conocido como el algoritmo de Welch-Berlekamp, lleva el nombre de Elwyn R. Berlekamp y Lloyd R. Welch.[1][2]​ Este es un algoritmo decodificador que corrige de manera eficiente los errores en los códigos Reed-Solomon para un código RS (n, k), basado en la vista original de Reed Solomon donde un mensaje m 1 , , m k {\displaystyle m_{1},\cdots ,m_{k}} se utiliza como coeficientes de un polinomio F ( a i ) {\displaystyle F(a_{i})} o se utiliza con la interpolación de Lagrange para generar el polinomio F ( a i ) {\displaystyle F(a_{i})} de grado < k para entradas a 1 , , a k {\displaystyle a_{1},\cdots ,a_{k}} y luego F ( a i ) {\displaystyle F(a_{i})} es aplicado a a k + 1 , , a n {\displaystyle a_{k+1},\cdots ,a_{n}} para crear una palabra de código codificada c 1 , , c n {\displaystyle c_{1},\cdots ,c_{n}} .[3][4]

El objetivo del decodificador es recuperar el polinomio de codificación original F ( a i ) {\displaystyle F(a_{i})} , utilizando las entradas conocidas a 1 , , a n {\displaystyle a_{1},\cdots ,a_{n}} y recibida la palabra en clave b 1 , , b n {\displaystyle b_{1},\cdots ,b_{n}} con posibles errores. También calcula un error polinomial E ( a i ) {\displaystyle E(a_{i})} donde E ( a i ) = 0 {\displaystyle E(a_{i})=0} corresponde a errores en la palabra de código recibida.[5][6]

Ecuaciones clave

Definiendo e = número de errores, el conjunto clave de n ecuaciones es

b i E ( a i ) = E ( a i ) F ( a i ) {\displaystyle b_{i}E(a_{i})=E(a_{i})F(a_{i})}

Donde E(ai) = 0 para los casos e cuando bi ≠ F (ai), y E (ai) ≠ 0 para los casos n-e sin error donde bi = F(ai). Estas ecuaciones no se pueden resolver directamente, sino definiendo Q () como el producto de E () y F ():

Q ( a i ) = E ( a i ) F ( a i ) {\displaystyle Q(a_{i})=E(a_{i})F(a_{i})}

y agregando la restricción de que el coeficiente más significativo de E (ai) = ee = 1, el resultado conducirá a un conjunto de ecuaciones que se pueden resolver con álgebra lineal.

b i E ( a i ) = Q ( a i ) {\displaystyle b_{i}E(a_{i})=Q(a_{i})}
b i E ( a i ) Q ( a i ) = 0 {\displaystyle b_{i}E(a_{i})-Q(a_{i})=0}
b i ( e 0 + e 1 a i + e 2 a i 2 + + e e a i e ) ( q 0 + q 1 a i + q 2 a i 2 + + q q a i q ) = 0 {\displaystyle b_{i}(e_{0}+e_{1}a_{i}+e_{2}a_{i}^{2}+\cdots +e_{e}a_{i}^{e})-(q_{0}+q_{1}a_{i}+q_{2}a_{i}^{2}+\cdots +q_{q}a_{i}^{q})=0}

donde q = n - e - 1. Dado que ee está restringido a ser 1, las ecuaciones se convierten en:

b i ( e 0 + e 1 a i + e 2 a i 2 + + e e 1 a i e 1 ) ( q 0 + q 1 a i + q 2 a i 2 + + q q a i q ) = b i a i e {\displaystyle b_{i}(e_{0}+e_{1}a_{i}+e_{2}a_{i}^{2}+\cdots +e_{e-1}a_{i}^{e-1})-(q_{0}+q_{1}a_{i}+q_{2}a_{i}^{2}+\cdots +q_{q}a_{i}^{q})=-b_{i}a_{i}^{e}}

resultando en un conjunto de ecuaciones que se pueden resolver usando álgebra lineal, con complejidad de tiempo O (n ^ 3).

El algoritmo comienza asumiendo el número máximo de errores 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 pueden resolver o e se reduce a 0, lo que indica que no hay errores. Si Q () / E () tiene resto = 0, entonces F() = Q()/E() y los valores de la palabra de código F (ai) se calculan para las ubicaciones donde E(ai) = 0 para recuperar la palabra de código original. Si el resto ≠ 0, entonces se ha detectado un error incorregible.

Ejemplo

Considere RS (7,3) (n=7 k=3) definido en GF (7) con α = 3 y valores de entrada: ai = i-1: {0,1,2,3,4,5, 6}. El mensaje que se codificará sistemáticamente es {1,6,3}. Usando la interpolación de Lagrange, F (a i ) = 3 x 2 + 2 x + 1, y aplicando F (a i ) para un 4 = 3 a un 7 = 6, da como resultado la palabra de código {1,6,3,6, 1,2,2}. Suponga que ocurren errores en c 2 y c 5 que dan como resultado la palabra de código recibida {1,5,3,6,3,2,2}. Comienza con e = 2 y resuelve las ecuaciones lineales:

[ b 1 b 1 a 1 1 a 1 a 1 2 a 1 3 a 1 4 b 2 b 2 a 2 1 a 2 a 2 2 a 2 3 a 2 4 b 3 b 3 a 3 1 a 3 a 3 2 a 3 3 a 3 4 b 4 b 4 a 4 1 a 4 a 4 2 a 4 3 a 4 4 b 5 b 5 a 5 1 a 5 a 5 2 a 5 3 a 5 4 b 6 b 6 a 6 1 a 6 a 6 2 a 6 3 a 6 4 b 7 b 7 a 7 1 a 7 a 7 2 a 7 3 a 7 4 ] [ e 0 e 1 q 0 q 1 q 2 q 3 q 4 ] = [ b 1 a 1 2 b 2 a 2 2 b 3 a 3 2 b 4 a 4 2 b 5 a 5 2 b 6 a 6 2 b 7 a 7 2 ] {\displaystyle {\begin{bmatrix}b_{1}&b_{1}a_{1}&-1&-a_{1}&-a_{1}^{2}&-a_{1}^{3}&-a_{1}^{4}\\b_{2}&b_{2}a_{2}&-1&-a_{2}&-a_{2}^{2}&-a_{2}^{3}&-a_{2}^{4}\\b_{3}&b_{3}a_{3}&-1&-a_{3}&-a_{3}^{2}&-a_{3}^{3}&-a_{3}^{4}\\b_{4}&b_{4}a_{4}&-1&-a_{4}&-a_{4}^{2}&-a_{4}^{3}&-a_{4}^{4}\\b_{5}&b_{5}a_{5}&-1&-a_{5}&-a_{5}^{2}&-a_{5}^{3}&-a_{5}^{4}\\b_{6}&b_{6}a_{6}&-1&-a_{6}&-a_{6}^{2}&-a_{6}^{3}&-a_{6}^{4}\\b_{7}&b_{7}a_{7}&-1&-a_{7}&-a_{7}^{2}&-a_{7}^{3}&-a_{7}^{4}\\\end{bmatrix}}{\begin{bmatrix}e_{0}\\e_{1}\\q0\\q1\\q2\\q3\\q4\\\end{bmatrix}}={\begin{bmatrix}-b_{1}a_{1}^{2}\\-b_{2}a_{2}^{2}\\-b_{3}a_{3}^{2}\\-b_{4}a_{4}^{2}\\-b_{5}a_{5}^{2}\\-b_{6}a_{6}^{2}\\-b_{7}a_{7}^{2}\\\end{bmatrix}}}


[ 1 0 6 0 0 0 0 5 5 6 6 6 6 6 3 6 6 5 3 6 5 6 4 6 4 5 1 3 3 5 6 3 5 6 3 2 3 6 2 3 1 5 2 5 6 1 6 1 6 ] [ e 0 e 1 q 0 q 1 q 2 q 3 q 4 ] = [ 0 2 2 2 1 6 5 ] {\displaystyle {\begin{bmatrix}1&0&6&0&0&0&0\\5&5&6&6&6&6&6\\3&6&6&5&3&6&5\\6&4&6&4&5&1&3\\3&5&6&3&5&6&3\\2&3&6&2&3&1&5\\2&5&6&1&6&1&6\\\end{bmatrix}}{\begin{bmatrix}e_{0}\\e_{1}\\q0\\q1\\q2\\q3\\q4\\\end{bmatrix}}={\begin{bmatrix}0\\2\\2\\2\\1\\6\\5\\\end{bmatrix}}}


[ 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 ] [ e 0 e 1 q 0 q 1 q 2 q 3 q 4 ] = [ 4 2 4 3 3 1 3 ] {\displaystyle {\begin{bmatrix}1&0&0&0&0&0&0\\0&1&0&0&0&0&0\\0&0&1&0&0&0&0\\0&0&0&1&0&0&0\\0&0&0&0&1&0&0\\0&0&0&0&0&1&0\\0&0&0&0&0&0&1\\\end{bmatrix}}{\begin{bmatrix}e_{0}\\e_{1}\\q0\\q1\\q2\\q3\\q4\\\end{bmatrix}}={\begin{bmatrix}4\\2\\4\\3\\3\\1\\3\\\end{bmatrix}}}

Comenzando desde la parte inferior de la matriz derecha, y la restricción e2 = 1:

Q ( a i ) = 3 x 4 + 1 x 3 + 3 x 2 + 3 x + 4 {\displaystyle Q(a_{i})=3x^{4}+1x^{3}+3x^{2}+3x+4}

E ( a i ) = 1 x 2 + 2 x + 4 {\displaystyle E(a_{i})=1x^{2}+2x+4}

F ( a i ) = Q ( a i ) / E ( a i ) = 3 x 2 + 2 x + 1 {\displaystyle F(a_{i})=Q(a_{i})/E(a_{i})=3x^{2}+2x+1} con resto = 0.

E(ai) = 0 en a2 = 1 y a5 = 4 Calcula F(a2 = 1) = 6 y F(a5 = 4) = 1 para producir la palabra de código corregida {1,6,3,6,1,2,2}.

Véase también

  • Reed–Solomon

Referencias

  1. Error correction for algebraic block codes (en inglés), 27 de septiembre de 1983, consultado el 28 de marzo de 2021 .
  2. «Algebraic Codes on Lines, Planes, and Curves | Communications, information theory and signal processing». Cambridge University Press (en inglés). Consultado el 28 de marzo de 2021. 
  3. «US4633470A - Error correction for algebraic block codes». worldwide.espacenet.com. Consultado el 28 de marzo de 2021. 
  4. Berlekamp, Elwyn R. (1984). Algebraic coding theory (Rev. ed edición). Aegean Park Press. ISBN 0-89412-063-8. OCLC 10787423. Consultado el 28 de marzo de 2021. 
  5. «A simple algorithm for decoding Reed-Solomon codes and its relation to the Welch-Berlekamp algorithm». 
  6. Koetter, R.; Vardy, A. (2003-11). «Algebraic soft-decision decoding of Reed-Solomon codes». IEEE Transactions on Information Theory 49 (11): 2809-2825. ISSN 1557-9654. doi:10.1109/TIT.2003.819332. Consultado el 28 de marzo de 2021. 

Enlaces externos

  • MIT Lecture Notes on Essential Coding Theory – Dr. Madhu Sudan
  • University at Buffalo Lecture Notes on Coding Theory – Dr. Atri Rudra


Control de autoridades
  • Proyectos Wikimedia
  • Wd Datos: Q4892328
  • Wd Datos: Q4892328