Académique Documents
Professionnel Documents
Culture Documents
1 Intoduction et Motivations
Par codes, on peut entendre plusieurs concepts distincts :
Dans la grande majorité des cas, une transmission de données se fait en utilisant une voie de
communication qui n’est pas entiérement fiable : le canal de communication. Autrement dit,
les données, lorsqu’elles circulent sur une voie, elle sont susceptibles d’être altérées. la situation
classique est decrite par la figure suivante :
Par conséquant , il faut des mécanismes de détection et de correction de ces erreurs (bruit).
La théorie des codes correcteurs d’erreurs introduite par C. Shannon (1947) est conçu pour
1
fiabiliser les (télé-)communication (numériques) dans un environnement bruitée. La situation
est décrite par la figure suivante :
Comment ?
En ajoutant de la redondance à l’information transmise.
En corrigeant les erreurs quand le message reçu est corrompu/erroné.
On utilise les codes correcteurs d’erreurs pour :
• DVD, CD : réduisent les effets de la poussière (voire plus). . .
• téléphone portable : améliorent la qualité de la communication.
• Internet (Protocole TCP/IP qui permet de communiquer de facon fiable )
• Identification des livres (code ISBN), Identification bancaire (RIB), etc...
• cryptographie (cryptographie post-quantique)
— La correction par retransmission (ARQ) Automatics Repeat reQuest : une erreur est
détectée mais ne peut être corrigée, le recepteur demande à l’émetteur de retransmettre
une nouvelle fois le message source.
2
DVD, CD : réduisent les effets de la poussière (voire plus)... Dans le cas du disque compact,
les erreurs peuvent être causées par des rayures ou des impuretés du support, elles sont moins
fréquentes mais beaucoup plus volumineux. Le code utilisé corrige jusquà 4096 bits consécutifs
soit une rayure de plus d’un millimétre de large (dans certaine société la norme impose la
capacité de correction d’erreurs dans le cas d’une rayure de 0,2 milimètre)
Code ISBN A chaque livre est affecté un code appelé ISBN (pour International Standard
Book Number). C’est un numéro qui identifie tous les livres édités dans le monde. il figure en
dos de couverture. Il s’agit de dix chiffres regroupés en quatre segments séparé par un tiret (ou
un point). Le premier groupe de chiffre identifie le pays, le groupe de chiffre suivant indique
l’éditeur, le groupe suivant le numéro du livre chez l’éditeur. Le dernier chiffre est la clef de
contrôle, anologue au bit de parité en binaire. Il est obtenu en calculant 9i=1 ixi modulo 11.
P
C’est soit un chiffre entre 0 et 9, soit la lettre X qui représente 10. Soit k cette clef, elle est
telle que
9
X
k = 11 − ixi mod 11
i=1
Par exemple, le code ISBN de Codes Correcteurs d’Erreurs : Une Introduction au Codage
Algébrique est
2 − 225 − 82538 − 6
Le code ISBN permet de :
- detecter s’il y a une erreur dans le numero
- retrover un numero effacé
- detecter une permutation de deux chiffres
La clé RIB Un numéro RIB ( Relevé d’Identité Bancaire ) de compte bancaire B −G−N −R
comporte 23 caractère. B et G sont des nombres de 5 chiffres qui identifient respectivement le
code banque et le code guichet. N est le numéro de compte est composé de 11 alphanumériques
que l’on convertit en une séquence SN de 11 chiffres en remplacant les lettres éventuelles cycli-
quement comme suit : A et J par 1 ; B, K et S par 2 ; C, L, T par 3 ; D, M, U par 4 ; E, N, V
par 5 ; F, O, W par 6 ; G, P, X par 7 ; H, Q, Y par 8 ; I, R, Z par 9. Enfin la clé RIB R est un
nombre de deux chiffres qui est tel que R = 97 − ([BGSN ]X100)mod 97.
3
Comme indiqué ci dessus le numero du RIB comporte 23 caracteres. Soit
Ce numero peut comporter à la fois ds lettres et des chiffres. Pour utiliser l’algorithme de calcul
il est necessaire de transformer les lettres en chiffres en utilisant la correspondance ci dessus.
La clé R est calculée de telle sorte que le reste de la division entière de K par 97 est nul et
1 6 R 6 97. Autrement
K ≡ 0 mod 97 1 6 R 6 97
Si l’algo doit fonctionner sur 32 bits, du fait de la longueur du numero du compte N ( 11 chifres
x 3 ! !), le numéro du compte sera séparé en deux. Ainsi on a :
K = x1 ..x5 x6 ..x10 x11 ..x16 x17 ..x21 x22 x23 = B1018 + G1013 + M 107 + N 102 + R.
La formule de calcul de R devient :
4
Communication sans fil ( GSM, satelite, sous marine) : améliorent la qualité de la com-
munication. Dans ce cas la correction par ARQ peut se revéler insuffisante et inadaptée.
c0 = M ⊕ e
avec e une erreur aléatoire de poids la capacité de correction du code et M est une
fonction de m. Connaissant c0 retrouvé M est une correction d’erreur.
*Identification : impossibilté de se faire passer pour quelqu’un d’autre
Avec le probléme du décodage par syndrôme, un système d’identification a divulgation de
connaissance zero ( ou encore sans fuite d’information : prouver que l’on a la connaissance d’un
5
secret sans transferer cette connaissance).
←→
(u1 , ..., uk , v1 , ..., vr )
n=k+r
(u1 , ..., uk , v1 , ..., vr ) est un mot code.
y 0 = ϕ(y1 , ..., yk )
0
= (yk+1 , ..., yn0 )
6
• Si S(y) = 0, on est sûr que y est un mot de code mais apparemment, rien ne nous
garantit que y est le mot envoyé. Une telle situation nécessite le choix d’un bon code i.e.
un code C pour lequel la probabilité qu’un mot appartient à C ne soit pas envoyé est trés
faible.
• Shannon à l’aide de ses travaux sur la théorie de l’information nous assure l’existence
théorique de tels codes : Soit un canal sans mémoire de capacité K. Pour tout
ε, ε > 0, et pour tout R0 , R0 < K, il existe un code C de taux R > R0 qui
vérifie la contrainte de performance sur la probabilité : Pe (C) < ε.
D’une maniére plus prosaïque :
On peut transmettre à tout taux R inférieur à la capacité du canal avec une probabilité
d’erreur "evanescente" (c’est à dire bornée par une quantité ε arbitrairement petite).
• Pour la suite les codes considérés sont des codes linéaires en bocs, c’est ad́ire des espaces
vectoriels. Cependant il existe des codes non linéaires.
k = dimFq C
Définition 1.4 : Soit Fq ; pour deux éléments x = (x1 , ..., xn ) et y = (y1 , ..., yn ) ∈ Fnq , on
appelle distance de Hamming de x et y, le nombre de compsosantes pour lesquelles x et y dif-
férent. Elle se note :
d(x, y) = Card({i ∈ {1, ..., n} / xi 6= yi })
F4 = {0, 1, 2, 3} et n = 5
Exemple 1.5 : x = (0, 1, 2, 3, 1) et y = (0, 2, 1, 3, 1)
dH (x, y) = 2
d : Fnq × Fnq −→ N
(x, y) 7−→ d(x, y)
définie bien une distance De plus si F est additif alors, on a : d(x + z, y + z) = d(x, y).
Remarque 1.7 : Cette distance de Hamming permet de caractériser le nombre d’erreur que le
code C peut corriger. En effet, soit c ∈ C un mot de code émis et soit y le mot reçu, supposé
différent de c ( donc d(c,y)>0) :
1) Il est nécessaire que y ∈
/ C pour que C puisse détecter une erreur, si non il sera considéré
comme un mot de code donc correcte.
2) Pour pouvoir corriger, il faut que c soit l’unique mot de C le plus proche de y ; c’est à dire :
∀x ∈ C : x 6= c → d(x, y) > d(c, y).
Ce qui se traduit par la propriété suivante :
Soit C un code de longueur n, C est t-correcteur (s’il permet de corriger t erreurs ou moins)
si : ∀x ∈ F, card({c ∈ C/d(x, c) 6 t}) 6 1
7
On peut utiliser des notions de boules pour définir la détection et la correction d’erreur :
Soit Fq un corps de q et r un entier, x ∈ Fnq . Alors le sous - ensemble Bn,q (x, r) = {y ∈
Fnq /d(x, y) 6 r} est appelé boule de centre x et de rayon r.
Lemme 1.8 : Soit r ∈ N, pour chaque x ∈ Fnq , le cardinal de la boule Bn,q (x, r) est :
r
Cnj (q − 1)j
X
Card Bn,q (x, r) =
j=0
Exemple 1.10
B((1, 1)1) = {(1, 1), (1, 0), (0, 1)}
B((1, 0)1) = {(1, 0), (0, 0), (1, 1)}
B((1, 1), 2) = {(1, 1), (0, 0), (1, 0)(0, 1)} = F2
Remarque 1.13 : Pour un bon code les éléments c de C sont choisis de façon qu’ils restent
distingables même une fois altérés, ie qu’ils puissent être corrigés même si une erreur intervient
lors de la transmission. Ces mots de code doivent être suffisamment éloignés les uns des autres.
Donc la distance entre les mots de code doit être aussi grande que possible ; ce qui suggère l’in-
troduction de la notion distance minimale d’un code
Définition 1.14 La distance minimale d’un code est la plus petite distance entre les mots de
code de C. On le note
d(C) = mind(x, y)
(x, y) ∈ C 2 , x 6= y
Proposition 1.16 (Propriété des distances et des poids) Si C est un code linéaire, l’ensemble
des distances entre les mots de C est l’ensemble des poids des mots de C.
8
Démonstration :
Soit x, y ∈ C , alors x − y ∈ C car C est un espace vectoriel, or d(x, y) = w(x − y). Donc toure
distance est un poids d’un mot de C.
Réciproquement si x est un mot de C, on sait que W (x) = d(x, 0). Donc tout poids est une
distance de mots de C.
Conséquences :
La distance minimale d’un code linéaire est le poids minimal des mots non nuls du code.
En effet soit x, y deux mots de C tels que d(C) = d(x, y). Si W (C) est le poids minimal, alors
d(C) = W (x − y) > W (C).
D’autre part W (C) = W (z) = d(z, 0) > d(C).
D’oú d(C) = W (C).
Remarque 1.17 Cette conséquence nous donne une amélioration dans la recherche de la dis-
2
tance minimale qui est le cardinal de C-1 ((Card(C) − 1 opérations) au lieu de CCard(C) =
1
2
Card(C)(Card(C) − 1) opérations).
Exercice 1.19 :
a) F = F2 = {0, 1}, n = 4
C = {1 1 0 1, 1 0 0 0, 0 0 1 1}
1) Est - ce que C peut détecter et corriger une erreur
2) Est - ce que C peut détecter et corriger 2 erreurs
3) Calculer d(C).
b) F2 = {0, 1} et n = 4
C = {1110 0000}
1) Est - ce que C peut détecter et corriger 1 erreur
2) Est - ce que C peut détecter et corriger 2 erreurs.
3) Calculer d(C).
Remarque 1.22 Les inégalités du théorème ci-dessus, suggérent de chercher la plus grande
valeur de e vérifiant la relation d > 2 e + 1. Un tel e est appelé capacité de décodage ou de
correction.
Supposons que d est pair, (d = 2p)
2e + 1 = 2p impossible
2e + 1 = 2p − 1 =⇒ e = p − 1
9
La meilleure e possible est e = p − 1.
Supposons que d = 2p + 1
=⇒ 2e + 1 = 2p + 1.
la meilleure e possible
! est e = p : donc
d(c) − 1
e=E quelle que soit la valeur de d.
2
!
d(c) − 1
Un code C de distance minimale d(C) est susceptible de corriger e = E , Cette pro-
!
2
d(c) − 1
position signifie que si le mot reçu y comporte e = E , il est possible sans ambiguité
2
de déterminer le mot de code c émis. procéde de la manière suivante.
Paramétres Relatifs
Définition 1.23 : Soit C un code linéaire de longueur n, de dimension k et de distance mini-
male d le taux d’information du code C est définie par
k
R=
n
et la distance relative est définie par
d
δ= .
n
Le taux d’information et la distance minimale sont des nombres rationels contenus dans [0, 1].
Le taux d’information quantifie l’éfficacité du code. Il est le rapport entre les bits d’information
et les bits envoyés. Un taux proche de 0 correspond á un code trés redondant qui nécessite
une énorme énergie pour transmettre un message court. Un taux proche de 1 correspond á un
code éfficace pour lequel le rapport des informations pures dans la chaine de bits transmise
est proche de 1. D’autre part, la distance relative quantifie la capacité théorique á corriger les
erreurs. Plus on se rapproche de 1, plus on peut théoriquement corriger d’erreurs. Plus δ se
rapproche de 1, plus on peut théoriquement corriger d’erreurs.
De toute évidence, notre objectif est que le taux et la distance relative soient proches de 1.
Malheureusement, ces exigences sont contradictoires. En effet, comme nous le verrons dans les
prochains chapitres, plusieurs bornes supérieures impliquent l’impossibilité d’avoir á la fois le
taux et la distance relative proches de 1. Le plus célébre d’entre elles est la soi-disante borne
de Singleton qui affirme que
1
R+δ 61+ .
n
Ainsi, "un bon code" sera un code admettant un bon compromis entre ces deux paramétres .
Une autre conclusion de cette observation est qu’il est impossible de coder efficacement c’est á
dire avec une faible redondance et de corriger de nombreuses erreurs. Ainsi, le choix des codes
dépendra de la situation dans laquelle ils sont ës : par exemple, si le canal est trés bruyant,
nous choisirons probablement un code avec une grande distance minimale, meme si son taux est
faible. D’autre part, certains appareils nécessitent une limitation de la consommation d’énergie,
et vont donc encourager l’utilisation d’un code de taux élevé. Notez que de nombreux autres faits
doivent etre pris en compte. Par exemple, dans certaines communications, on peut demander
á l’expéditeur de renvoyer un bloc corrompu. Dans une telle situation, si cette "opération de
renvoi" est facile á effectuer, vous pouvez alors choisir un code á taux élevé. D’autre part,
10
cette "opération de renvoi" peut etre impossible dans les communications á longue distance,
par exemple avec des engins spatiaux. Comme nous le verrons dans le chapitre sur les codes de
Reed Muller, la Nasa a utilisé un code [32, 6, 16]2 pour recevoir des photos de Mars provenant
de la sonde spatiale Mariner IX. En utilisant ce code, la Nasa pourrait corriger jusqu’á 7 erreurs
par bloc alors que le taux est plutot faible (0,375). Meme si l’engin spatial avait une mémoire
et des ressources énergétiques limitées, il était important de pouvoir corriger un grand nombre
d’erreurs car il n’y avait aucune interaction possible avec l’engin spatial et qu’il n’était donc
pas possible de lui demander de renvoyer une photo corrompue.
Les paramétres désignés Il est fréquent que, pour un code donné, les paramétres exacts
soient inconnus mais que leurs bornes inférieures soient connues. Dans cette situation, ces bornes
inférieures sont appelées les paramétres désignés. Notez qu’en général, la dimension est connue
ou peut etre calculée par élimination gaussienne. D’autre part, on remarquera en outre que le
calcul de la distance minimale d’un code est un probléme algorithmique complexe. Ainsi, il est
fréquent de traiter des codes dont la distance minimale réelle est inconnue, alors qu’une borne
inférieure, c’est á dire une distance minimale désignée, est connue. Cette distance désignée
est fondamentale car, en général, les algorithmes de décodage corrigent les erreurs dés que leur
nombre est inférieur á la moitié de la distance désignée et ne dépasse pas la moitié de la distance
réelle (inconnue).
Les codes non linéaires On peut plus généralement définir un code correcteur d’erreur en
tant que sous-ensemble C de Fq . Pour les codes non linéaires, on peut toujours définir une
distance minimale en utilisant (1.14) mais faites attention de ne pas utiliser (1.16), ce qui est
en général non pertinent pour les codes non linéaires. Au lieu de traiter avec la dimension qui
ne peut pas etre définie si le code n’est pas un espace vectoriel, on peut considérer le nombre de
mots de code, ce qui est souvent désigné par M. Ensuite, un analogue naturel pour la dimension
est logq (M ).
Bien que la théorie des codes non linéaires soit riche et sujette á de nombreux développements
intéressants, nous traitons principalement des codes linéaires dans ce cours. L’utilisation et
l’intéret des codes linéaires seront motivés dans la section 1.1.4. A partir de maintenant, le
terme code signifiera toujours code linéaire.
Définition 1.24 (Matrice génératrice ) On appelle matrice génératrice d’un (n, k, d) code li-
néaire sur Fq , la matrice l × n sur Fq G, avec l > k, dont les lignes forment une famille
génératrice de C. C’est á dire
Ainsi le code est l’ensemble des mots c ∈ Fnq tel que c = m ∗ G avec m ∈ Fkq .
C = {m ∗ G / m ∈ Flq }
11
Définition 1.25 (Matrice de controle ) On appelle matrice de controle d’un (n, k, d) code li-
néaire sur Fq , la matrice (n − l) × n sur Fq H, avec l > k, dont le ker est égal á C. C’est á
dire
C = {x ∈ Fnq /H ∗ xt = 0}
Remarque 1.26 Fréquemment dans la littérature, une matrice génératrice est définie comme
une matrice k × n dont les lignes forment une base de C et une matrice de controle de parité est
définie comme une matrice ((n − k) × n) dont le noyau est C. Pour de nombreuses raisons, qui
apparaissent dans ce qui suit, nous avons choisi cette définition plus générale. Nous parlerons
de matrice génératrice de rang complet (resp. Matrice de controle de rang complet) lorsque la
matrice a k (resp. n − k) lignes.
Remarque 1.27 Il est á noter que l’on ne peut pas dire "la matrice génératrice de C" mais
"une matrice génératrice de C". En effet, si G est une matrice génératrice de C, l × n sur Fq ,
alors pour toutes matrices S inversibles l × l, la matrice SG est une autre matrice génératrice.
Ainsi, une telle matrice n’est pas unique. Pour la meme raison, une matrice de controle de
parité n’est pas unique non plus.
Une motivation d’utiliser les codes linéaires La description ci dessus description est
en fait la principale motivation d’utiliser des codes linéaires au lieu de codes non linéaires. En
effet, les matrices génératrice ou de controle fournissent une description trés "compacte d’un
code". Pour comparer, si nous devons décrire un code non linéaire, nous devons lister tous ses
mots de code. Si ce code est binaire (défini sur F2 ) et contient M mots, il faut nM bits pour
le décrire complétement. Par contre, si le code est linéaire, la représentation par une matrice
génératrice ne nécessite que nk = nlog2 (M ) bits. Ainsi, la taille de la mémoire nécessaire pour
stocker un code non linéaire de M mots est exponentiellement supérieure á la taille nécessaire
pour stocker un code linéaire avec le meme nombre de mots.
Codes systématiques
Définition 1.28 (Matrice génératrice systématique). Soit C un code linéaire dans Fnq et G une
matrice génératrice k × n sur Fq de rang complet de C. La matrice G est dite systématique si
elle est de la forme :
G = (Ik , A).
oú A est une matrice k × (n − k) sur Fq et Ik la matrice identité d’ordre k. Un code C est dit
systématique si une des ces matrices genératrices est systématique.
Remarque 1.29 Si G = (Ik , A) alors H = (−tA , In−k . Tout code linéaire n’est pas systéma-
tique, par contre il est systématique a une permutation prés.
Le lemme suivant caractérise les codes systématique :
Lemme 1.30 Un code C dans Fnq est systématique si et seulement si, pour toute matrice géné-
ratrice G de rang complet de C, les k premiéres colonnes de G sont linéairement indépendantes,
ou de maniére équivalente, le déterminant d’ordre k composé des k colonnes les plus á gauche
de G est non nul.
12
Preuve : Notons d’abord si G et G0 sont deux matrices génératrice du code C, alors il existe
une matrice inversible P d’ordre k telle que G = P G0 . Donc si le déterminant d’ordre k composé
des k colonnes les plus á gauche de G est non nul, alors il en est de meme pour G0 .
Si C est un code systématique, alors C admet une matrice génératrice systématique dont les
k premiéres colonnes sont naturellement indépendantes puisque étant la base canonique de
Fkq . Inversement si C admet une matrice génératrice G dont les k premiéres sont linéairement
indépendants, alors
G = (L, M )
où L, est une matrice k × k inversible et M une matrice k × r(r=n-k). Posons G00 = L−1 G
donc G00 = (Id , | T = L−1 M ) (cette matrice peut etre obtenue par une élimination de Gauss).
L’action du produit de L−1 par G est de remplacer chaque ligne de G par une combinaison de
lignes de G, donc G00 est une matrice génératrice systématique du code C
Remarque 1.31 Soit C un code de matrice genératrie de rang complet G , le codage se fait
par l’intermédiare G. En effet un code linéaire est entièrement déterminé par G. A tout mot
m de longueur k (le message) on associe le mot de code de longueur n, c = m ∗ G donc on a
l’application de codage qui est representée par :
φ : Fkq −→ Fnq
m 7−→ c = m ∗ G
Lemme 1.32 Soit C un code systématique sur Fq . Alors admet une unique matrice génératrice
si elle existe.
Preuve . Soit G et G0 deux matrices génératrice systématique du codes C. Alors il existe une
matrice P inversible d’ordre k sur Fq telle que :
G = P G0 .
Puisque les deux matrices ont Ik comme bloc de gauche, l’égalité ci dessus implique que P = Ik .
Lemme 1.33 Soit un code linéaire (n, k) sur Fq de matrice de contrôle H. Alors la distance
minimale de C est d si et seulement si tous d−1 colonnes de H sont linéairement indépendantes
et que d colonnes de H sont linéairtement dépendantes.
13
Preuve Si C1 , C2 , ..., Cn sont les colonnes de H, alors si x = (x1 , ..., xn ) ∈ Fnq on a :
C1 C2 ... Cn x1
t
. .. .. .
..
H x= . .. = C1 x1 + C2 x2 + ...Cn xn
.
xn
Si x est dans C alors on a Hxt = 0.Donc il existe dans C un mot de poids r s’il existe une
combinaison linéaire de r colonnes de H qui est nulle. En particulier, le poids minimal de C
est le plus petit entier non nul r tel qu’il existe une combinaison linéaire( de coefficients non
nuls ) de r colonnes de H qui est nul. Autrement dit, r est le plus grand entier tel que tout
sous-ensemble de r − 1 colonnes de H est linéairement indépendante.
0 0 0 1 −1
D’une maniere générale, pour tout entier n et pour tout corps fini, on peut définir le code á
répition comme le code de matrice génératrice G = (111...1) avec G une matrice 1 × n. Un tel
code est de longueur n, de dimention 1 et de distance minimale n. En effet les mots non nuls
d’un tel code sont de la forme (aa...a) pour a ∈ F∗q . On a pour ce code :
• Il est un code [n, 1, n]q
1
• Son taux d’information est Rn = en particulier la limite de Rn quand n tend vers plus
n
infini est égal á 0.
n−1
• Pour chaque bloc, on peut corriger jusqu’á [ ]. En effet étant donné un mot y ∈ Fnq
2
n−1
recu avec moins de [ ], trouver l’unique élément a ∈ Fq tel que la majorité des
2
composantes de y sont égales á a ; alors le message envoyé est (aa...a).
En conclusion, ce code a un mauvais taux d’information (asymptodiquement égal á zéro), mais
il a une bonne capcité de correction.
14
1.2.2 Le code de parité
Le code de parité est l’image de l’application de codage suivant :
φ : Fqn−1 −→ Fnq
n−1
X
(x1 ...xn−1 ) 7−→ (x1 ...xn−1 , xi )
i=1
Les matrices
génératrice et de controle
sont définies de la maniére suivante :
1 −1 0 0 . . 0
0 1 −1 0 . . 0
G=
et H = (11..11). Si q = 2, alors le code est l’ensemble des
0 . . . . 1 −1
mots dont le nombre de 1 est paire, ce qui justifie le nom de code de parité. Ces proporiétés
sont :
• Ces paramétres sont [n, n-1, 2] ;
2
• En particulier, sa distance relative est δn = et donc sa limite quand n tend vers plus
n
l’infini est égale á zéro.
• Le code n’est pas correcteur d’erreur, mais il est détecteur : Il peut détecter une erreur
Remarque 1.35 La matrice génératrice du code á répétition est la matrice de controle du code
de parité et vice versa. On vera dans le chapitre sur la dualité que ces codes sont duaux l’un de
l’autre.
1 0 1 0 1 0 1
Les colonnes de H sont choisies suivant l’ordre naturel décroissante d’écriture binaire numéro
de chaque colonne de 1 à 7. Par exemple 1 = 0 22 + 0 21 + 1 20 .
Théome 1.39 Soit C un code Harming binaire de longueur 2r − 1 avec r > 2, alors on a :
1) C est un code (2r − 1, 2r − r − 1) = (n, k).
2) C est de distance minimale 3.
3) C peut détecter 2 erreurs et corriger 1 erreur.
4) C est parfait.
15
Démonstration
1) Par définition sa matrice de contrôle est r × 2r − 1 i.e n = 2r − 1 et n − k = r, k = n − r =
2n − 1 − r.
2) Puisque le code de Harming est linéaire, si le code C contient un mot de poids 1, on a
C = (0...0, 1, 0...0) donc H t C = 0 ⇐⇒ C i = 0.(Ci est la colonne numéro i de H)
Ceci veut dire que H contient une colonne nulle. Ce qui est faux. Si C contient un mot de poids
2 on a C = (0....010.....010.....0) H t C = Ci + Cj = 0. Dans H deux colonnes sont identiques
ce qui est faux. Par conséquent d(C) > 3 (1).
D’autre
part
0 0 0 ... ...
0 0 0 ... ...
. ..
H= .. .
0 1 1 ... ...
1 0 1 ... ...
C1 + C2 + C3 = 0, donc C contient un mot de poids 3 d’où d(C) 6 3 (2). De (1) et (2) on a
d(C) = 3.
3) évident d’aprés 2).
1
Cnj (q − 1)j = q n
X
4) |C|
j=0
1
Cni = 2n−r (1 + n) = 2n−r (1 + 2r − 1) = 2n . Donc le code est parfait.
X
|C|
i=0
1 0 1 0 1 0 1
y = (1101011).
16
S(y) = H t y = (110) = 6 (en base binaire).
Donc erreur à la position 6.
ŷ envoyé = (1101001).
17
Exemple 1.40 Exemple numérique d’un code de Hamming de longueur 7 sur F2
18
1.3 Construction de nouveaux codes
1.3.1 Codes Etendus
Définition 1.41 Soit C ∈ Fnq un code contenant au moins un mot c ∈ C tel que c1 + c2 + . . . +
cn 6= 0. Le code étendu de C est le codes :
n
X
Ext(C) = {(c1 , . . . , cn , − cj )/c = (c1 , . . . , cn ) ∈ C}
j=1
Les mots du code étendu vérifie le fait que la somme de leurs composantes est toujours nulle.
En Magma la commande ExtendCode(C, n) retourne le code C, n fois étendu.
Proposition 1.42 Soit C ∈ Fnq un code de longueur n de matrice de parité H, une matrice
l × n. Alors la matrice (l + 1) × (n + 1) ; H 0 est une matrice de parité du code Ext(C).
Exemple 1.43 E est le code étendu du code Hamming C dans l’exemple ci dessus.
19
Définition 1.44 (poiçonnage) Si c ∈ Fnq est un mot de code, le poinçonné de c sur les positions
I est le mot de code P unctI (c) obtenu en supprimant les coordonnées indexées par les éléments
de I. Le code poinçonné P unctI (C) est le code obtenu en poinçonnant les mots du code C en I.
P unctI (C) = {(ci )i∈{1,...n \I | c ∈ C}
Exemple 1.45
C = {(0000), (0101), (1001), (1010), (0110), (0011), (1100), (1111)}
P unctI (C) = {(00), (11), (10), (01)}
Lemme 1.46 Soit C ⊆ Fnq un code de longueur n et de dimension k. Soit G ∈ Mk,n (Fq ) de C
une matrice génératrice de C. Soit I ⊆ {1, . . . , n}. Alors la matrice G0 obtenu á partir de G en
délectant les colonnes de G dont leur index est dans I est une matrice génératrice de P unctI (C)
Preuve Evidente
Proposition 1.47 Soit C un (n, k, d)q code et I ⊆ {1, . . . , n}. Alors, le code P unctI (C) est
un (n0 , k 0 , d0 )q code tel que :
n0 = n − |I|
k0 6 k
d − |I| 6 d0 6 d
20
Preuve Puisque c ∈ C, par définition de H, on a H × ct = 0, il est évident donc que,
H 0 × c0t = 0. D’oú, on a montré que ShortI (C) ⊂ kerH 0 .
Inversement, soit c0 ∈ Fn−|I|
q tel que H 0 × c0t = 0. Alors contruisons le mot c ∈ Fnq comme
ennoncé au lemme 1.48. Puisque H 0 × c0t = 0, on a aussi H × ct = 0 et donc c ∈ C. D’oú
c0 ∈ ShortI (C). Parconséquent kerH = ShortI (C).
Proposition 1.51 Soit C un (n, k, d)q code et I ⊆ {1, . . . , n}. Alors, le code ShortI (C) est un
(n0 , k 0 , d0 )q code tel que :
n0 = n − |I|
k 0 > k − |I|
d0 > d
Dans ce qui suit, m désigne un entier plus grand que 1. Il existe deux maniéres de construire
un code sur un sous-corps á partir d’un code sur un corps plus grand. Le premier est le sous
code sur un sous-corps (subfield subcode). La deuxiéme façon de construire un code sur un
sous-corps est la construction de code trace. Sa définition nécessite la définition de l’application
trace sur des corps finis.
Définition 1.52 Soit C un code linéaire de longueur n sur une extension Fqm . Le sous-code
sur le sous-corps Fq est le code SFq (C) = C ∩ Fnq
Proposition 1.53 Si C est un code de paramétres [n, k, d] sur Fqm , alors SFq (C) est un code
de paramétre [n, k 0 , d0 ] sur Fq , la dimension k 0 et la distance minimale d0 vérifient les inégalités
k 0 > mk − n(m − 1) et d0 > d.
De plus, tout algoirthme de décodage de C peut s’appliquer á SFq (C) .
Preuve
Fnm −→ Fnqm
q
Φ: .
(x1 , . . . xn ), 7−→ (xq − x1 , . . . xq − xn )
1 n
Le noyau de Φ est Fnq qui est de dimension n sur Fq , donc Im(Φ) est de dimension (nm − n)
sur Fq . Considérons la restriction de Φ|C : C −→ Fnqm . Son image est de dimension sur Fq au
21
plus égale á (nm − n). Il est connu que :
Donc
dimFq ImΦ|C = dimFq (C) − dimFq kerΦ|C 6 n(m − 1).
D’oú
dimFq kerΦ|C > dimFq (C) − n(m − 1) > km − n(m − 1)
Or kerΦ|C n’est rien d’autre que SFq (C)
La deuxiéme maniére de construire un code sur un sous corps est le code trace, pour sa définition
il est nécéssaire de définir l’application trace sur les corps finis.
Définition 1.54 Soit Fqm une extension de Fq . Soit a ∈ Fqm , la trace de a sur Fq est noté par
T rFqm /Fq (a) et est définie comme suit :
m−1
T rFqm /Fq (a) = a + aq + . . . aq
La trace d’un élément de Fqm est dans Fq . En effet, il est facile de voir que pour tout a ∈ Fqm ,
m−1 2 m
T rFqm /Fq (a)q = (a + aq + . . . aq )q = aq + aq + . . . aq .
m
Puisque, pour tout a ∈ Fqm , aq = a, on en déduit que T rFqm /Fq (a)q = T rFqm /Fq (a), ce qui veut
dire que T rFqm /Fq (a) ∈ Fq
Remarque 1.55 La terminologie trace est vu de cette maniére. Considérons l’application dé-
finie par la multiplication par a :
F m −→ F m
q q
.
x 7−→ a.x
Cette application peut etre vu comme un Fq -endomorphisme d’un Fq -espace vectoriel de dimen-
sion m. La trace de cet endomorphisme, i.e. la trace de toute representation matricielle de cet
endomorphisme, n’est rien d’autre que la trace de a.
Lemme 1.56 La trace T rFqm /Fq : Fqm −→ Fq st une application Fq -linéaire et surjective.
Corollaire 1.57 Soit a ∈ Fqm tel que pour tout λ ∈ Fqm on a T rFqm /Fq (λa) = 0, a = 0.
22
Preuve Si a est non nul alors pour tout b ∈ Fqm , on aura T r(b) = T r(aa−1 b)qui sera égale á
zéro par hypothése sur a. Donc l’application trace est nulle, ce qui contrdit le fait qu’elle est
surjective.
Nous avons maintenant tous les éléments necécessaire pour définir et étudier les codes.
Définition 1.58 (Code Trace) Soit C ⊆ Fnqm . Le code trace de C sur Fq est défini par
T rFqm /Fq (C) = {(T rFqm /Fq (c1 ), . . . , T rFqm /Fq (cn )) |c = (c1 , . . . , cn ) ∈ C}
Proposition 1.59 Soit C ⊆ Fnqm un code de dimension k sur Fqm . Alors T r(C) ⊆ Fq est un
code de dimension au plus mk sur Fq
C’est une application Fq -linéaire de C qui est un Fq -espace vectoriel de dimension mk. Le code
trace est l’image de l’application ci dessus, donc d’aprés l’équation des dimensions, le code trace
est de dimension au pluségale á mk.
Remarque 1.60 En général , il n’existe pas de relation entre la distance minimale du code et
celle du son code trace. on peut avoir un mot de code de poids n tel que la trace des composantes
sont toute nulle.
Proposition 1.61 (Base duale) Soit (α1 , . . . , αm ) une Fq -base de Fqm , alors il existe une base
unique (α1∗ , . . . , αm
∗
) appelé base duale vérifiant :
23
2 Les Problémes de Décodage
Dans la section précédente nous avons discuté des premiéres définitions et propriétés des codes
linéaires sans considérer la question principale : Comment utiliser les codes pour corriger des
erreurs ? Pour répondre á cette question, nous allons formaliser la notion de décodeur ou d’al-
gorithme deécodage et les différentes versions de problémes deécodage.
Définition 2.1 (Decodeur). Soit C ⊆ Fnq un code correcteur d’erreur. Un décodeur de C est
une fonction D : Fnq −→ C ∪ {?}, telle que pour tout c ∈ C, D(c) = c
Remarque 2.2 Un décodeur ne peut pas corriger n’importe quel motif d’erreur et peut échouer.
C’est la raison pour laquelle il peut retourner " ?".
Remarque 2.3 Un probléme de décision connexe est de décider s’il existe un mot c ∈ C tel
que dH (c, y) 6 r.
Le probléme de décodage non ambigu Soit C ⊆ Fnq un code et y ∈ Fnq , trouver un mot
c ∈ C tel que
dH (c, y) 6 bd − 1/2c
ou d est la distance minimale du code C.
Remarque 2.4 Grace á la définition 1.18 la solution du probléme de décodage non ambigu
est unique, si elle existe. Notez que pour énoncer le probléme, il faut connaitre la distance
minimale du code. Cependant, la distance minimale d’un code est difficile á calculer en général
(voir section 2.1.2).
Le probléme de décodage par liste Soit C ⊆ Fnq un code, r un entier et y ∈ Fnq , trouver
(s’il existe) la liste entiére des mots c1 . . . cs ∈ C tel que
∀i ∈ {1, . . . , s} dH (ci , y) 6 r
Remarque 2.5 Comme définie dans la définition 2.1 le décodeur ne peut résoudre en général
le probléme de décodage par liste. On a besoin d’introduire une notion de décodeurparliste
comme une fonction Fnq −→ P (C) ∪ {?} ou P (C) est l’ensemble des sous ensembles de C
24
Remarque 2.6 Pour qu’un algorithme de décodage de liste soit polynomial, la liste renvoyée
doit avoir une taille polynomiale. Nous discuterons plus en détail du probléme de décodage de
liste et définissons une limite supérieure appelée borne de Johnson de r qui affirme que la liste
a UNE taille polynomiale en la longueur du code.
2.2.1 Canaux
Un canal est un modéle théorique pour décrire une communication avec des erreurs possibles.
Dans ce cours, nous ne considérerons que des canaux sans mémoire. Autrement dit, étant donné
un bit ou un digit transmis, les erreurs qui le corrompent ne dépendent pas des bits / digits
transmis précédents.
Remarque 2.7 En fait, on peut toujours supposer que p 6 1/2 . En effet, si p > 1/2 , alors,
aprés avoir flippé chaque bit du mot reçu, nous pouvons faire comme si le message avait été
transmis sur un canal symétrique binaire de paramétre 1 − p 6 1/2.
25
Le canal binaire á effacement Dans le présent chapitre, nous traitons principalement du
canal symétrique binaire. Ce canal correspond á un cas oú, lors d’une transmission, certains
bits peuvent etre changés. En fait, dans certaines situations, les bits ne sont pas changés mais
seulement perdus ou détruits. Ceci est représenté par le canal dit canal binaire á effacement
qui est décrit par la figure 4
26
2.2.2 Un probléme de décodage probabiliste
Le probléme peut etre énoncé comme suit. Considérons un canal fixe, une constante ε > 0 et
un code donné C ⊆ Fnq .
Probléme. Trouver un décodeur D tel que pour un élément uniformément aléatoire c ∈ C et
un motif d’erreur aléatoire e produit par le canal que nous avons :
P (D(c + e) 6= c) < ε
Par rapport aux problémes de décodage présentés au § 2.1 pour lesquels l’objectif était de
corriger tout motif d’erreur de poids inférieur á une limite supérieure, nous visons ici á corriger
"presque tous" les motifs d’erreur produits par le canal. Le décodeur peut échouer avec une
certaine probabilité (qui devrait être faible).
Relation avec la distance minimale Si le canal est le canal binaire ou symétrique q-aire
de paramétre p, résoudre le probléme du maximum de vraisemblance équivaut á résoudre le
probléme suivant
Probléme Soit un code C ⊆ Fnq et un mot y ∈ Fnq , trouver (si unique) le mot c ∈ C tel que
dH (c, y) = minx∈C dH(x, y) si unique.
En effet, soit x un mot binaire du code C et y = x + e le vecteur reçu aprés la transmission de
x á travers un BSC (p). Autrement dit, e = (e1 , . . . , en ) est un vecteur dont les entrées sont des
variables aléatoires indépendantes de Bernouilli avec le paramétre p.
Posons PevBSC(p) (x is sent | y is received) = Pr (x/y) On voit facilement que
n
(Pr (xi /yi )) = (1 − p)card{i:yi =xi } pcard{i:yi 6=xi }
Y
Pr (x/y) =
i=1
p card{i:yi 6=xi }
= (1 − p)n ( )
1−p
27
Une solution du problém de décodage par maximum de vraisemblance n’est rien d’autre qu’un
mot de code qui est le plus proche de y i.e le mot de code qui maximise la fonction P (c) : c =
p card{i:yi 6=ci }
(c1 , ..., cn ) → (1 − p)n ( 1−p ) .
p
Comme 1−p < 1, maximiser cette probabilité revient à minimiser le nombre d’erreurs, c’est-
à-dire card{i : yi 6= ci }. Donc un problème de probabilités au départ est transformé en un
problème de combinatoire. Par conséquent le décodage par maximum de vraisemblance est
équivalent au décodage á distance minimum qui permet d’obtenir le mot de code le plus proche
du mot reçu, au sens de la maétrique de Hamming.
Transmission sans code correcteur d’erreurs Soit la suite suivante : 00101110 qu’on
veut transmettre à travers un canal dont la probabilité d’erreurs est de 0, 25 = 14 . Donc en
moyenne, on a une erreur sur tous les quatre bits transmis.
Supposons que le mot reçu est 00000110, ce qui correspond à la configuration suivante :
00101110 → BSC → 00000110.
28
au décodage par maximum de vraisemblance ou à distance minimum, c ’est un algorithme qui
permet d’obtenir le mot de code qui est le plus proche du mot reçu, au sens de la métrique de
Hamming. Malheureusement, ce décodage ne peut pas être utilisé dans la pratique en raison
de sa complexité temporelle, qui est de l’ordre de O(q k ) et qui est donc exponentielle en la
dimension du code, sauf dans le cas de codes de dimensions trés petites.
Application Soit le code C = {00000 10011 01101 11110} et y = 01111 le mot reçu. Utiliser
l’algorithme de décodage par recherche exhaustive pour décoder y.
29
Remarque 2.10 y ∈ C ⇐⇒ S(y) = 0, autrement C est le noyau de l’application S linéaire
(S : Fnq −→ Fn−k
q ), xRy ⇐⇒ x t H = y t H
xRy ⇐⇒ x t H = y t H ⇐⇒ (x − y) t H = 0
xRy ⇐⇒ x − y ∈ C
x̄ = x + C = {x + c/c ∈ C} {0̄ = C}
x + C est la classe de x modulo C. Elle est appelée classe latérale ou translatée de x.
Le code C est la classe du mot nul.
• deux vecteurs sont dans le même translaté si et seulement si ils ont le même syndrôme.
• Tous les translatées d’un code C ont le même nombre d’éléments |C| = q k .
• Deux translatées sont soit disjointes soit égales.
Les translatés par C forment une partition de Fnq en q n−k translatées difféntes, chacune conte-
nant q k éléments.
Définition 2.11 A tout translaté, on peut associer un mot de plus petit poids contenu dans
la translatée.
• Ce mot est appelé représentant principal.
• Lorsqu’il existe plusieurs choix pour ce mot, on en prend un quelconque parmi les mots
de même pois possibles.
• Tous les translatées de poids inférieur ou égal á t = b d−1
2
c ont un représentant principal
unique.
On a un algorithme de décodage par syndrôme dont sa mise en oeuvre peut être effectuée
comme suit :
• On construit la table de décodage par syndrôme :
• Nous énumeration les classes d’équivalence de C dans Fnq .
• Nous choisissons un représentant principal pour chaque classe d’équivalence.
• Nous calculons leur syndrôme.
• Déterminer le représentant, cl((y), associé au syndrôme du mot reçu y.
• Décoder tout mot reçu y en y − cl((y)
La complexité est de l’ordre de O(nq n−k ).
Remarque 2.12 Attention : on a bien un mot du code mais ce dernier peut ne pas être le
mot emis. Ce probléme est réglé par la proposition ci-dessous le nombre commis est plus petit
ou égal á 6 d−1
2
30
Preuve Suposons qu’il existe deux vecteurs e et e0 de poids 6 d−1
2
tels que S(e) = S(e0 ).
Alors WH (e − e0 ) 6 d − 1 et
Donc e − e0 ∈ C et est de poids plus petit que d − 1, ce qui contredit le fait que d est la distance
minimale.
Ce qui donne le pricipe du decodage par syndrôme suivant :
• On construit le dictionnaire contenant les paires (S(e), e) pour tous les e de poids plus
petit ou égal á 6 d−1
2
:
• Utilisez une structure de données de sorte qu’une entrée s ∈ Fn−k q , la paire (S(e), e) tel
que S(e) = s(s’il existe ) peut etre déterminer de maniere efficiente
Une table de hachage peut effectuer cette recherche en temps constant. La construction de cette
table de hachage est l’étape de précalcul de l’algorithme. Alors, l’algorithme est élémentaire,
étant donné un mot reçu y calculer H.t y et chercher dans la table de hachage la paire (S(e), e)
avec l’entrée correspondante et retourne y − e.
d−1
Donner la table de hachage de l’exemple ci dessus des vecteur de poids plus petit ou égal á 2
Remarque 2.14 L’étape de précalcul peut etre effectuer sans connaitre la distance minimale
du code. Seulement ca sera plus technique : Si deux vecteurs e et e0 de meme poids w le meme
syndrome ont, ceci veut dire que w est plus grand que d−1
2
. Alors on enleve de la table de hachage
tout (S(e), e) tel que WH (e) = w.
31
32
Exercice 2.15
Remarque 2.16 Il est facile d’adapté cet algorithme pour pouvoir corriger tout erreur de poids
plus petit ou égal á t, avec t 6 d−1
2
L’algorithme de décodage par syndrome résout le probléme de décodage non ambigu. Sa com-
plexité en temps est polynomiale, puisque le calcul du syndrome est le produit d’une matrice
par un vecteur qui est O(n(n − k)) opérations dans Fq . De plus le coût de la recherche dans H
est constant si H est une table de hachage.
Malheureusement cet algorithme n’est pas praticable, son inconvénient est sa cmplexité en
espace qui est la taille de la table de hachage :
t
|{e ∈ Fnq / wH = i}|,
X
|H| =
i=0
d−1
oú t = 2
( ou plus petit). Ce cardinal est
t
(i)(q − 1)i ,
X
|H| =
i=0
qui est exponentiel en t. Parconséquent , l’étape du pré-calcul est exponentiel en temps. Donc,
l’algorithme de décofdage par syndrome (pre-calcul et calcul ) est exponentiel en espace.
33
Exercice 2.17 Exercice 1 : Soit C un code binaire de longueur 6 de matrice génératrice
1 0 1 0 1 0
G = 1 1 1 1 0 0
1 1 0 0 1 1
34