Lección 1 de 11
Qué es un código corrector: añadir redundancia con cabeza
Qué es un código de bloque, cómo se mide la distancia entre palabras y por qué elegir la palabra más cercana permite corregir errores de transmisión.
Borrador: pendiente de que lo revise el autor. Esta página no aparece en Google.
Al terminar sabrás:
- Describir el canal con ruido y qué es un código de bloque
- Calcular la distancia de Hamming y la distancia mínima de un código
- Decodificar por la palabra código más cercana
- Entender la diferencia entre detectar y corregir errores
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 QR con un trozo roto o manchado se sigue leyendo. Un CD con un arañazo suena igual. Una sonda a millones de kilómetros nos manda fotos con la señal casi ahogada por el ruido. En los tres casos hay datos que se estropean por el camino y, aun así, el mensaje llega entero. No es magia: es matemática que se diseñó para eso. Este curso explica cómo funciona, y esta primera lección pone las bases: qué es un código, cómo se mide lo «parecidas» que son dos palabras y cómo se decide qué se quiso decir cuando llega algo estropeado.
La idea
Quieres enviar un mensaje por un canal imperfecto: un cable, el aire, un disco, una memoria. El canal a veces cambia algún símbolo. Si mandas el mensaje tal cual, el receptor no puede saber si lo que ha recibido es lo que enviaste: cualquier secuencia es un mensaje posible.
La solución es añadir redundancia. En lenguaje natural ya la hay: si lees «mxtemáticas» sabes que es «matemáticas», porque no existe ninguna otra palabra parecida. El castellano no usa todas las combinaciones de letras, y ese «desperdicio» permite detectar y arreglar erratas.
Un código corrector hace lo mismo, pero a propósito y con matemáticas. Se eligen unas pocas secuencias «válidas» entre todas las posibles, y se eligen lejos unas de otras. Si llega algo que no es válido, se busca la palabra válida más cercana. Todo el curso gira en torno a una pregunta: ¿cómo elegir esas palabras para que estén lo más lejos posible entre sí gastando la mínima redundancia?
Repaso Aritmética módulo 2
Trabajamos con bits, es decir, con los símbolos 0 y 1. En «aritmética módulo 2» solo existen esos dos números y se suman así: , , y (como «par más par es par, impar más impar es par»). Sumar bit a bit dos palabras binarias equivale a la operación «o exclusivo»: el resultado tiene un 1 donde ambas palabras difieren. En esta lección apenas la necesitamos; la usaremos mucho desde la lección 3.
Definiciones
Un alfabeto es un conjunto finito de símbolos. Casi siempre será (alfabeto binario), pero puede ser mayor; lo llamaremos y su tamaño . Una palabra de longitud es una sucesión de símbolos del alfabeto, que escribiremos como vector fila, por ejemplo . Las posiciones se numeran de 1 a .
Un código de bloque de longitud es un subconjunto de las palabras de longitud . Sus elementos son las palabras código. Si tiene palabras, se pueden enviar mensajes distintos: cada mensaje se asocia a una palabra código antes de transmitirlo. A esa asociación la llamaremos codificar.
La tasa del código mide cuánta información útil lleva cada símbolo enviado:
Aquí cuenta cuántos símbolos de información caben en el código. Para , un código con palabras lleva bits de información y tiene tasa : de cada bits, son «información» y el resto, redundancia. Cuanto más cerca de 1, menos redundancia (más eficiente, pero con menos protección).
Dos códigos muy sencillos
El código de repetición de longitud 3 repite cada bit tres veces: el 0 se envía como y el 1 como . Tiene y palabras, así que .
El código de paridad de longitud 3 toma dos bits de mensaje y añade un tercero que hace que la cantidad de unos sea par:
| mensaje | palabra código |
|---|---|
| 00 | 000 |
| 01 | 011 |
| 10 | 101 |
| 11 | 110 |
Tiene y palabras, y .
Distancia de Hamming
La distancia de Hamming entre dos palabras de la misma longitud es el número de posiciones en las que difieren. Por ejemplo, , porque se diferencian en las posiciones 2 y 4. Es una distancia de verdad: nunca es negativa, vale 0 solo si las palabras son iguales y cumple la desigualdad triangular.
La distancia mínima de un código con al menos dos palabras es
Un código de longitud con palabras y distancia mínima se dice de parámetros . El de repetición es un : sus dos palabras difieren en las tres posiciones. El de paridad es un : dos palabras distintas siempre difieren en al menos dos posiciones, y hay pares a distancia exactamente 2, como y .
Detectar y corregir
La distancia mínima decide cuántos errores aguanta un código. Un código de distancia detecta hasta errores, porque con menos de cambios no se llega a otra palabra código, y corrige hasta , porque con tan pocos errores la palabra enviada sigue siendo la más cercana a lo recibido (en la lección 5 verás el porqué con un dibujo).
Repaso Qué significa ⌊x⌋
Es la parte entera de : el mayor entero que no supera . Por ejemplo, y . Así, con se tiene , y con , : un código de distancia 4 corrige los mismos errores que uno de distancia 3.
Decodificar por la palabra más cercana consiste justo en eso: ante una palabra recibida , se devuelve la palabra código con mínima. Si hay empate entre varias, el decodificador no puede decidir con seguridad.
Un código con no detecta nada. Con detecta un error pero no lo corrige. Hacen falta para corregir un error, y para corregir dos.
Ejemplo resuelto
El código de repetición . Como , detecta hasta 2 errores y corrige .
Envías el bit 1, es decir, la palabra , y el canal cambia el símbolo de la posición 2: llega . Calculamos las distancias a las dos palabras código:
- ,
- .
La más cercana es , así que se decodifica . Se ha corregido el error. Es la «votación por mayoría» de toda la vida.
Si hubiera habido dos errores (llega, por ejemplo, ), las distancias serían a y a : se decodifica , que es incorrecto. El código corrige un error, pero con dos se equivoca sin avisar. Con puedes usar el código para corregir 1 error o para detectar 2, pero no las dos cosas a la vez: si corriges, dos errores se convierten en una corrección equivocada. Si solo detectas, no es palabra código y saltaría la alarma.
El código de paridad solo tiene . Si envías y llega , sabes que algo ha ido mal, porque tiene un número impar de unos y no es palabra código. Pero está a distancia 1 de , de y de : hay tres candidatas empatadas. Se detecta sin corregir.
Una mirada al futuro. Con repetición, para corregir un error gastamos : enviamos tres bits por cada bit de información. Se puede hacer mucho mejor. En las lecciones 3 y 4 construiremos un código de longitud 7 con palabras (los cuatro bits de información van acompañados de tres de redundancia) y distancia mínima 3. Es un (en la lección 3 lo escribiremos ): corrige también un error, pero con tasa , más de la mitad. Es el código de Hamming y será nuestro ejemplo hilo a lo largo del curso.
Detectar sin corregir en la vida diaria
Muchos identificadores llevan un dígito o una letra de control que solo sirve para detectar. La letra del DNI es el resto de dividir el número entre 23, convertido en una letra con una tabla: para 12345678, el resto es 14 y la letra es Z. Si te equivocas en un solo dígito, el resto cambia siempre, así que la letra no coincide y el error se detecta. Pero con la letra sola no se sabe cuál de los ocho dígitos falló ni cuál era el correcto: es detectar sin corregir. Algo parecido hacen el IBAN o el ISBN; puedes probarlo en el validador de DNI. Los códigos correctores de verdad añaden la redundancia justa para poder además localizar el error.
Ejercicios
Ejercicio 1
Calcula la distancia de Hamming entre e y entre y .
Ver la solución
Comparamos posición a posición.
e difieren en las posiciones 2 y 4, así que .
y difieren en las cinco posiciones, así que .
Ejercicio 2
Considera el código de repetición de longitud 5, que repite cada bit cinco veces.
- ¿Cuáles son sus parámetros y su tasa?
- ¿Cuántos errores corrige? ¿Y cuántos detecta?
- Decodifica por la palabra más cercana la recepción .
Ver la solución
- Las palabras código son y , que difieren en las 5 posiciones. Es un y su tasa es .
- Detecta errores y corrige .
- y . La más cercana es : se decodifica el bit 0. Es decir, gana la mayoría de ceros (tres ceros frente a dos unos).
Ejercicio 3
Sea .
- Calcula su distancia mínima y sus parámetros .
- Decodifica por la palabra más cercana la recepción .
- Para la recepción , ¿qué ocurre?
Ver la solución
- Hay seis pares. Los que incluyen dan los pesos de las otras palabras: , y . Los otros tres pares: , y . El mínimo es , así que es un : corrige 1 error.
- Las distancias de a las cuatro palabras son 4, 1, 3 y 2, respectivamente. La más cercana es , a distancia 1: se decodifica .
- Las distancias de son 2 a , 3 a , 3 a y 2 a . Hay un empate entre y : el decodificador no puede decidir. Es lo esperable, porque está a dos errores de dos palabras distintas y el código solo garantiza corregir uno.
En resumen
- Un código de bloque es un conjunto de palabras de longitud elegidas a propósito para estar lejos unas de otras; la tasa mide cuánta redundancia gastan.
- La distancia de Hamming cuenta las posiciones en que difieren dos palabras; la distancia mínima del código mide cuánto de lejos están sus palabras.
- Un código detecta hasta errores y corrige hasta .
- Decodificar es elegir la palabra código más cercana a lo recibido.
- Hay códigos mucho mejores que repetir: el de Hamming corrige un error con tasa .
Siguiente lección: Cuerpos finitos: sumar y multiplicar con pocos símbolos
Pruébalo: Validar un DNI
Para profundizar
- V. Guruswami, A. Rudra y M. Sudan, Essential Coding Theory (2023).
- D. J. C. MacKay, Information Theory, Inference, and Learning Algorithms, Cambridge University Press (2003).
- R. Hill, A First Course in Coding Theory, Oxford University Press (1986).