Unidad 6 · La decodificación errónea de un BCH con un error de más
Un BCH que corrige errores, con , a veces avisa que no puede y a veces entrega otra palabra sin avisar. En el , de los 1365 patrones de cuatro errores, 840 terminan en falla y 525 en una palabra equivocada: el 38,5 %. Ese porcentaje no es de los BCH. Es de cada código, y lo fija una sola cifra: cuántas palabras tiene de peso . Las de peso en adelante no aportan ni un patrón. El corrige lo mismo que el y se equivoca en el 17,2 %.
Un código BCH se construye para corregir errores, y en los cuatro códigos de esta nota esa es exactamente su capacidad de corrección: la distancia mínima vale , ni más ni menos. El decodificador calcula los síndromes, saca el polinomio localizador con Berlekamp-Massey y busca sus raíces con la búsqueda de Chien. Antes de corregir hace dos comprobaciones: que el grado de no pase de , y que Chien encuentre tantas raíces distintas como ese grado.
De ahí salen tres desenlaces. Si el patrón de error tiene hasta unos, el decodificador lo corrige. Si tiene más, puede pasar una de dos cosas. O alguna comprobación no se cumple y el decodificador declara falla: sabe que el bloque llegó dañado, aunque no lo pueda arreglar. O las dos se cumplen y entrega, con toda confianza, una palabra de código que no es la que se mandó: una decodificación errónea. Esta nota cuenta cuántas veces pasa lo segundo cuando hay errores, uno solo de más.
Para contar hace falta saber qué hace el decodificador sin mirar sus cuentas por dentro. Se recorrieron los cuatro códigos con todos los patrones de errores, y cada vez que no declaró falla, lo que entregó fue una palabra de código a distancia o menos de lo recibido. Es lo que se llama un decodificador de distancia acotada: corrige hacia la palabra que está a o menos, si la hay, y si no la hay, avisa. Es la misma regla que la decodificación incompleta de la Unidad 3, ahora hecha con álgebra en vez de tabla.
El código es lineal, así que se puede suponer que se mandó la palabra nula: lo recibido es el propio , y cualquier palabra que el decodificador entregue en su lugar es una palabra no nula . El decodificador se equivoca exactamente cuando hay una con . Cuatro pasos alcanzan para contar esos .
Paso 1: las de peso o más no llegan. Entre dos vectores, la distancia es al menos la diferencia de sus pesos:
Para que eso sea a lo sumo , tiene que pesar a lo sumo . Una palabra de peso queda a o más de cualquier patrón de errores, y el decodificador nunca la elige. Y como ninguna palabra no nula pesa menos que , las únicas candidatas son las de peso exactamente .
Paso 2: el patrón tiene que caer adentro de la palabra. Si pesa y comparte unos con , la distancia es . Para que valga o menos hace falta : los errores están todos en posiciones donde tiene un uno. Entonces justo, y el decodificador da vuelta los bits sanos que le faltan a para ser .
Paso 3: cada patrón cae adentro de una sola. Si estuviera adentro de dos palabras y , las dos estarían a de y a lo sumo a entre sí, menos que . No puede ser.
Paso 4: se cuenta. Cada una de las palabras de peso contiene patrones de errores, y ninguno se repite entre dos palabras. Sobre los patrones posibles, la fracción que sale equivocada es
Del código entra un solo número, : el primer término no nulo de su distribución de pesos. Las palabras siguientes, que pueden ser muchas más, quedan afuera por el paso 1.
Arranca en el sin errores. Con cuatro, la raya roja marca la palabra que el decodificador entregó cuando se equivoca: siete posiciones que tapan las cuatro azules. Al contar, el recuento junta las palabras entregadas y las compara con lo que da el código dual por MacWilliams, que no pasa por el decodificador.
Se decodificaron todos los patrones de errores de los cuatro códigos de la unidad. Las y salen de enumerar las palabras de cada código:
| código | t | patrones | falla | equivocadas | A₂ₜ₊₁ | A₂ₜ₊₁·C(2t+1, t+1) | fracción | A₂ₜ₊₂ |
|---|---|---|---|---|---|---|---|---|
| (15,7) | 2 | 455 | 275 | 180 | 18 | 18 · 10 = 180 | 39,6 % | 30 |
| (15,5) | 3 | 1 365 | 840 | 525 | 15 | 15 · 35 = 525 | 38,5 % | 15 |
| (31,21) | 2 | 4 495 | 2 635 | 1 860 | 186 | 186 · 10 = 1 860 | 41,4 % | 806 |
| (31,16) | 3 | 31 465 | 26 040 | 5 425 | 155 | 155 · 35 = 5 425 | 17,2 % | 465 |
La forma cerrada da los cuatro recuentos exactos. Y no por casualidad de suma: en cada código las palabras distintas que el decodificador entregó son exactamente las de peso mínimo, todas de peso , y cada una entregada veces, ni una más ni una menos. Las de peso no aparecen nunca, aunque en el sean 806 contra 186 y en el 465 contra 155.
El y el corrigen tres errores, tienen y salen del mismo procedimiento de diseño. Con cuatro errores, el primero se equivoca en el 38,5 % de los patrones y el segundo en el 17,2 %. Lo que los separa es cuánto tapan sus palabras de peso 7. En el , 15 palabras con 35 patrones cada una cubren 525 de 1365. En el , 155 palabras cubren 5425, pero el largo 31 deja 31 465 patrones de cuatro errores, veintitrés veces más, y las palabras de peso 7 crecieron sólo diez veces.
Con pasa lo contrario: el da 39,6 % y el da 41,4 %. Alargar el bloque no baja la fracción por sí solo. Cada código trae su cifra, y para saberla hay que contar sus palabras más livianas.
Hay una regularidad, pero aparece en el largo, no en solo. En un BCH primitivo largo, las palabras de peso bajo se reparten casi como si el código fuera al azar: , la aproximación binomial. Con es , y al reemplazar en la fracción, para grande,
La mitad con dos errores corregibles, un sexto con tres. Las exactas de los BCH primitivos más largos salen de su código dual, que tiene pocas palabras, por la identidad de MacWilliams; las de largo 63, y el , se cruzaron además decodificando todos sus patrones:
| código | t | A₂ₜ₊₁ | equivocadas | patrones | fracción | 1/t! |
|---|---|---|---|---|---|---|
| (15,7) | 2 | 18 | 180 | 455 | 39,6 % | 50 % |
| (31,21) | 2 | 186 | 1 860 | 4 495 | 41,4 % | 50 % |
| (63,51) | 2 | 1 890 | 18 900 | 39 711 | 47,6 % | 50 % |
| (127,113) | 2 | 16 002 | 160 020 | 333 375 | 48,0 % | 50 % |
| (255,239) | 2 | 134 946 | 1 349 460 | 2 731 135 | 49,4 % | 50 % |
| (15,5) | 3 | 15 | 525 | 1 365 | 38,5 % | 16,7 % |
| (31,16) | 3 | 155 | 5 425 | 31 465 | 17,2 % | 16,7 % |
| (63,45) | 3 | 3 411 | 119 385 | 595 665 | 20,0 % | 16,7 % |
| (127,106) | 3 | 48 387 | 1 693 545 | 10 334 625 | 16,4 % | 16,7 % |
| (255,231) | 3 | 856 035 | 29 961 225 | 172 061 505 | 17,4 % | 16,7 % |
Los de oscilan alrededor de un sexto desde largo 31. El es el que se sale: con largo 15 y 7, el código está lejos de parecerse al azar, y la cuenta de arriba supone , que en él no vale: tiene 10 bits de paridad, no 12. Su 38,5 % es más del doble de lo que la familia da en el largo, y es el número de ese código, no una regla.
La fórmula no pide nada de los BCH: vale para cualquier decodificador de distancia acotada. Con da , y en un Hamming es exacta para cualquier largo: el tiene 7 palabras de peso 3, con 3 pares de errores cada una, y son todos los patrones dobles. Es lo que pasa en un código perfecto, visto desde las palabras livianas.
El tiene , así que y la fórmula da cero: ningún doble sale equivocado, los 28 levantan la bandera. Son las dos filas que en un código perfecto, la bandera no se levanta sacó recorriendo patrones, ahora en una línea.
Y dice cómo llevar a cero la decodificación errónea con errores: que no haya palabras de peso , o sea, . Es lo que hace el código extendido, con un bit de paridad global. Se extendieron los cuatro BCH y se recorrieron sus patrones de errores con un decodificador de distancia acotada: en el , el , el y el , cero equivocadas. Un bit más no corrige ningún error más; compra que el primer error de más avise siempre.