Unidad 3 · Detección de errores con el síndrome
Un código de bloque lineal toma bits de mensaje y manda . De los vectores de bits, sólo son palabras de código: los que el codificador puede producir. En el Hamming (7,4) son 16 de 128. El canal da vuelta algunos bits, y lo que da vuelta se anota como un patrón de error , un vector con un 1 en cada posición invertida. Lo que llega es , con la palabra mandada y la suma bit a bit, sin acarreo.
El receptor no conoce . Lo que sí puede calcular es el síndrome, , con la matriz de paridad del código: bits, tres en el (7,4). Si no es cero, hubo error, seguro. Si es cero, el receptor acepta como si fuera lo mandado. Las dos ramas no valen lo mismo: un síndrome no nulo prueba que hubo error, y uno nulo no prueba que no lo hubo.
Toda palabra de código cumple ; es lo que define a . Por eso el síndrome no ve lo mandado:
Depende sólo del error. Y es la suma de las columnas de en las posiciones que el canal dio vuelta. En el (7,4) del apunte esas columnas, de a , son 110 011 111 101 100 010 001: los siete vectores no nulos de tres bits, cada uno una vez.
Entonces cuando , que es exactamente la condición de ser palabra de código. Un error pasa sin ser visto si y sólo si el patrón de error es él mismo una palabra de código no nula. En el (7,4) hay . No hay otra forma de engañar al síndrome, y ninguna de esas quince deja de engañarlo nunca: sumarle una palabra a da otra palabra, y el receptor no tiene cómo distinguirla de una que llegó limpia.
El peso de un vector, , es su cantidad de unos: para un patrón de error, cuántos bits se dieron vuelta. La distancia mínima de un código es la menor cantidad de posiciones en que difieren dos palabras distintas, y en un código lineal coincide con el menor peso de una palabra no nula. En el (7,4), .
De ahí sale la garantía. Un patrón de peso menor que no puede ser palabra, así que el síndrome lo ve siempre: el código detecta todo patrón de hasta errores. Son los 7 simples y los 21 dobles, los 28 sin excepción. Desde las columnas es lo mismo dicho de otro modo: una columna sola no es cero, y dos columnas distintas no suman cero. Hace falta juntar tres para que se anulen, como .
Es una garantía de peor caso: dice qué pasa con el patrón más desfavorable de cada peso. Para tres errores o más no promete nada. Pero que no prometa no quiere decir que no vea.
Patrones de peso 3 o más hay 99: 35 de peso 3, 35 de peso 4, 21 de peso 5, 7 de peso 6 y uno de peso 7. El (7,4) detecta 84. Pasan 15, y son exactamente las 15 palabras no nulas: 7 de peso 3, 7 de peso 4 y la de peso 7, 1111 111. La distribución de pesos del código, para de 0 a 7, es la lista de lo que se escapa.
Lo raro está en las filas vacías. Con 5 bits mal, o con 6, el síndrome no falla nunca: detecta los 21 y los 7. Con los siete bits mal no ve nada. Lo que se le escapa no es el error grande: es el que cae justo sobre otra palabra. Detectar no es contar cuántos bits se dieron vuelta, es preguntar si lo que llegó es una palabra, y para eso da igual si el camino fue corto o largo.
Abajo se mandó el mensaje 1001, la palabra 1001 011. Arranca sin errores. Los botones de dan vuelta un bit cada uno, y cada patrón que armes queda marcado en la grilla de los 127: gris si el síndrome lo vio, rojo si pasó. Buscá los quince.
Cada uno de los quince deja al receptor con un mensaje legítimo en la mano, y equivocado. Con , es decir 1001 011, llega 0000 000 y acepta 0000. Con 1111 111 llega 0110 100 y acepta 0110: los cuatro bits de mensaje mal, y ninguna alarma. El síndrome no tiene cómo saberlo, porque lo que mide es si es una palabra, y lo es.
En el canal binario simétrico, que da vuelta cada bit con probabilidad y sin mirar a los demás, un patrón de peso aparece con probabilidad . La probabilidad de error no detectado suma la de los quince, agrupados por peso:
En el (7,4), con sus siete palabras de peso 3, siete de peso 4 y una de peso 7:
Con chico manda el primer término, y : el exponente lo pone y el 7 lo pone , la cantidad de palabras de ese peso. La tabla es la fórmula exacta evaluada, y al lado la pregunta que de verdad tiene el receptor: llegó , ¿qué tan probable es que igual haya habido error? Es sobre la probabilidad de ver un síndrome nulo, que es .
| p | Pu(E) exacta | 7p³ | error si s = 0 |
|---|---|---|---|
| 10⁻³ | 6,98·10⁻⁹ | 7,00·10⁻⁹ | 7,03·10⁻⁹ |
| 10⁻² | 6,79·10⁻⁶ | 7,00·10⁻⁶ | 7,29·10⁻⁶ |
| 0,1 | 5,10·10⁻³ | 7,00·10⁻³ | 1,06·10⁻² |
| 0,5 | 0,117 | 0,875 | 0,9375 |
En un síndrome nulo miente siete veces en un millón, y la aproximación está a un 3 % de la cuenta exacta. En , donde el canal ya no transmite nada, los 128 patrones son igual de probables: 16 dan , y quince de esos dieciséis son error. Es el mismo 000 en los dos casos. Lo que vale como evidencia no lo pone el código: lo pone el canal.
Y en , el canal que da vuelta todo, el patrón es siempre 1111 111, que es palabra. El (7,4) no detecta un solo bloque, y entrega el complemento del mensaje cada vez.
«Detecta hasta errores» es lo que el código jura, no lo que hace. Hace bastante más: de los 127 patrones no nulos ve 112. Y lo que se le escapa no depende de cuántos bits se dieron vuelta sino de dónde quedó lo que llegó. Un síndrome cero sólo dice que es una palabra de código; que sea la mandada es una apuesta, y la apuesta es buena o mala según el canal. Si en vez de detectar se corrige, la cuenta cambia, y no a favor: con dos errores el decodificador agrega un tercero, y corregir uno entrega en silencio unas 3/p veces más palabras malas que detectar dos.