Bitácora · FEC · Concepto

Los códigos cíclicos

Unidad 5 · Los códigos cíclicos · la definición, la palabra como polinomio, el desplazamiento como producto por X módulo Xⁿ + 1, y el (7,4) que ya era cíclico

Un código lineal se decodifica con una tabla que asocia cada síndrome con su líder de coset, y esa tabla tiene 2n−k entradas: ocho en el (7,4), más de cuatro mil millones con 32 bits de paridad. La salida no es abandonar la linealidad sino agregarle una simetría: que el código no cambie al girar sus palabras. Con esa sola condición, la tabla se reemplaza por un circuito. Los BCH, los Reed-Solomon y los CRC son todos cíclicos o salen de uno.

01 · La definición

Sea v=(v0,v1,…,vn−1) una n-tupla sobre GF(2). Su desplazamiento cíclico es

v(1)=(vn−1,v0,v1,…,vn−2)

Cada componente se corre un lugar a la derecha y la última vuelve al principio. Aplicado i veces da el desplazamiento de orden i, v(i), y con i=n la tupla vuelve a ser la misma: las n posiciones se leen como un anillo.

Definición. Un código de bloque lineal (n,k) es cíclico si el desplazamiento cíclico de toda palabra de código es también una palabra de código.

Alcanza con pedirlo para un lugar: v(i) es el desplazamiento de un lugar aplicado i veces, y cada vez se cae adentro del código. Girar no cambia la cantidad de unos, así que una palabra y sus giros tienen el mismo peso. Las palabras de un código cíclico se agrupan entonces en órbitas: cada una con todos sus giros, que son a lo sumo n distintos.

La condición es fuerte. Un código lineal puede ser cualquier conjunto de 2k palabras cerrado bajo la suma; ser cíclico pide además un cierre que depende del orden de las posiciones, algo que a la suma y a las distancias les da igual.

02 · La palabra como polinomio

En notación de vectores el desplazamiento es incómodo. A la n-tupla v se le asocia el polinomio

v(X)=v0+v1X+v2X2+⋯+vn−1Xn−1

de grado menor que n y coeficientes en GF(2). La posición i es el coeficiente de Xi. La correspondencia es biunívoca y la suma de vectores es la suma de polinomios, así que nada se pierde. Lo que se gana es una cuenta para el desplazamiento.

Paso 1: multiplicar por X. Cada coeficiente sube un grado:

Xv(X)=v0X+v1X2+⋯+vn−2Xn−1+vn−1Xn

Casi es el desplazamiento, salvo por el último término, que llegó a grado n y no corresponde a ninguna posición.

Paso 2: sumar dos veces vn−1. Sobre GF(2) sumar dos veces lo mismo es sumar cero. Agrupando una de las copias con el término de grado n y la otra con el resto:

Xv(X)=vn−1(Xn+1)+(vn−1+v0X+⋯+vn−2Xn−1)⏟v(1)(X)

El paréntesis tiene los coeficientes (vn−1,v0,…,vn−2): es exactamente el polinomio de v(1).

Paso 3: leer un resto. La igualdad tiene la forma de una división por Xn+1, con cociente vn−1 y un resto de grado menor que n. Ese resto es el desplazamiento:

v(1)(X)=RXn+1{Xv(X)},v(i)(X)=RXn+1{Xiv(X)}

donde Rd(X){f(X)} es el resto de dividir f(X) por d(X). Girar es multiplicar por X módulo Xn+1. En la práctica se cuenta con Xn≡1: el término que llega a grado n vuelve a grado 0.

Con n=7 y v=1001011, la posición 0 a la izquierda:

v(X)=1+X3+X5+X6Xv(X)=X+X4+X6+X7≡1+X+X4+X6(modX7+1)

o sea v(1)=1100101: el 1 de la posición 6 dio la vuelta a la posición 0, y los demás se corrieron un lugar.

03 · Un polinomio describe el código

La cuenta del paso 3 tiene una consecuencia que la notación de vectores escondía. En un código cíclico, RXn+1{Xiv(X)} es una palabra para todo i, y la suma de palabras es una palabra. Un polinomio cualquiera a(X)=∑aiXi es una suma de potencias de X, así que

RXn+1{a(X)v(X)}=∑iaiv(i)(X)

también es una palabra. Un código cíclico es cerrado bajo el producto por cualquier polinomio, módulo Xn+1. De ahí sale que una sola palabra alcanza para generarlo todo: la no nula de menor grado, el polinomio generador g(X). Es única, tiene grado n−k, las palabras son sus múltiplos de grado menor que n, divide a Xn+1, y todo divisor de Xn+1 genera un cíclico. Las pruebas están en el polinomio generador.

Con eso, buscar los cíclicos de un largo es factorizar. Para n=7,

X7+1=(1+X)(1+X+X3)(1+X2+X3)

tres factores irreducibles. Cada producto de algunos de ellos, sin tomar ninguno ni todos, es un generador: 23−2=6 códigos. Con la distancia mínima de cada uno, sacada enumerando sus palabras:

g(X)(n, k)dmin
1 + X(7, 6)2
1 + X + X³(7, 4)3
1 + X² + X³(7, 4)3
1 + X + X² + X⁴(7, 3)4
1 + X² + X³ + X⁴(7, 3)4
1 + X + X² + X³ + X⁴ + X⁵ + X⁶(7, 1)7

El primero es el de paridad par; el último, la repetición. Una matriz k×n pasa a ser un polinomio de n−k+1 coeficientes, y la ganancia es de implementación: codificar es una división y el síndrome es un resto, las dos cosas con un registro de desplazamiento de n−k etapas, sin tablas. Está en el codificador cíclico y en el síndrome cíclico.

04 · El (7,4) del curso ya era cíclico

El Hamming (7,4) que se usa desde la Unidad 3 tiene la matriz generadora en forma sistemática G=[I4P], con el mensaje adelante y tres ecuaciones de paridad:

p0=u0+u2+u3p1=u0+u1+u2p2=u1+u2+u3

Nada en esa construcción habla de giros. Y sin embargo, comparadas una por una, sus 16 palabras son exactamente las mismas que las del cíclico de g(X)=1+X+X3. No es casualidad, y se ve en cuatro pasos.

Paso 1: las filas de G son múltiplos de g(X). Leídas como polinomios y divididas por g(X), las cuatro dan resto cero:

1000110=1+X4+X5=(1+X+X2)g(X)0100011=X+X5+X6=(X+X2+X3)g(X)0010111=X2+X4+X5+X6=(X2+X3)g(X)0001101=X3+X4+X6=X3g(X)

Paso 2: entonces generan el mismo código. Los múltiplos de g(X) de grado menor que 7 son palabras del cíclico, así que las 16 combinaciones de esas cuatro filas también lo son. Las filas de una G son independientes, y dan 16 palabras distintas; el cíclico tiene 24=16. No queda ninguna afuera.

Paso 3: las ecuaciones de paridad son las mismas. La forma sistemática de un cíclico pone la paridad adelante y el mensaje al final:

v(X)=b(X)+Xn−ku(X),b(X)=Rg(X){Xn−ku(X)}

Con n−k=3, el mensaje entra multiplicado por X3, y hacen falta los restos de X3 a X6. Como módulo g(X) vale X3≡1+X, cada uno sale del anterior multiplicando por X y volviendo a reemplazar, siempre módulo g(X):

X3≡1+XX4≡X+X2X5≡1+X+X2X6≡1+X2

Entonces

b(X)=u0(1+X)+u1(X+X2)+u2(1+X+X2)+u3(1+X2)

y juntando por potencias:

b0=u0+u2+u3b1=u0+u1+u2b2=u1+u2+u3

Son las tres ecuaciones de la Unidad 3, letra por letra. La P de aquel (7,4) tiene por filas los restos de X3, X4, X5 y X6 módulo g(X).

Paso 4: lo único que cambia es dónde va el mensaje. El cíclico escribe (b0b1b2u0u1u2u3); la Unidad 3, (u0u1u2u3p0p1p2). Mismo conjunto, otra asignación: de los 16 mensajes, sólo 0000 y 1111 van a parar a la misma palabra en las dos. El mensaje 1000 es 110 1000 en el cíclico —el propio g(X)— y 1000 110 en la Unidad 3. De una a otra hay un giro: la palabra de la Unidad 3 es la cíclica girada cuatro lugares, RX7+1{X4v(X)}, comprobado en los 16 mensajes. Ese atajo sólo existe porque el código es cíclico.

Las órbitas. Las siete palabras de peso 3 son los siete giros de g(X)=1101000, y las siete de peso 4, los siete giros de (1+X)g(X)=1011100. Con 0000000 y 1111111, que giran sobre sí mismas, el código entero son cuatro órbitas: 1+7+7+1=16. La distribución de pesos del Hamming, A0=1, A3=7, A4=7, A7=1, es la lista de esas órbitas.

Simulación Girar una palabra del (7,4) — dos ordenamientos del mismo Hamming (7,4): el del curso y el orden natural de la Unidad 4, con la columna i de H igual a i + 1 en binario. Los dos tienen siete palabras de peso 3, siete de peso 4 y d_min = 3. Apostá si el código es cíclico y girá: cada giro es X·v(X) módulo X⁷ + 1, y se mira si lo que sale sigue en el código.
El código
v — v(X) — — síndrome v·Hᵀ — en el código —
Antes de girar: ¿este código es cíclico?
palabras giradas — siguen en el código — se salen —

Arranca en el orden natural, con 0011001. Apostá y girá: la girada, 1001100, sigue en el código. Girá otra vez. Después pasá al (7,4) del curso y buscá una palabra que se salga.

05 · El mismo Hamming, en otro orden, no es cíclico

El orden natural pone en la posición i la columna de H que vale i+1 en binario. Es el mismo Hamming (7,4) con las posiciones en otro orden: las mismas columnas en H, los mismos pesos, la misma distancia. Y de sus 16 palabras, sólo 4 siguen en el código al girarlas: 0000000, 1111111, 0011001 y 1100110. Medido con giros de 1 a 6 lugares, la cuenta da 4 en todos. Ser cíclico no es una propiedad de las distancias: es una propiedad del orden.

Cuánto pide ese orden se puede contar. Las 7!=5040 maneras de reordenar las posiciones del (7,4) dan 30 códigos distintos, todos con los mismos pesos. Dos son cíclicos: el de 1+X+X3, que es el del curso, y el de 1+X2+X3. Entre esos dos sólo hay dos palabras en común, 0000000 y 1111111. Entre los reordenamientos del (7,4), uno de cada quince es cíclico; que el del curso lo sea depende de cómo se armó su P en la Unidad 3.

La estructura también restringe qué parámetros existen. Los generadores de largo 7 tienen grado 1, 3, 4 o 6, que son las sumas posibles de los grados de los factores de X7+1: no hay ningún cíclico (7,5) ni (7,2). Y para una misma redundancia puede haber varios cíclicos con distancias distintas, o uno solo, y malo: en largo 15, un bit más de redundancia puede costar distancia. Cuando el largo que se necesita no es uno con buena factorización, el cíclico se acorta, y deja de ser cíclico sin perder el circuito: está en los CRC y los códigos acortados.

Para tener a mano

  1. Un código lineal (n,k) es cíclico si el giro de toda palabra es una palabra. Girar es v(1)=(vn−1,v0,…,vn−2), con la posición 0 a la izquierda.
  2. La palabra es v(X)=v0+v1X+⋯+vn−1Xn−1, y v(i)(X)=RXn+1{Xiv(X)}: se cuenta con Xn≡1.
  3. Cerrado bajo giros y sumas es cerrado bajo el producto por cualquier a(X) módulo Xn+1. Por eso un solo g(X), divisor de Xn+1 y de grado n−k, describe el código.
  4. X7+1=(1+X)(1+X+X3)(1+X2+X3): seis cíclicos de largo 7, con k=6, 4, 4, 3, 3 y 1.
  5. El (7,4) del curso es, palabra por palabra, el cíclico de 1+X+X3: sus filas son múltiplos de g(X) y su P son los restos de X3 a X6. Cambia la asignación: el cíclico pone la paridad adelante, y las dos palabras de un mensaje difieren en un giro de cuatro lugares.
  6. Órbitas del (7,4): 1+7+7+1; las de peso 3 son los giros de g(X).
  7. El mismo Hamming en orden natural no es cíclico: 4 de sus 16 palabras sobreviven al giro. De los 30 reordenamientos distintos del (7,4), sólo 2 son cíclicos.
← Anterior Siguiente → Inicio
Relacionados El polinomio generador El codificador cíclico El síndrome cíclico El código lineal y la matriz G Los códigos de Hamming Desplazar, factorizar, elegir Un bit más de redundancia puede costar distancia