Introduction à la théorie des codes
Introduction à la théorie des codes
A.A. 2021–2022
Martino Borello
2 septembre 2021
2
Table des matières
Introduction 5
2 Codes linéaires 13
2.1 Définitions et propriétés de base . . . . . . . . . . . . . . . . . . 13
2.2 Matrice de parité et code dual . . . . . . . . . . . . . . . . . . . . 15
2.3 Borne de Singleton et codes MDS . . . . . . . . . . . . . . . . . . 18
2.4 Distribution des poids . . . . . . . . . . . . . . . . . . . . . . . . 19
2.5 Équivalence de codes . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.6 Décodage par syndrome . . . . . . . . . . . . . . . . . . . . . . . 22
2.7 Extensions des codes . . . . . . . . . . . . . . . . . . . . . . . . . 23
Bibliographie 45
3
4 TABLE DES MATIÈRES
Introduction
« Deux week-ends de suite, je suis arrivé et j’ai trouvé qu’une erreur était
survenue et rien n’avait été fait. J’était vraiment en colère et agacé parce que
je voulais ces réponses et deux week-ends avaient été perdus. Et alors j’ai dit
« Bon sang, si la machine peut détecter une erreur, pourquoi ne peut-elle pas
localiser la position de l’erreur et la corriger ? ». »
(R. Hamming)
5
6 TABLE DES MATIÈRES
Figure 1 –
Tout d’abord, on veut mentionner deux type de codage qui existent, c’est-
à-dire le codage convolutif, qui traite l’un après l’autre les symboles d’un
message de n’importe quelle longueur, et le codage par bloc, qui traite « en
bloc » des messages avec un nombre fixe de symboles. Dans ce cours, on va
considérer seulement le deuxième type de codage, qui est plus simple à dévelop-
per. Notons que, dans ce cas, un message de n’importe quelle longueur est coupé
en plusieurs blocs de la même longueur et chaque bloc est traité séparément.
7
8 CHAPITRE 1. PREMIÈRES NOTIONS SUR LES CODES
Les deux sont une manière de quantifier l’information qu’on doit ajouter
pour permettre la correction de l’erreur. Idéalement, on voudrait un taux de
transmission grande ou une redondance petite, mais cela - on verra - n’est pas
forcement compatible avec la capacité de corriger l’erreur.
On peut toujours supposer que la transformation opérée par l’encodeur
consiste à ajouter (on verra comment) des éléments à la séquence u émise
par la source (pas forcement après). Donc on peut retrouver u à l’intérieur de
x. Dans ce cas, on appelle bits d’information ceux de u et bits de contrôle
ceux qu’on a ajouté.
Définition 1.3. Un codage est dit systématique (ou lisible) quand les bits de
contrôle sont regroupés à la fin du mot de code, c’est à dire quand x = (u| . . .).
1 0 1
0 1 0
0 1 1
d(a, b) := #{i | ai 6= bi }.
Exercice 1.7. Quelle est la distance minimale du code composé par les mots
de longueur 5 de la langue française ? Et des trois codes introduits ci-dessus
(parité, répétition et « carré ») ?
La distance minimale d’un code est liée à sa capacité de détection et correc-
tion des erreurs. Pour le comprendre, il nous faut d’abord un lemme technique.
1.2. LA MÉTRIQUE DE HAMMING 11
En effet,
⇐) si ∃z ∈ B(x, t) ∩ B(y, t), alors d(x, y) ≤ d(x, z) + d(z, y) ≤ 2t ;
⇒) si d(x, y) = s ≤ 2t, soit I := {i | xi 6= yi } et J ⊆ I de cardinalité
bs/2c. Soit z ∈ An tel que zi = xi si i ∈ J, et zi = yi autrement. Alors
d(y, z) = #J = bs/2c ≤ t et d(x, z) = #(I \ J) = s − bs/2c ≤ t. Donc
z ∈ B(x, t) ∩ B(y, t). j k
d(C)−1
Ainsi, si par l’absurde t > 2 , soient x, y ∈ C tels que d(x, y) = d(C).
Or, d(C) ≤ 2t, de manière que B(x, t) ∩ B(y, t) 6= ∅.
Vice versa, si par l’absurde il existe x, y ∈ C, x 6= y, tel que {z} ⊆ B(x, t) ∩
B(y, t), alors d(C) ≤ d(x, y) ≤ d(x, z) + d(z, y) ≤ 2t, ce qui donne une contra-
diction.
Soit maintenant x le mot émis de l’encodeur et y le mot modifié par le bruit.
On dit qu’un code C est t-détecteur si B(x, t) ∩ C = {x} pour tout x ∈
C, de manière que le décodeur est capable de détecter jusqu’à t erreurs. En
effet, le décodeur normalement est capable de tester (on verra comment) si un
vecteur appartient ou pas à C. S’il existe x, x0 dans C, avec x 6= x0 tel que
x0 ∈ B(x, t) ∩ C, alors s = d(x, x0 ) ≤ t. Or, si s erreur sur x modifient x en x0 ,
le décodeur ne sera pas capable de détecter l’erreur, car x0 appartient lui aussi
au code C.
On dit qu’un code C est t-correcteur si B(x, t) ∩ B(x0 , t) = ∅ pour tout
x, x0 ∈ C, de manière que le décodeur est capable de corriger jusqu’à t erreurs.
En effet, le décodeur normalement est capable de transformer y dans le mot
le plus proche du code, s’il existe (on verra comment). S’il existe x, x0 dans C,
avec x 6= x0 tel que B(x, t) ∩ B(x0 , t) 6= ∅, alors il existe sûrement un élément
y dans l’intersection dont la distance de x0 est inférieur ou égale à celle de x.
Le décodeur transformera y dans le mot x0 , en se trompant. Cela ne peut pas
arriver si les boules sont disjointes.
Proposition 1.1. Un code C de distance minimale d = d(C) est (d − 1)-
détecteur et d−1
2 -correcteur d’erreurs.
Démonstration. Clairement un code de distance minimale d ne peut pas détecter
d erreur, car si x, x0 ∈ C ont d(x, x0 ) = d, alors {x, x0 } ⊆ B(x, d).
La deuxième affirmation suit directement de la définition et du Lemme 1.1.
La capacité de correction d’un code dépend donc de la possibilité d’avoir des
boules du même rayon (chacune centrée en un mot du code) disjointes. On peut
12 CHAPITRE 1. PREMIÈRES NOTIONS SUR LES CODES
Codes linéaires
d(a, b) = d(a − b, 0)
qui réduit la complexité à O(nM ) (on amélioré le calcul, mais ça reste compliqué
si la cardinalité est grande).
Un autre problème qu’on a c’est le stockage : si on a un « bon code » et veut
l’utiliser, on a besoin de connaître ses mots, qui, a priori, doivent être stockés
dans un tableau qui serait d’une taille nM , déraisonnable et inadaptée à tout
usage pratique. Pour résoudre ce problème, on peut par exemple considérer un
alphabet A qui n’est pas seulement un groupe abélien, mais tel que (A; +, ·)
soit un corps fini, et supposer que C soit un sous-espace vectoriel de An . En
effet, pour décrire un espace vectoriel il suffit de donner une base, et celle-ci a
cardinalité log#A (M ) (pourquoi ? Le montrer par exercice).
Pour ces deux raisons, la théorie des codes a été du début liée à la théorie
des corps finis et à son algorithmique.
13
14 CHAPITRE 2. CODES LINÉAIRES
Il a donc 42 = 16 mots.
Exercice 2.2. Donner la liste des éléments du code C de l’Exemple 2.1 et
montrer que C est un [4, 2, 3]4 code.
2.2. MATRICE DE PARITÉ ET CODE DUAL 15
Exercice 2.3. Donner une matrice génératrice pour le code de parité, le code
de répétition et le code « carré ».
Si les premières k colonnes d’une matrice génératrice G d’un [n, k, d]q code C
ont rang k, i.e. si la sous-matrice A de G formée par ces colonnes est inversible,
alors
G0 = A−1 G = [Ik | B],
Remarque 2.2. Étant donnée une matrice génératrice G d’un [n, k, d]q code,
l’encodeur multiplie le vecteur u = (u1 , . . . , uk ) émis par la source par cette
matrice G, en obtenant un mot du code C. Si on change de matrice, on change
de codage, même si le code ne change pas. Notons que le codage est systématique
ssi la matrice génératrice considérée est en forme systématique.
Définition 2.4. Une matrice de parité (ou de contrôle) H d’un [n, k, d]q code
C est une matrice (n − k) × n sur K de rang n − k telle que
C = {v ∈ K n | vH T = (0, . . . , 0)}
Exemple 2.2. Le code de parité a matrice de parité donnée par H = [1, . . . , 1].
En effet, un vecteur v = (v1 , . . . , vn ) ∈ Fn2 appartient au code de parité ssi
vH T = v1 + · · · + vn = 0
Exemple 2.3. Une matrice de parité pour le [5, 3]3 code engendré par
1 0 0 2 1
G = 0 1 0 0 1
0 0 1 1 2
est égale à
2 0 1 2 0
H= .
1 1 2 0 2
Donc pour trouver une matrice de parité il vaut mieux trouver d’abord une
matrice génératrice en forme systématique, si possible.
2.2. MATRICE DE PARITÉ ET CODE DUAL 17
Exercice 2.6. Trouver une matrice de parité pour le [5, 2]3 code engendré par
2 0 1 2 0
G= .
1 1 2 0 2
C ⊥ = {v ∈ K n | hv, ci = 0, ∀c ∈ C}
Pn
où hv, ci = i=1 vi ci (produit scalaire standard).
Si C ⊆ C ⊥ le code C est dit auto-orthogonal. Si C = C ⊥ le code C est dit
auto-dual.
Exercice 2.7. Montrer que si C est un [n, k]q code avec matrice génératrice G
et matrice de parité H, alors C ⊥ est un [n, n − k]q code avec matrice génératrice
H et matrice de parité G. En particulier, (C ⊥ )⊥ = C.
Montrer qu’un code auto-dual a forcement dimension n/2, de manière qu’il peux
exister seulement si n est pair.
Exemple 2.4. Le dual du code parité est le code de répétition, et vice versa.
Exercice 2.8. Donner une matrice génératrice du dual du code « carré ».
Si on veut utiliser la Proposition 2.2 mais le [n, k]q code n’est pas en forme
systématique, on peut chercher k colonnes libres, permuter les colonnes avec une
permutation σ ∈ Sn telle que les k colonnes deviennent les premières k colonnes,
multiplier à gauche par la matrice inverse de la matrice carrée formée par ces k
colonnes, appliquer la Proposition 2.2 et finalement permuter les colonnes avec
la permutation σ −1 .
Remarque 2.3. On souligne ici l’interprétation des lignes et des colonnes des
matrices génératrices et de parité d’un [n, k]q code :
• Les lignes g1 , . . . , gk d’une matrice génératrice : elles engendrent
par combinaison linéaire tous les mots du code, i.e. pour tout c ∈ C, il
existe λ1 , . . . , λk ∈ Fq tels que
c = λ1 g1 + · · · + λk gk .
v1 h(1) + · · · + vn h(n) = 0.
18 CHAPITRE 2. CODES LINÉAIRES
Cette inégalité est appelée borne de Singleton et elle est vraie même si le
code n’est pas linéaire :
d(C) ≤ n − k + 1.
#C ≤ (#A)n−d+1 .
Définition 2.6. Un [n, k, d]q code est appelé MDS (Maximum Distance Sepa-
rable) si d = n − k + 1, i.e. si ses paramètres satisfont l’égalité dans la borne de
Singleton. Un code est dit MDS trivial lorsque k ∈ {1, n − 1, n}.
Exemple 2.5. Les codes de répétition et de parité sont des exemples de codes
MDS triviaux binaires. Le code de l’Exemple 2.1 est un code MDS (non trivial).
Remarque 2.5 (Propriétés des codes MDS). Les codes MDS sont, par défi-
nition, des codes avec la distance minimale la plus large possible étant données
longueur et dimension. Ils sont donc des codes « optimaux » pour la correction
des erreurs. Ils ont d’autres propriétés intéressantes qu’on énonce ici laissant
leur preuve par exercice.
1. Un [n, k]q code est MDS ssi chaque ensemble de n − k colonnes de sa
matrice de parité est de rang n − k.
2. Si C est MDS, alors C ⊥ l’est aussi.
3. Un [n, k]q code est MDS ssi chaque ensemble de k colonnes de sa matrice
de génératrice est de rang k.
avec
Ai (C) = #{c ∈ C | wt(c) = i}.
Souvent on écrit seulement les éléments non nuls de cette liste. La distribution
de poids d’un code ne donne pas seulement la capacité de correction des erreurs
du code, mais permet également de calculer la probabilité de détection et de
correction des erreurs.
Remarque 2.6. Tous les Ai (C) sont des entiers non négatifs. En plus, A0 (C) =
1 et A0 (C) + . . . + An (C) = #C pour tous les codes.
X n
X
wC (x, y) = xn−wt(c) y wt(c) = Ai (C)xn−i y i .
c∈C i=0
Exemple 2.6. On peut facilement calculer les polynômes des poids de nos
exemples historiques (exercice).
• Le polynôme des poids du [n, 1, n] code de répétition C est
wC (x, y) = xn + y n .
(x + y)n + (x − y)n
wC (x, y) = .
2
• Le polynôme des poids du [9, 4, 4] code « carré » C est
La distribution des poids d’un code et de son dual sont très liés, comme le
résultat suivant montre.
Exercice 2.14. Montrer (sans calculer la liste de ses éléments) que le polynôme
des poids du dual du code « carré » C ⊥ est
Exercice 2.15 (∗). Montrer que le polynôme des poids d’un [4, 2, 3]q code C
(notons que c’est un code MDS) est
xσ = xMσ
où Mσ est une matrice dont toutes les coefficients sont nuls à l’exception des
coefficients indexés par (i, σ(i)) qui valent 1.
0 1 0 0
0 0 1 0
Exemple 2.8. M(1 2 3 4) = 0 0 0 1. En effet
1 0 0 0
Une matrice de permutation est donc une matrice avec un seul élément non
nul (et égal à 1) sur toute ligne et sur toute colonne. Elle est toujours inversible.
Elle représente la transformation linéaire de Fnq associée à σ.
Remarque 2.7. Une propriété très importante des ces transformations linéaires
est le fait qu’elle ne changent pas le poids du vecteur, i.e., pour tout σ ∈ Sn et
x ∈ Fqn ,
wt(xσ ) = wt(xMσ ) = wt(x).
Elle sont donc des isométries pour la métrique de Hamming. Elle ne sont
pas la forme plus générale d’isométrie qu’on peut considérer : par exemple les
matrices monomiales, i.e. avec un seul élément non nul (mais pas forcement
égal à 1) sur toute ligne et sur toute colonne, représentent des isométries aussi.
Dans la cadre de ce cours, pour simplifier la notation, nous ne considérerons
que les matrices de permutation.
22 CHAPITRE 2. CODES LINÉAIRES
L’« action » de Sn sur Fnq induit une « action » sur les codes dans Fnq , donnée
par
C σ = {cσ | c ∈ C},
pour C ⊆ Fnq et σ ∈ Sn .
Définition 2.8. Soit C un code dans Fnq . Un élément σ ∈ Sn est un automor-
phisme (de permutation) de C si C σ = C.
Exercice 2.16. Montrer que l’ensemble Aut(C) des automorphismes d’un code
C est un sous-groupe de Sn .
Aut(C) est appelé groupe des automorphismes (de permutation) de C.
Exercice 2.17. Soit C un code linéaire. Montrer que Aut(C) = Aut(C ⊥ ).
Définition 2.9. Soient C1 et C2 deux codes dans Fnq . Ils sont équivalents (par
permutation) s’il existe σ ∈ Sn telle que
C2 = C1σ .
Notation : C1 ∼ C2 .
Exercice 2.18. Montrer que ∼ est une relation d’équivalence.
Par la Remarque 2.7, codes équivalents (par permutation) ont les mêmes
paramètres et la même distribution des poids. Attention : le vice versa n’est pas
vrai, comme montré dans l’exemple suivant.
Exemple 2.9. Les deux [4, 2, 3]7 codes C1 et C2 avec matrices génératrices
respectivement
1 0 1 1
G1 =
0 1 1 2
et
1 0 1 2
G2 =
0 1 3 4
ont le même polynôme des poids, i.e.
mais ils ne sont pas équivalents (on peut par exemple vérifier - avec des longs
calculs - que C2 ne contient aucun mot de poids 3 avec tous les éléments non
nuls égaux, tandis que C1 si).
e = y − x ∈ K n.
2.7. EXTENSIONS DES CODES 23
Exercice 2.19. Montrer que tous les syndromes dans le tableau sont différents.
j k
Si wt(e) ≤ d(C)−1
2 , le décodeur reçoit y, il calcule son syndrome yH T et
il le compare avec les syndromes présents dans le tableau. Il obtient donc e, et
ensuite x = y − e.
Remarque 2.8. Ce procédé est particulièrement simple si d(C) est égale à
3 ou 4 (de manière que le code peut corriger une erreur), car les syndromes
sont simplement des multiples des colonnes de la matrice de parité transposées.
Dans le cas binaire, ils sont exactement les colonnes de la matrice de parité
(transposées). Par contre, ce procédé devient inutilisable en pratique dès qu’on
considère de longueur grandes et une capacité de correction plus importante : la
taille du tableau devient trop grande. Toutefois, il est un modèle pour d’autres
types de décodages.
Exercice 2.20. Utiliser le décodage par syndrome pour corriger y = (α, α2 , 1, 0),
pour le [4, 2, 3]4 code de l’Exemple 2.1.
appartient à C.
b En effet
25
26 CHAPITRE 3. FAMILLES DE CODES LINÉAIRES REMARQUABLES
de manière que
1 0 0 0 1 1 0
0 1 0 0 1 0 1
G3 =
0
0 1 0 0 1 1
0 0 0 1 1 1 1
est une matrice génératrice de H3 par la Proposition 2.2.
Par l’Exercice 3.1, tout code de Hamming est donc 1-correcteur. Ils sont
parfait : en effet
n m m
1+ = 1 + n = 2m = 2(2 −1)−(2 −m−1) = 2n−k .
1
Théorème 3.1. Soit n = 2m − 1. Les polynômes des poids des codes simplexes
et des codes de Hamming sont
n−1 n+1
wSm (x, y) = xn + nx 2 y 2
et
1 h n−1 n+1
i
wHm (x, y) = (x + y)n + n(x + y) 2 (x − y) 2 .
n+1
En particulier, les codes simplexes Sm sont des [2m − 1, m, 2m−1 ] codes.
Cela implique donc que tout mot non nul a poids 2m−1 , d’où la forme du po-
lynôme des poids de Sm . La forme du polynôme des poids de Hm descends
directement en appliquant le Théorème 2.2 au polynôme wSm (x, y).
3.2. CODES DE REED-MULLER 27
et que
1
(x + y)8 + 8(x + y)3 (x − y)4 = x7 + 7x4 y 3 + 7x3 y 4 + y 7 .
wH3 (x, y) =
8
Remarque 3.1. Notons que le Théorème 3.1 nous permets de calculer facile-
ment la distribution des poids de codes grandes sans devoir calculer la liste de
ses mots. Par exemple, H5 est un [31, 26, 3] code avec 226 = 67108864 mots avec
polynôme des poids
1
(x + y)31 + 31(x + y)15 (x − y)16 = x31 + 155x28 y 3 + . . .
wH5 (x, y) =
32
Donc, sans en faire la liste, on sait qu’il y a 155 mots de poids 3 en H5 .
avec polynôme des poids x8 + 14x4 y 4 + y 8 . On peut montrer que c’est un code
auto-dual (exercice) et il est donc égal à H
c3 .
p(x) = λ1 x1 + λ2 x2 + λ3 x3 + λ4
sur tous les vecteurs de F32 . Cela peut être exprimé avec la notation suivante :
(p(v))v∈F32 ,
où il est sous-entendu que l’ordre est librement choisi mais fixe. Notons que p(x)
est un polynôme générique à trois indéterminées de degré au plus 1 sur F2 (pour
simplifier la notation, dans ce cours nous incluons également le polynôme nul
parmi les polynômes de degré au plus r ∈ N). On a donc montré que
⊥
H
c3 = {(p(v))v∈F32 | p(x) ∈ F2 [x1 , x2 , x3 ] de degré au plus 1}.
Il est facile de voir que cela peut être généralisé, i.e. que
⊥
H
d m = {(p(v))v∈Fm
2
| p(x) ∈ F2 [x1 , . . . , xm ] de degré au plus 1}.
RM(r, m) = {(p(v))v∈Fm
2
| p(x) ∈ F2 [x1 , . . . , xm ] de degré au plus r}.
Notons que toute application de Fm 2 sur F2 est polynomiale (on le voit par
exemple en utilisant l’interpolation lagrangienne), mais différents polynômes
peuvent donner la même application (par exemple x21 et x1 donnent les mêmes
valeurs si évalués sur F2 ). Pour obtenir une représentation unique, il faut consi-
dérer les éléments de l’anneau quotient
F2 [x1 , . . . , xm ]/(x21 + x1 , . . . , x2m + xm ),
i.e. des polynômes où chaque indéterminée apparaît au degré au plus 1. Cette
représentation s’appelle forme algébrique normale. Une base pour l’espace
des fonctions booléennes est donnée par l’ensemble des monômes de la forme
Y
xi .
i∈I
Notons que le degré de chaque monôme est donné par #I. Le degré d’une
fonction booléenne est le degré maximal des monômes de sa forme algébrique
normale.
Exemple 3.4. La forme algébrique normale de la fonction
(x1 , x2 , x3 ) 7→ x21 + x1 x2 + x32 x3 + x1 x22 x33
est
(x1 , x2 , x3 ) 7→ x1 + x1 x2 + x2 x3 + x1 x2 x3 ,
d’où on voit que son degré est 3, i.e. le degré de x1 x2 x3 .
Avec ces notions, on peut voir facilement que
RM(r, m) = {(f (v))v∈Fm
2
| f : Fm
2 → F2 de degré au plus r}.
Donc RM(2, 3) est un [8, 7] code. On peut vérifier que c’est le code de parité de
longueur 8.
r m−r−1
X X r m
X m m m X m
= + = + = 2m
i=0
i i=0
m−i i=0
i j=r+1
j
Donc hw, ci = 0.
Exercice 3.6. Calculer le polynôme des poids de RM(2, 4). En déduire que
c’est un [16, 11, 4] code.
0 0 0 1 1 0 1 1 0 0 0 1 0 1 1 1
Exercice 3.8. Montrer que G24 est un code linéaire, de dimension 12 et qu’il
est auto-dual.
Théorème 3.2 ([2]). Le code G24 est un [24, 12, 8] code auto-dual et c’est
l’unique code avec ces paramètres, à équivalence près.
Exercice 3.9 (∗). En utilisant le Théorème 2.2, l’Exercice 2.13 et le fait que
dans un code auto-dual binaire tout mot a poids pair (le monter en amont),
montrer que
Exercice 4.1. Soit C le [9, 4, 3] code dont les mots sont de la forme (c1 , c2 , c1 +
c2 , c3 , c4 , c3 + c4 , c1 + c3 , c2 + c4 , c1 + c2 + c3 + c4 ).
a) Est-ce que le mot x := (1, 0, 1, 1, 1, 0, 0, 0, 1) appartient à C ? Justifier.
b) Quel est le mot y du code C le plus proche à x ? Justifier.
c) Est-ce que z := (0, 0, 1, 0, 0, 1, 0, 0, 1) est dans C ⊥ ? Justifier.
Solution :
a) Non. En effet c2 + c4 = 1 6= 0.
b) C’est y = (1, 0, 1, 1, 1, 0, 0, 1, 1) (on peut le trouver en remarquant que
C est le code « carré » et utilisant la méthode de décodage vue pour ce
code). En effet, puisque d(x, y) = 1 et la distance minimal de C est 3, il
n’existe pas un autre mot y 0 du code C avec distance plus petite ou égale
à 1 de x, car sinon d(y, y 0 ) ≤ d(y, x) + d(x, y 0 ) ≤ 2.
c) Oui. En effet,
pour tout c ∈ C.
Exercice 4.2. Montrer qu’un [n, n − 1, 2] code est forcement le code de parité
de longueur n.
H := [1 · · · 1],
car sinon, par la Proposition 2.3, C n’aurait pas distance minimale 2, en ayant
des colonnes nulles. Ainsi, par la Proposition 2.2, on a qu’une matrice génératrice
33
34 CHAPITRE 4. EXERCICES AVEC CORRECTION
de C est
1 0 ··· 0 1
0 1 ··· 0 1
G := . . .. .. ,
.. .. ..
. . .
0 0 ··· 1 1
ce qui implique que tout mot (c1 , c2 , . . . , cn ) est tel que
n−1
X
cn = ci .
i=1
1 + 6 < 26−3 = 8.
Exercice 4.4. Soit C le code de longueur 4 sur F3 dont les mots sont de la
forme (c1 , c2 , c1 + c2 , c1 − c2 ).
35
Solution :
a) (c1 , c2 , c1 + c2 , c1 − c2 ) = c1 (1, 0, 1, 1) + c2 (0, 1, 1, 2), et les deux vecteurs
sont linéairement indépendentes, de manière qu’une matrice génératrice
pour C est
1 0 1 1
G=
0 1 1 2
b) Tout mot est une combinaisons linéaire des deux vecteurs d’une base avec
coefficients dans F3 . Ainsi il y a 32 = 9 mots.
c) La longueur est 4 et la dimension est 2. Une matrice de parité pour C
est (par la Proposition 2.2)
1 1 2 0
H= ,
1 2 0 2
qui n’a pas ni de colonnes nulles ni de colonnes qui sont l’une un multiple
de l’autre. Donc, par la Proposition 2.3, la distance minimale est au moins
3. Puisque dans le code il y a de mots de poids 3 (par exemple les lignes
de G), la distance minimale est 3.
d) Soient h1 et h2 les deux lignes de H. On a que −h1 − h2 est égale à la
première ligne de G et h2 − h1 est égale à la deuxième ligne de G, de
manière que le code engendré par H est C, qui est donc auto-dual.
e) Oui, parce que 3 = 4 − 2 + 1.
f) Le vecteur v = (1, 1, 2, 1) n’appartient pas à C. En effet, v4 = 1 6= 0 =
v1 − v2 . Le mot c = (1, 1, 2, 0) a distance 1 de v et il est donc le plus
proche (car la distance minimale est 3). Pour le trouver, on aurait pu
utiliser la méthode de décodage par syndrome aussi.
Exercice 4.5. Soit C un [n, k, d] code avec matrice génératrice G = [Ik |A], où
Ik est la matrice identité de taille k × k sur F2 . Supposons k ≥ 3.
a) Montrer que d ≥ 3 si et seulement si toute ligne de G a poids au moins
3 et toutes les lignes de A sont différentes.
b) Soit A = U + Ik , où U est la matrice de taille k × k sur F2 avec toute
entrée égale à 1. Est-ce que le mot
v = (1, 0, . . . , 0 , 1)
| {z }
2k−2 fois
appartient au code C ?
36 CHAPITRE 4. EXERCICES AVEC CORRECTION
u = (0, . . . , 0, 1, . . . , 1)
| {z } | {z }
k−1 fois k+1 fois
Solution :
a) Puisque G est en forme systématique, H = [AT |In−k ], par la Proposi-
tion 2.2. Par la Proposition 2.3, on a aussi que d ≥ 3 si et seulement si
toute colonne de H est non nulle et il n’y a pas de colonnes égales. Cette
dernière condition équivaut au fait que les colonnes de AT (qui sont les
lignes de A) aient poids au moins 2 (pour être non nulles et différentes
de celles de In−k ) et qu’elles soient différentes, ce qui est équivalent au
fait que toute ligne de G a poids au moins 3 et toutes les lignes de A sont
différentes.
b) Toutes les lignes de A = U + Ik sont différentes et toute ligne de G a
poids k = 1 + (k − 1). Donc la distance minimale de C est 3 par a). Ainsi
v, qui a poids 2, n’appartient pas à C.
c) Puisque AT = A, on a que H = [A|Ik ]. Ainsi HuT , qui est la somme des
k + 1 dernières colonnes de H, est égale à
0
..
HuT = . .
0
1
e = (0, 0, . . . , 0, 1),
c = u − e = (0, . . . , 0, 1, . . . , 1, 0)
| {z } | {z }
k−1 fois k fois
Exercice 4.6. Soit C le code linéaire de longueur 5 sur F5 dont une matrice
génératrice est
1 0 0 1 1
G = 0 1 0 1 2 .
0 0 1 1 3
a) Donner la définition de code linéaire et des ses paramètres. Quel sont les
paramètres de C ? Justifier.
b) Combien y a-t-il de mots dans C ? Justifier.
37
v = (0, 1, 2, 3, 4).
Puisque une matrice génératrice est une matrice dont les lignes forment
une base de C, on a que la longueur de C est 5 et sa dimension est 3.
Pour calculer sa distance minimale, on calcule d’abord une matrice de
parité : par la Proposition 2.2, on a que
1 1 1 4 0
H=
1 2 3 0 4
est une matrice de parité pour C. Cette matrice n’a pas de colonnes
nulles, ni de couples de colonnes liés, donc la distance minimale est au
moins 3 par la Proposition 2.3. Mais toute ligne de la matrice génératrice
a poids 3, de manière que la distance minimale est exactement 3.
b) Dans C il y a 125 = 53 mots.
c) Au point a) on a calculé une matrice de parité H. On peut donc calculer
le syndrome de v avec H :
vH T = (0, 4).
(0, 0, 0, 0, 1)H T = vH T .
Exercice 4.7. Soit C un [n, k, d] code sur F2 tel que C ⊆ C ⊥ (code auto-
orthogonal).
a) Montrer tout mot de C a poids pair.
b) Montrer que 1 = (1, 1, . . . , 1) ∈ C ⊥ .
c) Montrer que dim C ≤ n/2.
d) Montrer que si G est une matrice génératrice pour C, alors GGT est
égale à la matrice nulle k × k.
38 CHAPITRE 4. EXERCICES AVEC CORRECTION
e) En sachant que tout le mot non nul d’un code simplexe Sm a poids 2m−1 ,
montrer que, pour m ≥ 3, Sm ⊆ Hm (Hm est un code de Hamming).
Solution :
a) Tout mot c doit être orthogonal à soi même. Or, sur F2 on a 1 · 1 = 1, de
manière que wt(c) ≡ hc, ci mod 2. Ainsi, forcement le poids de c est pair.
b) Pour tout mot c ∈ C on a
et donc hc, 1i = 0 par le point a). Ainsi, par la définition du code dual,
1 ∈ C ⊥.
c) dim C ≤ C ⊥ = n − dim C. Ainsi 2 dim C ≤ n.
d) Le coefficient (i, j) de GGT est égale au produit scalaire de la i-ème ligne
de G fois la j-ème ligne de G. Puisque le code est auto-orthogonal, ce
produit est nul.
e) Puisque Hm est le dual d’un code simplexe, on doit juste montrer que Sm
est auto-orthogonal. Pour le faire, il suffit (par définition de code dual)
de montrer que si x, y sont deux mots de Sm , alors hx, yi = 0. Sur F2 on
a que hx, yi ≡ #{i|xi = 1 et yi = 1} mod 2. En plus
Solution :
a) Soit G = [A|B] une matrice génératrice de C, où A est une matrice k×k et
B une matrice k×(n−k). On sait, par la Remarque 2.5, que rang(A) = k,
de manière que A est inversible. Soit G0 = A−1 G. Multiplier à gauche
pour une matrice inversible est équivalent à un changement de base de
C, donc G0 est une matrice génératrice de C. De plus, G0 = [Ik |A−1 B]
est en forme systématique.
b) Toute ligne l de G0 a au moins k − 1 zéros, de manière que wt(l) ≤
n − (k − 1). Or, l 6= 0 (en effet l est un vecteur d’une base de C) de
manière que wt(l) ≥ d(C) = n − k + 1. Donc wt(l) = n − k + 1.
c) Soit k ≥ 2 et soient l1 et l2 les deux premières lignes de G0 . On a donc
Ainsi l1 + l2 = (1, 1, 0, . . . , 0) ∈ C.
| {z }
n−2 fois
Donc
d(C) = n − k + 1 ≤ 2 ⇔ k ≥ n − 1.
Solution :
a) La longueur de C est 16 et sa dimension est 5 (nombre de colonnes
et de
H4 0
lignes de G réspectivement). On observe que G = , de manière
1 1
que C est un code RM(1, 4). Sa distance minimale est donc 8. Ainsi C
est un [16, 5, 8] code.
b) Par la Proposition 3.1, on a que C ⊥ est un code RM(2, 4), de manière
que C ⊥ est un [16, 11, 4] code.
c) Soit l5 la dernière ligne de G. On a que d(l5 , x) = 1 < 8 = d(C). Donc x
n’appartient pas à C, par définition de distance minimale.
d) On a déjà observé que l5 a distance 1 de x. S’il existait un autre y ∈ C
avec d(y, x) ≤ 1, alors on aurait d(y, l5 ) ≤ 1 + 1 = 2, ce qui donne une
contradiction. Donc l5 est le mot le plus proche à x.
Exercice 4.11. Soit C le code sur F7 dont une matrice génératrice est
1 0 0 0 6 2
0 1 0 0 2 2
G := 0
.
0 1 0 2 5
0 0 0 1 5 6
Solution :
a) La longueur de C est 6, qui est le nombre de colonnes de G, sa dimension
est 4, qui est le nombre de lignes de G. Dans C il y a 74 = 2401 mots,
car la dimension est 4 et le corps est F7 .
b) Une matrice de parité pour C est (par la Proposition 2.2)
6 2 2 5 6 0
H := .
2 2 5 6 0 6
Solution :
a) Le nombre de mots dans C est la somme des coefficients de wC (x, y), par
définition de polynôme de poids. Donc C a 16 mots.
b) Par définition de wC (x, y), la longueur de C est le degré de wC (x, y), i.e.
8. Soit k la dimension de C. On sait que 2k = 16, de manière que k = 4.
Finalement, on a que A1 (C) = A2 (C) = A3 (C) = 0 et A4 (C) = 14 6= 0,
de manière que la distance minimale de C est 4. Donc C est un [8, 4, 4]
code.
c) Soient c1 , c2 ∈ C de poids 4, c1 6= c2 . Le poids de c1 + c2 est forcement 4
ou 8. Dans le premier cas,
1 1 1 1 1 1 1 1
42 CHAPITRE 4. EXERCICES AVEC CORRECTION
H3 0T
.
1 1
Exercice 4.13. Soit C le code linéaire sur F3 dont une matrice génératrice est
1 0 0 0 1 1
0 1 0 0 1 2
G= 0 0 1 0 2 2 .
0 0 0 1 2 1
Ainsi, par le Théorème 2.2 (on utilise le fait que (C ⊥ )⊥ = C), on a que
1
wC (x, y) = w ⊥ (x + 2y, x − y) =
#C ⊥ C
1
= ((x + 2y)6 + 4(x + 2y)2 (x − y)4 + 4(x + 2y)(x − y)5 ).
9
d) Le coefficient de x4 y 2 dans wC (x, y) est 4, de manière qu’il y a 4 mots
de poids 2, qui est le poids minimal pour le point a). Déjà dans le point
a) on a observé deux couples de colonnes liées, ce qui nous donne les 4
mots de poids minimal :
45