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 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.
Sean un código cíclico con generador y uno con generador . El producto son los arreglos de filas por columnas con cada fila en y cada columna en : un código con .
Como conjunto de arreglos, el producto no depende de ningún orden. Pero ser cíclico es una propiedad del vector: girar una posición, módulo , y ver si cae en el código. Para eso hay que decir qué celda es la posición del vector, y hay dos respuestas naturales.
Por filas. La posición va a la fila , columna : 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 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 va a la celda
Si , el teorema chino del resto dice que los dos restos determinan a entre y , y que todo par de restos aparece una vez: cada celda recibe exactamente una posición. Con y , el arreglo de 3 × 5 se numera así:
| col 0 | col 1 | col 2 | col 3 | col 4 | |
|---|---|---|---|---|---|
| fila 0 | 0 | 6 | 12 | 3 | 9 |
| fila 1 | 10 | 1 | 7 | 13 | 4 |
| fila 2 | 5 | 11 | 2 | 8 | 14 |
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.
Proposición. Si y son cíclicos y , el producto leído en el orden del teorema chino del resto es un código cíclico de largo .
Paso 1: el giro mueve cada celda en diagonal. Girar una posición lleva el bit de la posición a la , módulo . Los dos restos suben uno: el bit de la celda pasa a la , la fila módulo y la columna módulo . Como es múltiplo de los dos, la vuelta de a también respeta la regla.
Paso 2: cada fila nueva es una fila vieja girada. La fila del arreglo girado es la fila del original con cada bit corrido una columna, la última a la primera: su giro cíclico. Como es cíclico, sigue en .
Paso 3: lo mismo con las columnas. La columna nueva es la vieja girada una fila, y sigue en . Un arreglo con todas sus filas en y todas sus columnas en es una palabra del producto.
Leído por filas, el Paso 1 falla: cambia de fila sólo cuando 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.
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é.
Si el producto es cíclico, tiene un polinomio generador: la palabra no nula de menor grado, de grado , de la que todas las demás son múltiplos. Como y son coprimos, hay enteros y con , y con ellos
que es la ecuación (32) del apunte. Los exponentes se reducen módulo , porque en las cuentas módulo ; por eso o negativos no molestan. Por qué es así, en tres pasos.
Paso 1: dos exponentes que son las dos direcciones. El número deja resto 1 al dividirlo por (porque ) y resto 0 al dividirlo por : es la posición de la celda (fila 0, columna 1), un paso a lo largo de la fila. Del mismo modo es la celda (fila 1, columna 0), un paso a lo largo de la columna. Y la celda (fila , columna ) es la posición módulo , que tiene los dos restos que corresponden.
Paso 2: un producto exterior es un producto de polinomios. Sean una palabra de y una de , y el arreglo que tiene en cada fila donde tiene un 1. Por el Paso 1, su bit de la celda es el coeficiente de , así que el arreglo, como polinomio, es
Toda palabra del producto es suma de arreglos así.
Paso 3: los ceros. Sea una raíz de , en el cuerpo donde se parte en factores de grado uno. Evaluada ahí, la palabra del Paso 2 vale . Si es raíz de , el primer factor se anula para toda de , que son múltiplos de ; lo mismo con y el segundo. Si ninguna de las dos cosas pasa, y dan una palabra que no se anula en . Las raíces comunes de todo el código, que son las de , son entonces las raíces de que anulan a : el mcd. Con impar, 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 cuando no es raíz de , o sea cuando es raíz de y es raíz de . Las dos condiciones a la vez son un mcd, no un producto:
Con los exponentes ya reducidos, tiene que estar en el mcd. Las dos fórmulas, la de y la de , 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, , y la (3,2) en las columnas, . Como , y : y , que en la tabla de la sección 01 son la celda (0, 1) y la (1, 0). Entonces
módulo , y el mcd con es
de grado 7 = 15 − 8, como tiene que ser. Se lee también por los ceros: comparte con el factor , y comparte ; es su mínimo común múltiplo, . Y , los dos factores de que quedan. Enumeradas las 256 palabras en orden diagonal, la no nula de menor grado es ese .
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 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 y por columnas con el de , con el equipamiento de los dos códigos chicos y no el de uno de largo .
Sin largos coprimos no hay diagonal. Con , los dos restos vuelven a ser 0 a la vez en , 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 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 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 , generado por . 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.
Definición. Un código lineal es quasi-cíclico si hay un entero tal que girar cualquier palabra posiciones, o un múltiplo de , da otra palabra. A se lo llama la restricción de desplazamiento. Los cíclicos son el caso . El dual de un quasi-cíclico vuelve a ser quasi-cíclico, con el mismo .
El producto de la sección 01, leído por filas, ya era uno: se cierra con giros de , 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 :
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 . 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 , la palabra son tres bloques, y el bloque , de las posiciones a , es
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 , 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 corrido: girar tres posiciones pasa el bloque al lugar del , que es la palabra del mensaje . Girar una posición, en cambio, mete un bit de información en un lugar de paridad.
En general, un quasi-cíclico tiene bloques de símbolos, cada uno con de información y de paridad, y su 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 .
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.