El código Hadamard es un código de corrección de errores que lleva el nombre del matemático francés Jacques Hadamard y que se utiliza para la detección y corrección de errores al transmitir mensajes a través de canales muy ruidosos o poco fiables. En 1971, el código se utilizó para transmitir fotos de Marte a la Tierra desde la sonda espacial Mariner 9 de la NASA . [1] Debido a sus propiedades matemáticas únicas, el código Hadamard no solo lo utilizan los ingenieros, sino que también se estudia intensamente en la teoría de la codificación , las matemáticas y la informática teórica . El código Hadamard también se conoce con los nombres de código Walsh , familia Walsh , [2] y código Walsh-Hadamard [3] en reconocimiento al matemático estadounidense Joseph Leonard Walsh .
El código Hadamard es un ejemplo de un código lineal de longitud sobre un alfabeto binario . Desafortunadamente, este término es algo ambiguo, ya que algunas referencias suponen una longitud de mensaje mientras que otras suponen una longitud de mensaje de . En este artículo, el primer caso se denomina código Hadamard , mientras que el segundo se denomina código Hadamard aumentado .
El código Hadamard es único en el sentido de que cada palabra de código distinta de cero tiene un peso Hamming de exactamente , lo que implica que la distancia del código también es . En la notación de la teoría de codificación estándar para códigos de bloque , el código Hadamard es un código -, es decir, es un código lineal sobre un alfabeto binario , tiene longitud de bloque , longitud de mensaje (o dimensión) , y distancia mínima . La longitud de bloque es muy grande en comparación con la longitud del mensaje, pero por otro lado, los errores se pueden corregir incluso en condiciones extremadamente ruidosas.
El código Hadamard aumentado es una versión ligeramente mejorada del código Hadamard; es un código y, por lo tanto, tiene una velocidad ligeramente mejor manteniendo la distancia relativa de , y por lo tanto es el preferido en aplicaciones prácticas. En la teoría de la comunicación, esto simplemente se llama código Hadamard y es lo mismo que el código Reed-Muller de primer orden sobre el alfabeto binario. [4]
Normalmente, los códigos de Hadamard se basan en la construcción de matrices de Hadamard de Sylvester , pero el término "código de Hadamard" también se utiliza para referirse a códigos construidos a partir de matrices de Hadamard arbitrarias , que no son necesariamente del tipo de Sylvester. En general, un código de este tipo no es lineal. Dichos códigos fueron construidos por primera vez por Raj Chandra Bose y Sharadchandra Shankar Shrikhande en 1959. [5] Si n es el tamaño de la matriz de Hadamard, el código tiene parámetros , lo que significa que es un código binario no necesariamente lineal con 2 n palabras de código de longitud de bloque n y distancia mínima n /2. El esquema de construcción y decodificación descrito a continuación se aplica para n general , pero la propiedad de linealidad y la identificación con códigos de Reed-Muller requieren que n sea una potencia de 2 y que la matriz de Hadamard sea equivalente a la matriz construida por el método de Sylvester.
El código Hadamard es un código decodificable localmente , que proporciona una forma de recuperar partes del mensaje original con alta probabilidad, mientras que solo se observa una pequeña fracción de la palabra recibida. Esto da lugar a aplicaciones en la teoría de la complejidad computacional y particularmente en el diseño de pruebas probabilísticamente comprobables . Dado que la distancia relativa del código Hadamard es 1/2, normalmente solo se puede esperar recuperarse de como máximo una fracción de 1/4 del error. Sin embargo, utilizando la decodificación de listas , es posible calcular una lista corta de posibles mensajes candidatos siempre que se hayan corrompido menos de los bits de la palabra recibida.
En la comunicación de acceso múltiple por división de código (CDMA), el código Hadamard se conoce como código Walsh y se utiliza para definir canales de comunicación individuales . Es habitual en la literatura CDMA referirse a las palabras de código como "códigos". Cada usuario utilizará una palabra de código diferente, o "código", para modular su señal. Debido a que las palabras de código Walsh son matemáticamente ortogonales , una señal codificada con Walsh aparece como ruido aleatorio para un terminal móvil con capacidad CDMA , a menos que ese terminal utilice la misma palabra de código que la utilizada para codificar la señal entrante . [6]
El código Hadamard es el nombre que se utiliza con más frecuencia para este código en la literatura. Sin embargo, en el uso moderno, estos códigos de corrección de errores se conocen como códigos Walsh-Hadamard.
Hay una razón para esto:
Jacques Hadamard no inventó el código él mismo, pero definió las matrices de Hadamard alrededor de 1893, mucho antes de que se desarrollara el primer código de corrección de errores , el código Hamming , en la década de 1940.
El código Hadamard se basa en matrices de Hadamard, y si bien existen muchas matrices de Hadamard diferentes que podrían usarse aquí, normalmente solo se utiliza la construcción de matrices de Hadamard de Sylvester para obtener las palabras clave del código Hadamard.
James Joseph Sylvester desarrolló su construcción de matrices de Hadamard en 1867, que en realidad es anterior al trabajo de Hadamard sobre las matrices de Hadamard. Por lo tanto, el nombre de código de Hadamard es discutido y, a veces, el código se llama código de Walsh , en honor al matemático estadounidense Joseph Leonard Walsh .
Durante la misión Mariner 9 de 1971 se utilizó un código Hadamard aumentado para corregir errores de transmisión de imágenes. Los valores binarios utilizados durante esta misión tenían una longitud de 6 bits, lo que representaba 64 valores de escala de grises .
Debido a las limitaciones de la calidad de la alineación del transmisor en ese momento (debido a problemas con el bucle de seguimiento Doppler), la longitud máxima de datos útil era de unos 30 bits. En lugar de utilizar un código de repetición , se utilizó un código Hadamard [32, 6, 16].
Con este esquema se pueden corregir errores de hasta 7 bits por palabra de 32 bits. En comparación con un código de 5 repeticiones , las propiedades de corrección de errores de este código Hadamard son mucho mejores, aunque su tasa es comparable. El eficiente algoritmo de decodificación fue un factor importante en la decisión de utilizar este código.
El circuito utilizado se denominaba "máquina verde" y empleaba la transformada rápida de Fourier , que puede aumentar la velocidad de decodificación en un factor de tres. Desde la década de 1990, el uso de este código en los programas espaciales prácticamente ha cesado y la Red de Espacio Profundo de la NASA no admite este esquema de corrección de errores para sus antenas de más de 26 m.
Si bien todos los códigos de Hadamard se basan en matrices de Hadamard, las construcciones difieren de manera sutil en función de los distintos campos científicos, autores y usos. Los ingenieros, que utilizan los códigos para la transmisión de datos, y los teóricos de la codificación , que analizan las propiedades extremas de los códigos, normalmente quieren que la velocidad del código sea lo más alta posible, incluso si esto significa que la construcción se vuelve matemáticamente un poco menos elegante.
Por otra parte, para muchas aplicaciones de códigos Hadamard en la informática teórica no es tan importante lograr la tasa óptima y, por lo tanto, se prefieren construcciones más simples de códigos Hadamard ya que se pueden analizar con mayor elegancia.
Cuando se le da un mensaje binario de longitud , el código Hadamard codifica el mensaje en una palabra de código utilizando una función de codificación. Esta función hace uso del producto interno de dos vectores , que se define de la siguiente manera:
Entonces la codificación Hadamard de se define como la secuencia de todos los productos internos con :
Como se mencionó anteriormente, el código Hadamard aumentado se utiliza en la práctica ya que el código Hadamard en sí mismo es algo derrochador. Esto se debe a que, si el primer bit de es cero, , entonces el producto interno no contiene información alguna sobre , y por lo tanto, es imposible decodificar completamente solo a partir de esas posiciones de la palabra de código. Por otro lado, cuando la palabra de código está restringida a las posiciones donde , aún es posible decodificar completamente . Por lo tanto, tiene sentido restringir el código Hadamard a estas posiciones, lo que da lugar a la codificación Hadamard aumentada de ; es decir, .
El código Hadamard es un código lineal, y todos los códigos lineales pueden generarse mediante una matriz generadora . Esta es una matriz tal que se cumple para todos , donde el mensaje se ve como un vector de fila y el producto vector-matriz se entiende en el espacio vectorial sobre el cuerpo finito . En particular, una forma equivalente de escribir la definición del producto interno para el código Hadamard surge utilizando la matriz generadora cuyas columnas consisten en todas las cadenas de longitud , es decir,
donde es el -ésimo vector binario en orden lexicográfico . Por ejemplo, la matriz generadora para el código Hadamard de dimensión es:
La matriz es una -matriz y da lugar al operador lineal .
La matriz generadora del código Hadamard ampliado se obtiene restringiendo la matriz a las columnas cuya primera entrada es uno. Por ejemplo, la matriz generadora del código Hadamard ampliado de dimensión es:
Entonces es una aplicación lineal con .
En general , la matriz generadora del código Hadamard aumentado es una matriz de verificación de paridad para el código Hamming extendido de longitud y dimensión , lo que hace que el código Hadamard aumentado sea el código dual del código Hamming extendido. Por lo tanto, una forma alternativa de definir el código Hadamard es en términos de su matriz de verificación de paridad: la matriz de verificación de paridad del código Hadamard es igual a la matriz generadora del código Hamming.
Los códigos de Hadamard se obtienen a partir de una matriz de Hadamard de n por n H . En particular, las 2 n palabras de código del código son las filas de H y las filas de − H . Para obtener un código sobre el alfabeto {0,1}, se aplica la función −1 ↦ 1, 1 ↦ 0 o, equivalentemente, x ↦ (1 − x )/2 a los elementos de la matriz. Que la distancia mínima del código sea n /2 se deduce de la propiedad definitoria de las matrices de Hadamard, es decir, que sus filas son mutuamente ortogonales. Esto implica que dos filas distintas de una matriz de Hadamard difieren exactamente en n /2 posiciones y, dado que la negación de una fila no afecta la ortogonalidad, que cualquier fila de H difiere de cualquier fila de − H también en n /2 posiciones, excepto cuando las filas se corresponden, en cuyo caso difieren en n posiciones.
Para obtener el código Hadamard aumentado anterior con , la matriz Hadamard elegida H debe ser del tipo Sylvester, lo que da lugar a una longitud de mensaje de .
La distancia de un código es la distancia mínima de Hamming entre dos palabras de código distintas, es decir, el número mínimo de posiciones en las que difieren dos palabras de código distintas. Dado que el código Walsh-Hadamard es un código lineal , la distancia es igual al peso mínimo de Hamming entre todas sus palabras de código distintas de cero. Todas las palabras de código distintas de cero del código Walsh-Hadamard tienen un peso de Hamming de exactamente según el siguiente argumento.
Sea un mensaje distinto de cero. Entonces, el siguiente valor es exactamente igual a la fracción de posiciones en la palabra clave que son iguales a uno:
El hecho de que el último valor sea exactamente se denomina principio de subsuma aleatoria . Para comprobar que es cierto, supongamos sin pérdida de generalidad que . Entonces, cuando se condiciona a los valores de , el evento es equivalente a para algunos dependiendo de y . La probabilidad de que eso ocurra es exactamente . Por lo tanto, de hecho, todas las palabras de código distintas de cero del código Hadamard tienen un peso Hamming relativo , y, por lo tanto, su distancia relativa es .
La distancia relativa del código Hadamard aumentado también es así, pero ya no tiene la propiedad de que cada palabra de código distinta de cero tiene peso exactamente porque todos los vectores s son palabras de código del código Hadamard aumentado. Esto se debe a que el vector codifica a . Además, siempre que sea distinto de cero y no sea el vector , se aplica nuevamente el principio de subsuma aleatoria y el peso relativo de es exactamente .
Un código decodificable localmente es un código que permite recuperar un solo bit del mensaje original con alta probabilidad mirando solo una pequeña porción de la palabra recibida.
Un código es decodificable localmente si un bit del mensaje, , se puede recuperar comprobando bits de la palabra recibida. Más formalmente, un código, , es decodificable localmente si existe un decodificador probabilístico, , tal que (Nota: representa la distancia de Hamming entre los vectores y ) :
, implica que
Teorema 1: El código de Walsh-Hadamard es decodificable localmente para todos los .
Lema 1: Para todas las palabras de código, en un código Walsh-Hadamard, , , donde representan los bits en las posiciones y respectivamente, y representa el bit en la posición .
Sea la palabra clave correspondiente al mensaje .
Sea la matriz generadora de .
Por definición, . A partir de esto, . Por la construcción de , . Por lo tanto, por sustitución, .
Para demostrar el teorema 1 construiremos un algoritmo de decodificación y demostraremos su exactitud.
Entrada: Palabra recibida
Para cada uno :
Salida: Mensaje
Para cualquier mensaje, , y una palabra recibida que difiera de como máximo en una fracción de bits, se puede decodificar con una probabilidad de al menos .
Por el lema 1, . Puesto que y se eligen de manera uniforme, la probabilidad de que sea como máximo . De manera similar, la probabilidad de que sea como máximo . Por el límite de unión , la probabilidad de que o no coincidan con los bits correspondientes en es como máximo . Si ambos y corresponden a , entonces se aplicará el lema 1 y, por lo tanto, se calculará el valor adecuado de . Por lo tanto, la probabilidad se decodifica correctamente y es como mínimo . Por lo tanto, y para que sea positivo, .
Por lo tanto, el código Walsh-Hadamard es decodificable localmente para .
Para k ≤ 7, los códigos Hadamard lineales han demostrado ser óptimos en el sentido de distancia mínima. [7]