Articulo de referencia

Código BCH

En teoría de la codificación , los códigos de Bose - Chaudhuri - Hocquenghem ( códigos BCH ) forman una clase de códigos correctores de errores cíclicos que se construyen utiliz...

En teoría de la codificación , los códigos de Bose - Chaudhuri - Hocquenghem ( códigos BCH ) forman una clase de códigos correctores de errores cíclicos que se construyen utilizando polinomios sobre un cuerpo finito (también llamado cuerpo de Galois ). Los códigos BCH fueron inventados en 1959 por el matemático francés Alexis Hocquenghem , e independientemente en 1960 por Raj Chandra Bose y DK Ray-Chaudhuri . [ 1 ] [ 2 ] [ 3 ] El nombre Bose - Chaudhuri - Hocquenghem (y el acrónimo BCH ) surge de las iniciales de los apellidos de los inventores (erróneamente, en el caso de Ray-Chaudhuri).

Una de las características clave de los códigos BCH es que, durante su diseño, se controla con precisión el número de errores de símbolo que puede corregir el código. En particular, es posible diseñar códigos BCH binarios que corrijan múltiples errores de bit. Otra ventaja de los códigos BCH es la facilidad con la que se pueden decodificar, mediante un método algebraico conocido como decodificación por síndrome . Esto simplifica el diseño del decodificador para estos códigos, utilizando hardware electrónico pequeño y de bajo consumo .

Los códigos BCH se utilizan en aplicaciones como comunicaciones por satélite, [ 4 ] reproductores de discos compactos , DVD , unidades de disco , unidades flash USB , unidades de estado sólido , [ 5 ] y códigos de barras bidimensionales .

Definición e ilustración

Códigos BCH primitivos de sentido estricto

Dado un número primo q y una potencia prima q m con enteros positivos m y d tales que dq m − 1 , se construye un código BCH primitivo en sentido estricto sobre el campo finito (o campo de Galois) GF( q ) con longitud de código n = q m − 1 y distancia al menos d mediante el siguiente método.

Sea α un elemento primitivo de GF( q m ) . Para cualquier entero positivo i , sea m i ( x ) el polinomio mínimo con coeficientes en GF( q ) de α i . El polinomio generador del código BCH se define como el mínimo común múltiplo g ( x ) = mcm( m 1 ( x ),…, m d − 1 ( x )) . Se puede observar que g ( x ) es un polinomio con coeficientes en GF( q ) y divide a x n − 1 . Por lo tanto, el código polinómico definido por g ( x ) es un código cíclico.

Ejemplo

Sea q = 2 y m = 4 (por lo tanto n = 15 ). Consideraremos diferentes valores de d para GF(16) = GF(2 4 ) basados ​​en el polinomio reductor z 4 + z + 1 , usando el elemento primitivo α ( z ) = z . Hay catorce polinomios mínimos m i ( x ) con coeficientes en GF(2) que satisfacen

metroi(αi)mod(z4+z+1)=0.{\displaystyle m_{i}\left(\alpha ^{i}\right){\bmod {\left(z^{4}+z+1\right)}}=0.}

Los polinomios mínimos son

metro1(incógnita)=metro2(incógnita)=metro4(incógnita)=metro8(incógnita)=incógnita4+incógnita+1,metro3(incógnita)=metro6(incógnita)=metro9(incógnita)=metro12(incógnita)=incógnita4+incógnita3+incógnita2+incógnita+1,metro5(incógnita)=metro10(incógnita)=incógnita2+incógnita+1,metro7(incógnita)=metro11(incógnita)=metro13(incógnita)=metro14(incógnita)=incógnita4+incógnita3+1.{\displaystyle {\begin{aligned}m_{1}(x)&=m_{2}(x)=m_{4}(x)=m_{8}(x)=x^{4}+x+1,\\m_{3}(x)&=m_{6}(x)=m_{9}(x)=m_{12}(x)=x^{4}+x^{3}+x^{2}+x+1,\\m_{5}(x)&=m_{10}(x)=x^{2}+x+1,\\m_{7}(x)&=m_{11}(x)=m_{13}(x)=m_{14}(x)=x^{4}+x^{3}+1.\end{aligned}}}

El código BCH cond=2,3{\displaystyle d=2,3}tiene el polinomio generador

gramo(incógnita)=ldometro(metro1(incógnita),metro2(incógnita))=metro1(incógnita)=incógnita4+incógnita+1.{\displaystyle g(x)={\rm {lcm}}(m_{1}(x),m_{2}(x))=m_{1}(x)=x^{4}+x+1.\,}

Tiene una distancia de Hamming mínima de al menos 3 y corrige hasta un error. Dado que el polinomio generador es de grado 4, este código tiene 11 bits de datos y 4 bits de suma de verificación. También se denota como: código BCH (15, 11) .

El código BCH cond=4,5{\displaystyle d=4,5}tiene el polinomio generador

gramo(incógnita)=ldometro(metro1(incógnita),metro2(incógnita),metro3(incógnita),metro4(incógnita))=metro1(incógnita)metro3(incógnita)=(incógnita4+incógnita+1)(incógnita4+incógnita3+incógnita2+incógnita+1)=incógnita8+incógnita7+incógnita6+incógnita4+1.{\displaystyle {\begin{aligned}g(x)&={\rm {lcm}}(m_{1}(x),m_{2}(x),m_{3}(x),m_{4}(x))=m_{1}(x)m_{3}(x)\\&=\left(x^{4}+x+1\right)\left(x^{4}+x^{3}+x^{2}+x+1\right)=x^{8}+x^{7}+x^{6}+x^{4}+1.\end{aligned}}}

Tiene una distancia de Hamming mínima de al menos 5 y corrige hasta dos errores. Dado que el polinomio generador es de grado 8, este código tiene 7 bits de datos y 8 bits de suma de verificación. También se denota como: código BCH (15, 7) .

El código BCH cond=6,7{\displaystyle d=6,7}tiene el polinomio generador

gramo(incógnita)=ldometro(metro1(incógnita),metro2(incógnita),metro3(incógnita),metro4(incógnita),metro5(incógnita),metro6(incógnita))=metro1(incógnita)metro3(incógnita)metro5(incógnita)=(incógnita4+incógnita+1)(incógnita4+incógnita3+incógnita2+incógnita+1)(incógnita2+incógnita+1)=incógnita10+incógnita8+incógnita5+incógnita4+incógnita2+incógnita+1.{\displaystyle {\begin{aligned}g(x)&={\rm {lcm}}(m_{1}(x),m_{2}(x),m_{3}(x),m_{4}(x),m_{5}(x),m_{6}(x))=m_{1}(x)m_{3}(x)m_{5}(x)\\&=\left(x^{4}+x+1\right)\left(x^{4}+x^{3}+x^{2}+x+1\right)\left(x^{2}+x+1\right)=x^{10}+x^{8}+x^{5}+x^{4}+x^{2}+x+1.\end{aligned}}}

Tiene una distancia de Hamming mínima de al menos 7 y corrige hasta tres errores. Dado que el polinomio generador es de grado 10, este código tiene 5 bits de datos y 10 bits de suma de verificación. También se denota como: código BCH (15, 5) . (Este polinomio generador en particular tiene una aplicación práctica en la información de formato del código QR ).

El código BCH cond=8{\displaystyle d=8}y superior tiene el polinomio generador

gramo(incógnita)=ldometro(metro1(incógnita),metro2(incógnita),...,metro14(incógnita))=metro1(incógnita)metro3(incógnita)metro5(incógnita)metro7(incógnita)=(incógnita4+incógnita+1)(incógnita4+incógnita3+incógnita2+incógnita+1)(incógnita2+incógnita+1)(incógnita4+incógnita3+1)=incógnita14+incógnita13+incógnita12++incógnita2+incógnita+1.{\displaystyle {\begin{aligned}g(x)&={\rm {lcm}}(m_{1}(x),m_{2}(x),...,m_{14}(x))=m_{1}(x)m_{3}(x)m_{5}(x)m_{7}(x)\\&=\left(x^{4}+x+1\right)\left(x^{4}+x^{3}+x^{2}+x+1\right)\left(x^{2}+x+1\right)\left(x^{4}+x^{3}+1\right)=x^{14}+x^{13}+x^{12}+\cdots +x^{2}+x+1.\end{aligned}}}

Este código tiene una distancia de Hamming mínima de 15 y corrige 7 errores. Tiene 1 bit de datos y 14 bits de suma de verificación. También se denota como: código BCH (15, 1) . De hecho, este código tiene solo dos palabras clave: 000000000000000 y 111111111111111 (un código de repetición trivial ).

Códigos BCH generales

Los códigos BCH generales difieren de los códigos BCH primitivos de sentido estricto en dos aspectos.

Primero, el requisito de queα{\displaystyle \alpha }ser un elemento primitivo deGRAMOF(qmetro){\displaystyle \mathrm {GF} (q^{m})}puede relajarse. Al relajar este requisito, la longitud del código cambia deqmetro1{\displaystyle q^{m}-1}aord(α),{\displaystyle \mathrm {ord} (\alpha),}el orden del elementoα.{\displaystyle \alpha .}

En segundo lugar, las raíces consecutivas del polinomio generador pueden ir desdeαdo,,αdo+d2{\displaystyle \alpha ^{c},\ldots ,\alpha ^{c+d-2}}en lugar deα,,αd1.{\displaystyle \alpha ,\ldots ,\alpha ^{d-1}.}

Definición. Fijar un campo finitoGRAMOF(q),{\displaystyle GF(q),}dóndeq{\displaystyle q}es una potencia prima. Elija números enteros positivos.metro,norte,d,do{\displaystyle m,n,d,c}de tal manera que2dnorte,{\displaystyle 2\leq d\leq n,}gramodod(norte,q)=1,{\displaystyle {\rm {gcd}}(n,q)=1,} ymetro{\displaystyle m}es el orden multiplicativo deq{\displaystyle q}módulonorte.{\displaystyle n.}

Como antes, dejemosα{\displaystyle \alpha }ser un primitivonorte{\displaystyle n}raíz de la unidad enGRAMOF(qmetro),{\displaystyle GF(q^{m}),}y dejarmetroi(incógnita){\displaystyle m_{i}(x)}sea ​​el polinomio mínimo sobreGRAMOF(q){\displaystyle GF(q)}deαi{\displaystyle \alpha ^{i}}a pesar dei.{\displaystyle i.} El polinomio generador del código BCH se define como el mínimo común múltiplo.gramo(incógnita)=ldometro(metrodo(incógnita),,metrodo+d2(incógnita)).{\displaystyle g(x)={\rm {lcm}}(m_{c}(x),\ldots ,m_{c+d-2}(x)).}

Nota: sinorte=qmetro1{\displaystyle n=q^{m}-1}como en la definición simplificada, entoncesgramodod(norte,q){\displaystyle {\rm {gcd}}(n,q)}es 1, y el orden deq{\displaystyle q}módulonorte{\displaystyle n}esmetro.{\displaystyle m.} Por lo tanto, la definición simplificada es, en efecto, un caso especial de la definición general.

Casos especiales

  • Un código BCH condo=1{\displaystyle c=1}Se denomina código BCH de sentido estricto .
  • Un código BCH connorte=qmetro1{\displaystyle n=q^{m}-1}se llama primitivo .

El polinomio generadorgramo(incógnita){\displaystyle g(x)}de un código BCH tiene coeficientes deGRAMOF(q).{\displaystyle \mathrm {GF} (q).} En general, un código cíclico sobreGRAMOF(qpag){\displaystyle \mathrm {GF} (q^{p})}congramo(incógnita){\displaystyle g(x)}como el polinomio generador se llama código BCH sobreGRAMOF(qpag).{\displaystyle \mathrm {GF} (q^{p}).} El código BCH sobreGRAMOF(qmetro){\displaystyle \mathrm {GF} (q^{m})}y polinomio generadorgramo(incógnita){\displaystyle g(x)}con poderes sucesivos deα{\displaystyle \alpha }como raíces es un tipo de código Reed-Solomon donde el alfabeto del decodificador (síndromes) es el mismo que el alfabeto del canal (datos y polinomio generador), todos los elementos deGRAMOF(qmetro){\displaystyle \mathrm {GF} (q^{m})}. [ 6 ] El otro tipo de código Reed Solomon es un código Reed Solomon de vista original que no es un código BCH.

Propiedades

El polinomio generador de un código BCH tiene grado como máximo(d1)metro{\displaystyle (d-1)m}. Además, siq=2{\displaystyle q=2}ydo=1{\displaystyle c=1}, el polinomio generador tiene grado como máximodmetro/2{\displaystyle dm/2}.

Un código BCH tiene una distancia de Hamming mínima al menosd{\displaystyle d}.

Un código BCH es cíclico.

Codificación

Dado que cualquier polinomio que sea múltiplo del polinomio generador es una palabra clave BCH válida, la codificación BCH es simplemente el proceso de encontrar algún polinomio que tenga al generador como factor.

El código BCH en sí mismo no prescribe el significado de los coeficientes del polinomio; conceptualmente, la única preocupación de un algoritmo de decodificación BCH es encontrar la palabra clave válida con la mínima distancia de Hamming a la palabra clave recibida. Por lo tanto, el código BCH puede implementarse como un código sistemático o no, dependiendo de cómo el implementador decida integrar el mensaje en el polinomio codificado.

Codificación no sistemática: El mensaje como factor

La forma más sencilla de encontrar un polinomio que sea múltiplo del generador es calcular el producto de un polinomio cualquiera por dicho generador. En este caso, el polinomio arbitrario se puede elegir utilizando los símbolos del mensaje como coeficientes.

s(incógnita)=pag(incógnita)gramo(incógnita){\displaystyle s(x)=p(x)g(x)}

Como ejemplo, consideremos el polinomio generador.gramo(incógnita)=incógnita10+incógnita9+incógnita8+incógnita6+incógnita5+incógnita3+1{\displaystyle g(x)=x^{10}+x^{9}+x^{8}+x^{6}+x^{5}+x^{3}+1}, elegido para su uso en el código binario BCH (31, 21) utilizado por POCSAG y otros. Para codificar el mensaje de 21 bits {101101110111101111101}, primero lo representamos como un polinomio sobreGRAMOF(2){\displaystyle GF(2)}:

pag(incógnita)=incógnita20+incógnita18+incógnita17+incógnita15+incógnita14+incógnita13+incógnita11+incógnita10+incógnita9+incógnita8+incógnita6+incógnita5+incógnita4+incógnita3+incógnita2+1{\displaystyle p(x)=x^{20}+x^{18}+x^{17}+x^{15}+x^{14}+x^{13}+x^{11}+x^{10}+x^{9}+x^{8}+x^{6}+x^{5}+x^{4}+x^{3}+x^{2}+1}

Luego, calcule (también sobreGRAMOF(2){\displaystyle GF(2)}):

s(incógnita)=pag(incógnita)gramo(incógnita)=(incógnita20+incógnita18+incógnita17+incógnita15+incógnita14+incógnita13+incógnita11+incógnita10+incógnita9+incógnita8+incógnita6+incógnita5+incógnita4+incógnita3+incógnita2+1)(incógnita10+incógnita9+incógnita8+incógnita6+incógnita5+incógnita3+1)=incógnita30+incógnita29+incógnita26+incógnita25+incógnita24+incógnita22+incógnita19+incógnita17+incógnita16+incógnita15+incógnita14+incógnita12+incógnita10+incógnita9+incógnita8+incógnita6+incógnita5+incógnita4+incógnita2+1{\displaystyle {\begin{aligned}s(x)&=p(x)g(x)\\&=\left(x^{20}+x^{18}+x^{17}+x^{15}+x^{14}+x^{13}+x^{11}+x^{10}+x^{9}+x^{8}+x^{6}+x^{5}+x^{4}+x^{3}+x^{2}+1\right)\left(x^{10}+x^{9}+x^{8}+x^{6}+x^{5}+x^{3}+1\right)\\&=x^{30}+x^{29}+x^{26}+x^{25}+x^{24}+x^{22}+x^{19}+x^{17}+x^{16}+x^{15}+x^{14}+x^{12}+x^{10}+x^{9}+x^{8}+x^{6}+x^{5}+x^{4}+x^{2}+1\end{aligned}}}

Por lo tanto, la palabra clave transmitida es {1100111010010111101011101110101}.

El receptor puede usar estos bits como coeficientes ens(incógnita){\displaystyle s(x)}y, tras corregir errores para asegurar una palabra clave válida, puede recalcularpag(incógnita)=s(incógnita)/gramo(incógnita){\displaystyle p(x)=s(x)/g(x)}

Codificación sistemática: El mensaje como prefijo

Un código sistemático es aquel en el que el mensaje aparece textualmente en algún lugar dentro de la palabra clave. Por lo tanto, la codificación BCH sistemática implica primero incrustar el polinomio del mensaje dentro del polinomio de la palabra clave y luego ajustar los coeficientes de los términos restantes (que no son del mensaje) para asegurar ques(incógnita){\displaystyle s(x)}es divisible porgramo(incógnita){\displaystyle g(x)}.

Este método de codificación aprovecha el hecho de que restar el resto de un dividendo da como resultado un múltiplo del divisor. Por lo tanto, si tomamos nuestro polinomio de mensajepag(incógnita){\displaystyle p(x)}como antes y multiplícalo porincógnitanortek{\displaystyle x^{n-k}}(para "desplazar" el mensaje para que no interfiera con el resto), podemos usar la división euclidiana de polinomios para obtener:

pag(incógnita)incógnitanortek=q(incógnita)gramo(incógnita)+r(incógnita){\displaystyle p(x)x^{n-k}=q(x)g(x)+r(x)}

Aquí vemos queq(incógnita)gramo(incógnita){\displaystyle q(x)g(x)}es una palabra clave válida. Comor(incógnita){\displaystyle r(x)}siempre es de grado menor quenortek{\displaystyle n-k}(que es el grado degramo(incógnita){\displaystyle g(x)}), podemos restarlo con seguridad depag(incógnita)incógnitanortek{\displaystyle p(x)x^{n-k}}sin alterar ninguno de los coeficientes del mensaje, por lo tanto tenemos nuestros(incógnita){\displaystyle s(x)}como

s(incógnita)=q(incógnita)gramo(incógnita)=pag(incógnita)incógnitanortekr(incógnita){\displaystyle s(x)=q(x)g(x)=p(x)x^{n-k}-r(x)}

EncimaGRAMOF(2){\displaystyle GF(2)}(es decir, con códigos BCH binarios), este proceso es indistinguible de agregar una verificación de redundancia cíclica , y si un código BCH binario sistemático se usa solo para fines de detección de errores, vemos que los códigos BCH son solo una generalización de las matemáticas de las verificaciones de redundancia cíclica .

La ventaja de la codificación sistemática es que el receptor puede recuperar el mensaje original descartando todo lo que sigue a la primera.k{\displaystyle k}coeficientes, después de realizar la corrección de errores.

Descodificación

Existen muchos algoritmos para decodificar códigos BCH. Los más comunes siguen este esquema general:

  1. Calcula los síndromes s j para el vector recibido.
  2. Determinar el número de errores t y el polinomio localizador de errores Λ(x) a partir de los síndromes.
  3. Calcula las raíces del polinomio de localización de errores para encontrar las localizaciones de errores X i
  4. Calcula los valores de error Y i en esas ubicaciones de error.
  5. Corrige los errores

Durante algunos de estos pasos, el algoritmo de decodificación puede determinar que el vector recibido tiene demasiados errores y no se puede corregir. Por ejemplo, si no se encuentra un valor adecuado de t , la corrección fallará. En un código truncado (no primitivo), la ubicación de un error puede estar fuera de rango. Si el vector recibido tiene más errores de los que el código puede corregir, el decodificador puede generar inadvertidamente un mensaje aparentemente válido que no es el que se envió.

Calcular los síndromes

El vector recibidoR{\displaystyle R}es la suma de la palabra clave correctado{\displaystyle C}y un vector de error desconocidomi.{\displaystyle E.}Los valores del síndrome se forman considerandoR{\displaystyle R}como un polinomio y evaluándolo enαdo,,αdo+d2.{\displaystyle \alpha ^{c},\ldots ,\alpha ^{c+d-2}.}Por lo tanto, los síndromes son [ 7 ]

sj=R(αj)=do(αj)+mi(αj){\displaystyle s_{j}=R\left(\alpha ^{j}\right)=C\left(\alpha ^{j}\right)+E\left(\alpha ^{j}\right)}

paraj=do{\displaystyle j=c}ado+d2.{\displaystyle c+d-2.}

Desdeαj{\displaystyle \alpha ^{j}}son los ceros degramo(incógnita),{\displaystyle g(x),}de cuáldo(incógnita){\displaystyle C(x)}es un múltiplo,do(αj)=0.{\displaystyle C\left(\alpha ^{j}\right)=0.}Al examinar los valores del síndrome, se aísla el vector de error para poder comenzar a resolverlo.

Si no hay ningún error,sj=0{\displaystyle s_{j}=0}a pesar dej.{\displaystyle j.}Si todos los síndromes son cero, entonces la decodificación está hecha.

Calcular el polinomio de localización del error.

Si hay síndromes distintos de cero, entonces hay errores. El decodificador necesita determinar cuántos errores hay y dónde se encuentran.

Si hay un solo error, escríbalo comomi(incógnita)=miincógnitai,{\displaystyle E(x)=e\,x^{i},}dóndei{\displaystyle i}es la ubicación del error ymi{\displaystyle e}es su magnitud. Entonces los dos primeros síndromes son

sdo=miαdoisdo+1=miα(do+1)i=αisdo{\displaystyle {\begin{aligned}s_{c}&=e\,\alpha ^{c\,i}\\s_{c+1}&=e\,\alpha ^{(c+1)\,i}=\alpha ^{i}s_{c}\end{aligned}}}

así que juntos nos permiten calcularmi{\displaystyle e}y proporcionar alguna información sobrei{\displaystyle i}(determinándolo completamente en el caso de los códigos Reed-Solomon).

Si hay dos o más errores,

mi(incógnita)=mi1incógnitai1+mi2incógnitai2+{\displaystyle E(x)=e_{1}x^{i_{1}}+e_{2}x^{i_{2}}+\cdots \,}

No resulta inmediatamente obvio cómo empezar a resolver los síndromes resultantes para las incógnitas.mik{\displaystyle e_{k}}yik.{\displaystyle i_{k}.}

El primer paso es encontrar, compatible con síndromes computarizados y con mínimo posiblet,{\displaystyle t,}polinomio localizador:

Λ(incógnita)=j=1t(incógnitaαij1){\displaystyle \Lambda (x)=\prod _{j=1}^{t}\left(x\alpha ^{i_{j}}-1\right)}

Tres algoritmos populares para esta tarea son:

  1. Algoritmo de Peterson-Gorenstein-Zierler
  2. Algoritmo de Berlekamp-Massey
  3. Algoritmo euclidiano de Sugiyama

Algoritmo de Peterson-Gorenstein-Zierler

El algoritmo de Peterson es el paso 2 del procedimiento generalizado de decodificación BCH. El algoritmo de Peterson se utiliza para calcular los coeficientes del polinomio localizador de errores. λ1,λ2,,λv{\displaystyle \lambda _{1},\lambda _{2},\dots ,\lambda _{v}}de un polinomio

Λ(incógnita)=1+λ1incógnita+λ2incógnita2++λvincógnitav.{\displaystyle \Lambda (x)=1+\lambda _{1}x+\lambda _{2}x^{2}+\cdots +\lambda _{v}x^{v}.}

Ahora el procedimiento del algoritmo de Peterson-Gorenstein-Zierler. [ 8 ] Esperemos que tengamos al menos 2 t síndromes s c , ..., s c +2 t −1 . Sea v  = t . 

  1. Comience por generar elSv×v{\displaystyle S_{v\times v}}matriz con elementos que son valores de síndrome
    Sv×v=[sdosdo+1sdo+v1sdo+1sdo+2sdo+vsdo+v1sdo+vsdo+2v2].{\displaystyle S_{v\times v}={\begin{bmatrix}s_{c}&s_{c+1}&\dots &s_{c+v-1}\\s_{c+1}&s_{c+2}&\dots &s_{c+v}\\\vdots &\vdots &\ddots &\vdots \\s_{c+v-1}&s_{c+v}&\dots &s_{c+2v-2}\end{bmatrix}}.}
  2. Generar undov×1{\displaystyle c_{v\times 1}}vector con elementos
    dov×1=[sdo+vsdo+v+1sdo+2v1].{\displaystyle C_{v\times 1}={\begin{bmatrix}s_{c+v}\\s_{c+v+1}\\\vdots \\s_{c+2v-1}\end{bmatrix}}.}
  3. DejarΛ{\displaystyle \Lambda }denotamos los coeficientes polinómicos desconocidos, que vienen dados por
    Λv×1=[λvλv1λ1].{\displaystyle \Lambda _{v\times 1}={\begin{bmatrix}\lambda _{v}\\\lambda _{v-1}\\\vdots \\\lambda _{1}\end{bmatrix}}.}
  4. Formar la ecuación matricial
    Sv×vΛv×1=dov×1.{\displaystyle S_{v\times v}\Lambda _{v\times 1}=-C_{v\times 1\,}.}
  5. Si el determinante de la matrizSv×v{\displaystyle S_{v\times v}}Si es distinto de cero, entonces podemos encontrar la inversa de esta matriz y resolver para los valores desconocidos.Λ{\displaystyle \Lambda }valores.
  6. Sidet(Sv×v)=0,{\displaystyle \det \left(S_{v\times v}\right)=0,}entonces sigue siv=0{\displaystyle v=0} Luego, declare un polinomio localizador de errores vacío y detenga el procedimiento de Peterson. Fin del conjunto.vv1{\displaystyle v\leftarrow v-1} continuar desde el principio de la decodificación de Peterson haciendo más pequeñosSv×v{\displaystyle S_{v\times v}}
  7. Después de tener valores deΛ{\displaystyle \Lambda }, tienes el polinomio localizador de errores.
  8. Detenga el procedimiento de Peterson.

Polinomio localizador de errores de factor

Ahora que tienes elΛ(incógnita){\displaystyle \Lambda (x)}polinomio, sus raíces se pueden encontrar en la formaΛ(incógnita)=(αi1incógnita1)(αi2incógnita1)(αivincógnita1){\displaystyle \Lambda (x)=\left(\alpha ^{i_{1}}x-1\right)\left(\alpha ^{i_{2}}x-1\right)\cdots \left(\alpha ^{i_{v}}x-1\right)}por fuerza bruta, por ejemplo, utilizando el algoritmo de búsqueda de Chien . Las potencias exponenciales del elemento primitivoα{\displaystyle \alpha }Esto proporcionará las posiciones donde ocurren errores en la palabra recibida; de ahí el nombre de polinomio "localizador de errores".

Los ceros de Λ( x ) son α i 1 , ..., α i v .

Calcular valores de error

Una vez identificadas las ubicaciones de los errores, el siguiente paso consiste en determinar los valores de error en dichas ubicaciones. Estos valores se utilizan para corregir los valores recibidos en esas ubicaciones y así recuperar la palabra clave original.

Para el caso del BCH binario (con todos los caracteres legibles), esto es trivial; simplemente invertimos los bits de la palabra recibida en estas posiciones y obtenemos la palabra de código corregida. En el caso más general, los pesos de errormij{\displaystyle e_{j}}se puede determinar resolviendo el sistema lineal

sdo=mi1αdoi1+mi2αdoi2+sdo+1=mi1α(do+1)i1+mi2α(do+1)i2+ {\displaystyle {\begin{aligned}s_{c}&=e_{1}\alpha ^{c\,i_{1}}+e_{2}\alpha ^{c\,i_{2}}+\cdots \\s_{c+1}&=e_{1}\alpha ^{(c+1)\,i_{1}}+e_{2}\alpha ^{(c+1)\,i_{2}}+\cdots \\&{}\ \vdots \end{aligned}}}

Algoritmo de Forney

Sin embargo, existe un método más eficiente conocido como el algoritmo de Forney .

Dejar

S(incógnita)=sdo+sdo+1incógnita+sdo+2incógnita2++sdo+d2incógnitad2.{\displaystyle S(x)=s_{c}+s_{c+1}x+s_{c+2}x^{2}+\cdots +s_{c+d-2}x^{d-2}.}
vd1,λ00Λ(incógnita)=i=0vλiincógnitai=λ0k=0v(αikincógnita1).{\displaystyle v\leqslant d-1,\lambda _{0}\neq 0\qquad \Lambda (x)=\sum _{i=0}^{v}\lambda _{i}x^{i}=\lambda _{0}\prod _{k=0}^{v}\left(\alpha ^{-i_{k}}x-1\right).}

Y el polinomio evaluador de errores [ 9 ]

Ω(incógnita)S(incógnita)Λ(incógnita)modincógnitad1{\displaystyle \Omega (x)\equiv S(x)\Lambda (x){\bmod {x^{d-1}}}}

Finalmente:

Λ(incógnita)=i=1viλiincógnitai1,{\displaystyle \Lambda '(x)=\sum _{i=1}^{v}i\cdot \lambda _{i}x^{i-1},}

dónde

iincógnita:=k=1iincógnita.{\displaystyle i\cdot x:=\sum _{k=1}^{i}x.}

Que si los síndromes pudieran explicarse mediante una palabra de error, que podría ser distinta de cero solo en posicionesik{\displaystyle i_{k}}, entonces los valores de error son

mik=αikΩ(αik)αdoikΛ(αik).{\displaystyle e_{k}=-{\alpha ^{i_{k}}\Omega \left(\alpha ^{-i_{k}}\right) \over \alpha ^{c\cdot i_{k}}\Lambda '\left(\alpha ^{-i_{k}}\right)}.}

Para los códigos BCH de sentido estricto, c = 1, por lo que la expresión se simplifica a:

mik=Ω(αik)Λ(αik).{\displaystyle e_{k}=-{\Omega \left(\alpha ^{-i_{k}}\right) \over \Lambda '\left(\alpha ^{-i_{k}}\right)}.}

Explicación del cálculo del algoritmo de Forney

Se basa en la interpolación de Lagrange y en técnicas de generación de funciones .

ConsiderarS(incógnita)Λ(incógnita),{\displaystyle S(x)\Lambda (x),}y por simplicidad supongamosλk=0{\displaystyle \lambda _{k}=0}parak>v,{\displaystyle k>v,}ysk=0{\displaystyle s_{k}=0}parak>do+d2.{\displaystyle k>c+d-2.}Entonces

S(incógnita)Λ(incógnita)=j=0i=0jsji+1λiincógnitaj.{\displaystyle S(x)\Lambda (x)=\sum _{j=0}^{\infty }\sum _{i=0}^{j}s_{j-i+1}\lambda _{i}x^{j}.}
S(incógnita)Λ(incógnita)=S(incógnita){λ0=1v(αiincógnita1)}={i=0d2j=1vmijα(do+i)ijincógnitai}{λ0=1v(αiincógnita1)}={j=1vmijαdoiji=0d2(αij)iincógnitai}{λ0=1v(αiincógnita1)}={j=1vmijαdoij(incógnitaαij)d11incógnitaαij1}{λ0=1v(αiincógnita1)}=λ0j=1vmijαdoij(incógnitaαij)d11incógnitaαij1=1v(αiincógnita1)=λ0j=1vmijαdoij((incógnitaαij)d11){1,,v}{j}(αiincógnita1){\displaystyle {\begin{aligned}S(x)\Lambda (x)&=S(x)\left\{\lambda _{0}\prod _{\ell =1}^{v}\left(\alpha ^{i_{\ell }}x-1\right)\right\}\\&=\left\{\sum _{i=0}^{d-2}\sum _{j=1}^{v}e_{j}\alpha ^{(c+i)\cdot i_{j}}x^{i}\right\}\left\{\lambda _{0}\prod _{\ell =1}^{v}\left(\alpha ^{i_{\ell }}x-1\right)\right\}\\&=\left\{\sum _{j=1}^{v}e_{j}\alpha ^{ci_{j}}\sum _{i=0}^{d-2}\left(\alpha ^{i_{j}}\right)^{i}x^{i}\right\}\left\{\lambda _{0}\prod _{\ell =1}^{v}\left(\alpha ^{i_{\ell }}x-1\right)\right\}\\&=\left\{\sum _{j=1}^{v}e_{j}\alpha ^{ci_{j}}{\frac {\left(x\alpha ^{i_{j}}\right)^{d-1}-1}{x\alpha ^{i_{j}}-1}}\right\}\left\{\lambda _{0}\prod _{\ell =1}^{v}\left(\alpha ^{i_{\ell }}x-1\right)\right\}\\&=\lambda _{0}\sum _{j=1}^{v}e_{j}\alpha ^{ci_{j}}{\frac {\left(x\alpha ^{i_{j}}\right)^{d-1}-1}{x\alpha ^{i_{j}}-1}}\prod _{\ell =1}^{v}\left(\alpha ^{i_{\ell }}x-1\right)\\&=\lambda _{0}\sum _{j=1}^{v}e_{j}\alpha ^{ci_{j}}\left(\left(x\alpha ^{i_{j}}\right)^{d-1}-1\right)\prod _{\ell \in \{1,\cdots ,v\}\setminus \{j\}}\left(\alpha ^{i_{\ell }}x-1\right)\end{aligned}}}

Queremos calcular incógnitasmij,{\displaystyle e_{j},}y podríamos simplificar el contexto eliminando el(incógnitaαij)d1{\displaystyle \left(x\alpha ^{i_{j}}\right)^{d-1}}términos. Esto conduce al polinomio evaluador de errores.

Ω(incógnita)S(incógnita)Λ(incógnita)modincógnitad1.{\displaystyle \Omega (x)\equiv S(x)\Lambda (x){\bmod {x^{d-1}}}.}

Gracias avd1{\displaystyle v\leqslant d-1}tenemos

Ω(incógnita)=λ0j=1vmijαdoij{1,,v}{j}(αiincógnita1).{\displaystyle \Omega (x)=-\lambda _{0}\sum _{j=1}^{v}e_{j}\alpha ^{ci_{j}}\prod _{\ell \in \{1,\cdots ,v\}\setminus \{j\}}\left(\alpha ^{i_{\ell }}x-1\right).}

Gracias aΛ{\displaystyle \Lambda }(el truco de interpolación de Lagrange) la suma degenera en un solo sumando paraincógnita=αik{\displaystyle x=\alpha ^{-i_{k}}}

Ω(αik)=λ0mikαdoik{1,,v}{k}(αiαik1).{\displaystyle \Omega \left(\alpha ^{-i_{k}}\right)=-\lambda _{0}e_{k}\alpha ^{c\cdot i_{k}}\prod _{\ell \in \{1,\cdots ,v\}\setminus \{k\}}\left(\alpha ^{i_{\ell }}\alpha ^{-i_{k}}-1\right).}

Llegarmik{\displaystyle e_{k}}Simplemente deberíamos deshacernos del producto. Podríamos calcular el producto directamente a partir de raíces ya calculadas.αij{\displaystyle \alpha ^{-i_{j}}}deΛ,{\displaystyle \Lambda ,}pero podríamos usar una forma más simple.

Como derivado formal

Λ(incógnita)=λ0j=1vαij{1,,v}{j}(αiincógnita1),{\displaystyle \Lambda '(x)=\lambda _{0}\sum _{j=1}^{v}\alpha ^{i_{j}}\prod _{\ell \in \{1,\cdots ,v\}\setminus \{j\}}\left(\alpha ^{i_{\ell }}x-1\right),}

obtenemos nuevamente solo un sumando en

Λ(αik)=λ0αik{1,,v}{k}(αiαik1).{\displaystyle \Lambda '\left(\alpha ^{-i_{k}}\right)=\lambda _{0}\alpha ^{i_{k}}\prod _{\ell \in \{1,\cdots ,v\}\setminus \{k\}}\left(\alpha ^{i_{\ell }}\alpha ^{-i_{k}}-1\right).}

Así que finalmente

mik=αikΩ(αik)αdoikΛ(αik).{\displaystyle e_{k}=-{\frac {\alpha ^{i_{k}}\Omega \left(\alpha ^{-i_{k}}\right)}{\alpha ^{c\cdot i_{k}}\Lambda '\left(\alpha ^{-i_{k}}\right)}}.}

Esta fórmula es ventajosa cuando se calcula la derivada formal deΛ{\displaystyle \Lambda }forma

Λ(incógnita)=i=1vλiincógnitai{\displaystyle \Lambda (x)=\sum _{i=1}^{v}\lambda _{i}x^{i}}

flexible:

Λ(incógnita)=i=1viλiincógnitai1,{\displaystyle \Lambda '(x)=\sum _{i=1}^{v}i\cdot \lambda _{i}x^{i-1},}

dónde

iincógnita:=k=1iincógnita.{\displaystyle i\cdot x:=\sum _{k=1}^{i}x.}

Decodificación basada en el algoritmo euclidiano extendido

Un proceso alternativo para encontrar tanto el polinomio Λ como el polinomio localizador de errores se basa en la adaptación del algoritmo euclidiano extendido realizada por Yasuo Sugiyama . [ 10 ] La corrección de caracteres ilegibles también podría incorporarse fácilmente al algoritmo.

Dejark1,...,kk{\displaystyle k_{1},...,k_{k}}sean posiciones de caracteres ilegibles. Se crea un polinomio localizando estas posiciones.Γ(incógnita)=i=1k(incógnitaαki1).{\displaystyle \Gamma (x)=\prod _{i=1}^{k}\left(x\alpha ^{k_{i}}-1\right).} Establezca los valores en las posiciones ilegibles a 0 y calcule los síndromes.

Como ya hemos definido para la fórmula de Forney, dejemosS(incógnita)=i=0d2sdo+iincógnitai.{\displaystyle S(x)=\sum _{i=0}^{d-2}s_{c+i}x^{i}.}

Vamos a ejecutar el algoritmo euclidiano extendido para localizar el mínimo común divisor de polinomios.S(incógnita)Γ(incógnita){\displaystyle S(x)\Gamma (x)}yincógnitad1.{\displaystyle x^{d-1}.} El objetivo no es encontrar el mínimo común divisor, sino un polinomio.r(incógnita){\displaystyle r(x)}de grado como máximo(d+k3)/2{\displaystyle \lfloor (d+k-3)/2\rfloor }y polinomiosa(incógnita),b(incógnita){\displaystyle a(x),b(x)}de tal manera quer(incógnita)=a(incógnita)S(incógnita)Γ(incógnita)+b(incógnita)incógnitad1.{\displaystyle r(x)=a(x)S(x)\Gamma (x)+b(x)x^{d-1}.} Bajo grado der(incógnita){\displaystyle r(x)}garantías, quea(incógnita){\displaystyle a(x)}satisfaría extendido (porΓ{\displaystyle \Gamma }) condiciones definitorias paraΛ.{\displaystyle \Lambda .}

DefiniciónΞ(incógnita)=a(incógnita)Γ(incógnita){\displaystyle \Xi (x)=a(x)\Gamma (x)}y utilizandoΞ{\displaystyle \Xi }en el lugar deΛ(incógnita){\displaystyle \Lambda (x)}en la fórmula de Fourney nos dará valores de error.

La principal ventaja del algoritmo es que mientras tanto calculaΩ(incógnita)=S(incógnita)Ξ(incógnita)modincógnitad1=r(incógnita){\displaystyle \Omega (x)=S(x)\Xi (x){\bmod {x}}^{d-1}=r(x)}requerido en la fórmula de Forney.

Explicación del proceso de decodificación

El objetivo es encontrar una palabra clave que difiera lo menos posible de la palabra recibida en posiciones legibles. Al expresar la palabra recibida como la suma de la palabra clave más cercana y la palabra de error, intentamos encontrar la palabra de error con el menor número posible de caracteres distintos de cero en posiciones legibles. Síndromesi{\displaystyle s_{i}}restringe la palabra de error por condición

si=j=0norte1mijαij.{\displaystyle s_{i}=\sum _{j=0}^{n-1}e_{j}\alpha ^{ij}.}

Podríamos escribir estas condiciones por separado o podríamos crear un polinomio.

S(incógnita)=i=0d2sdo+iincógnitai{\displaystyle S(x)=\sum _{i=0}^{d-2}s_{c+i}x^{i}}

y comparar coeficientes cerca de las potencias0{\displaystyle 0}ad2.{\displaystyle d-2.}

S(incógnita)={0,,d2}mi(incógnita)=i=0d2j=0norte1mijαijαdojincógnitai.{\displaystyle S(x){\stackrel {\{0,\cdots ,\,d-2\}}{=}}E(x)=\sum _{i=0}^{d-2}\sum _{j=0}^{n-1}e_{j}\alpha ^{ij}\alpha ^{cj}x^{i}.}

Supongamos que hay una letra ilegible en la posiciónk1,{\displaystyle k_{1},}podríamos reemplazar un conjunto de síndromes{sdo,,sdo+d2}{\displaystyle \{s_{c},\cdots ,s_{c+d-2}\}}por conjunto de síndromes{tdo,,tdo+d3}{\displaystyle \{t_{c},\cdots ,t_{c+d-3}\}}definido por ecuaciónti=αk1sisi+1.{\displaystyle t_{i}=\alpha ^{k_{1}}s_{i}-s_{i+1}.}Supongamos que para una palabra de error todas las restricciones del conjunto original{sdo,,sdo+d2}{\displaystyle \{s_{c},\cdots ,s_{c+d-2}\}}Los síndromes se mantienen, que

ti=αk1sisi+1=αk1j=0norte1mijαijj=0norte1mijαjαij=j=0norte1mij(αk1αj)αij.{\displaystyle t_{i}=\alpha ^{k_{1}}s_{i}-s_{i+1}=\alpha ^{k_{1}}\sum _{j=0}^{n-1}e_{j}\alpha ^{ij}-\sum _{j=0}^{n-1}e_{j}\alpha ^{j}\alpha ^{ij}=\sum _{j=0}^{n-1}e_{j}\left(\alpha ^{k_{1}}-\alpha ^{j}\right)\alpha ^{ij}.}

Un nuevo conjunto de síndromes restringe el vector de error.

Fj=mij(αk1αj){\displaystyle f_{j}=e_{j}\left(\alpha ^{k_{1}}-\alpha ^{j}\right)}

del mismo modo que el conjunto original de síndromes restringió el vector de error.mij.{\displaystyle e_{j}.}Excepto la coordenadak1,{\displaystyle k_{1},}donde tenemosFk1=0,{\displaystyle f_{k_{1}}=0,}unFj{\displaystyle f_{j}}es cero, simij=0.{\displaystyle e_{j}=0.}Con el objetivo de localizar posiciones de error podríamos cambiar el conjunto de síndromes de manera similar para reflejar todos los caracteres ilegibles. Esto acorta el conjunto de síndromes enk.{\displaystyle k.}

En la formulación polinómica, el reemplazo de síndromes se establece{sdo,,sdo+d2}{\displaystyle \{s_{c},\cdots ,s_{c+d-2}\}}por síndromes establecidos{tdo,,tdo+d3}{\displaystyle \{t_{c},\cdots ,t_{c+d-3}\}}conduce a

T(incógnita)=i=0d3tdo+iincógnitai=αk1i=0d3sdo+iincógnitaii=1d2sdo+iincógnitai1.{\displaystyle T(x)=\sum _{i=0}^{d-3}t_{c+i}x^{i}=\alpha ^{k_{1}}\sum _{i=0}^{d-3}s_{c+i}x^{i}-\sum _{i=1}^{d-2}s_{c+i}x^{i-1}.}

Por lo tanto,

incógnitaT(incógnita)={1,,d2}(incógnitaαk11)S(incógnita).{\displaystyle xT(x){\stackrel {\{1,\cdots ,\,d-2\}}{=}}\left(x\alpha ^{k_{1}}-1\right)S(x).}

Después de la sustitución deS(incógnita){\displaystyle S(x)}porS(incógnita)Γ(incógnita){\displaystyle S(x)\Gamma (x)}Se requeriría una ecuación para los coeficientes cercanos a las potencias.k,,d2.{\displaystyle k,\cdots ,d-2.}

Se podría considerar la búsqueda de posiciones de error desde el punto de vista de eliminar la influencia de posiciones dadas, de manera similar a como se hace con los caracteres ilegibles. Si encontramosv{\displaystyle v}posiciones tales que eliminar su influencia conduce a obtener un conjunto de síndromes que consisten en todos ceros, entonces existe un vector de error con errores solo en estas coordenadas.Λ(incógnita){\displaystyle \Lambda (x)}denota el polinomio eliminando la influencia de estas coordenadas, obtenemos

S(incógnita)Γ(incógnita)Λ(incógnita)={k+v,,d2}0.{\displaystyle S(x)\Gamma (x)\Lambda (x){\stackrel {\{k+v,\cdots ,d-2\}}{=}}0.}

En el algoritmo euclidiano, intentamos corregir como máximo12(d1k){\displaystyle {\tfrac {1}{2}}(d-1-k)}errores (en posiciones legibles), porque con un mayor número de errores podría haber más palabras clave a la misma distancia de la palabra recibida. Por lo tanto, paraΛ(incógnita){\displaystyle \Lambda (x)}Estamos buscando que la ecuación se cumpla para coeficientes cercanos a potencias que comienzan desde

k+12(d1k).{\displaystyle k+\left\lfloor {\frac {1}{2}}(d-1-k)\right\rfloor .}

En la fórmula de Forney,Λ(incógnita){\displaystyle \Lambda (x)}podría multiplicarse por un escalar dando el mismo resultado.

Podría suceder que el algoritmo euclidiano encuentreΛ(incógnita){\displaystyle \Lambda (x)}de grado superior a12(d1k){\displaystyle {\tfrac {1}{2}}(d-1-k)}tener un número de raíces diferentes igual a su grado, donde la fórmula de Fourney podría corregir errores en todas sus raíces, de todos modos corregir tantos errores podría ser arriesgado (especialmente sin otras restricciones en la palabra recibida). Por lo general, después de obtenerΛ(incógnita){\displaystyle \Lambda (x)}de grado superior, decidimos no corregir los errores. La corrección podría fallar en el casoΛ(incógnita){\displaystyle \Lambda (x)}Tiene raíces con mayor multiplicidad o el número de raíces es menor que su grado. El fallo también podría detectarse mediante la fórmula de Forney, que devuelve un error fuera del alfabeto transmitido.

Corrige los errores

Utilizando los valores de error y la ubicación del error, corrija los errores y forme un vector de código corregido restando los valores de error en las ubicaciones de error.

Ejemplos de decodificación

Decodificación de código binario sin caracteres ilegibles

Consideremos un código BCH en GF(2 4 ) cond=7{\displaystyle d=7}ygramo(incógnita)=incógnita10+incógnita8+incógnita5+incógnita4+incógnita2+incógnita+1{\displaystyle g(x)=x^{10}+x^{8}+x^{5}+x^{4}+x^{2}+x+1}. (Esto se utiliza en códigos QR .) Sea el mensaje a transmitir [1 1 0 1 1] , o en notación polinómica,METRO(incógnita)=incógnita4+incógnita3+incógnita+1.{\displaystyle M(x)=x^{4}+x^{3}+x+1.} Los símbolos de "suma de verificación" se calculan dividiendoincógnita10METRO(incógnita){\displaystyle x^{10}M(x)}porgramo(incógnita){\displaystyle g(x)}y tomando el resto, resultando enincógnita9+incógnita4+incógnita2{\displaystyle x^{9}+x^{4}+x^{2}}o [ 1 0 0 0 0 1 0 1 0 0 ] . Estos se añaden al mensaje, por lo que la palabra clave transmitida es [ 1 1 0 1 1 1 0 0 0 0 1 0 1 0 0 ] .

Ahora, imaginemos que hay dos errores de bits en la transmisión, por lo que la palabra clave recibida es [ 1 0 0 1 1 1 0 0 0 1 1 0 1 0 0 ]. En notación polinómica:

R(incógnita)=do(incógnita)+incógnita13+incógnita5=incógnita14+incógnita11+incógnita10+incógnita9+incógnita5+incógnita4+incógnita2{\displaystyle R(x)=C(x)+x^{13}+x^{5}=x^{14}+x^{11}+x^{10}+x^{9}+x^{5}+x^{4}+x^{2}}

Para corregir los errores, primero calcule los síndromes. Tomandoα=0010,{\displaystyle \alpha =0010,}tenemoss1=R(α1)=1011,{\displaystyle s_{1}=R(\alpha ^{1})=1011,}s2=1001,{\displaystyle s_{2}=1001,}s3=1011,{\displaystyle s_{3}=1011,}s4=1101,{\displaystyle s_{4}=1101,}s5=0001,{\displaystyle s_{5}=0001,}ys6=1001.{\displaystyle s_{6}=1001.} A continuación, aplique el procedimiento de Peterson reduciendo por filas la siguiente matriz aumentada .

[S3×3|do3×1]=[s1s2s3s4s2s3s4s5s3s4s5s6]=[101110011011110110011011110100011011110100011001][000100001000011100000001101100010000000000000000]{\displaystyle \left[S_{3\times 3}|C_{3\times 1}\right]={\begin{bmatrix}s_{1}&s_{2}&s_{3}&s_{4}\\s_{2}&s_{3}&s_{4}&s_{5}\\s_{3}&s_{4}&s_{5}&s_{6}\end{bmatrix}}={\begin{bmatrix}1011&1001&1011&1101\\1001&1011&1101&0001\\1011&1101&0001&1001\end{bmatrix}}\Rightarrow {\begin{bmatrix}0001&0000&1000&0111\\0000&0001&1011&0001\\0000&0000&0000&0000\end{bmatrix}}}

Debido a la fila cero, S 3×3 es singular, lo cual no sorprende ya que solo se introdujeron dos errores en la palabra clave. Sin embargo, la esquina superior izquierda de la matriz es idéntica a [ S 2×2 | C 2×1 ] , lo que da lugar a la solución.λ2=1000,{\displaystyle \lambda _{2}=1000,}λ1=1011.{\displaystyle \lambda _{1}=1011.} El polinomio localizador de errores resultante esΛ(incógnita)=1000incógnita2+1011incógnita+0001,{\displaystyle \Lambda (x)=1000x^{2}+1011x+0001,}que tiene ceros en0100=α13{\displaystyle 0100=\alpha ^{-13}}y0111=α5.{\displaystyle 0111=\alpha ^{-5}.} Los exponentes deα{\displaystyle \alpha }corresponden a las ubicaciones de error. No es necesario calcular los valores de error en este ejemplo, ya que el único valor posible es 1.

Decodificación con caracteres ilegibles

Supongamos el mismo escenario, pero la palabra recibida tiene dos caracteres ilegibles [ 1 0 0 ? 1 1 ? 0 0 1 1 0 1 0 0 ]. Reemplazamos los caracteres ilegibles por ceros mientras creamos el polinomio que refleja sus posiciones.  Γ(incógnita)=(α8incógnita1)(α11incógnita1).{\displaystyle \Gamma (x)=\left(\alpha ^{8}x-1\right)\left(\alpha ^{11}x-1\right).}Calculamos los síndromess1=α7,s2=α1,s3=α4,s4=α2,s5=α5,{\displaystyle s_{1}=\alpha ^{-7},s_{2}=\alpha ^{1},s_{3}=\alpha ^{4},s_{4}=\alpha ^{2},s_{5}=\alpha ^{5},}ys6=α7.{\displaystyle s_{6}=\alpha ^{-7}.}(Usando notación logarítmica que es independiente de los isomorfismos GF(2 4 ). Para la verificación del cálculo podemos usar la misma representación para la suma que se usó en el ejemplo anterior. Descripción hexadecimal de las potencias deα{\displaystyle \alpha }son consecutivamente 1,2,4,8,3,6,C,B,5,A,7,E,F,D,9 con la suma basada en xor bit a bit.)

Hagamos un polinomio de síndrome

S(incógnita)=α7+α1incógnita+α4incógnita2+α2incógnita3+α5incógnita4+α7incógnita5,{\displaystyle S(x)=\alpha ^{-7}+\alpha ^{1}x+\alpha ^{4}x^{2}+\alpha ^{2}x^{3}+\alpha ^{5}x^{4}+\alpha ^{-7}x^{5},}

calcular

S(incógnita)Γ(incógnita)=α7+α4incógnita+α1incógnita2+α6incógnita3+α1incógnita4+α5incógnita5+α7incógnita6+α3incógnita7.{\displaystyle S(x)\Gamma (x)=\alpha ^{-7}+\alpha ^{4}x+\alpha ^{-1}x^{2}+\alpha ^{6}x^{3}+\alpha ^{-1}x^{4}+\alpha ^{5}x^{5}+\alpha ^{7}x^{6}+\alpha ^{-3}x^{7}.}

Ejecutar el algoritmo euclidiano extendido:

(S(incógnita)Γ(incógnita)incógnita6)=(α7+α4incógnita+α1incógnita2+α6incógnita3+α1incógnita4+α5incógnita5+α7incógnita6+α3incógnita7incógnita6)=(α7+α3incógnita110)(incógnita6α7+α4incógnita+α1incógnita2+α6incógnita3+α1incógnita4+α5incógnita5+2α7incógnita6+2α3incógnita7)=(α7+α3incógnita110)(α4+α5incógnita110)(α7+α4incógnita+α1incógnita2+α6incógnita3+α1incógnita4+α5incógnita5α3+(α7+α3)incógnita+(α3+α1)incógnita2+(α5+α6)incógnita3+(α3+α1)incógnita4+2α6incógnita5+2incógnita6)=((1+α4)+(α1+α2)incógnita+α7incógnita2α7+α3incógnitaα4+α5incógnita1)(α7+α4incógnita+α1incógnita2+α6incógnita3+α1incógnita4+α5incógnita5α3+α2incógnita+α0incógnita2+α2incógnita3+α6incógnita4)=(α3+α5incógnita+α7incógnita2α7+α3incógnitaα4+α5incógnita1)(α5+α4incógnita110)(α3+α2incógnita+α0incógnita2+α2incógnita3+α6incógnita4(α7+α7)+(2α7+α4)incógnita+(α5+α6+α1)incógnita2+(α7+α4+α6)incógnita3+(α4+α6+α1)incógnita4+2α5incógnita5)=(α7incógnita+α5incógnita2+α3incógnita3α3+α5incógnita+α7incógnita2α3+α5incógnita+α6incógnita2α4+α5incógnita)(α3+α2incógnita+α0incógnita2+α2incógnita3+α6incógnita4α4+α4incógnita+α2incógnita2+α5incógnita3).{\displaystyle {\begin{aligned}&{\begin{pmatrix}S(x)\Gamma (x)\\x^{6}\end{pmatrix}}\\[6pt]={}&{\begin{pmatrix}\alpha ^{-7}+\alpha ^{4}x+\alpha ^{-1}x^{2}+\alpha ^{6}x^{3}+\alpha ^{-1}x^{4}+\alpha ^{5}x^{5}+\alpha ^{7}x^{6}+\alpha ^{-3}x^{7}\\x^{6}\end{pmatrix}}\\[6pt]={}&{\begin{pmatrix}\alpha ^{7}+\alpha ^{-3}x&1\\1&0\end{pmatrix}}{\begin{pmatrix}x^{6}\\\alpha ^{-7}+\alpha ^{4}x+\alpha ^{-1}x^{2}+\alpha ^{6}x^{3}+\alpha ^{-1}x^{4}+\alpha ^{5}x^{5}+2\alpha ^{7}x^{6}+2\alpha ^{-3}x^{7}\end{pmatrix}}\\[6pt]={}&{\begin{pmatrix}\alpha ^{7}+\alpha ^{-3}x&1\\1&0\end{pmatrix}}{\begin{pmatrix}\alpha ^{4}+\alpha ^{-5}x&1\\1&0\end{pmatrix}}\\&\qquad {\begin{pmatrix}\alpha ^{-7}+\alpha ^{4}x+\alpha ^{-1}x^{2}+\alpha ^{6}x^{3}+\alpha ^{-1}x^{4}+\alpha ^{5}x^{5}\\\alpha ^{-3}+\left(\alpha ^{-7}+\alpha ^{3}\right)x+\left(\alpha ^{3}+\alpha ^{-1}\right)x^{2}+\left(\alpha ^{-5}+\alpha ^{-6}\right)x^{3}+\left(\alpha ^{3}+\alpha ^{1}\right)x^{4}+2\alpha ^{-6}x^{5}+2x^{6}\end{pmatrix}}\\[6pt]={}&{\begin{pmatrix}\left(1+\alpha ^{-4}\right)+\left(\alpha ^{1}+\alpha ^{2}\right)x+\alpha ^{7}x^{2}&\alpha ^{7}+\alpha ^{-3}x\\\alpha ^{4}+\alpha ^{-5}x&1\end{pmatrix}}{\begin{pmatrix}\alpha ^{-7}+\alpha ^{4}x+\alpha ^{-1}x^{2}+\alpha ^{6}x^{3}+\alpha ^{-1}x^{4}+\alpha ^{5}x^{5}\\\alpha ^{-3}+\alpha ^{-2}x+\alpha ^{0}x^{2}+\alpha ^{-2}x^{3}+\alpha ^{-6}x^{4}\end{pmatrix}}\\[6pt]={}&{\begin{pmatrix}\alpha ^{-3}+\alpha ^{5}x+\alpha ^{7}x^{2}&\alpha ^{7}+\alpha ^{-3}x\\\alpha ^{4}+\alpha ^{-5}x&1\end{pmatrix}}{\begin{pmatrix}\alpha ^{-5}+\alpha ^{-4}x&1\\1&0\end{pmatrix}}\\&\qquad {\begin{pmatrix}\alpha ^{-3}+\alpha ^{-2}x+\alpha ^{0}x^{2}+\alpha ^{-2}x^{3}+\alpha ^{-6}x^{4}\\\left(\alpha ^{7}+\alpha ^{-7}\right)+\left(2\alpha ^{-7}+\alpha ^{4}\right)x+\left(\alpha ^{-5}+\alpha ^{-6}+\alpha ^{-1}\right)x^{2}+\left(\alpha ^{-7}+\alpha ^{-4}+\alpha ^{6}\right)x^{3}+\left(\alpha ^{4}+\alpha ^{-6}+\alpha ^{-1}\right)x^{4}+2\alpha ^{5}x^{5}\end{pmatrix}}\\[6pt]={}&{\begin{pmatrix}\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}&\alpha ^{-3}+\alpha ^{5}x+\alpha ^{7}x^{2}\\\alpha ^{3}+\alpha ^{-5}x+\alpha ^{6}x^{2}&\alpha ^{4}+\alpha ^{-5}x\end{pmatrix}}{\begin{pmatrix}\alpha ^{-3}+\alpha ^{-2}x+\alpha ^{0}x^{2}+\alpha ^{-2}x^{3}+\alpha ^{-6}x^{4}\\\alpha ^{-4}+\alpha ^{4}x+\alpha ^{2}x^{2}+\alpha ^{-5}x^{3}\end{pmatrix}}.\end{aligned}}}

Hemos llegado a un polinomio de grado como máximo 3, y como

((α4+α5incógnita)α3+α5incógnita+α7incógnita2α3+α5incógnita+α6incógnita2(α7incógnita+α5incógnita2+α3incógnita3))(α7incógnita+α5incógnita2+α3incógnita3α3+α5incógnita+α7incógnita2α3+α5incógnita+α6incógnita2α4+α5incógnita)=(1001),{\displaystyle {\begin{pmatrix}-\left(\alpha ^{4}+\alpha ^{-5}x\right)&\alpha ^{-3}+\alpha ^{5}x+\alpha ^{7}x^{2}\\\alpha ^{3}+\alpha ^{-5}x+\alpha ^{6}x^{2}&-\left(\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}\right)\end{pmatrix}}{\begin{pmatrix}\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}&\alpha ^{-3}+\alpha ^{5}x+\alpha ^{7}x^{2}\\\alpha ^{3}+\alpha ^{-5}x+\alpha ^{6}x^{2}&\alpha ^{4}+\alpha ^{-5}x\end{pmatrix}}={\begin{pmatrix}1&0\\0&1\end{pmatrix}},}

obtenemos

((α4+α5incógnita)α3+α5incógnita+α7incógnita2α3+α5incógnita+α6incógnita2(α7incógnita+α5incógnita2+α3incógnita3))(S(incógnita)Γ(incógnita)incógnita6)=(α3+α2incógnita+α0incógnita2+α2incógnita3+α6incógnita4α4+α4incógnita+α2incógnita2+α5incógnita3).{\displaystyle {\begin{pmatrix}-\left(\alpha ^{4}+\alpha ^{-5}x\right)&\alpha ^{-3}+\alpha ^{5}x+\alpha ^{7}x^{2}\\\alpha ^{3}+\alpha ^{-5}x+\alpha ^{6}x^{2}&-\left(\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}\right)\end{pmatrix}}{\begin{pmatrix}S(x)\Gamma (x)\\x^{6}\end{pmatrix}}={\begin{pmatrix}\alpha ^{-3}+\alpha ^{-2}x+\alpha ^{0}x^{2}+\alpha ^{-2}x^{3}+\alpha ^{-6}x^{4}\\\alpha ^{-4}+\alpha ^{4}x+\alpha ^{2}x^{2}+\alpha ^{-5}x^{3}\end{pmatrix}}.}

Por lo tanto,

S(incógnita)Γ(incógnita)(α3+α5incógnita+α6incógnita2)(α7incógnita+α5incógnita2+α3incógnita3)incógnita6=α4+α4incógnita+α2incógnita2+α5incógnita3.{\displaystyle S(x)\Gamma (x)\left(\alpha ^{3}+\alpha ^{-5}x+\alpha ^{6}x^{2}\right)-\left(\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}\right)x^{6}=\alpha ^{-4}+\alpha ^{4}x+\alpha ^{2}x^{2}+\alpha ^{-5}x^{3}.}

DejarΛ(incógnita)=α3+α5incógnita+α6incógnita2.{\displaystyle \Lambda (x)=\alpha ^{3}+\alpha ^{-5}x+\alpha ^{6}x^{2}.}No te preocupes por esoλ01.{\displaystyle \lambda _{0}\neq 1.}Encuentra por fuerza bruta una raíz deΛ.{\displaystyle \Lambda .}Las raíces sonα2,{\displaystyle \alpha ^{2},}yα10{\displaystyle \alpha ^{10}}(después de encontrar, por ejemplo)α2{\displaystyle \alpha ^{2}}podemos dividirΛ{\displaystyle \Lambda }por el monograma correspondiente(incógnitaα2){\displaystyle \left(x-\alpha ^{2}\right)}y la raíz del monómero resultante se podía encontrar fácilmente).

Dejar

Ξ(incógnita)=Γ(incógnita)Λ(incógnita)=α3+α4incógnita2+α2incógnita3+α5incógnita4Ω(incógnita)=S(incógnita)Ξ(incógnita)α4+α4incógnita+α2incógnita2+α5incógnita3modincógnita6{\displaystyle {\begin{aligned}\Xi (x)&=\Gamma (x)\Lambda (x)=\alpha ^{3}+\alpha ^{4}x^{2}+\alpha ^{2}x^{3}+\alpha ^{-5}x^{4}\\\Omega (x)&=S(x)\Xi (x)\equiv \alpha ^{-4}+\alpha ^{4}x+\alpha ^{2}x^{2}+\alpha ^{-5}x^{3}{\bmod {x^{6}}}\end{aligned}}}

Busquemos valores de error usando la fórmula

mij=Ω(αij)Ξ(αij),{\displaystyle e_{j}=-{\frac {\Omega \left(\alpha ^{-i_{j}}\right)}{\Xi '\left(\alpha ^{-i_{j}}\right)}},}

dóndeαij{\displaystyle \alpha ^{-i_{j}}}son raíces deΞ(incógnita).{\displaystyle \Xi (x).}Ξ(incógnita)=α2incógnita2.{\displaystyle \Xi '(x)=\alpha ^{2}x^{2}.}Nosotros obtenemos

mi1=Ω(α4)Ξ(α4)=α4+α7+α5+α7α5=α5α5=1mi2=Ω(α7)Ξ(α7)=α4+α4+α1+α1α1=0mi3=Ω(α10)Ξ(α10)=α4+α1+α7+α5α7=α7α7=1mi4=Ω(α2)Ξ(α2)=α4+α6+α6+α1α6=α6α6=1{\displaystyle {\begin{aligned}e_{1}&=-{\frac {\Omega (\alpha ^{4})}{\Xi '(\alpha ^{4})}}={\frac {\alpha ^{-4}+\alpha ^{-7}+\alpha ^{-5}+\alpha ^{7}}{\alpha ^{-5}}}={\frac {\alpha ^{-5}}{\alpha ^{-5}}}=1\\e_{2}&=-{\frac {\Omega (\alpha ^{7})}{\Xi '(\alpha ^{7})}}={\frac {\alpha ^{-4}+\alpha ^{-4}+\alpha ^{1}+\alpha ^{1}}{\alpha ^{1}}}=0\\e_{3}&=-{\frac {\Omega (\alpha ^{10})}{\Xi '(\alpha ^{10})}}={\frac {\alpha ^{-4}+\alpha ^{-1}+\alpha ^{7}+\alpha ^{-5}}{\alpha ^{7}}}={\frac {\alpha ^{7}}{\alpha ^{7}}}=1\\e_{4}&=-{\frac {\Omega (\alpha ^{2})}{\Xi '(\alpha ^{2})}}={\frac {\alpha ^{-4}+\alpha ^{6}+\alpha ^{6}+\alpha ^{1}}{\alpha ^{6}}}={\frac {\alpha ^{6}}{\alpha ^{6}}}=1\end{aligned}}}

Hecho, quemi3=mi4=1,{\displaystyle e_{3}=e_{4}=1,}No debería sorprender.

Por lo tanto, el código corregido es [ 1 1 0 1 1 1 0 0 0 0 1 0 1 0 0].

Decodificación con caracteres ilegibles con un pequeño número de errores

Vamos a mostrar el comportamiento del algoritmo para el caso con un número pequeño de errores. Sea la palabra recibida [ 1 0 0 ? 1 1 ? 0 0 0 1 0 1 0 0 ].  

Nuevamente, reemplace los caracteres ilegibles por ceros mientras crea el polinomio que refleja sus posiciones.Γ(incógnita)=(α8incógnita1)(α11incógnita1).{\displaystyle \Gamma (x)=\left(\alpha ^{8}x-1\right)\left(\alpha ^{11}x-1\right).} Calcular los síndromess1=α4,s2=α7,s3=α1,s4=α1,s5=α0,{\displaystyle s_{1}=\alpha ^{4},s_{2}=\alpha ^{-7},s_{3}=\alpha ^{1},s_{4}=\alpha ^{1},s_{5}=\alpha ^{0},}ys6=α2.{\displaystyle s_{6}=\alpha ^{2}.} Crear polinomio de síndrome

S(incógnita)=α4+α7incógnita+α1incógnita2+α1incógnita3+α0incógnita4+α2incógnita5,S(incógnita)Γ(incógnita)=α4+α7incógnita+α5incógnita2+α3incógnita3+α1incógnita4+α1incógnita5+α1incógnita6+α6incógnita7.{\displaystyle {\begin{aligned}S(x)&=\alpha ^{4}+\alpha ^{-7}x+\alpha ^{1}x^{2}+\alpha ^{1}x^{3}+\alpha ^{0}x^{4}+\alpha ^{2}x^{5},\\S(x)\Gamma (x)&=\alpha ^{4}+\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}+\alpha ^{1}x^{4}+\alpha ^{-1}x^{5}+\alpha ^{-1}x^{6}+\alpha ^{6}x^{7}.\end{aligned}}}

Ejecutemos el algoritmo euclidiano extendido:

(S(incógnita)Γ(incógnita)incógnita6)=(α4+α7incógnita+α5incógnita2+α3incógnita3+α1incógnita4+α1incógnita5+α1incógnita6+α6incógnita7incógnita6)=(α1+α6incógnita110)(incógnita6α4+α7incógnita+α5incógnita2+α3incógnita3+α1incógnita4+α1incógnita5+2α1incógnita6+2α6incógnita7)=(α1+α6incógnita110)(α3+α1incógnita110)(α4+α7incógnita+α5incógnita2+α3incógnita3+α1incógnita4+α1incógnita5α7+(α5+α5)incógnita+2α7incógnita2+2α6incógnita3+2α4incógnita4+2α2incógnita5+2incógnita6)=((1+α2)+(α0+α6)incógnita+α7incógnita2α1+α6incógnitaα3+α1incógnita1)(α4+α7incógnita+α5incógnita2+α3incógnita3+α1incógnita4+α1incógnita5α7+α0incógnita){\displaystyle {\begin{aligned}{\begin{pmatrix}S(x)\Gamma (x)\\x^{6}\end{pmatrix}}&={\begin{pmatrix}\alpha ^{4}+\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}+\alpha ^{1}x^{4}+\alpha ^{-1}x^{5}+\alpha ^{-1}x^{6}+\alpha ^{6}x^{7}\\x^{6}\end{pmatrix}}\\&={\begin{pmatrix}\alpha ^{-1}+\alpha ^{6}x&1\\1&0\end{pmatrix}}{\begin{pmatrix}x^{6}\\\alpha ^{4}+\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}+\alpha ^{1}x^{4}+\alpha ^{-1}x^{5}+2\alpha ^{-1}x^{6}+2\alpha ^{6}x^{7}\end{pmatrix}}\\&={\begin{pmatrix}\alpha ^{-1}+\alpha ^{6}x&1\\1&0\end{pmatrix}}{\begin{pmatrix}\alpha ^{3}+\alpha ^{1}x&1\\1&0\end{pmatrix}}{\begin{pmatrix}\alpha ^{4}+\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}+\alpha ^{1}x^{4}+\alpha ^{-1}x^{5}\\\alpha ^{7}+\left(\alpha ^{-5}+\alpha ^{5}\right)x+2\alpha ^{-7}x^{2}+2\alpha ^{6}x^{3}+2\alpha ^{4}x^{4}+2\alpha ^{2}x^{5}+2x^{6}\end{pmatrix}}\\&={\begin{pmatrix}\left(1+\alpha ^{2}\right)+\left(\alpha ^{0}+\alpha ^{-6}\right)x+\alpha ^{7}x^{2}&\alpha ^{-1}+\alpha ^{6}x\\\alpha ^{3}+\alpha ^{1}x&1\end{pmatrix}}{\begin{pmatrix}\alpha ^{4}+\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}+\alpha ^{1}x^{4}+\alpha ^{-1}x^{5}\\\alpha ^{7}+\alpha ^{0}x\end{pmatrix}}\end{aligned}}}

Hemos llegado a un polinomio de grado como máximo 3, y como

(1α1+α6incógnitaα3+α1incógnita(α7+α7incógnita+α7incógnita2))(α7+α7incógnita+α7incógnita2α1+α6incógnitaα3+α1incógnita1)=(1001),{\displaystyle {\begin{pmatrix}-1&\alpha ^{-1}+\alpha ^{6}x\\\alpha ^{3}+\alpha ^{1}x&-\left(\alpha ^{-7}+\alpha ^{7}x+\alpha ^{7}x^{2}\right)\end{pmatrix}}{\begin{pmatrix}\alpha ^{-7}+\alpha ^{7}x+\alpha ^{7}x^{2}&\alpha ^{-1}+\alpha ^{6}x\\\alpha ^{3}+\alpha ^{1}x&1\end{pmatrix}}={\begin{pmatrix}1&0\\0&1\end{pmatrix}},}

obtenemos

(1α1+α6incógnitaα3+α1incógnita(α7+α7incógnita+α7incógnita2))(S(incógnita)Γ(incógnita)incógnita6)=(α4+α7incógnita+α5incógnita2+α3incógnita3+α1incógnita4+α1incógnita5α7+α0incógnita).{\displaystyle {\begin{pmatrix}-1&\alpha ^{-1}+\alpha ^{6}x\\\alpha ^{3}+\alpha ^{1}x&-\left(\alpha ^{-7}+\alpha ^{7}x+\alpha ^{7}x^{2}\right)\end{pmatrix}}{\begin{pmatrix}S(x)\Gamma (x)\\x^{6}\end{pmatrix}}={\begin{pmatrix}\alpha ^{4}+\alpha ^{7}x+\alpha ^{5}x^{2}+\alpha ^{3}x^{3}+\alpha ^{1}x^{4}+\alpha ^{-1}x^{5}\\\alpha ^{7}+\alpha ^{0}x\end{pmatrix}}.}

Por lo tanto,

S(incógnita)Γ(incógnita)(α3+α1incógnita)(α7+α7incógnita+α7incógnita2)incógnita6=α7+α0incógnita.{\displaystyle S(x)\Gamma (x)\left(\alpha ^{3}+\alpha ^{1}x\right)-\left(\alpha ^{-7}+\alpha ^{7}x+\alpha ^{7}x^{2}\right)x^{6}=\alpha ^{7}+\alpha ^{0}x.}

DejarΛ(incógnita)=α3+α1incógnita.{\displaystyle \Lambda (x)=\alpha ^{3}+\alpha ^{1}x.}No te preocupes por esoλ01.{\displaystyle \lambda _{0}\neq 1.}La raíz deΛ(incógnita){\displaystyle \Lambda (x)}esα31.{\displaystyle \alpha ^{3-1}.}

Dejar

Ξ(incógnita)=Γ(incógnita)Λ(incógnita)=α3+α7incógnita+α4incógnita2+α5incógnita3,Ω(incógnita)=S(incógnita)Ξ(incógnita)α7+α0incógnitamodincógnita6{\displaystyle {\begin{aligned}\Xi (x)&=\Gamma (x)\Lambda (x)=\alpha ^{3}+\alpha ^{-7}x+\alpha ^{-4}x^{2}+\alpha ^{5}x^{3},\\\Omega (x)&=S(x)\Xi (x)\equiv \alpha ^{7}+\alpha ^{0}x{\bmod {x^{6}}}\end{aligned}}}

Busquemos valores de error usando la fórmulamij=Ω(αij)/Ξ(αij),{\displaystyle e_{j}=-\Omega \left(\alpha ^{-i_{j}}\right)/\Xi '\left(\alpha ^{-i_{j}}\right),}dóndeαij{\displaystyle \alpha ^{-i_{j}}}son raíces de polinomiosΞ(incógnita).{\displaystyle \Xi (x).}

Ξ(incógnita)=α7+α5incógnita2.{\displaystyle \Xi '(x)=\alpha ^{-7}+\alpha ^{5}x^{2}.}

Nosotros obtenemos

mi1=Ω(α4)Ξ(α4)=α7+α4α7+α2=α3α3=1mi2=Ω(α7)Ξ(α7)=α7+α7α7+α4=0mi3=Ω(α2)Ξ(α2)=α7+α2α7+α6=α3α3=1{\displaystyle {\begin{aligned}e_{1}&=-{\frac {\Omega \left(\alpha ^{4}\right)}{\Xi '\left(\alpha ^{4}\right)}}={\frac {\alpha ^{7}+\alpha ^{4}}{\alpha ^{-7}+\alpha ^{-2}}}={\frac {\alpha ^{3}}{\alpha ^{3}}}=1\\e_{2}&=-{\frac {\Omega \left(\alpha ^{7}\right)}{\Xi '\left(\alpha ^{7}\right)}}={\frac {\alpha ^{7}+\alpha ^{7}}{\alpha ^{-7}+\alpha ^{4}}}=0\\e_{3}&=-{\frac {\Omega \left(\alpha ^{2}\right)}{\Xi '\left(\alpha ^{2}\right)}}={\frac {\alpha ^{7}+\alpha ^{2}}{\alpha ^{-7}+\alpha ^{-6}}}={\frac {\alpha ^{-3}}{\alpha ^{-3}}}=1\end{aligned}}}

El hecho de quemi3=1{\displaystyle e_{3}=1}No debería sorprender.

Por lo tanto, el código corregido es [ 1 1 0 1 1 1 0 0 0 0 1 0 1 0 0].

Citas

  1. Reed y Chen 1999 , pág. 189 
  2. Hocquenghem 1959
  3. Bose y Ray-Chaudhuri 1960
  4. "Sistema de codificación del módulo de aterrizaje Phobos: software y análisis" (PDF) . Archivado (PDF) del original el 9 de octubre de 2022. Consultado el 25 de febrero de 2012 .
  5. Marelli, Alessia; Micheloni, Rino (2018). "Códigos BCH para unidades de estado sólido" . Inside Solid State Drives (SSDS) . Springer Series in Advanced Microelectronics. Vol. 37. pp. 369–406 . doi : 10.1007/978-981-13-0599-3_11 . ISBN   978-981-13-0598-6Consultado el 23 de septiembre de 2023 .
  6. Gill s.f. , pág. 3 
  7. Lidl & Pilz 1999 , pág. 229 
  8. ^ Gorenstein, Peterson y Zierler 1960
  9. Gill s.f. , pág. 47 
  10. ^ Yasuo Sugiyama, Masao Kasahara, Shigeichi Hirasawa y Toshihiko Namekawa. Un método para resolver ecuaciones clave para decodificar códigos Goppa. Información y control, 27:87–99, 1975.

Referencias

Fuentes primarias

  • Hocquenghem, A. (septiembre de 1959), "Codes correcteurs d'erreurs", Chiffres (en francés), 2 , París: 147– 156
  • Bose, RC ; Ray-Chaudhuri, DK (marzo de 1960), "Sobre una clase de códigos de grupo binarios correctores de errores" (PDF) , Information and Control , 3 (1): 68–79 , Bibcode : 1960InfCo...3...68B , doi : 10.1016/s0019-9958(60)90287-4 , ISSN 0890-5401 , archivado (PDF) del original el 9 de octubre de 2022 

Fuentes secundarias

  • Gill, John (s.f.), Apuntes de EE387 n.º 7, Material complementario n.º 28 (PDF) , Universidad de Stanford, págs. 42-45 , archivado (PDF) del original el 9 de octubre de 2022 , consultado el 21 de abril de 2010. Al parecer, los apuntes del curso se están rehaciendo para 2012: http://www.stanford.edu/class/ee387/ Archivado el 5 de junio de 2013 en Wayback Machine.
  • Gorenstein, Daniel ; Peterson, W. Wesley ; Zierler, Neal (1960), "Los códigos Bose-Chaudhuri con corrección de dos errores son cuasi-perfectos", Information and Control , 3 (3): 291–294 , doi : 10.1016/s0019-9958(60)90877-9
  • Lidl, Rudolf; Pilz, Günter (1999), Álgebra abstracta aplicada (2.ª  ed.), John Wiley
  • Reed, Irving S .; Chen, Xuemin (1999), Error-Control Coding for Data Networks , Boston, MA: Kluwer Academic Publishers , ISBN 0-7923-8528-4

Lecturas adicionales

  • Blahut, Richard E. (2003), Códigos algebraicos para la transmisión de datos (2.ª  ed.), Cambridge University Press , ISBN 0-521-55374-1
  • Gilbert, WJ; Nicholson, WK (2004), Álgebra moderna con aplicaciones (2.ª  ed.), John Wiley
  • Lin, S.; Costello, D. (2004), Codificación de control de errores: fundamentos y aplicaciones , Englewood Cliffs, NJ: Prentice-Hall
  • MacWilliams, FJ; Sloane, NJA (1977), La teoría de los códigos correctores de errores , Nueva York, NY: North-Holland Publishing Company
  • Rudra, Atri, CSE 545, Códigos correctores de errores: combinatoria, algoritmos y aplicaciones , Universidad de Buffalo, archivado del original el 18 de diciembre de 2012 , consultado el 11 de mayo de 2009.