Algoritmo de Berlekamp-Welch

De testwiki
Revisión del 03:23 9 ene 2023 de imported>LaBrujaEscarlata (growthexperiments-addlink-summary-summary:2|0|0)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Ir a la navegación Ir a la búsqueda

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 m1,,mkse utiliza como coeficientes de un polinomio F(ai) o se utiliza con la interpolación de Lagrange para generar el polinomio F(ai) de grado < k para entradas a1,,ak y luego F(ai) es aplicado a ak+1,,an para crear una palabra de código codificada c1,,cn.[3][4]

El objetivo del decodificador es recuperar el polinomio de codificación original F(ai), utilizando las entradas conocidas a1,,an y recibida la palabra en clave b1,,bn con posibles errores. También calcula un error polinomial E(ai) donde E(ai)=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

biE(ai)=E(ai)F(ai)

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(ai)=E(ai)F(ai)

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.

biE(ai)=Q(ai)
biE(ai)Q(ai)=0
bi(e0+e1ai+e2ai2++eeaie)(q0+q1ai+q2ai2++qqaiq)=0

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

bi(e0+e1ai+e2ai2++ee1aie1)(q0+q1ai+q2ai2++qqaiq)=biaie

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:

[b1b1a11a1a12a13a14b2b2a21a2a22a23a24b3b3a31a3a32a33a34b4b4a41a4a42a43a44b5b5a51a5a52a53a54b6b6a61a6a62a63a64b7b7a71a7a72a73a74][e0e1q0q1q2q3q4]=[b1a12b2a22b3a32b4a42b5a52b6a62b7a72]


[1060000556666636653656464513356356323623152561616][e0e1q0q1q2q3q4]=[0222165]


[1000000010000000100000001000000010000000100000001][e0e1q0q1q2q3q4]=[4243313]

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

Q(ai)=3x4+1x3+3x2+3x+4

E(ai)=1x2+2x+4

F(ai)=Q(ai)/E(ai)=3x2+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

Referencias

Plantilla:Listaref

Enlaces externos


Plantilla:Control de autoridades