CORRECCIÓN DE ERRORES: METODO DE HAMMING Y REPETICIÓN

 

En algunas situaciones, poder detectar errores es suficiente porque es fácil solicitar la retransmisión de la información. Por ejemplo, en el caso del código de barras, si el lector de la caja del supermercado señala un error, no es nada costoso volver a pasar el producto por el lector (o hacerlo con otro envase del mismo producto) o ingresar el código manualmente .  

Sin embargo, hay otros casos donde la situación es muy distinta. Por ejemplo, el envío de información desde el espacio exterior (por ejemplo, imágenes tomadas por sondas satelitales), donde es impracticable la retransmisión si se detecta un error. Sin ir tan lejos, algo parecido ocurre en el caso de música grabada en un disco compacto: no es aceptable que cada vez que el lector detecte un error, simplemente lo señale y quede a la espera de nueva información para continuar reproduciendo el material. 

En estas situaciones se requieren métodos que permitan corregir automáticamente los errores. En la práctica, para realizar esta tarea, se utilizan códigos bastante sofisticados, que utilizan técnicas matemáticas más avanzadas. Aquí daremos un ejemplo muy sencillo para ilustrar la idea.


Una forma de representar la información utilizada por las computadoras es el sistema binario, donde cualquier número se escribe utilizando sólo dos dígitos, 0 y 1. Cada 0 y cada 1 se denomina bit (por dígito binario ). 

Volvamos a considerar la situación en la que hay dos mensajes posibles para enviar SI = 1 y NO = 0. Como ya mencionamos, duplicando la información enviada, es posible detectar un error. Para ser capaz de corregir errores, la idea es, nuevamente, agregar información redundante al mensaje. Si el mensaje se triplica, SI = 111 y NO = 000, podemos corregir un error. En este caso, los posibles mensajes enviados usando el código tienen sus tres bits iguales . Entonces si se recibe 101 y hubo exactamente un error, el error debe estar en el segundo bit (es la única manera de cambiar exactamente un bit y obtener un número con sus tres bits iguales) y lo corregimos cambiando el 0 por un 1. La idea es que 101 está “más cerca” de 111 que de 000.


Algo similar puede hacerse para enviar mensajes más largos y diversos, como ilustra el mural: a cada mensaje se lo representa por una tira de bits y se lo envía repetido tres veces. El receptor decodifica por la mayoría, es decir, mira los primeros bits de cada una de las tres repeticiones del mensaje y toma el que aparece más veces, hace lo mismo con el segundo bit de cada una de las tres repeticiones, y sigue así hasta completar la totalidad del mensaje. Si ocurrió un solo error, como en el caso anterior, este procedimiento lo corrige. En realidad, puede corregir más errores, siempre que hayan ocurrido en posiciones distintas: por ejemplo, si M =1100, se envía 1100 1100 1100 y se recibe 0110 1000 1101, el receptor también decodifica el mensaje como M).


Estos códigos se conocen como códigos de repetición y, aunque se utilizan en algunos contextos por su simplicidad, no son eficientes dado que requieren el envío de una proporción muy alta de información redundante (2/3 de los bits transmitidos). Un ejemplo de un código más eficiente para corregir un error es el código de Hamming (7,4), introducido por Richard Hamming en 1950, en el que se agregan sólo 3 bits adicionales por cada 4 bits de información del mensaje. 


En áreas como los CD o las sondas espaciales, se utilizan códigos de Reed-Solomon , introducidos en 1960 por Irving S. Reed y Gustave Solomon, cuya construcción requiere el uso de polinomios y estructuras algebraicas más complicadas.


No hay comentarios.:

Publicar un comentario