Unidad 5 · Los códigos cíclicos · toda ráfaga de hasta n − k bits, las que se escapan después, acortar sin cambiar el circuito, y lo que garantiza cada CRC normalizado
Un código cíclico tiene el largo que le deja la factorización de : 7, 15, 31, 32 767. Una trama de datos tiene el largo que le toca. Un CRC (cyclic redundancy check) junta las dos cosas: es un código cíclico acortado al largo de la trama y usado sólo para detectar. Lo que ofrece no sale de una distancia mínima, que depende del largo, sino de una garantía que no depende: toda ráfaga de hasta bits se ve.
Un error en ráfaga de largo es un patrón de error cuyos unos caben en posiciones consecutivas, con la primera y la última no nulas. En polinomios:
dice dónde empieza y qué forma tiene. Los dos extremos de valen 1 y los coeficientes del medio son libres: en cada posición de comienzo hay ráfagas de largo .
Sobre el anillo de posiciones hay además ráfagas que se cortan en el extremo de mayor orden y siguen en el de menor: las ráfagas cíclicas (end-around bursts). El ejemplo del apunte, con y la posición 0 a la izquierda,
parece un patrón disperso de peso 5. Leído desde la posición 11, ocupa las posiciones 11, 12, 13, 14, 0, 1 y 2: es módulo , con , una ráfaga de largo 7.
Teorema 6. Un código cíclico detecta toda ráfaga de largo , incluidas las cíclicas.
Paso 1: no detectar es ser palabra. Una ráfaga pasa sin verse si y sólo si su síndrome es nulo, o sea si es una palabra de código. Las palabras son los múltiplos del polinomio generador, así que tendría que dividir a .
Paso 2: el comienzo no importa. divide a , que vale 1 en ; por eso y no divide a . Sin factores comunes con , tendría que dividir a sola.
Paso 3: no cabe. no es nulo y tiene grado , menor que el de . Ningún polinomio no nulo es múltiplo de otro de grado mayor.
Las cíclicas entran por la misma puerta. Una ráfaga cíclica es reducido módulo , y como divide a , reducir no cambia el resto:
Sobre el anillo no hay extremos: una ráfaga cíclica es una ráfaga común vista desde otro origen. La garantía tampoco pasa por la distancia. El (7,4) de tiene y siete palabras de peso 3, pero ninguna cabe en tres posiciones consecutivas del anillo: la ráfaga , de peso 3, se ve igual que las de peso 1 y 2.
Con ya caben múltiplos de . Los pasos 1 y 2 siguen valiendo, así que una ráfaga se escapa exactamente cuando , y contar las que se escapan es contar los posibles.
Paso 1: el multiplicador. tiene grado . Como , su término independiente vale 1, y su coeficiente principal también.
Paso 2: un bit de más. Con , es una constante, y la única ráfaga que se escapa es : una de .
Paso 3: más largas. Con , tiene grado , dos extremos fijos y coeficientes libres: de las ráfagas.
En ningún lado aparecen , el comienzo ni los coeficientes de : sólo su grado. Con el generador del ejercicio 10 de la práctica, , enumerando todas las ráfagas de cada largo pasan 0, 0, 1/16, 1/32 y 1/32 para a 8. Por qué la que se pasa por un bit es la que peor le va a un CRC, y cuánto es eso con 32 bits, está en la ráfaga que más se escapa.
Acortar un código lineal ya está en los códigos acortados: se fijan en cero posiciones de información, no se transmiten, y queda un cuyas palabras son un subconjunto de las del original, con la misma paridad y una distancia que no baja. Lo propio del cíclico son tres cosas.
Primero, qué posiciones se suprimen. En la forma sistemática cíclica la paridad va primero y el mensaje al final, así que las posiciones de información de mayor orden son las últimas del vector. Anularlas es pedir grado menor que : el acortado son los múltiplos de de grado menor que .
El ejemplo del apunte es el de Lin y Costello (sección 5.10, ejemplo 5.12): el Hamming cíclico (31,26) de , acortado en , da un (28,23).
Deja de ser cíclico. tiene grado 27 y es palabra del (28,23). Girada una posición en el anillo de 28, el pasa a , que da la vuelta a 1: queda , de resto . No es palabra. La razón es general: girar en el anillo de suma cada vez que un uno pasa por el borde, y no lo divide: es justamente ese .
El circuito sirve igual. Codificar es , y unos ceros de mayor orden en no cambian el polinomio ni su resto. En el registro de desplazamiento, que arranca en cero y recibe primero el bit de mayor orden, esos ceros entrarían primero y lo dejarían en cero: se pueden no mandar. El registro de etapas, las conexiones de y el circuito de síndrome son los del código entero. Es la razón práctica de acortar así.
El decodificador espera de más. Si lo recibido entra al registro de síndrome por el extremo derecho, lo que equivale a multiplicarlo por , el detector del decodificador de Meggitt está armado para el código entero: espera el síndrome que corresponde a un error en la posición . En el acortado el primer dígito que se decodifica es el , y después de los ciclos de entrada el registro necesita desplazamientos más para llegar a ese síndrome. Se ahorran multiplicando lo recibido, mientras se lo divide, por
que es un segundo juego de conexiones de entrada al registro. Para el (28,23), . La otra salida es dejar el registro como está y cambiar el detector, para que reconozca el síndrome que deja un error en la posición 27 del acortado: , el vector (01000), porque deja resto 1. Las dos son cableado, no un circuito nuevo. El mismo cálculo para el Golay acortado está en el Golay por dentro.
Un CRC agrega a la trama los bits de y el receptor sólo mira si el resto es cero. La trama puede tener cualquier largo hasta el del cíclico del que sale. Sus generadores están normalizados; los de la tabla de Lin y Costello (sección 5.10), con su factorización medida en polinomios sobre GF(2):
CCITT X-25.
ANSI.
IBM-SDLC.
IEC TC57. Se toma la forma desarrollada, la que la tabla da como el polinomio; su factorización medida tiene cinco factores:
IEEE 802.3. Quince términos, y no se factoriza: es irreducible.
Los factores de grado 15 del CCITT y del ANSI, el de grado 14 del SDLC, el de grado 10 del TC57 y el polinomio entero del 802.3 son primitivos: se probó que son irreducibles y que tiene orden módulo cada uno. Lin y Costello describen el CRC típico como un primitivo o un : el 802.3 es de la primera forma, el CCITT y el ANSI de la segunda.
De la factorización se leen tres garantías, cada una con su porqué.
Las ráfagas. Toda ráfaga de hasta 16 bits, o de hasta 32 en el 802.3, por el teorema 6. Vale en cualquier largo de trama, porque la prueba sólo usa que divida a .
El peso impar. Si divide a , toda palabra cumple , y es la paridad de su peso: todas pesan par, y ningún patrón de peso impar pasa. Lo cumplen cuatro de los cinco. El 802.3 no: con quince términos, .
Los dobles, hasta un largo. Dos errores son , y por el paso 2 de la sección 02 pasan sólo si divide a . Eso pasa exactamente cuando es múltiplo del orden de , el menor con , que es el largo del cíclico que genera. En una trama de hasta ese largo, y todo doble se ve.
El orden se midió de dos maneras: recorriendo hasta que vuelve a 1, y desde la factorización, como mínimo común múltiplo de los órdenes de los factores, duplicado donde hay un factor al cuadrado. Las dos dan lo mismo:
| CRC | n − k | X + 1 | g | orden de g | 1, 2 y 3 errores a la vista |
|---|---|---|---|---|
| CCITT X-25 | 16 | sí | 32 767 | hasta 32 767 |
| ANSI | 16 | sí | 32 767 | hasta 32 767 |
| IBM-SDLC | 16 | sí | 32 766 | hasta 32 766 |
| IEC TC57 | 16 | sí | 2046 | hasta 2046 |
| IEEE 802.3 | 32 | no | 4 294 967 295 | 1 y 2 hasta 2³² − 1; 3, no se deduce |
La última columna junta las dos garantías: uno y tres son impares, dos queda cubierto por el orden. En los cuatro que tienen el factor , hasta ese largo el acortado tiene . El TC57 es el que antes la pierde: su factor primitivo es de grado 10, de orden 1023, y en una trama de 2047 bits ya es palabra. En el 802.3, que no tiene el factor , qué pasa con tres errores en una trama dada no sale de la factorización: depende de qué palabras de peso 3 entran en ese largo, y eso hay que buscarlo palabra por palabra.
Arranca en el CCITT con ráfagas de 12 bits: no pasa ninguna de las 1024. Subí el largo de a uno hasta pasar 16 y mirá cómo aparece la primera, que es el propio generador. Después, con el mismo largo, cambiá de CRC: las cuentas de ráfagas no se mueven entre los cuatro de 16 bits. Lo que los distingue está en la línea de abajo: poné la trama en 2047 bits y compará el TC57 con los otros tres.
Las ráfagas cíclicas de la trama. El teorema 6 cubre las ráfagas que dan la vuelta al anillo de , no al de . En el (28,23),
ocupa las posiciones 27, 0, 1, 2 y 3: leída como anillo de 28, es una ráfaga cíclica de largo 5, que es . Y es palabra del código. Enumeradas las 32 ráfagas cíclicas de largo 5 que cruzan el borde del (28,23), pasa esa; en el (31,26) entero no pasa ninguna de sus 32. En el anillo de 31 esas mismas posiciones están separadas por el hueco de 28, 29 y 30, y ocupan ocho lugares. Con el CCITT en una trama de 1024 bits, entre las 24 576 ráfagas de largo 13 que cruzan el borde ya pasan cinco.
En una trama que sale en serie, el último bit y el primero no son vecinos en el canal, así que una ráfaga real no cruza ese borde. Lo que se pierde es la simetría del anillo, no la protección contra las ráfagas del canal.
La fracción no es una probabilidad del canal. Cuenta cuántos de los patrones de un largo pasan; se vuelve una probabilidad sólo si todos esos patrones son igual de probables. Un canal con su propia estadística de ráfagas puede caer más o menos seguido sobre los múltiplos de .
Los errores aislados dependen del largo. Fuera de las ráfagas, lo que protege es la factorización, y sólo hasta el orden de : el mismo CRC que en una trama de 2046 bits ve todo error de hasta tres bits, en una más larga deja pasar dobles.