Unidad 5 · Los códigos cíclicos · el síndrome como resto de una división, el mismo registro que codifica, y el teorema 5: un ciclo más del registro es el síndrome de la palabra girada
En un código lineal cualquiera, el síndrome es un producto por la matriz de paridad: hace falta tener guardada y un árbol de sumas por cada fila. En un código cíclico es el resto de una división, y lo calcula el mismo registro que codifica. Lo que se gana no termina ahí: girar la palabra recibida cuesta un ciclo de ese registro, y no una división nueva. Toda la decodificación de la unidad se apoya en eso.
Sea un código cíclico con polinomio generador , de grado , y sea lo recibido. Dividido por ,
El resto es el polinomio síndrome:
Sus coeficientes son el vector síndrome , que se escribe con a la izquierda, como las palabras.
Las dos propiedades del síndrome de siempre siguen valiendo, y salen en una línea cada una:
Es cero exactamente en las palabras. Las palabras de código son los múltiplos de , así que si y sólo si es una palabra.
Depende sólo del error. Con , donde es el patrón de error, y múltiplo de :
Lo nuevo no es qué es el síndrome. Es cómo se calcula, y qué le pasa cuando se gira la palabra.
Dividir por se hace con un registro de desplazamiento de etapas, que guardan , con una conexión de realimentación por cada coeficiente no nulo de . La palabra recibida entra un bit por ciclo, empezando por . Por qué al cabo de ciclos el registro tiene el resto, en tres pasos:
Paso 1: la palabra, por Horner. El polinomio se puede armar desde el coeficiente de mayor orden, multiplicando por y sumando el que sigue:
Paso 2: se puede reducir en cada paso. El resto de una suma es la suma de los restos, y el de un producto se puede tomar antes de multiplicar. Si el registro guarda , el resto de lo que entró hasta ahí, el que sigue es : el bit que entra tiene grado 0 y no hay que reducirlo.
Paso 3: multiplicar por y reducir es un ciclo. corre cada coeficiente una etapa a la derecha. Lo único que puede pasarse de grado es el que sale de la última, , que se convierte en ; y como módulo , ese bit vuelve a entrar en cada etapa con . Eso es la realimentación. El bit recibido se suma en .
Con y , que entra empezando por , el registro pasa por
y termina en , es decir . Es el resto de dividir por .
Las etapas y las conexiones son las del codificador. Lo único que cambia es por dónde entra la palabra: el codificador suma el mensaje en la realimentación, del lado de , y eso equivale a multiplicarlo por antes de dividir. Para el síndrome, la palabra entra por . Qué pasa si se la mete por el mismo lado que el mensaje está en la sección siguiente.
El resto es lineal: el de una suma es la suma de los restos. Entonces
que es lo mismo que decía la Unidad 3: el síndrome es la suma de las columnas de la matriz de paridad donde hubo error. Acá la columna es . Para , ya tiene grado menor que y es su propio resto: las primeras columnas son la identidad, y queda con la paridad primero y el mensaje al final, como la forma sistemática cíclica. En el (7,4) de , las siete columnas son los síndromes de los siete errores simples:
| error | 1 | X | X² | X³ | X⁴ | X⁵ | X⁶ |
|---|---|---|---|---|---|---|---|
| síndrome | 100 | 010 | 001 | 110 | 011 | 111 | 101 |
Los siete síndromes no nulos aparecen una vez cada uno, y por eso el código corrige un error. Es la tabla de síndromes del apunte.
El (7,4) de la Unidad 3, el de , tiene exactamente el mismo conjunto de palabras que este, y su tiene por columnas . Es la misma fila de arriba, empezada en . Comprobado sobre los 128 vectores de siete bits, el síndrome de la Unidad 3 es
en los 128, y no coincide con ningún otro corrimiento salvo en las 16 palabras, donde los dos dan cero. Y es justo lo que calcula el registro si la palabra entra por el lado del codificador, con : el calculador de síndrome de la Unidad 3, el de las tres ecuaciones de paridad, da bit por bit lo mismo que el codificador cíclico alimentado con lo recibido. Las dos maneras de entrar dan dos síndromes válidos, los dos nulos sólo en las palabras; lo que cambia es la tabla que hay que leer después.
Lo nuevo, entonces, es otra cosa. En la Unidad 3 el síndrome pedía entera, bits cableados: 150 en el (15,5). Acá alcanzan etapas y las conexiones que marca , y el costo crece con la redundancia, no con el largo. Y aparece una propiedad que la matriz no tenía.
Sea el desplazamiento cíclico de : cada bit una posición a la derecha, y vuelve a la posición 0.
Teorema 5. Si es el síndrome de , el síndrome de es
Paso 1: girar es multiplicar por y devolver el bit que sale. corre todo un lugar, y el coeficiente cae en , fuera de la palabra. Sumarle lo saca de ahí y lo pone en la posición 0:
Paso 2: reemplazar lo que se sabe. Con y , porque divide a :
Paso 3: el múltiplo de no deja resto. El segundo término desaparece al dividir, y el resto de es el de .
Y es exactamente el Paso 3 de la sección 02 sin bit de entrada: un ciclo de reloj del registro, con la entrada cerrada. Iterando,
Recorrer los giros de la palabra cuesta ciclos de reloj. Dividir desde cero cada palabra girada costaría ciclos por giro, en total, y además habría que volver a cargarla.
La tabla de la sección 03 se lee ahora de otra manera: cada columna es la anterior con un ciclo más, porque es girado. Con un error en , el registro arranca en y recorre , mientras el error pasa por . En el ejemplo de la sección 02, sigue con y .
Un caso más largo, en el (15,5) de : el mensaje se codifica como , y con un error en llega . Por el registro y dividiendo cada palabra girada desde cero:
| giro | palabra girada | registro | desde cero |
|---|---|---|---|
| 0 | 010100001110010 | 1101011110 | 1101011110 |
| 1 | 001010000111001 | 0110101111 | 0110101111 |
| 2 | 100101000011100 | 1101100101 | 1101100101 |
| 3 | 010010100001110 | 1000000000 | 1000000000 |
Al tercer giro el error, que estaba en , llegó a , que es la posición 0. Cayó dentro de las diez primeras, donde es su propio resto, y el registro muestra el error mismo. Esa es la idea de la captura de errores. El teorema, por su parte, se comprobó sobre todo lo que puede llegar: los 128 vectores de siete bits y los 32 768 de quince.
Arranca con la palabra del codificador del (7,4) para el mensaje 1011, sin errores. Cargala y girala: el registro queda en cero y no se mueve, porque una palabra girada sigue siendo palabra. Volvé a empezar, tocá el bit 0, cargala y girala seis veces: la tabla que se arma abajo es la de la sección 03. En el (15,5), tocá el bit 12, cargala y mirá el tercer giro.
Como divide a , módulo , y entonces : después de ciclos el registro vuelve a donde estaba, igual que la palabra después de giros. Puede volver antes. Si girar veces deja al error igual, deja igual a su síndrome; y el largo de cada recorrido divide a .
Medido haciendo andar el registro sin entrada desde cada uno de sus estados no nulos:
| código | síndromes no nulos | recorridos de 15 | de 7 | de 5 | de 3 |
|---|---|---|---|---|---|
| (7,4) | 7 | — | 1 | — | — |
| (15,5) | 1023 | 67 | — | 3 | 1 |
En el (7,4) hay un solo recorrido y pasa por los siete síndromes: desde cualquier error simple, siete ciclos visitan los siete. En el (15,5), es igual a sí mismo girado cinco veces, y su síndrome, , vuelve en cinco ciclos; vuelve en tres. Un decodificador que gira veces no pierde nada con eso: un recorrido corto se repite, y en ciclos pasa por todos sus estados. El registro sin entrada es un LFSR, y estos recorridos son sus órbitas.
No dice dónde está el error. El síndrome sigue siendo una de combinaciones, y algo tiene que traducirlo a un patrón. Lo que el teorema permite es preguntar siempre por la misma posición mientras la palabra gira: el decodificador de Meggitt reconoce sólo los síndromes de los errores que tocan la posición , uno solo en el (7,4), y corrige un bit por ciclo. Cuando los errores caben en posiciones seguidas, la captura de errores no necesita ni eso.
Pide el giro de largo . La propiedad habla del desplazamiento cíclico de las posiciones. Un código acortado ya no es cíclico: el registro sigue calculando el síndrome, pero el anillo sobre el que gira es el de posiciones, y de ellas no se transmiten. Si la palabra entra por el lado del codificador, para que el registro llegue al síndrome del primer bit a decodificar hacen falta ciclos más, o cablear la entrada de otra manera; está en los CRC y los códigos acortados.
No ve los errores que son palabras. cuando es múltiplo de , igual que en cualquier código lineal: en el (7,4) son 15 patrones no nulos, los mismos de un síndrome cero no prueba nada. Girarlos no ayuda, porque una palabra girada sigue siendo palabra y su síndrome se queda en cero.