Bitácora · FEC · Ejercicio resuelto

El (15,5) de punta a punta

El ejemplo integral de la Unidad 6 · el mensaje 11001 codificado, tres errores en 2, 7 y 13, y el decodificador entero: seis síndromes, el algoritmo iterativo binario, la búsqueda de Chien y la corrección

El ejercicio recorre un decodificador BCH entero sobre un solo ejemplo. El código es el código BCH (15,5) con t=3, sobre GF(24), cuyo polinomio generador es el MCM de los polinomios mínimos de α, α3 y α5:

g(X)=MCM{φ1(X),φ3(X),φ5(X)} =1+X+X2+X4+X5+X8+X10

con φ1(X)=1+X+X4, φ3(X)=1+X+X2+X3+X4 y φ5(X)=1+X+X2. Su distancia mínima es 7: es el mismo (15,5) de la clase práctica de la Unidad 5, visto ahora desde sus raíces. El cuerpo es el de la Tabla 1 del apunte, con p(X)=1+X+X4 y α4=1+α. Los vectores van con la posición 0 a la izquierda.

01 · El enunciado

Planteado como ejercicio, el ejemplo integral del apunte pide:

  1. Codificar en forma sistemática el mensaje u=(1 1 0 0 1).
  2. El canal invierte los bits de las posiciones 2, 7 y 13. Escribir la palabra recibida r.
  3. Calcular los seis síndromes S1,…,S6 con la Tabla 1, y verificar que S2i=Si2.
  4. Hallar el polinomio localizador σ(X) con el algoritmo iterativo binario, fila por fila, con cada discrepancia.
  5. Hallar sus raíces por búsqueda de Chien y las posiciones erradas.
  6. Corregir, comprobar que la decodificación es consistente y recuperar el mensaje.

Antes de resolver: qué se entrega. Seis cosas de forma distinta. Dos vectores binarios de quince bits, v y r. Seis elementos de GF(24), escritos como potencias de α. Una tabla de t+2=5 filas que termina en un polinomio de grado a lo sumo 3 con coeficientes en el cuerpo. Tres posiciones. Y, al final, cinco bits que tienen que ser los del principio.

El mensaje, leído con la posición 0 a la izquierda, es

u(X)=1+X+X4

02 · Las herramientas

La Tabla 1. Todas las cuentas del decodificador son sumas y productos en GF(24). Se multiplica sumando exponentes módulo 15, porque α15=1; se suma con el vector (a0a1a2a3), bit a bit.

PotenciaPolinomioVectorPotenciaPolinomioVector
000000α71+α+α31101
111000α81+α21010
αα0100α9α+α30101
α2α20010α101+α+α21110
α3α30001α11α+α2+α30111
α41+α1100α121+α+α2+α31111
α5α+α20110α131+α2+α31011
α6α2+α30011α141+α31001

Codificar es una división. Como en cualquier código cíclico, la paridad es el resto de correr el mensaje n−k=10 lugares y dividirlo por g(X), y la palabra es la paridad seguida del mensaje:

b(X)=Rg(X){X10u(X)},v(X)=b(X)+X10u(X)

Los síndromes son evaluaciones. Con r(X)=v(X)+e(X) y e(X) el patrón de error, el síndrome i es r(X) evaluado en αi. Como las seis potencias son raíces de g(X), la palabra no aporta nada:

Si=r(αi)=e(αi),S2i=Si2

La segunda igualdad es de los códigos binarios: elevar al cuadrado una suma es sumar los cuadrados. Sólo hay que evaluar S1, S3 y S5. Lo explica la nota de los síndromes y el localizador.

El localizador. Si los errores están en j1,…,jν, los números localizadores son Xl=αjl y el polinomio localizador es

σ(X)=∏l=1ν(1+XlX)=1+σ1X+⋯+σνXν

Sus raíces son los inversos de los localizadores, y su grado es la cantidad de errores.

El algoritmo iterativo binario. Es la versión de Berlekamp-Massey para códigos binarios: t iteraciones, sólo sobre los síndromes impares. La fila μ guarda σ(μ)(X), su grado lμ y la discrepancia, que mide cuánto le falta para generar el síndrome siguiente:

dμ=S2μ+1+σ1(μ)S2μ+⋯+σlμ(μ)S2μ+1−lμ

Si dμ=0, el polinomio pasa igual a la fila siguiente. Si no, se busca entre las filas anteriores con discrepancia no nula la ρ que tenga el mayor 2ρ−lρ, y se corrige:

σ(μ+1)(X)=σ(μ)(X)+dμdρ−1X2(μ−ρ)σ(ρ)(X)

con grado lμ+1=max(lμ,lρ+2(μ−ρ)). La tabla arranca con dos filas fijas: μ=−12, con σ=1, d=1 y l=0; y μ=0, con σ=1 y d0=S1. Termina en la fila μ=t.

La búsqueda de Chien. Se evalúa σ(X) en 1,α,…,α14. Si αl es raíz, su inverso α15−l es un localizador, y la posición errada es 15−l. La búsqueda de Chien encadena las evaluaciones: el término σiαil pasa al siguiente multiplicado por αi.

Las dos comprobaciones. Antes de corregir: que el grado de σ(X) no pase de t, y que Chien encuentre tantas raíces distintas como ese grado. Si alguna falla, el decodificador declara falla de decodificación en vez de corregir.

03 · Codificar: la división a la vista

Primero pensar. X10u(X)=X10+X11+X14 tiene grado 14 y g(X) grado 10: el cociente tiene grado 4 y la división, a lo sumo cinco pasos. Cada paso suma Xsg(X) para matar el término de mayor grado, hasta que el resto baja de grado 10.

Después escribir.

X10u(X)=X10+X11+X14 +X4g(X)=X4+X5+X6+X8+X9+X12+X14 →X4+X5+X6+X8+X9+X10+X11+X12 +X2g(X)=X2+X3+X4+X6+X7+X10+X12 →X2+X3+X5+X7+X8+X9+X11 +Xg(X)=X+X2+X3+X5+X6+X9+X11 b(X)=X+X6+X7+X8

Hubo tres pasos y no cinco, porque el cociente sólo tiene término donde el resto parcial lo pide. Después de X4g(X) el término más alto es X12 y no X13, así que no hay X3 en el cociente; y después de Xg(X) el resto ya tiene grado 8, así que tampoco hay término independiente. El cociente es a(X)=X+X2+X4 y la paridad, como vector de diez posiciones, 0100001110. La palabra es

v(X)=X+X6+X7+X8+X10+X11+X14 v=0100001110⏟paridad11001⏟mensaje

de peso 7, el mínimo del código. El control: a(X)g(X) da exactamente v(X), o, lo que es lo mismo, v(αi)=0 para i=1,…,6.

04 · El canal y los seis síndromes

Los errores son e(X)=X2+X7+X13: el bit 2 pasa de 0 a 1, el 7 de 1 a 0 y el 13 de 0 a 1.

r=011000101011011 r(X)=X+X2+X6+X8+X10+X11+X13+X14

Primero pensar. El decodificador no conoce e(X): evalúa r(X), que tiene ocho términos. Para S1 se suman las ocho potencias de α con la Tabla 1. Para S3 y S5 conviene reducir antes los exponentes módulo 15: muchos se repiten y se cancelan de a pares.

Después escribir. S1, en vectores:

S1=α+α2+α6+α8+α10+α11+α13+α14 =0100+0010+0011+1010+1110+0111+1011+1001 =0100=α

S3: los exponentes 3j de las ocho posiciones son 3, 6, 18, 24, 30, 33, 39 y 42, que módulo 15 dan 3, 6, 3, 9, 0, 3, 9, 12. El α3 aparece tres veces y queda una; el α9, dos, y se va:

S3=1+α3+α6+α12=1000+0001+0011+1111=0101=α9

S5: los exponentes son 5, 10, 0, 10, 5, 10, 5, 10. Tres α5 dejan uno y cuatro α10 se cancelan:

S5=1+α5=1000+0110=1110=α10

Los pares, elevando al cuadrado: S2=S12=α2, S4=S22=α4 y S6=S32=α18=α3.

El control. Con los tres errores a la vista, las mismas cuentas salen por otro camino, con tres términos en lugar de ocho: S1=α2+α7+α13=α, S3=α6+α21+α39=α6+α6+α9=α9 y S5=α10+α35+α65=α10+α5+α5=α10. Coinciden porque v(X) se anula en las seis raíces; si la palabra del punto 1 estuviera mal, acá no coincidirían.

05 · El localizador, fila por fila

Primero pensar. Con t=3 hay tres iteraciones, μ=0,1,2, y cada una usa un síndrome impar nuevo: S1, S3, S5. Si hay tres errores, el grado tiene que subir hasta 3. Si una discrepancia diera cero, el polinomio no cambiaría en ese paso.

Fila 0. d0=S1=α, no nula. La única fila anterior con discrepancia no nula es ρ=−12. El corrimiento es 2(0+12)=1 y el factor d0/d−12=α:

σ(1)(X)=1+αX,l1=max(0,0+1)=1

Fila 1. La discrepancia usa S3, S2 y el σ1 recién calculado:

d1=S3+σ1S2=α9+α·α2=α9+α3=0101+0001=α

Hay dos candidatas a ρ: −12, con 2ρ−lρ=−1, y 0, con 0. Gana ρ=0. El corrimiento es 2(1−0)=2 y el factor d1/d0=α/α=1:

σ(2)(X)=(1+αX)+X2·1=1+αX+X2,l2=2

Fila 2. Con σ1=α y σ2=1:

d2=S5+σ1S4+σ2S3=α10+α·α4+1·α9=1110+0110+0101=1101=α7

Ahora hay tres candidatas, con 2ρ−lρ igual a −1, 0 y 1: gana ρ=1. Corrimiento 2(2−1)=2, factor d2/d1=α7/α=α6, y el que se suma es σ(1)(X):

σ(3)(X)=(1+αX+X2)+α6X2(1+αX) =1+αX+(1+α6)X2+α7X3 =1+αX+α13X2+α7X3

porque 1+α6=1000+0011=1011=α13. El grado sube a l3=max(2,1+2)=3, y con μ=t el algoritmo termina:

σ(X)=1+αX+α13X2+α7X3

El control. Para t=3 el método de Peterson tiene fórmula cerrada, con otras cuentas: σ1=S1=α; S13+S3=α3+α9=α y S12S3+S5=α11+α10=α14, así que σ2=α14/α=α13 y σ3=α+α·α13=α+α14=α7. El mismo polinomio.

06 · Chien: dónde se anula σ

Primero pensar. Un polinomio de grado 3 sobre un cuerpo de 16 elementos se resuelve probando: hay quince candidatos no nulos. Si los errores son tres y σ(X) es el correcto, exactamente tres de las quince evaluaciones dan cero.

Después escribir. Los tres registros arrancan en σ1=α, σ2=α13 y σ3=α7, y en cada paso se multiplican por α, α2 y α3. La suma con el 1 es σ(αl):

lσ₁αˡσ₂α²ˡσ₃α³ˡσ(αˡ)Posición
0αα13α7α8—
1α21α10α4—
2α3α2α13013
3α4α4αα4—
4α5α6α4α3—
5α6α8α7α4—
6α7α10α10α9—
7α8α12α13α5—
8α9α14α07
9α10αα4α10—
10α11α3α7α6—
11α12α5α10α12—
12α13α7α13α9—
13α14α9α02
141α11α4α13—

La fila 2, sumada a mano:

σ(α2)=1+α3+α2+α13=1000+0001+0010+1011=0000

Las raíces son α2, α8 y α13. Sus inversos, α13, α7 y α2, son los localizadores: los errores están en las posiciones 13, 7 y 2.

Simulación El decodificador, etapa por etapa — el mensaje y los errores se editan tocando sus bits, también en mitad del camino. Arranca sin calcular nada: cada etapa se abre con el botón.
El mensaje u = (u₀, …, u₄)
Los errores e

errores puestos — etapa — grado de σ — mensaje entregado —

Cambiá el mensaje en cualquier etapa después de los síndromes: la palabra cambia, la recibida también, y los seis síndromes no se mueven. Después sacá el error de la posición 13 y mirá la fila 2: su discrepancia da cero, y el polinomio llega a la última fila con grado 2. Y por último agregá un cuarto error.

07 · La resolución, como se entrega

1. La paridad es el resto de X10+X11+X14 por g(X), b(X)=X+X6+X7+X8, con cociente X+X2+X4. La palabra es v=010000111011001, o v(X)=X+X6+X7+X8+X10+X11+X14.

2. r=011000101011011.

3. S1=α, S2=α2, S3=α9, S4=α4, S5=α10, S6=α3. Los pares son los cuadrados de S1, S2 y S3.

4. La tabla del algoritmo iterativo binario, la Tabla 8 del apunte:

μσ⁽μ⁾(X)d_μl_μ2μ − l_μ
−12110−1
01α00
11+αXα11 (ρ=−12)
21+αX+X2α722 (ρ=0)
31+αX+α13X2+α7X3—33 (ρ=1)

Al lado de cada 2μ−lμ va la ρ con la que se armó esa fila. σ(X)=1+αX+α13X2+α7X3.

5. σ(X) se anula en α2, α8 y α13. Los localizadores son α13, α7 y α2: posiciones 13, 7 y 2.

6. El grado de σ(X) es 3, que no pasa de t=3, y Chien encontró tres raíces distintas: la decodificación es consistente. Con e(X)=X2+X7+X13, r(X)+e(X)=v(X), y las cinco últimas posiciones devuelven u=(1 1 0 0 1).

08 · Lo que se lleva a otros ejercicios

El síndrome no ve el mensaje. Los seis síndromes dependen sólo de los errores. Con los errores en 2, 7 y 13, los 32 mensajes posibles dan los mismos seis valores: desde los síndromes en adelante, la cuenta es la misma para cualquier mensaje. El mensaje de un ejercicio así sirve para armar r y para comprobar el final, nada más.

El grado de σ cuenta los errores, y la discrepancia nula lo muestra. Con un solo error, en la posición 7, d1=d2=0 y σ(X)=1+α7X. Con dos, en 2 y 13, d2=0 y σ(X)=1+α14X+X2. En las dos tablas, recorridas con el decodificador, el polinomio deja de cambiar en cuanto su grado llega a la cantidad de errores. El atajo de terminar antes de la fila t cuando las discrepancias siguientes son nulas sale de acá.

Peterson es el control para t≤3. La fórmula cerrada no comparte cuentas con el algoritmo iterativo: si los dos dan el mismo σ(X), la tabla está bien.

Con un error de más, el decodificador no siempre avisa. A los tres errores del ejemplo se les puede agregar un cuarto en doce posiciones. Recorridas las doce con el decodificador: en ocho declara falla, porque σ(X) sale de grado 3 y Chien no le encuentra ninguna raíz; en las otras cuatro —1, 5, 12 y 14— corrige tres posiciones y entrega, sin aviso, la misma palabra equivocada. Esa palabra difiere de v justo en {1,2,5,7,12,13,14}, una palabra de peso 7 que contiene a las tres posiciones del ejemplo. Por qué la cuenta la hacen esas palabras es la tesis de pasado t, la cuenta la hacen las palabras livianas.

En hardware, la mitad de los síndromes no se calcula. El circuito evalúa S1, S3 y S5, y los pares salen elevando al cuadrado, que en GF(2m) es lineal. Las tres etapas, con su costo, están en el decodificador BCH en hardware.

09 · Las trampas

Las raíces no son las posiciones. σ(X) se anula en α2, α8 y α13. Leer esos exponentes como posiciones da 2, 8 y 13, y en este ejemplo dos de los tres coinciden con los errores verdaderos —2 y 13 son inversos entre sí, porque suman 15—, así que el error se esconde. La posición es 15−l: la raíz α8 marca la posición 7, no la 8.

ρ es la de mayor 2ρ−lρ, no cualquiera. En la fila 2 hay dos filas anteriores con discrepancia α, la 0 y la 1. Con ρ=0 el corrimiento sería X4, el factor α7/α=α6, y saldría 1+αX+X2+α6X4: grado 4, más que t. El decodificador declararía falla sobre un patrón que sabe corregir.

El corrimiento es 2(μ−ρ). En la versión binaria las filas avanzan de a dos síndromes. Por eso la primera corrección, desde ρ=−12, corre una posición, y las otras dos corren dos.

Los exponentes se reducen. S32=α18 es α3, y α18 no está en la Tabla 1. Lo mismo con los 3j y 5j de los síndromes: reducirlos primero es lo que deja ver las cancelaciones.

El mensaje está al final de la palabra. En la forma sistemática del apunte la paridad ocupa las posiciones 0 a 9 y el mensaje las 10 a 14. Los cinco primeros bits de v son 01000, y eso es paridad, no el mensaje.

La última fila no tiene discrepancia. En μ=t el algoritmo termina: no hay S7 con qué calcularla, y la casilla queda vacía.

Para tener a mano

  1. v(X)=Rg(X){Xn−ku(X)}+Xn−ku(X). Acá v=010000111011001.
  2. Si=r(αi)=e(αi) y S2i=Si2. Acá α,α2,α9,α4,α10,α3.
  3. dμ=S2μ+1+σ1(μ)S2μ+⋯; si no es nula, σ(μ+1)(X)=σ(μ)(X)+dμdρ−1X2(μ−ρ)σ(ρ)(X), con ρ la fila anterior de discrepancia no nula y mayor 2ρ−lρ. Son t iteraciones.
  4. Acá las discrepancias son α, α y α7, y σ(X)=1+αX+α13X2+α7X3.
  5. Si σ(αl)=0, la posición errada es n−l. Acá las raíces α2, α8 y α13 dan las posiciones 13, 7 y 2.
  6. Antes de corregir: grado de σ(X) a lo sumo t, y tantas raíces distintas como el grado. Si no, falla de decodificación.
  7. El control de cada etapa por otro camino: los síndromes desde e(X), σ(X) por Peterson, y el mensaje recuperado contra el de partida.
← Anterior Inicio
Relacionados Los síndromes y el polinomio localizador El algoritmo de Berlekamp-Massey La búsqueda de Chien El método de Peterson Los códigos BCH Pasado t, la cuenta la hacen las palabras livianas El registro ciclo a ciclo