Code de Hadamard

Matrice du code de Hadamard augmenté [32, 6, 16] pour le code de Reed-Muller (1, 5) de la sonde spatiale Mariner 9 de la NASA

Le code de Hadamard est un code correcteur, nommé d'après Jacques Hadamard, à taux de transfert extrêmement faible mais à grande distance, couramment utilisé pour la détection et la correction d'erreurs lors de la transmission de messages sur des canaux très bruyants ou peu fiables.

Dans la notation standard de la théorie du codage pour les codes en bloc, le code de Hadamard est un code , c'est-à-dire un code linéaire sur un alphabet binaire, a une longueur de bloc de , la longueur (ou la dimension) du message , et une distance minimale . Bien que la longueur du bloc soit très grande par rapport à la longueur du message, les erreurs peuvent être corrigées même dans des conditions extrêmement bruyantes.

Ce code étant localement déchiffrable, c'est-à-dire qu'il est possible de récupérer des parties du message original avec une forte probabilité, tout en ne disposant que d'une petite fraction du message reçu, il possède de nombreuses applications dans la théorie de la complexité des calculs et en particulier dans la conception de preuves vérifiables par probabilité. De plus, comme la distance relative du code de Hadamard est de 1/2, il est en théorie possible de récupérer des messages avec au maximum 1/4 de bits erronés. Cependant, en utilisant le décodage par liste, il est possible de calculer une courte liste de messages candidats possibles tant que moins de des bits du message reçu ont été corrompus.

Grâce à ses propriétés mathématiques uniques, les codes Hadamard sont intensément étudiés dans des domaines tels que la théorie du codage, les mathématiques et l'informatique théorique, outre ses applications dans de nombreuses technologies et industries.

Histoire[modifier | modifier le code]

Bien que Jacques Hadamard n'ait pas inventé le code lui-même, il a défini la matrice de Hadamard vers 1893, bien avant que le premier code correcteur, le code de Hamming, ne soit développé dans les années 1940.

Le code de Hadamard est basé sur des matrices de Hadamard, et bien qu'il y ait beaucoup de matrices de Hadamard différentes qui pourraient être utilisées, normalement seulement la construction de Sylvester des matrices de Hadamard est utilisée pour obtenir les mots de code du code de Hadamard.

James Joseph Sylvester a développé sa construction, similaire aux matrices d'Hadamard, en 1867, ce qui est de fait antérieur aux travaux d'Hadamard sur les matrices d'Hadamard. Le nom de code de Hadamard est donc contesté et parfois le code est appelé code Walsh, en l'honneur du mathématicien américain Joseph Leonard Walsh.

Constructions[modifier | modifier le code]

Normalement, les codes Hadamard sont basés sur la construction de matrices Hadamard par Sylvester, mais le terme " code de Hadamard " est également utilisé pour désigner les codes construits à partir de matrices Hadamard arbitraires, qui ne sont pas nécessairement de type Sylvester. Le lien entre les matrices Hadamard et la théorie de la construction du code a été trouvé pour la première fois par R. C. Bose et S. S. Shrikhande en 1959[1].

Si est la taille de la matrice Hadamard, le code a les paramètres , ce qui signifie que c'est un code binaire pas nécessairement linéaire avec des mots de code de longueur de bloc et de distance minimale .

Les constructions et schémas de décodage décrits ci-dessous s'appliquent pour le général, mais la propriété de linéarité et l'identification avec les codes Reed-Muller exigent que soit une puissance de 2 et que la matrice Hadamard soit équivalente à la matrice construite par la méthode

Construction utilisant des produits scalaires[modifier | modifier le code]

Lorsqu'il reçoit un message binaire de longueur , le code de Hadamard encode le message en un mot de code à l'aide d'une fonction d'encodage Cette fonction utilise le produit scalaire de deux vecteurs , qui est défini comme suit:

Ensuite, l'encodage Hadamard de est défini comme la séquence de produits scalaires tous avec  :

Construction utilisant une matrice de générateur[modifier | modifier le code]

Le code de Hadamard est un code linéaire, et tous les codes linéaires peuvent être générés par une matrice de générateur . Cette matrice est telle que est valable pour tous les , où le message est vu comme un vecteur ligne et le produit vecteur-matrice est compris dans le espace vectoriel sur le champ fini. . En particulier, une manière équivalente d'écrire la définition interne du produit pour le code de Hadamard consiste à utiliser la matrice du générateur dont les colonnes sont constituées de chaînes de caractères " toutes " de longueur , c'est-à-dire,

est le -ième vecteur binaire dans ordre lexicographique. Par exemple, la matrice génératrice pour le code de Hadamard de dimension est:

La matrice est une matrice et donne lieu à l'opérateur linéaire .

Une autre façon de définir le code de Hadamard est en termes de matrice de contrôle de parité : la matrice de contrôle de parité du code de Hadamard est égale à la matrice de génération du code de Hamming.

Construction utilisant des matrices Hadamard générales[modifier | modifier le code]

Les codes Hadamard généralisés sont obtenus à partir d'un matrice de Hadamard . En particulier, les mots de code du code sont les lignes de et les lignes de . Pour obtenir un code sur l'alphabet , le mapping , , ou, de manière équivalente, , est appliqué aux éléments de la matrice. Le fait que la distance minimale du code soit découle de la propriété de définition des matrices de Hadamard, à savoir que leurs lignes sont mutuellement orthogonales. Cela implique que deux lignes distinctes d'une matrice Hadamard diffèrent exactement par leurs positions , et, comme la négation d'une ligne n'affecte pas l'orthogonalité, que toute ligne de diffère de toute ligne de par ses positions également, sauf lorsque les lignes correspondent, auquel cas elles diffèrent par leurs positions .

Distance[modifier | modifier le code]

La distance d'un code est le minimum distance de Hamming entre deux mots de code distincts, c'est-à-dire le nombre minimum de positions auxquelles deux mots de code distincts diffèrent. Comme le code de Hadamard est un code linéaire, la distance est égale au minimum poids de Hamming entre tous ses mots-codes non nuls.

Dans les lignes qui suivent, nous allons demonstrer que a un poids égal à . Considérons un message . Soit sa ième entrée est codé comme , où est la représentation binaire de , c'est-à-dire qu'il contient tous les vecteurs de . Notez également que le -ième bit des mots de code c est . Regrouper toutes les colonnes de la matrice du générateur en paires de sorte que (c'est-à-dire que v et u sont les mêmes sauf en position ième). Notez que cela partitionne toutes les colonnes en paires disjointes . Ensuite,

Ainsi, nous avons exactement celui de et est 1. Comme le choix de la paire était arbitraire, nous avons prouvé que pour tout mot de code c non nul tel que .

Localement déchiffrable[modifier | modifier le code]

Un code localement déchiffrable est un code qui permet de récupérer un seul bit du message original avec une forte probabilité en ne regardant qu'une petite partie du mot reçu. Plus formellement, le problème de déchiffrement local peut être décrit comme :

Déchiffrement local : Soit un code et la carte de codage soit . Étant donné et tel que pour quelques . Trouve .

Une question naturelle à se poser serait si on doit le faire tourner pendant le temps  ? Et la réponse à cette question est non. Pour pouvoir répondre à cette question, nous allons mesurer la complexité d'un algorithme de déchiffrement basé sur le nombre d'emplacements interrogés par l'algorithme à partir du mot entré/reçu.

Selon le modèle d'accès aléatoire, c'est-à-dire que l'accès à un emplacement donné dans un mot reçu est compté comme une opération. Nous définirons une classe de codes décodables basée sur le nombre d'emplacements auxquels un algorithme doit accéder afin de récupérer un emplacement donné d'un message et une fraction des erreurs qu'il peut tolérer.

Définition (()-code déchiffrement localement). , avec une carte de codage , est (t,)-code localement déchiffrable s'il existe un algorithme tel que pour tous les messages , et tel que ,

et accède au maximum aux coordonnées de à partir de .

Algorithme[modifier | modifier le code]

  1. Choisissez uniformément au hasard
  2. Requête à la position marquée par et
  3. Sortie

Analyse[modifier | modifier le code]

Une fois reçue la sortie de l'algorithme ci-dessus, nous pouvons obtenir :

mod

mod

mod

S'il n'y a pas d'erreur aux positions et , alors il est possible de récupérer le bit de . Puisque , la probabilité d'erreur à une seule position est . Par l'Inégalité de Boole, la probabilité d'obtenir une erreur à et n'est pas supérieure à la somme des probabilités des deux événements, dans ce cas particulier étant . Au total, la probabilité de déterminer le bit par du message est supérieure au complément d'obtention d'une erreur, c'est-à-dire .

Optimalité[modifier | modifier le code]

Pour les codes Hadamard linéaires se sont avérés optimaux dans le sens de la distance minimale[2].

Applications réelles[modifier | modifier le code]

Le 14 novembre 1971, le vaisseau spatial Mariner 9 est entré en orbite autour de Mars et a commencé à prendre des photos. Un code de Hadamard amélioré a été utilisé pendant la mission pour corriger les erreurs de transmission des images. Les mots de données utilisés au cours de cette mission étaient de 6 bits, ce qui représentait 64 valeurs de niveaux de gris. En raison des limites de la qualité de l'alignement de l'émetteur à ce moment-là (à cause des problèmes de la boucle de poursuite du Doppler), la longueur maximale des données utiles était d'environ 30 bits. Au lieu d'utiliser un code de répétition, une code de Hadamard a été utilisé.

Notes et références[modifier | modifier le code]

  1. Richard Hamming error-detecting and error-correcting codes Bell System Technical Journal 29(2):147-160, 1950
  2. Iliya Bouyukliev et David B. Jaffe, « Optimal binary linear codes of dimension at most seven », Discrete Mathematics, vol. 226, no 1,‎ , p. 51–70 (ISSN 0012-365X, DOI 10.1016/S0012-365X(00)00125-4, lire en ligne, consulté le )

Liens externes[modifier | modifier le code]

Bibliographie[modifier | modifier le code]

  • (en) Amadei M., Manzoli U. et Merani, M.L. On the assignment of Walsh and quasi-orthogonal codes in a multicarrier DS-CDMA system with multiple classes of users, IEEE, 2002, (ISBN 0-7803-7632-3)
  • (en) Arora S. et Barak B., Computational Complexity: A Modern Approach, Cambridge University Press, 2009, (ISBN 9780521424264)