Unidad 4 · Las familias · las palabras como tablas de verdad, la familia RM(r, m) con sus dos parámetros, la construcción (u, u + v), la dualidad y el algoritmo de Reed, que decide cada coeficiente por mayoría
Los códigos de Hamming tienen un solo parámetro libre: cada da un código, y siempre con . Para corregir más hace falta otra construcción. La de Reed-Muller, de 1954, tiene dos parámetros: la longitud y el orden , que recorre toda la escala entre la repetición y la paridad simple. Y trae un decodificador que no calcula síndromes ni consulta una tabla: vota.
Se toma un bloque de posiciones, y a la posición se le asocia el punto de que da su representación binaria, con el bit menos significativo. Con esa numeración, un vector de es la tabla de verdad de una función booleana de variables: la componente es lo que la función vale en el punto . La correspondencia es biunívoca, porque hay funciones y otros tantos vectores.
Toda función booleana se escribe de una sola manera como polinomio sobre , como suma de monomios sin exponentes —en vale —:
con cada coeficiente en 0 o 1. El grado de es el del monomio más grande que aparece. Los vectores base son las tablas de los monomios: , la de la constante 1, que es todos unos; , la de , que vale 1 en las posiciones cuyo bit es 1; y sus productos componente a componente. Con , de la posición 0 a la 7:
| monomio | tabla de verdad | grado |
|---|---|---|
| 1 | 11111111 | 0 |
| x₁ | 01010101 | 1 |
| x₂ | 00110011 | 1 |
| x₃ | 00001111 | 1 |
| x₁x₂ | 00010001 | 2 |
| x₁x₃ | 00000101 | 2 |
| x₂x₃ | 00000011 | 2 |
| x₁x₂x₃ | 00000001 | 3 |
La tabla de un monomio de grado vale 1 donde sus variables valen 1 a la vez: en posiciones. Ese conteo vuelve en todas las pruebas de abajo.
Para , el código de Reed-Muller de orden y longitud , , es el subespacio de generado por y los productos de a lo sumo de los . Dicho de otro modo: las tablas de verdad de todas las funciones booleanas de variables de grado . Sus parámetros son
La dimensión sale de contar: hay monomios de grado , y son linealmente independientes porque la escritura como polinomio es única: dos combinaciones distintas de monomios son funciones distintas, y por lo tanto tablas distintas. Las filas de la matriz generadora son esas tablas, ordenadas por grado, y la distancia mínima se prueba en la sección 04.
El ejemplo del apunte es RM(1,3): y las tres variables,
con , y . El mensaje son los cuatro coeficientes , y la palabra de código vale en la posición
una función afín evaluada en el punto . Enumeradas las dieciséis palabras, hay una de peso 0, catorce de peso 4 y una de peso 8. Que las catorce pesen exactamente 4 no es casualidad: una función afín que no es constante vale 1 en exactamente la mitad de los puntos.
RM(1,3) es un (8,4,4) con catorce palabras de peso 4: los parámetros y la distribución de pesos del Hamming extendido (8,4). Pero no es el mismo conjunto de palabras. El (8,4) del curso, que se arma desde el (7,4) sistemático con un bit de paridad global, comparte con RM(1,3) sólo cuatro de sus dieciséis palabras: , , y .
Lo que tienen en común está en las columnas. RM(1,3) es su propio dual: las filas de la de arriba son ortogonales entre sí y , así que esa es también su matriz de paridad. Sus columnas son : un 1 arriba y debajo la posición en binario, los ocho vectores de tres bits. La del (8,4) es la del (7,4) con una columna de ceros agregada y una fila de unos debajo: sus columnas son las siete del (7,4) y la nula, cada una con un 1 abajo. Otra vez los ocho vectores de tres bits con un 1 agregado, en otro orden.
Reordenar las columnas de es reordenar las posiciones de todas las palabras. La posición del (8,4) va a la posición de RM(1,3) cuyo número en binario es la columna de la del (7,4), leída con la primera fila como bit menos significativo: las posiciones 0 a 7 van a 3, 6, 7, 5, 1, 2, 4 y 0, y las dieciséis palabras del (8,4) caen, todas, en RM(1,3). Son códigos equivalentes. Probadas las 40 320 permutaciones de ocho posiciones, 1344 llevan uno sobre el otro.
Para todo lo que depende sólo de los pesos —, , la probabilidad de error sobre el BSC— da lo mismo cuál se use. Para un circuito no: el bit 3 de una palabra de RM(1,3) no es el bit 3 de la palabra del (8,4), y un decodificador de uno no sirve para el otro sin recablear.
La fórmula de la distancia sale de una descripción recursiva de la familia, que se debe a Plotkin.
Paso 1: separar por la última variable. Agrupando los monomios que contienen y los que no, toda función de grado se escribe de una sola manera como
con de grado y de grado , porque ya pone un grado.
Paso 2: evaluar en las dos mitades. Las posiciones 0 a tienen , y ahí vale ; en la segunda mitad y vale . Con la tabla de y la de , para :
RM(1,3), por ejemplo, son los pares con en RM(1,2), que es la paridad simple (4,3,2), y en RM(0,2), la repetición (4,1,4): ocho por dos, dieciséis palabras. Armados los pares desde los dos códigos de , sale exactamente en los cinco casos de y 4.
Paso 3: la dimensión. Cada palabra es un par elegido libremente, así que : la identidad de Pascal sobre la suma de binomiales.
Paso 4: la distancia, por inducción en . Los extremos son inmediatos: RM(0, m) es la repetición, de distancia , y RM(m, m) es todo , de distancia 1. Para el resto, se toma una palabra no nula . Si , la palabra es con no nula, y pesa
Si , toda posición donde vale 1 tiene un 1 en o en , así que
Las dos cotas se alcanzan, así que exacto. La tabla del monomio es una palabra de ese peso.
Anidamiento. Los generadores de orden son parte de los de orden , así que
Para cada longitud, una sola familia contiene toda la escala de tasas, ordenada por inclusión: subir un orden suma filas a y divide la distancia por dos. La capacidad de corrección que da esa distancia es , y la familia, en :
| r | m = 3 | m = 4 | m = 5 |
|---|---|---|---|
| 0 | (8, 1, 8) | (16, 1, 16) | (32, 1, 32) |
| 1 | (8, 4, 4) | (16, 5, 8) | (32, 6, 16) |
| 2 | (8, 7, 2) | (16, 11, 4) | (32, 16, 8) |
| 3 | (8, 8, 1) | (16, 15, 2) | (32, 26, 4) |
| 4 | — | (16, 16, 1) | (32, 31, 2) |
| 5 | — | — | (32, 32, 1) |
Las columnas de y 4 están contadas enumerando las palabras de cada código; las de salen de la fórmula, y RM(1,5) y RM(2,5) además se enumeraron.
Dualidad. El código dual de es otro de la familia:
Por qué: un monomio de grado por uno de grado da un monomio de grado a lo sumo , cuya tabla pesa : un número par. El producto interno de dos tablas es el peso de su producto módulo 2, así que es 0, y por linealidad los dos códigos son ortogonales. Las dimensiones suman , porque reparte los binomiales entre los dos: ortogonales y de dimensiones complementarias, uno es el dual del otro. Comprobado en los siete casos de y 4. Con impar, es su propio dual, de tasa : RM(1,3) y el (32,16,8). La consecuencia práctica es que la de un Reed-Muller es la de otro.
Los casos particulares. RM(0, m) es la repetición , y su dual RM(m − 1, m) es la paridad simple . Y RM(m − 2, m) es, salvo el orden de las posiciones, el Hamming extendido de longitud . Que las dimensiones coincidan no alcanza para decirlo; lo que lo prueba es la dualidad. La de RM(m − 2, m) es la de RM(1, m): una fila de unos y debajo las variables. Sus columnas son para las posiciones: todos los vectores de bits con un 1 agregado, que son las columnas de la del Hamming extendido. Es el argumento de la sección 03, para toda , y deja lo mismo: el mismo conjunto de columnas en otro orden. Con , RM(2,4) y el (16,11) extendido desde el (15,11) sistemático tienen la misma distribución de pesos —140 palabras de peso 4, 448 de peso 6, 870 de peso 8— y comparten 128 de sus 2048 palabras.
Mariner 9. En 1971, la sonda Mariner 9 mandó sus imágenes de Marte con RM(1,5), el (32,6,16): seis bits de información en treinta y dos transmitidos, , y hasta 7 errores corregidos por bloque. Enumeradas sus 64 palabras, las 62 que no son constantes pesan exactamente 16: cualquier par de palabras que no son complementarias está a distancia 16. En el espacio profundo lo que escasea es la potencia, no el ancho de banda, así que gastar redundancia sale barato. Para las imágenes en color de Júpiter y Saturno, Voyager pasó al Golay (24,12): tasa contra , porque el volumen de datos pasó a mandar.
El decodificador de Reed, contemporáneo de la construcción, no pasa por el síndrome: recupera los coeficientes del mensaje, del grado mayor al menor, cada uno por mayoría de votos. Se ve entero en RM(1,3).
Paso 1: sumar dos posiciones vecinas. En la posición la palabra vale . Dos posiciones que difieren sólo en tienen los mismos , y ; sumadas, eso se cancela y queda .
Paso 2: hay cuatro pares así, y no se tocan. Las ocho posiciones se parten en cuatro pares, cada posición en uno solo:
Sin errores, las cuatro sumas de cada fila dan lo mismo. Con un error, la posición equivocada está en un solo par de cada fila: de cada coeficiente se arruina un voto, quedan tres contra uno y la mayoría acierta.
Paso 3: restar y votar el resto. Decididos , y , se calcula , que debería ser con el mismo error encima: ocho copias de , y se decide por mayoría entre las ocho.
En general. Para un monomio de grado , el máximo, se fijan las variables que no están en y se recorren las combinaciones de las que sí: un subcubo de posiciones. Sumada sobre él, la tabla de cualquier otro monomio de grado da 0, porque le falta alguna variable de y cada valor aparece dos veces; la de vale 1 en un solo punto del subcubo. Queda . Hay un subcubo por cada valor de las variables de afuera: votos disjuntos. Se restan los términos de grado , queda una palabra de con el mismo error, y se repite. Son etapas, y se vota al final entre las posiciones.
Por qué alcanza . Cada posición está en un solo subcubo, así que cada error arruina a lo sumo un voto de cada coeficiente. Con errores, los votos malos son menos de la mitad de , y la mayoría acierta. Las etapas siguientes tienen más votos —en RM(2,4), cuatro por coeficiente de grado 2, ocho de grado 1 y dieciséis para — con los mismos errores, así que el límite lo pone la primera. Enumerados todos los mensajes por todos los patrones de peso en RM(1,3), RM(1,4) y RM(2,4), el algoritmo los corrige a todos: alcanza exactamente la capacidad del código, sin tabla y con sumas de pocos bits.
Arranca en el ejemplo de RM(1,3) con el mensaje y sin errores: todos los votos coinciden. Prendé un bit de y mirá cuántos votos se ponen en rojo en cada fila: uno solo, siempre, porque la posición cae en un solo par de cada coeficiente. Pasá a RM(1,4): cada coeficiente tiene ocho votos y aguanta tres errores; el cuarto ya deja algún cuatro a cuatro. En RM(2,4), los coeficientes de grado 2 votan de a cuatro sumas de cuatro bits y los de grado 1 de a ocho: con un error, la primera etapa es la que tiene menos margen.
Con errores, puede haber exactamente la mitad de los votos malos, y entonces no hay mayoría. Con el mismo mensaje de antes y errores en las posiciones 5 y 6, llega y los votos son para , para y para : tres empates.
No es mala suerte. En RM(1,3), dos errores en las posiciones y caen en el mismo par de sólo si y difieren únicamente en el bit ; en cualquier otro coeficiente arruinan dos votos distintos y dejan dos contra dos. Enumerados todos los mensajes por todos los patrones de peso , la primera etapa empata en algún coeficiente siempre: en los 28 patrones dobles de RM(1,3), en los 1820 cuádruples de RM(1,4) y en los 120 dobles de RM(2,4).
Un empate se rompe con una regla, y la regla es arbitraria: acá decide 0, y con otra el mismo sale decodificado distinto. Lo que el algoritmo garantiza termina en . Más allá, votar y buscar la palabra más cercana dejan de dar lo mismo, y cuánto se separan en el código de Mariner está en votar no es buscar la más cercana. Para la búsqueda de la más cercana tiene atajo: la transformada rápida de Hadamard la hace en operaciones.