Unidad 4 · Las familias · un código grande hecho con dos chicos, la distancia que se multiplica, la decodificación por filas y columnas, su garantía y lo que la iteración rescata
Todas las familias de esta unidad salen de elegir una matriz de paridad. El código producto sale de otro lado: se toman dos códigos que ya se saben decodificar y se los cruza. Con dos Hamming (7,4), que corrigen un error cada uno, se arma uno que podría corregir cuatro. Lo que no se multiplica es lo que el decodificador sencillo garantiza.
Sean un código y un código . El código producto es el conjunto de arreglos de filas por columnas en los que cada fila es una palabra de y cada columna es una palabra de . Leído en algún orden, el arreglo es un vector de bits, y la suma de dos arreglos así sigue siendo uno así: el producto es un código lineal. Lo introdujo Elias en 1954.
La construcción, en tres pasos:
Paso 1: la información en un rectángulo. Los bits de mensaje se disponen en filas de .
Paso 2: cada fila con . Cada fila gana bits de paridad. El arreglo queda de por .
Paso 3: cada columna con . Las columnas ganan bits cada una, también las que ya eran de paridad.
Quedan cuatro regiones: la información arriba a la izquierda, las paridades de fila a su derecha, las de columna debajo, y en la esquina de abajo a la derecha las paridades calculadas sobre paridades, las checks on checks. Con el Hamming (7,4) del curso, en forma sistemática, el mensaje , , , (una fila de información cada cuatro bits) da
con la posición 0 de cada fila a la izquierda. Las cuatro primeras filas son las del mensaje codificadas; las tres últimas son paridad de columna, y sus tres últimos bits son las checks on checks.
Esa esquina admite dos cuentas: aplicar a las columnas de paridad de fila, o aplicar a las filas de paridad de columna. Dan lo mismo. En forma sistemática, codificar las filas es multiplicar el arreglo por una matriz a la derecha, y codificar las columnas es multiplicarlo por otra a la izquierda; las dos multiplicaciones actúan sobre índices distintos y conmutan. Por eso la definición puede ser la simétrica —filas en , columnas en — sin decir cuál se codificó primero. Codificados los 65 536 mensajes del ejemplo por los dos órdenes, los arreglos coinciden todos, y en todos cada fila y cada columna tiene síndrome nulo.
Tres salen de contar:
La tasa es el producto de las tasas porque . La cuarta, la distancia mínima, pide prueba, en dos mitades: que ningún arreglo no nulo pese menos, y que alguno pese exactamente eso. En un código lineal la distancia mínima es el menor peso no nulo.
Paso 1: una fila no nula. Sea un arreglo del código distinto de cero. Tiene al menos una fila no nula, que es una palabra no nula de : tiene al menos unos. Sea el conjunto de sus columnas, con .
Paso 2: cada una de esas columnas pesa al menos . Cada columna con índice en tiene un 1, así que es una palabra no nula de , con al menos unos. Sumando sólo sobre esas columnas, .
Paso 3: el producto exterior alcanza la cota. Sean una palabra de peso de y una de peso de , y el arreglo . La fila es o cero, la columna es o cero: está en el código, y tiene exactamente unos, en filas por columnas.
Para sale el , con tasa contra los de cada factor. Su capacidad de corrección es : un código que corrige cuatro errores, hecho con dos que corrigen uno, sin ninguna construcción algebraica nueva. Enumeradas sus palabras, la distribución de pesos arranca así:
| peso | 0 | 9 | 12 | 16 | 17 | 20 | 21 | 24 | 25 |
|---|---|---|---|---|---|---|---|---|---|
| palabras | 1 | 49 | 98 | 931 | 1764 | 5292 | 7826 | 16 807 | 16 807 |
y sigue simétrica hasta la palabra de peso 49, porque el arreglo de todos unos está en el código. Las 49 de peso 9 son : las siete palabras de peso 3 del (7,4) en las columnas, por las siete en las filas. Toda palabra de peso mínimo es un producto exterior, el del Paso 3.
Decodificar el (49,16) como un código lineal cualquiera pediría una tabla de líderes, más de ocho mil millones. La estructura ofrece otra cosa:
Etapa 1: cada una de las filas se decodifica con el decodificador de .
Etapa 2: cada una de las columnas, ya corregidas por filas, se decodifica con el de .
Son decodificaciones chicas, catorce síndromes de tres bits en el ejemplo, en vez de una grande. Lo que se paga es algo de garantía:
Proposición. La decodificación por etapas corrige todo patrón de a lo sumo
errores, con la capacidad de corrección de . Contiene a la cota de errores con que suele enunciarse, que sale de la misma prueba con un paso de más cautela.
Paso 1: a lo sumo filas se pasan de . Una fila con más de errores aporta al menos al total. Si fueran filas así, sumarían por lo menos errores, uno más de los que hay.
Paso 2: la etapa de filas deja errores sólo en esas filas. Las filas con a lo sumo errores salen limpias. Las otras pueden salir peor que como entraron —el decodificador de la fila apuesta a un patrón liviano y agrega un error—, pero cada una aporta a lo sumo un bit malo a cada columna.
Paso 3: la etapa de columnas termina. Cada columna tiene entonces a lo sumo errores, uno por fila mala, y el decodificador de los corrige todos.
La cota es ajustada: con errores repartidos en filas, en cada una, la etapa de filas puede dejar errores en una misma columna, y ahí la de columnas se equivoca. En el (49,16,9) la proposición da , contra los que la distancia permitiría, y el caso que la rompe son cuatro errores, dos en cada una de dos filas. Lo que eso significa medido patrón por patrón está en el producto corrige más de lo que promete.
Arranca con dos errores en filas y columnas distintas: la etapa de filas los corrige y la de columnas no tiene nada que hacer. Agregá un segundo error en la fila 0: la fila se corrige mal y queda con tres errores, uno en cada una de tres columnas, y la etapa de columnas los levanta uno por uno. Ahora probá dos filas con dos errores cada una, en las mismas columnas: es el caso de la sección 05.
Cuando la etapa de columnas corrige algo, las filas cambian, y una fila que antes tenía dos errores puede quedar con uno. Repetir el ciclo —filas, columnas, filas, columnas— hasta que una pasada no cambie nada es la decodificación iterativa. No llega en general al decodificador óptimo del producto, pero se le acerca.
Medido en el (49,16,9) enumerando todos los patrones, iterando hasta que el arreglo no se mueve:
| errores | patrones | una pasada | iterando |
|---|---|---|---|
| 4 | 211 876 | 202 615 | 210 553 |
| 5 | 1 906 884 | 1 555 407 | 1 838 529 |
Una pasada es una etapa de filas y una de columnas. Con 4 errores la iteración rescata 7938 patrones; con 5, 283 122, y el 81,6 % corregido pasa a ser el 96,4 %. En los dos casos todo lo que se rescata se rescata en la segunda pasada: la tercera ya no cambia nada. Con decisión blanda, en la que cada etapa le pasa a la siguiente una medida de confianza en vez de un bit decidido, el mismo esquema da los turbo product codes.
El ejemplo más corto de lo que hace la segunda pasada: errores en las posiciones (0, 0), (0, 1), (1, 0) y (1, 2), por (fila, columna). Las filas 0 y 1 tienen dos errores cada una y se corrigen mal; la etapa de columnas deja tres errores, todos en la columna 0 y en filas distintas. La segunda etapa de filas los ve de a uno y los corrige.
Quedan 1323 patrones de cuatro errores que la iteración no toca, aunque la distancia 9 asegura que lo transmitido es la palabra más cercana. Tienen todos la misma forma: dos filas con dos errores cada una, y los dos pares dentro de la misma palabra de peso 3 del (7,4). Hay 1323 así.
Seguido paso a paso, con errores en (0, 1), (0, 4), (3, 1) y (3, 4):
Paso 1: las dos filas se completan. Las filas 0 y 3 tienen síndrome , y el decodificador da vuelta la columna 2 en las dos. Cada fila queda con errores en , que es una palabra de peso 3: seis errores.
Paso 2: las tres columnas se completan. Las columnas 1, 2 y 4 tienen errores en las filas 0 y 3, con síndrome . Las tres dan vuelta la fila 1.
Paso 3: lo que sale es una palabra. Quedan nueve errores, en las filas por las columnas : el producto exterior de dos palabras de peso 3, una palabra de peso 9 del código. Todas las filas y todas las columnas tienen síndrome nulo, y ninguna pasada más tiene nada que corregir.
El decodificador entrega, en silencio, una palabra que está a distancia 5 de lo recibido, cuando la transmitida estaba a distancia 4. No es un empate ni un caso dudoso: es una de las palabras de peso mínimo del código, armada por el propio decodificador con los errores del canal. Los 1323 terminan así, en una de las 49 palabras de peso 9. El cuadrado de cuatro esquinas, el ejemplo que suele darse, es el caso en que las dos filas eligen el mismo par: 441 de los 1323.
La otra limitación es la tasa: cada factor la multiplica por algo menor que 1, y componer códigos para ganar distancia la hace caer rápido. Y contra ráfagas, lo que importa no es el código sino el orden en que salen del arreglo los símbolos al canal: está en la ráfaga la corrige el orden, y llevado a una técnica propia, en el intercalador.