Bitácora · FEC · Concepto

Los códigos producto

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.

01 · La definición

Sean C1 un código (n1,k1,d1) y C2 un código (n2,k2,d2). El código producto C1⊗C2 es el conjunto de arreglos de n2 filas por n1 columnas en los que cada fila es una palabra de C1 y cada columna es una palabra de C2. Leído en algún orden, el arreglo es un vector de n1n2 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 k1k2 bits de mensaje se disponen en k2 filas de k1.

Paso 2: cada fila con C1. Cada fila gana n1−k1 bits de paridad. El arreglo queda de k2 por n1.

Paso 3: cada columna con C2. Las n1 columnas ganan n2−k2 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 C1=C2 el Hamming (7,4) del curso, en forma sistemática, el mensaje 0101, 1110, 0011, 1000 (una fila de información cada cuatro bits) da

V=( 0101 110 1110 010 0011 010 1000 110 1110 010 1000 110 0101 110 )

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 C2 a las columnas de paridad de fila, o aplicar C1 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 C1, columnas en C2— 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.

02 · Los parámetros

Tres salen de contar:

n=n1n2,k=k1k2,R=R1R2,dmin=d1d2

La tasa es el producto de las tasas porque k/n=(k1/n1)(k2/n2). 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 V un arreglo del código distinto de cero. Tiene al menos una fila no nula, que es una palabra no nula de C1: tiene al menos d1 unos. Sea J el conjunto de sus columnas, con |J|≥d1.

Paso 2: cada una de esas columnas pesa al menos d2. Cada columna con índice en J tiene un 1, así que es una palabra no nula de C2, con al menos d2 unos. Sumando sólo sobre esas columnas, w(V)≥d1d2.

Paso 3: el producto exterior alcanza la cota. Sean a una palabra de peso d1 de C1 y b una de peso d2 de C2, y el arreglo Vij=biaj. La fila i es a o cero, la columna j es b o cero: está en el código, y tiene exactamente d1d2 unos, en d2 filas por d1 columnas.

Para (7,4)⊗(7,4) sale el (49,16,9), con tasa 16/49≈0,327 contra los 4/7≈0,571 de cada factor. Su capacidad de corrección es t=⌊(9−1)/2⌋=4: un código que corrige cuatro errores, hecho con dos que corrigen uno, sin ninguna construcción algebraica nueva. Enumeradas sus 216 palabras, la distribución de pesos arranca así:

peso0912161720212425
palabras1499893117645292782616 80716 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 7·7: 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.

03 · La decodificación por etapas

Decodificar el (49,16) como un código lineal cualquiera pediría una tabla de 249−16=233 líderes, más de ocho mil millones. La estructura ofrece otra cosa:

Etapa 1: cada una de las n2 filas se decodifica con el decodificador de C1.
Etapa 2: cada una de las n1 columnas, ya corregidas por filas, se decodifica con el de C2.

Son n1+n2 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

(t1+1)(t2+1)−1=t1t2+t1+t2

errores, con ti la capacidad de corrección de Ci. Contiene a la cota de t1t2 errores con que suele enunciarse, que sale de la misma prueba con un paso de más cautela.

Paso 1: a lo sumo t2 filas se pasan de t1. Una fila con más de t1 errores aporta al menos t1+1 al total. Si fueran t2+1 filas así, sumarían por lo menos (t1+1)(t2+1) 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 t1 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 t2 errores, uno por fila mala, y el decodificador de C2 los corrige todos.

La cota es ajustada: con (t1+1)(t2+1) errores repartidos en t2+1 filas, t1+1 en cada una, la etapa de filas puede dejar t2+1 errores en una misma columna, y ahí la de columnas se equivoca. En el (49,16,9) la proposición da 2·2−1=3, contra los ⌊(d1d2−1)/2⌋=4 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.

Simulación El (49,16,9), fila por fila y columna por columna — el arreglo es el patrón de error: lo que el decodificador hace no depende de la palabra mandada. Tocá celdas para poner errores, apostá, y pasá por filas y después por columnas. Al costado de cada fila y debajo de cada columna, cuántos errores tiene. Por etapas se garantizan (t₁+1)(t₂+1) − 1 = 3; la distancia permitiría 4.
Antes de decodificar: ¿una pasada lo corrige?
errores puestos — etapa — errores que quedan — filas con más de un error —

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.

04 · La decodificación iterativa

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:

errorespatronesuna pasadaiterando
4211 876202 615210 553
51 906 8841 555 4071 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.

05 · Lo que ninguna pasada arregla

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 h1+h4=011+100=111=h2, y el decodificador da vuelta la columna 2 en las dos. Cada fila queda con errores en {1,2,4}, 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 h0+h3=110+101=011=h1. Las tres dan vuelta la fila 1.

Paso 3: lo que sale es una palabra. Quedan nueve errores, en las filas {0,1,3} por las columnas {1,2,4}: 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.

Para tener a mano

  1. C1⊗C2: arreglos de n2 filas por n1 columnas, cada fila en C1 y cada columna en C2. Las checks on checks salen iguales codificando filas o columnas primero.
  2. n=n1n2, k=k1k2, R=R1R2, dmin=d1d2. Cota: una fila no nula y sus columnas. Igualdad: el producto exterior de dos palabras de peso mínimo.
  3. (7,4) ⊗ (7,4) = (49,16,9), tasa 0,327, t=4. Sus 49 palabras de peso 9 son los 7·7 productos exteriores.
  4. Por etapas: filas con C1, después columnas con C2. Corrige todo patrón de hasta (t1+1)(t2+1)−1 errores, porque a lo sumo t2 filas se pasan de t1. En el (49,16,9) son 3, contra los 4 de la distancia; falla con dos filas de dos errores.
  5. Iterar rescata: con 4 errores quedan sin corregir 1323 de 211 876; con 5, lo corregido pasa del 81,6 % al 96,4 %. Todo en la segunda pasada.
  6. Ninguna pasada arregla los 1323 patrones de dos filas con dos errores dentro de la misma palabra de peso 3: el decodificador los completa hasta una palabra de peso 9.
← Anterior Siguiente → Inicio
Relacionados Los códigos de Hamming La distancia mínima El intercalado El producto corrige más de lo que promete La ráfaga la corrige el orden Con dos errores, el decodificador empeora El producto cíclico y los quasi-cíclicos