Un code correcteur d'erreur est utilisé pour transmettre un message dans un canal bruité ; il permet de reconstituer le message émis même si des erreurs (en nombre limité), dues au bruit, ont altéré le message. L'alphabet source, comme l'alphabet du code, est . On s'intéresse au codage par blocs : chaque mot de longueur m est codé par un mot de longueur n avec . Le codage est donc une application de vers . Parmi les n bits du mot-code que nous allons décrire, m reproduisent le mot-source, les n-m autres sont les bits de correction : le taux de transmission est de n/m. On montre que si deux mots distincts du code diffèrent au moins en d bits, alors le code permet de corriger exactement erreurs.
Les codes de Hamming, pour lesquels n=2k-1 et m=n-k, permettent de
corriger une erreur ; pour k fixé et n grand, le taux de
transmission est voisin de 1. Leur description fait appel à l'algèbre
linéaire modulo 2, ou bien aux polynômes modulo 2. Un mot de p bits
est représenté par un vecteur binaire de longueur p, c'est-à-dire un
élément de l'espace vectoriel
(Z/2Z)p, par exemple
pour 110 :
La détermination d'une base du sous-espace d'équation Hc=0 permet de formuler le codage : si G est la matrice dont les lignes sont les vecteurs d'une telle base, Hc=0 équivaut à c=aG pour a, un vecteur-ligne de longueur m. Ainsi a est codé par c=aG ; on dit que G est la matrice génératrice du code.
Dans l'exemple précédent, on trouve facilement, par exemple :
Une autre technique pour construire ce code consiste à utiliser des polynômes primitifs. On note ainsi que la matrice H s'obtient en décomposant les monômes Xi, pour dans la base de l'espace vectoriel des polynômes à coefficients dans Z/2Z, et modulo P=1+X+X3. On a ainsi X3 = X+1, X4 = X2+X, X5 = X2+X+1, X6=X2+1 modulo P (ce polynôme est primitif car les monômes forment une base de cet espace vectoriel). Par construction de H, Hb est égal à modulo P. Il en résulte que les bits de correction sont obtenus en calculant le reste de la division euclidienne de par P. Pour le décodage, supposons qu'une erreur se soit produite sur le bit p. Au lieu de recevoir le polynôme Q, c'est Q+Xp qui est reçu. Le reste de la division euclidienne de Q+Xp par P est égal à Xp modulo P ; ceci permet de déterminer p, donc l'erreur.
Par exemple, un mot du code utilisé par le Minitel comporte 17 octets. Les 16 premiers forment un code de Hamming à 7 bits de correction : k=7, m=120 (soit 15 octets), n=127 ; le 128ème bit, dit bit de parité, est tel que le nombre de 1 dans ces 16 octets soit pair. Le 17ème octet est formé de 8 zéros ; il permet de détecter des incidents importants (par exemple, la foudre). On s'intéresse ici seulement aux 127 premiers bits. Ce code est défini, avec la méthode exposée ci-dessus, avec le polynôme P=X7 + X3 +1.