Unidad 6 · La distancia que garantiza un código BCH
Un código BCH se diseña pidiendo cuántos errores tiene que corregir, , y el procedimiento devuelve el código. Uno esperaría que el código corrija lo que pidió. A veces corrige más. Lo que garantiza un BCH no lo decide la que pedís sino la tira más larga de raíces consecutivas que dejó la conjugación, y en los códigos de tasa baja suele ser más larga. En largo 255, 31 de los 64 valores de posibles dan un código que garantiza más: pedís 32 y el (255,47) corrige 42. En largo 31, el (31,11) sale pidiendo 4 y corrige 5. En los códigos de tasa alta no pasa nunca.
Un código cíclico queda determinado por su polinomio generador , binario y de grado . Sus coeficientes son ceros y unos, pero sus raíces, en general, no están en GF(2): están en el cuerpo de extensión , cuyos elementos no nulos son las potencias de un elemento primitivo . Acá todo es de largo , y una raíz se nombra por su exponente: la raíz 3 es .
Las raíces de un polinomio binario no se eligen de a una. En un cuerpo de característica dos, elevar al cuadrado es lineal, , y los coeficientes de cumplen y . Por eso, si es binario,
y una raíz arrastra a hasta que la sucesión se cierra. Ese conjunto es la clase conjugada de . Para , en exponentes, es la clase ciclotómica
y el binario de menor grado que se anula en es su polinomio mínimo, el producto sobre la clase entera:
En las clases son , , y , más . Pedir que se anule en es pedirlo en también, quiera uno o no.
Hay una forma de leer las clases sin hacer cuentas. Con , multiplicar un exponente por 2 módulo es rotar sus bits un lugar a la izquierda: el bit que se cae por arriba vuelve por abajo, porque . El 3 es 0011, y rota a 0110 = 6, 1100 = 12, 1001 = 9. Una clase es un patrón de bits con todas sus rotaciones. La encabeza la rotación menor, que es la que tiene más ceros adelante. Y tiene elementos salvo que el patrón se repita: el 5 es 0101 y su clase tiene dos.
El código BCH primitivo de sentido estricto con distancia diseñada es el cíclico de largo cuyo generador es el binario de menor grado con raíces en las potencias consecutivas . Tiene que ser múltiplo de cada polinomio mínimo, y para ser el de menor grado, de cada uno una sola vez:
La se elige; sale. Los exponentes pares no aportan nada, porque está en la clase de : alcanza con las clases de , cada una de a lo sumo elementos, y por eso . Con y , y dan ocho raíces y el (15,7).
Lo que el código garantiza lo dice la cota BCH: si entre las raíces de hay potencias consecutivas de , la distancia mínima es al menos . La prueba arma con esas filas de una Vandermonde, y sólo usa que los exponentes son consecutivos: no le importa si la raíz la pidió alguien o la trajo una clase. Así que la cota no se aplica a la tira pedida sino a la tira más larga de raíces consecutivas que tenga , y si esa tira mide , la capacidad de corrección garantizada es
Las raíces pedidas son , así que . La pregunta es cuándo la conjugación la estira.
El exponente que sigue a la tira pedida es . Si no es raíz, la tira se corta ahí. Es raíz sólo si está en la clase de algún impar menor que ya se pidió, o sea, si no encabeza su clase: si alguna rotación de sus bits da un número más chico. Si entra, el siguiente, , es par y ya está, porque es conjugado de ; y la pregunta pasa a . Se recorrieron los 124 valores de de los cinco largos de 15 a 255, comparando la tira más larga del generador con ese criterio: la tira pasa de exactamente en los casos en que no encabeza su clase.
En largo 31, con , se piden las raíces 1 a 8 y entran cuatro clases de cinco:
El 9 es 01001, y una rotación lo lleva a 00101 = 5: está en , que se pidió por el 5. Entra el 9, y el 10 por ser el doble del 5. El 11 es 01011, la menor de sus rotaciones, y ahí se corta. La tira es , de largo 10: el código es el (31,11) y garantiza . Pedir 5 da el mismo generador. Las 20 raíces son las mismas; lo que cambia es la cuenta de cuántas se pidieron.
Arranca en largo 255 con : el (255,239), donde la tira se corta justo después de lo pedido. Apostá antes de subir. La grilla tiene dieciséis exponentes por fila; las raíces en gris las trajo una clase y no tocan la tira, las azules la alargan.
Un exponente chico tiene sus ceros adelante: el 5 en ocho bits es 00000101. Rotarlo sube unos a los bits altos y lo agranda, así que encabeza su clase, y sus otros siete miembros, 10, 20, 40, 80, 160, 65 y 130, quedan lejos de la tira. Un exponente pierde contra una rotación sólo si adentro tiene una racha de ceros más larga que la que tiene adelante. El primer impar que lo cumple tiene la forma 10…01, con más ceros en el medio que adelante: , que es 9 en largo 15 y 31, 17 en 63 y 127, y 33 en 255. Mientras no llegue ahí, todos los impares encabezan su clase y la conjugación no regala nada.
Medido sobre todos los de cada largo:
| n | último sin regalo | tasa | primer regalo | tasa |
|---|---|---|---|---|
| 15 | (15,5), t = 3 | 0,333 | (15,1), 4 → 7 | 0,067 |
| 31 | (31,16), t = 3 | 0,516 | (31,11), 4 → 5 | 0,355 |
| 63 | (63,24), t = 7 | 0,381 | (63,18), 8 → 10 | 0,286 |
| 127 | (127,78), t = 7 | 0,614 | (127,71), 8 → 9 | 0,559 |
| 255 | (255,139), t = 15 | 0,545 | (255,131), 16 → 18 | 0,514 |
En los cinco largos, el primer que da más es , y por debajo no hay ninguno. Ningún código con tasa mayor que 0,56 recibe nada: el de tasa más alta que sí recibe es el (127,71), con 0,559. En los de tasa alta las clases que entran tienen tamaño y no se tocan: en largo 31 y 127, hasta el último sin regalo, es exactamente . Cada clase aporta un impar pedido y conjugados que caen arriba, salteados, sin pegarse a la tira. En los otros tres largos la cuenta se despega de por alguna clase corta, como la del 17 en largo 255, 00010001, que tiene cuatro elementos; pero una clase corta achica la redundancia, no alarga la tira.
Al subir los exponentes crecen, los ceros de adelante se acaban, y cada vez más impares tienen un hueco interno más largo que el de adelante. Ya no encabezan su clase: llegan solos, traídos por un impar más chico. En largo 255, con se piden las raíces 1 a 64, y los diez impares siguientes son todos rotaciones de algo pedido:
| impar | bits | rotación menor | encabeza |
|---|---|---|---|
| 65 | 01000001 | 00000101 = 5 | no |
| 67 | 01000011 | 00001101 = 13 | no |
| 69 | 01000101 | 00010101 = 21 | no |
| 71 | 01000111 | 00011101 = 29 | no |
| 73 | 01001001 | 00100101 = 37 | no |
| 75 | 01001011 | 00101101 = 45 | no |
| 77 | 01001101 | 00110101 = 53 | no |
| 79 | 01001111 | 00111101 = 61 | no |
| 81 | 01010001 | 00010101 = 21 | no |
| 83 | 01010011 | 00110101 = 53 | no |
| 85 | 01010101 | 01010101 = 85 | sí |
La tira llega hasta el 84 y se corta en el 85, que encabeza su propia clase de dos elementos. Mide 84: el (255,47) garantiza , diez más que lo pedido. Pedir cualquier de 32 a 42 da el mismo generador, con 208 raíces repartidas en 27 clases. Recontado en cada largo:
| n | valores de t | dan más | códigos distintos |
|---|---|---|---|
| 15 | 4 | 1 | 4 |
| 31 | 8 | 3 | 6 |
| 63 | 16 | 5 | 12 |
| 127 | 32 | 15 | 18 |
| 255 | 64 | 31 | 34 |
Los valores de van desde 1 hasta el primero que deja . En largo 255, los 31 regalos caen todos de en adelante: de esos 49 valores, casi dos de cada tres dan más. Y los 64 pedidos producen sólo 34 códigos: los otros 30 repiten un generador que ya había salido con una menor.
Un código se nombra por la mayor que lo produce, que es la de su tira: el (31,11) es un código de , el (63,18) de , y el (255,47) de . Las intermedias dan el mismo código con una distancia diseñada menor, y no tiene sentido listarlas.
El regalo no llega solo al decodificador. Un decodificador BCH arma síndromes, , y corrige hasta la con la que se lo construyó. Si el (255,47) se decodifica con 64 síndromes, corrige 32. Para corregir 42 hay que calcular 84, que valen cero sobre toda palabra porque son todas raíces de . El codificador es el mismo: lo que se gana es leer bien el generador antes de dimensionar el decodificador.
Y la tira sigue siendo una cota. La distancia mínima real puede pasarla por razones que no tienen nada que ver con la conjugación, y detectarlo pide cotas más finas que la de la Vandermonde. Lo que la tira da es lo seguro.
Todo esto vale con , la tira pedida desde . Si se la empieza en otro lado, el regalo aparece también en tasa alta, pero por otro motivo. En largo 31, pedir con es pedir y : la clase de trae a y a , la tira queda , y sale el (31,21), que corrige dos. Ahí no hay suerte: el pedido pagó dos clases enteras para un solo error, y la conjugación devolvió lo que se había pagado.