Códigos de Corrección de Errores: Comunicación Fiable en Canales Ruidosos

simulation intermediate ~12 min
Cargando simulación...

Fórmula

\text{Hamming}(7,4): \text{syndrome} = H \cdot r^T
R = \frac{k}{n} = \frac{4}{7} \approx 0.571
P_{\text{block error}} = 1 - (1-p)^n - n \cdot p \cdot (1-p)^{n-1}
d_{\min} = 3 \implies \text{corrects } \lfloor(3-1)/2\rfloor = 1 \text{ error}
Todo sistema de comunicación digital enfrenta el mismo problema fundamental: el ruido corrompe los datos. Los bits se invierten, las señales se desvanecen y las interferencias se entrometen. Los códigos de corrección de errores resuelven esto añadiendo redundancia estructurada que permite al receptor detectar y corregir errores sin solicitar retransmisión. El enfoque más simple es la repetición: enviar cada bit tres veces y hacer una votación por mayoría. Esto corrige errores de un solo bit por triplete pero desperdicia dos tercios de la capacidad del canal. Richard Hamming, frustrado por las lectoras de tarjetas perforadas propensas a errores en los Bell Labs, inventó una solución mucho más elegante en 1950. Hamming(7,4) codifica 4 bits de datos en 7 bits de código añadiendo 3 bits de paridad en posiciones cuidadosamente elegidas. Cada bit de paridad cubre un subconjunto superpuesto específico de los bits de datos. Cuando ocurre un error de un solo bit durante la transmisión, el receptor calcula el síndrome —el resultado de verificar las tres ecuaciones de paridad. El síndrome es un número de 3 bits que indica directamente la posición del error (0 significa sin error). El receptor simplemente invierte ese bit para recuperar los datos originales. Este simulador te permite transmitir cientos de bloques de datos a través de un canal ruidoso y comparar tres estrategias: sin codificación (transmisión en bruto), codificación por repetición y codificación Hamming. Observa cómo los errores (mostrados en rojo) corrompen los bits transmitidos, los bits de paridad (mostrados en cian) permiten la detección, y el decodificador corrige el daño. La lección más profunda es el teorema de codificación de canal de Shannon: para cualquier canal ruidoso, existe un esquema de codificación que logra comunicación fiable a cualquier tasa por debajo de la capacidad del canal. Los códigos Hamming son un paso temprano y práctico hacia esta promesa teórica. Los códigos modernos como LDPC y los códigos turbo se acercan notablemente al límite de Shannon.

Preguntas frecuentes

¿Qué es un código Hamming?

Un código Hamming es un código corrector de errores lineal inventado por Richard Hamming en 1950. La variante más común, Hamming(7,4), codifica 4 bits de datos en 7 bits de código añadiendo 3 bits de paridad en las posiciones 1, 2 y 4. Cada bit de paridad cubre un subconjunto específico de bits de datos. El síndrome —calculado verificando todas las ecuaciones de paridad— identifica la posición de un error de un solo bit, permitiendo la corrección sin retransmisión.

¿Cómo se relaciona la corrección de errores con el teorema de codificación de canal de Shannon?

El teorema de codificación de canal de Shannon (1948) demuestra que para cualquier canal con capacidad C, la comunicación fiable es posible a cualquier tasa por debajo de C usando códigos suficientemente largos. Los códigos Hamming son códigos cortos y simples que corrigen errores individuales. Los códigos modernos como los códigos turbo y LDPC se acercan mucho más al límite de Shannon usando longitudes de bloque mayores y decodificación iterativa.

¿Cuál es la diferencia entre detección y corrección de errores?

La detección de errores identifica que ocurrió un error pero no dónde. Un simple bit de paridad puede detectar cualquier error de un solo bit. La corrección de errores detecta y localiza el error, permitiendo al receptor corregirlo. Hamming(7,4) puede corregir cualquier error de un solo bit y detectar (pero no corregir) cualquier error de dos bits. La corrección requiere más redundancia que la detección.

¿Dónde se usan los códigos de corrección de errores en la práctica?

Los códigos de corrección de errores son ubicuos: las memorias ECC RAM usan códigos Hamming para corregir inversiones de bits; los códigos QR usan códigos Reed-Solomon para tolerancia a daños; los discos duros, SSDs y discos ópticos usan códigos LDPC y Reed-Solomon; las redes celulares 5G usan códigos polares y LDPC; las comunicaciones en el espacio profundo usan códigos convolucionales y turbo para mantener contacto a través de miles de millones de kilómetros.

Fuentes

View source on GitHub