Bitácora · FEC · Concepto

El producto cíclico y los quasi-cíclicos

Unidad 5 · Los códigos cíclicos · el producto de dos cíclicos leído en diagonal, su generador en una sola fórmula, y los códigos que se cierran con giros de n0 y no de uno

El código producto arma un código grande con dos chicos: un arreglo con cada fila en uno y cada columna en el otro. Si los dos son cíclicos, el producto puede serlo o no, y no depende de los códigos: depende del orden en que se leen las celdas. Leído en diagonal, con largos coprimos, el arreglo entero queda descripto por un solo polinomio generador.

01 · Dos maneras de leer el arreglo

Sean C1 un código cíclico (n1,k1) con generador g1(X) y C2 uno (n2,k2) con generador g2(X). El producto C1⊗C2 son los arreglos de n2 filas por n1 columnas con cada fila en C1 y cada columna en C2: un código (n1n2,k1k2) con dmin=d1d2.

Como conjunto de arreglos, el producto no depende de ningún orden. Pero ser cíclico es una propiedad del vector: girar v(X) una posición, Xv(X) módulo Xn+1, y ver si cae en el código. Para eso hay que decir qué celda es la posición m del vector, y hay dos respuestas naturales.

Por filas. La posición m va a la fila ⌊m/n1⌋, columna mmodn1: una fila entera, después la siguiente. Girar una posición pasa el último bit de cada fila al principio de la siguiente, y una fila queda armada con pedazos de dos. Girar n1 posiciones, en cambio, baja cada fila un lugar y la última sube a la primera: las filas no cambian y cada columna gira una posición, así que todo sigue en el código. Con la paridad (5,4) en las filas y la (3,2) en las columnas, un código (15,8): los únicos giros que dejan las 256 palabras adentro son el de 5 y el de 10, y el de una posición saca a 192.

El orden del teorema chino del resto. La posición m va a la celda

filammodn2,columnammodn1

Si mcd(n1,n2)=1, el teorema chino del resto dice que los dos restos determinan a m entre 0 y n1n2−1, y que todo par de restos aparece una vez: cada celda recibe exactamente una posición. Con n1=5 y n2=3, el arreglo de 3 × 5 se numera así:

col 0col 1col 2col 3col 4
fila 0061239
fila 11017134
fila 25112814

Seguidas en orden, las posiciones bajan en diagonal: una fila abajo y una columna a la derecha por paso. Cuando el camino sale por abajo vuelve por arriba, cuando sale por la derecha vuelve por la izquierda, y recorre las quince celdas antes de volver a la 0.

02 · Por qué el giro queda adentro

Proposición. Si C1 y C2 son cíclicos y mcd(n1,n2)=1, el producto leído en el orden del teorema chino del resto es un código cíclico de largo n=n1n2.

Paso 1: el giro mueve cada celda en diagonal. Girar una posición lleva el bit de la posición m a la m+1, módulo n. Los dos restos suben uno: el bit de la celda (i,j) pasa a la (i+1,j+1), la fila módulo n2 y la columna módulo n1. Como n es múltiplo de los dos, la vuelta de n−1 a 0 también respeta la regla.

Paso 2: cada fila nueva es una fila vieja girada. La fila i+1 del arreglo girado es la fila i del original con cada bit corrido una columna, la última a la primera: su giro cíclico. Como C1 es cíclico, sigue en C1.

Paso 3: lo mismo con las columnas. La columna j+1 nueva es la j vieja girada una fila, y sigue en C2. Un arreglo con todas sus filas en C1 y todas sus columnas en C2 es una palabra del producto.

Leído por filas, el Paso 1 falla: m+1 cambia de fila sólo cuando m termina una, y el bit que cruza no cae en la misma columna para todas. La diagonal es justamente el orden en que un paso del vector es un paso en las dos direcciones a la vez.

Interactivo El arreglo de 3 × 5, girado una posición — el arreglo es una palabra del producto: filas en C₁, de largo 5, y columnas en C₂, de largo 3. Elegí el orden de lectura, apostá si la palabra girada sigue en el código, y girá. Cada celda lleva su bit y, abajo, la posición del vector que le toca; al costado, si la fila está en C₁, y debajo, si la columna está en C₂.
Orden de lectura

v =

Antes de girar: la palabra girada, ¿sigue en el código?
código — giros — g(X) — resto por g(X) —

Arranca leyendo por filas, con la paridad en los dos lados. Apostá y girá; después pasá a la diagonal y apostá de nuevo. Probá cinco giros seguidos por filas, y mirá el resto por g(X) en los dos órdenes: el generador describe una sola de las dos lecturas. Con la repetición (3,1) en las columnas pasa algo distinto, y vale la pena ver por qué.

03 · El generador, en una fórmula

Si el producto es cíclico, tiene un polinomio generador: la palabra no nula de menor grado, de grado n−k, de la que todas las demás son múltiplos. Como n1 y n2 son coprimos, hay enteros a y b con an1+bn2=1, y con ellos

g(X)=mcd[Xn1n2+1,g1(Xbn2)g2(Xan1)]

que es la ecuación (32) del apunte. Los exponentes se reducen módulo n, porque Xn=1 en las cuentas módulo Xn+1; por eso a o b negativos no molestan. Por qué es así, en tres pasos.

Paso 1: dos exponentes que son las dos direcciones. El número bn2 deja resto 1 al dividirlo por n1 (porque bn2=1−an1) y resto 0 al dividirlo por n2: es la posición de la celda (fila 0, columna 1), un paso a lo largo de la fila. Del mismo modo an1 es la celda (fila 1, columna 0), un paso a lo largo de la columna. Y la celda (fila i, columna j) es la posición jbn2+ian1 módulo n, que tiene los dos restos que corresponden.

Paso 2: un producto exterior es un producto de polinomios. Sean u(X) una palabra de C1 y w(X) una de C2, y el arreglo que tiene u en cada fila donde w tiene un 1. Por el Paso 1, su bit de la celda (i,j) es el coeficiente de Xjbn2+ian1, así que el arreglo, como polinomio, es

v(X)=u(Xbn2)w(Xan1)módXn+1

Toda palabra del producto es suma de arreglos así.

Paso 3: los ceros. Sea γ una raíz de Xn+1, en el cuerpo GF(2m) donde se parte en factores de grado uno. Evaluada ahí, la palabra del Paso 2 vale u(γbn2)w(γan1). Si γbn2 es raíz de g1, el primer factor se anula para toda u de C1, que son múltiplos de g1; lo mismo con g2 y el segundo. Si ninguna de las dos cosas pasa, u=g1 y w=g2 dan una palabra que no se anula en γ. Las raíces comunes de todo el código, que son las de g, son entonces las raíces de Xn+1 que anulan a g1(Xbn2)g2(Xan1): el mcd. Con n impar, Xn+1 no tiene raíces repetidas y el argumento cierra así.

El polinomio de paridad sale del mismo razonamiento al revés: γ es raíz de h cuando no es raíz de g, o sea cuando γbn2 es raíz de h1 y γan1 es raíz de h2. Las dos condiciones a la vez son un mcd, no un producto:

h(X)=mcd[Xn+1,h1(Xbn2),h2(Xan1)]

Con los exponentes ya reducidos, Xn+1 tiene que estar en el mcd. Las dos fórmulas, la de g y la de h, se compararon con el código armado celda por celda en 64 productos: todos los pares de cíclicos no triviales con largos (5, 3), (3, 5), (7, 3), (7, 2), (5, 2), (3, 4), (5, 4), (7, 4) y (9, 2), pares incluidos. Coinciden en los 64.

Un ejemplo entero. La paridad (5,4) en las filas, g1=1+X, y la (3,2) en las columnas, g2=1+X. Como 2·5+(−3)·3=1, a=2 y b=−3: bn2=−9≡6 y an1=10, que en la tabla de la sección 01 son la celda (0, 1) y la (1, 0). Entonces

g1(X6)g2(X10)=(1+X6)(1+X10) =1+X6+X10+X16 ≡1+X+X6+X10

módulo X15+1, y el mcd con X15+1 es

g(X)=1+X+X2+X5+X6+X7 =(1+X)(1+X+X2)(1+X+X2+X3+X4)

de grado 7 = 15 − 8, como tiene que ser. Se lee también por los ceros: 1+X6 comparte con X15+1 el factor 1+X3, y 1+X10 comparte 1+X5; g es su mínimo común múltiplo, (1+X+X2)(1+X5). Y h(X)=(1+X+X4)(1+X3+X4), los dos factores de X15+1 que quedan. Enumeradas las 256 palabras en orden diagonal, la no nula de menor grado es ese g.

Un código hecho en dos dimensiones queda descripto por un solo polinomio, y hereda todo lo de la unidad: se codifica con un registro de desplazamiento de n−k etapas, y el síndrome es un resto. Del lado del receptor sigue sirviendo la estructura: la palabra recibida se reacomoda en el arreglo y se decodifica por filas con el decodificador de C1 y por columnas con el de C2, con el equipamiento de los dos códigos chicos y no el de uno de largo n1n2.

04 · Donde la construcción no alcanza

Sin largos coprimos no hay diagonal. Con mcd(n1,n2)=d>1, los dos restos vuelven a ser 0 a la vez en mcm(n1,n2)=n1n2/d, y la diagonal se cierra antes de pasar por todas las celdas. En un arreglo de 3 × 3 recorre la diagonal principal, tres celdas de nueve; en uno de 4 filas por 6 columnas, 12 de 24. La regla m↦(mmodn2,mmodn1) deja de ser un orden de lectura: le asigna la misma celda a varias posiciones y ninguna a otras.

La distancia es la del producto, no la mejor. La construcción garantiza dmin=d1d2 y nada más, y ser cíclico no la mejora: el código es el mismo conjunto de arreglos, leído de otra manera. La paridad (5,4) por la repetición (3,1) da un cíclico (15,4) con dmin=2·3=6, generado por 1+X+X5+X6+X10+X11. De largo 15 hay tres cíclicos (15,4), y enumerados dan distancias 8, 6 y 8: el producto es justo el peor. Lo que compra es otra cosa: un decodificador hecho con dos chicos.

05 · Los quasi-cíclicos

Definición. Un código lineal es quasi-cíclico si hay un entero n0≠1 tal que girar cualquier palabra n0 posiciones, o un múltiplo de n0, da otra palabra. A n0 se lo llama la restricción de desplazamiento. Los cíclicos son el caso n0=1. El dual de un quasi-cíclico vuelve a ser quasi-cíclico, con el mismo n0.

El producto de la sección 01, leído por filas, ya era uno: se cierra con giros de n0=n1, una fila entera, y no con giros de uno. Cambia cuando todas las filas son iguales, como con la repetición (3,1) en las columnas: entonces el vector leído por filas es la misma fila tres veces, coincide con el leído en diagonal, y es cíclico en los dos órdenes. El ejemplo mínimo del apunte es el (9, 3) de la ecuación (33), con n0=3:

G=( 111100110 110111100 100110111 )

con la posición 0 a la izquierda. Cada fila es la anterior girada tres posiciones: la matriz generadora está hecha de bloques de tres que giran juntos. Enumeradas sus ocho palabras, tres pesan 4 y cuatro pesan 6, así que dmin=4. Giradas tres posiciones, las ocho caen en el código; giradas una o dos, la única que se queda es la nula.

Por qué se cierra con tres. Con el mensaje (u0,u1,u2), la palabra son tres bloques, y el bloque j, de las posiciones 3j a 3j+2, es

(u0+u1+u2,uj+uj+1,uj)

con los índices módulo 3: dos bits de paridad y uno de información, intacto, al final del bloque. Los tres mensajes con un solo 1 dan las tres filas de G, y la regla reproduce las ocho palabras. Es una forma sistemática por bloques. Y la regla es la misma para los tres bloques, con j corrido: girar tres posiciones pasa el bloque j al lugar del j+1, que es la palabra del mensaje (u2,u0,u1). Girar una posición, en cambio, mete un bit de información en un lugar de paridad.

En general, un quasi-cíclico (mn0,mk0) tiene m bloques de n0 símbolos, cada uno con k0 de información y n0−k0 de paridad, y su G se lleva a filas de bloques en las que cada una es la anterior girada un bloque. La matriz entera queda dada por su primera fila de bloques. Su dual, el (9, 6), también se cierra con giros de 3 y no de 1, y tiene dmin=2.

La simetría parcial se paga con menos estructura que un cíclico, pero da algo que el cíclico no: los bloques se procesan en paralelo, y el catálogo de largos y tasas es mucho más amplio. Es la forma en que se usan hoy los códigos LDPC de los estándares, que son quasi-cíclicos por esta razón.

Para tener a mano

  1. Ser cíclico depende del orden de lectura. Por filas, el producto se cierra con giros de n1; con la (5,4) por la (3,2), el giro de uno saca 192 de las 256 palabras.
  2. Orden chino: la posición m va a la fila mmodn2, columna mmodn1. Exige mcd(n1,n2)=1. Un giro mueve cada celda una fila abajo y una columna a la derecha: gira cada fila y cada columna.
  3. g=mcd[Xn+1,g1(Xbn2)g2(Xan1)] con an1+bn2=1; bn2 es un paso por la fila y an1 uno por la columna. Exponentes módulo n.
  4. h es el mcd de los tres, Xn+1, h1(Xbn2) y h2(Xan1), no su producto.
  5. (5,4) ⊗ (3,2) en diagonal: g=(1+X+X2)(1+X5), un (15,8) con dmin=4.
  6. La distancia sigue siendo d1d2: (5,4) ⊗ (3,1) es el (15,4) cíclico de distancia 6, contra 8 de los otros dos.
  7. Quasi-cíclico: se cierra con giros de n0≠1. El (9, 3): bloque j = (u0+u1+u2,uj+uj+1,uj), dmin=4, cerrado con giros de 3; con uno o dos sólo queda la palabra nula.
← Anterior Siguiente → Inicio
Relacionados Los códigos producto Los códigos cíclicos El polinomio generador El codificador cíclico El intercalado La ráfaga la corrige el orden