Lección 4 de 11
Matriz generatriz y matriz de paridad
Cómo codificar con una matriz G, comprobar si una palabra es del código con una matriz H, pasar de una a otra y leer en H la distancia mínima.
Borrador: pendiente de que lo revise el autor. Esta página no aparece en Google.
Al terminar sabrás:
- Codificar un mensaje con la matriz generatriz G
- Pasar G a forma sistemática y obtener H, o hallar G a partir de H
- Comprobar si una palabra pertenece al código con H
- Deducir d mirando las columnas de H
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.
Un código lineal es un subespacio, y un subespacio se puede describir de dos maneras: dando una base (las palabras «ladrillo» con las que se construye todo) o dando ecuaciones (las condiciones que cumplen sus vectores). Cada descripción da una matriz y cada matriz sirve para algo distinto: la primera, para codificar; la segunda, para comprobar si lo que ha llegado es una palabra del código. Es una idea parecida a la del dígito de control del DNI o del IBAN, pero para códigos que además corrigen.
La idea
Piensa en el código de Hamming . Para enviar 4 bits necesitas una regla que los convierta en una palabra de 7: multiplicar el mensaje por una matriz. Si el mensaje se copia en las primeras 4 posiciones y se añaden 3 bits de control, el receptor lo lee sin hacer cuentas.
La otra cara es el control. Cada bit de control es una ecuación: «la suma de estas posiciones ha de ser 0». Si una palabra cumple las tres ecuaciones, es del código. Si falla alguna, algo ha ido mal. Escribir las ecuaciones como filas de una matriz da la matriz de paridad.
Matriz generatriz
Una matriz generatriz de un código es una matriz de tamaño cuyas filas forman una base del código. Codificar es multiplicar:
Como las palabras son vectores fila, es la combinación de las filas de con los coeficientes de . Cada mensaje da una palabra distinta (las filas son independientes), y se recorren las palabras del código.
Un código tiene muchas matrices generatrices (una por base), pero la más cómoda es la forma sistemática
con la identidad y una matriz . Entonces : los primeros símbolos son el propio mensaje y los restantes son la redundancia.
Si G no está en forma sistemática
Se aplica el método de Gauss a las filas: intercambiarlas, multiplicar una por un escalar no nulo y sumar a una un múltiplo de otra. Así cambia la base, pero no el código: cada operación se puede deshacer.
Ejemplo: el código binario con filas , , y (volverá a salir en la lección 7). Vamos limpiando columnas, módulo 2:
- Columna 2: pasa a ser la fila 1.
- Columna 3: la fila 1 pasa a y la fila 2 a .
- Columna 4: la fila 2 pasa a y la fila 3 a .
Si falta algún pivote, hay que reordenar las posiciones: sale un código equivalente (mismos parámetros), no el mismo.
Matriz de paridad
Una matriz de paridad (o matriz de control) de un código es una matriz de tamaño y rango tal que
Aquí es escrita en columna. Cada fila de es una ecuación: ecuaciones independientes dejan grados de libertad.
Si , una matriz de paridad se obtiene sin cálculo:
La razón tiene dos partes. Primero, al multiplicar por bloques: cada fila de cumple las ecuaciones de , y con eso todas sus combinaciones, así que está dentro de las soluciones de . Segundo, como contiene la identidad , tiene rango , y las soluciones forman un subespacio de dimensión , la misma que . Por eso coinciden. En binario, .
Para comprobar una palabra recibida se multiplica: si , es del código; si no, hay un error (la lección 6 llama a síndrome).
De H a G
Si te dan , las palabras del código son las soluciones del sistema . Basta resolverlo: una base de soluciones es una matriz generatriz. Si , la receta de antes al revés da .
Ejemplo: la matriz de paridad del Hamming «de manual», cuya columna es el número escrito en binario:
Sus ecuaciones son , y (en binario, restar es sumar). Las incógnitas libres son . Dando a una de ellas el valor 1 y a las demás 0 salen cuatro soluciones:
Son independientes (cada una es la única con un 1 en su incógnita libre), así que forman una base. El mensaje va en las posiciones 3, 5, 6 y 7, y el control en las 1, 2 y 4.
Código dual
Las filas de son vectores independientes de . Generan otro código, de dimensión , que se llama el código dual : el formado por todas las palabras con para toda . Así, es matriz generatriz de y es matriz de paridad de . Por ejemplo, el dual del código de repetición es el código de paridad . Ojo: en un cuerpo finito un vector puede ser ortogonal a sí mismo, como en binario; no pasa nada.
Leer la distancia mínima en H
Llama a las columnas de . Entonces
Una palabra de peso es, por tanto, una combinación nula de columnas con coeficientes no nulos. En binario: es del código si y solo si suman cero las columnas de las posiciones donde tiene un 1. Es decir:
La distancia mínima de un código es el menor número de columnas de que son linealmente dependientes.
Consecuencias inmediatas, y la clave de los códigos de Hamming:
- Si ninguna columna de es nula, no hay palabras de peso 1: .
- Si además ninguna columna es múltiplo de otra (en binario: si todas son distintas), no hay palabras de peso 2: .
En no basta con que sean distintas: las columnas y son distintas, pero su suma es cero.
Códigos de Hamming
Para tomamos como columnas de todos los vectores no nulos de , cada uno una vez. Hay , y esa es la longitud. El código resultante es el código de Hamming de parámetros
Tiene porque las columnas son binarias, distintas y no nulas, y porque hay tres columnas dependientes: , y su suma, que también es columna de . Para , las columnas , y dan el código de repetición ; para , el ; para , el . Todos corrigen un error, y la tasa crece con : , , .
Ejemplo resuelto
Con el ejemplo hilo: el código de Hamming con
Paso 1: forma sistemática. con
Trasponemos y la ponemos a la izquierda de : , la matriz de arriba.
Paso 2: codificar. El mensaje da , la suma de las filas 1, 3 y 4 de :
Los cuatro primeros símbolos son el mensaje, , y los tres últimos, la redundancia, .
Paso 3: comprobar . Por bloques, en binario. A mano, la fila 1 de , , coincide con la fila 1 de en las posiciones 1 y 5 (), con la fila 2 en las posiciones 1 y 6 () y con la fila 3 en ninguna.
Paso 4: ¿es palabra del código? Para , fila por fila:
- Fila 1: .
- Fila 2: .
- Fila 3: .
Sale : sí es palabra del código. Si cambiamos el bit de la posición 6 y recibimos , resulta : no es palabra del código, ha habido un error.
Paso 5: distancia mínima en . Las siete columnas de son , , , , , y : los siete vectores no nulos de , todos distintos. Luego . Y las columnas 1, 2 y 3 suman , así que .
Paso 6: el dual. Las combinaciones de las filas de son , las filas , , y sus sumas , , y . Las siete no nulas pesan 4: el dual es un .
Ejercicios
Ejercicio 1
Codifica con la del ejemplo y comprueba con que sale palabra del código. ¿Lo es ?
Ver la solución
es la suma de las filas 2 y 3 de : .
Con : fila 1, posiciones 1, 2, 4, 5: ; fila 2, posiciones 1, 3, 4, 6: ; fila 3, posiciones 2, 3, 4, 7: . Es palabra del código.
Para : fila 1: ; fila 2: ; fila 3: . Resulta : no es palabra del código.
Ejercicio 2
Un código binario tiene matriz generatriz
Halla una matriz de paridad , comprueba y averigua a partir de las columnas de .
Ver la solución
Está en forma sistemática, con . En binario, :
Comprobación: por bloques, ; a mano, cada fila de coincide con cada fila de en un número par de unos.
Las columnas de son , , , y : binarias, no nulas y distintas, así que . Además, las columnas 1, 3 y 4 suman , por lo que . Coincide con el ejercicio 2 de la lección anterior.
Ejercicio 3
Sobre , el tetracódigo tiene matriz generatriz
Halla . Codifica el mensaje y comprueba el resultado con .
Ver la solución
Aquí , que es simétrica: . Cambiamos el signo módulo 3: y . Entonces
Codificamos: módulo 3.
Comprobamos: fila 1 de : ; fila 2: . Resulta . Los dos primeros símbolos de son el mensaje .
Ejercicio 4
Halla el código dual del código del ejercicio 2: escribe sus palabras y da sus parámetros. Comprueba su distancia mínima mirando las columnas de su matriz de paridad.
Ver la solución
está generado por las filas de la del ejercicio 2: , y . Sus palabras son , las tres filas y sus sumas:
Los pesos no nulos son . El mínimo es 2: es un .
Comprobación: una matriz de paridad de es la del ejercicio 2. Sus columnas son , , , y . La 1 y la 4 son iguales, así que suman cero y : es la palabra .
En resumen
- La matriz generatriz () codifica: . Con el método de Gauss se lleva a la forma sistemática , en la que el mensaje aparece en las primeras posiciones.
- La matriz de paridad () comprueba: . Si , entonces . Al revés, sale de resolver el sistema .
- El código dual tiene a como matriz generatriz y a como matriz de paridad.
- La distancia mínima es el menor número de columnas de linealmente dependientes. Columnas no nulas y sin ninguna múltiplo de otra dan ; en binario, basta con que sean no nulas y distintas.
- El código de Hamming usa como columnas todos los vectores no nulos de y tiene parámetros .
Siguiente lección: Errores y borrones
Para profundizar
- V. Guruswami, A. Rudra y M. Sudan, Essential Coding Theory (2023).
- R. Hill, A First Course in Coding Theory (1986).