Lección 6 de 11
Decodificación por síndrome: corregir sin comparar con todo
Aprende a corregir errores con el síndrome Hr^T, la tabla de líderes de clase y por qué en el Hamming el síndrome señala directamente la posición del error.
Borrador: pendiente de que lo revise el autor. Esta página no aparece en Google.
Al terminar sabrás:
- Calcular el síndrome de una palabra recibida y explicar por qué solo depende del error
- Construir una tabla de síndromes con sus líderes de clase
- Decodificar el Hamming [7,4,3] leyendo la posición del error en el síndrome
- Saber qué pasa cuando hay más errores de los que el código corrige
Si sabes multiplicar matrices, resolver un sistema de ecuaciones lineales y operar con polinomios (sumar, multiplicar, dividir), puedes seguirlo. Lo demás (aritmética módulo 2, subespacios, cuerpos finitos) se explica sobre la marcha.
En la lección anterior vimos cuántos errores puede corregir un código. Ahora toca hacerlo de verdad. La idea de la lección 1 era buscar la palabra código más cercana a la recibida, pero comparar con las palabras es lento: un código con tiene palabras, imposible de recorrer. Con la matriz de paridad se puede hacer mucho mejor: basta una multiplicación y una búsqueda en una tabla pequeña.
La idea
Recibes una palabra . Sabes que es la palabra enviada más un error , es decir, . No ves , pero puedes hacerle una pregunta indirecta: ¿qué te dice la matriz sobre ?
Como para toda palabra código, la matriz «no ve» a . Solo ve el error. Así que el resultado de multiplicar por es una huella del error, que no depende de qué palabra se envió. Esa huella se llama síndrome, como en medicina: un conjunto de síntomas que apunta a la enfermedad.
El plan es entonces: calcular la huella, buscar en una tabla qué error deja esa huella, y quitarlo.
Definición
El síndrome de una palabra recibida es
un vector de símbolos. Al multiplicar sale en columna; en el texto lo escribiremos a veces como fila seguida de , por ejemplo . Si con :
El síndrome solo depende del error. Además si y solo si es palabra código.
Repaso Clase lateral
Si es un subespacio y un vector, el conjunto es la clase lateral de . Es el subespacio desplazado. Dos clases son iguales o no se cortan nunca, así que el espacio entero queda repartido en clases, todas con el mismo número de elementos que .
Dos palabras y tienen el mismo síndrome si y solo si su diferencia es una palabra código. Por eso el espacio se reparte en grupos, uno por síndrome, cada uno con palabras. Cada grupo es una clase lateral de : todas las palabras de la forma . La clase del síndrome 0 es el propio código.
La clase de , es decir , contiene todos los errores que pueden haber producido : si se envió , el error fue . Elegir el de menor peso es elegir la palabra código más cercana. Y si el canal estropea cada símbolo por separado y con poca probabilidad (en binario, menos de 1/2), es también el error más probable. Ese error de menor peso es el líder de la clase. La tabla de síndromes lista, para cada síndrome, su líder. Es la versión reducida de la llamada tabla estándar, que contiene las clases completas.
Decodificar:
- Calcula .
- Busca en la tabla el líder de ese síndrome.
- Responde (en binario, ). El gorro de indica que es nuestra estimación de .
En el Hamming, el síndrome es la posición
Con un solo error en la posición , el vector tiene un único 1 y
Para el Hamming las columnas de son los siete vectores no nulos de , todos distintos:
| posición del error | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| síndrome | (1,1,0) | (1,0,1) | (0,1,1) | (1,1,1) | (1,0,0) | (0,1,0) | (0,0,1) |
Esa es toda la tabla de síndromes: 8 filas, la del 0 («sin error») y las 7 de arriba. Como el código es perfecto (lección 5), no queda ningún síndrome sin líder de peso 1. No hay que buscar nada: se mira el síndrome, se localiza la columna igual y se cambia ese bit.
Ejemplo resuelto
Enviamos el mensaje , que se codifica como
Por el canal se cambia el bit de la posición 3 y recibimos .
Paso 1: el síndrome. Con de la lección 4, cada fila suma las posiciones donde tiene un 1, módulo 2:
- Fila 1: .
- Fila 2: .
- Fila 3: .
Así que , distinto de cero: hay un error.
Paso 2: la tabla. El síndrome es la columna 3 de . El error está en la posición 3.
Paso 3: corregir. Cambiamos el bit 3:
Es la palabra enviada. Como el código es sistemático, el mensaje son las 4 primeras posiciones: .
Cuando se pasa de errores. El código solo corrige 1 error. ¿Qué ocurre con 2? Cambiamos las posiciones 1 y 2 de y recibimos
Su síndrome es , la columna 3. El decodificador, que no sabe que hubo dos errores, concluye «error en la posición 3» y devuelve
Es una palabra código válida, pero no es la enviada: difiere de en 3 posiciones. No salta ninguna alarma, porque el resultado parece perfecto. Esto es lo que cuesta un código perfecto: no sobran síndromes para avisar de que algo va mal. Si necesitas detectar errores dobles, hay que aumentar . Por ejemplo, se añade un octavo bit que hace par el número de unos de cada palabra: las de peso 3 pasan a peso 4 y sale un , que corrige 1 error y además detecta 2.
Y si el código no es de Hamming
En general el síndrome no es una columna, sino una suma de columnas, y hay que construir la tabla. Se recorren los errores por peso creciente (0, 1, 2…) y, para cada síndrome nuevo, se apunta el primer error que lo produce. Puede haber empates: dos errores del mismo peso con el mismo síndrome. Entonces el código no puede decidir cuál es el correcto, y se elige uno cualquiera (o se declara fallo). Si , un error de valor en la posición da como síndrome veces la columna : la tabla de peso 1 tiene esos múltiplos.
El coste. La tabla tiene entradas, una por síndrome. Para el Hamming son , nada. Pero para un código con hacen falta más de cuatro mil millones de filas, y esto ya no cabe en la práctica. Por eso se usan familias con estructura extra (BCH, Reed-Solomon…) cuyos decodificadores hallan el error sin tabla. En la lección 11 verás uno para Reed-Solomon.
Ejercicios
Ejercicio 1
En el Hamming recibes . Calcula el síndrome, localiza el error y da la palabra enviada.
Ver la solución
Cada fila de con , módulo 2:
- Fila 1: .
- Fila 2: .
- Fila 3: .
Síndrome , que es la columna 6. El error está en la posición 6. Corregimos y queda , que es la palabra enviada si hubo como mucho un error. (Se puede comprobar que su síndrome es .)
Ejercicio 2
Se envía por el canal del Hamming y se cambian las posiciones 5 y 7. ¿Qué recibe el decodificador, qué síndrome obtiene y qué devuelve? ¿Acierta?
Ver la solución
Recibe . Su síndrome es la suma de las columnas 5 y 7 de :
que es la columna 2. El decodificador cambia la posición 2 y devuelve . Es una palabra código, pero no la enviada (difiere en las posiciones 2, 5 y 7). No acierta, y sin avisar: dos errores superan lo que corrige el código.
Ejercicio 3
Considera el código binario con matriz de paridad
(es un código con palabras , , y ). Construye su tabla de síndromes y decodifica . Después intenta decodificar .
Ver la solución
Hay síndromes. Los cinco errores de peso 1 dan las columnas de :
| síndrome | líder |
|---|---|
| (0,0,0) | 00000 |
| (1,1,0) | 10000 |
| (0,1,1) | 01000 |
| (1,0,0) | 00100 |
| (0,1,0) | 00010 |
| (0,0,1) | 00001 |
Quedan dos síndromes, y , que solo se obtienen con errores de peso 2. Cada uno tiene dos líderes empatados: con o ; con o .
Para : el síndrome es , líder , y se devuelve , que es palabra código.
Para : el síndrome es . Con el líder se obtiene ; con , se obtiene . Ambas son palabras código a distancia 2 de . El decodificador no puede decidir entre las dos, porque el código solo garantiza corregir 1 error.
En resumen
- El síndrome solo depende del error, no de la palabra enviada; significa palabra código.
- Las palabras con el mismo síndrome forman una clase lateral; su elemento de menor peso es el líder.
- Decodificar es calcular el síndrome, buscar el líder en la tabla y restarlo.
- En el Hamming, el síndrome de un error simple es la columna de la posición dañada: no hace falta tabla.
- Con más errores de los permitidos, el decodificador se equivoca (a veces sin avisar). La tabla crece como .
Siguiente lección: Códigos cíclicos
Para profundizar
- W. C. Huffman y V. Pless, Fundamentals of Error-Correcting Codes (2003).
- R. Hill, A First Course in Coding Theory (1986).
- V. Guruswami, A. Rudra y M. Sudan, Essential Coding Theory (2023).