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.