Vous êtes sur la page 1sur 111

LES CODES CORRECTEURS D’ERREURS

Cours et exercices

Responsable : Kenza GUENDA

1
Table des matières

1 Introduction générale 5

2 Généralités sur les codes linéaires 7


2.1 Les codes linéaires . . . . . . . . . . . . . . . . . . . . . . . . 7

2.2 Distribution des poids . . . . . . . . . . . . . . . . . . . . . . 15

2.3 Détermination de la distance de Minimale . . . . . . . . . . . 17

2.3.1 Les bornes sur la distance minimale . . . . . . . . . . . 19


2.4 La dualité des codes linéaires . . . . . . . . . . . . . . . . . . 22
2.4.1 Le dual Euclidien . . . . . . . . . . . . . . . . . . . . . 22

2.4.2 Le dual Hermitien . . . . . . . . . . . . . . . . . . . . 23


2.4.3 Les codes auto-duaux . . . . . . . . . . . . . . . . . . . 23

3 Les opérations d’encodage et de décodage 28


3.1 L’étape d’encodage . . . . . . . . . . . . . . . . . . . . . . . . 29

3.2 L’étape de décodage . . . . . . . . . . . . . . . . . . . . . . . 30

3.3 Les algorithmes de décodage . . . . . . . . . . . . . . . . . . . 33


3.4 Décodage par maximum de vraisemblance . . . . . . . . . . . 33

3.5 Le décodage par syndrôme . . . . . . . . . . . . . . . . . . . . 34

2
3.5.1 Le M LD est N P -dur . . . . . . . . . . . . . . . . . . . 37
3.5.2 Le décodage à distance bornée . . . . . . . . . . . . . . 38

3.6 Le décodage par liste . . . . . . . . . . . . . . . . . . . . . . . 40

3.7 Construction de nouveaux codes à partir des codes connus . . 41

3.7.1 Les codes poinçonnés . . . . . . . . . . . . . . . . . . 41


3.7.2 Les codes raccourcis . . . . . . . . . . . . . . . . . . . 42

3.7.3 Les codes étendus . . . . . . . . . . . . . . . . . . . . . 43


3.7.4 La somme directe de codes . . . . . . . . . . . . . . . 44
3.7.5 La construction (u|u + v) . . . . . . . . . . . . . . . . 45

4 Codes cycliques 47

4.1 La Factorisation de xn − 1 . . . . . . . . . . . . . . . . . . . . 47

4.1.1 Les racines n-ièmes de l’unité . . . . . . . . . . . . . . 47

4.2 Les propriétés des classes cyclotomiques . . . . . . . . . . . . 51

4.3 Les codes cycliques . . . . . . . . . . . . . . . . . . . . . . . . 53


4.4 La distance minimale des codes cycliques . . . . . . . . . . . . 58

4.4.1 La borne BCH . . . . . . . . . . . . . . . . . . . . . . 58

4.5 L’équivalence des codes . . . . . . . . . . . . . . . . . . . . . . 60


4.6 les codes de BCH . . . . . . . . . . . . . . . . . . . . . . . . . 61

4.6.1 La distance minimale des codes BCH . . . . . . . . . . 64

4.7 Les codes de Reed–Solomon . . . . . . . . . . . . . . . . . . . 66

4.8 Les Codes Duadiques . . . . . . . . . . . . . . . . . . . . . . . 69


4.8.1 Orthogonalité des Codes Duadiques . . . . . . . . . . . 72

5 Les codes sur les anneaux 74

5.1 Codes binaire de Z4 -linéaire . . . . . . . . . . . . . . . . . . . 78

3
6 Quelques Classes de Codes 86
6.1 Les codes de Reed-Muller . . . . . . . . . . . . . . . . . . . . 86

6.2 Les codes de Golay . . . . . . . . . . . . . . . . . . . . . . . . 90

7 Solution des exercices 91

7.1 Exercices du chapitre 2 . . . . . . . . . . . . . . . . . . . . . . 91

8 Rappels sur les corps finis 104

8.1 Caractérisation des corps finis . . . . . . . . . . . . . . . . . . 107

4
Chapitre 1

Introduction générale

Dès 1946 Richard Hamming avait travaillé sur un modèle de calculateur à

cartes perforées de faible fiabilité. Si, durant la semaine, des ingénieurs pou-

vaient corriger les erreurs, les périodes chômées comme les fins de semaines
voyaient les machines s’arrêter invariablement sur des bogues. La frustration
de Hamming le conduit à inventer le premier code correcteur véritablement
efficace. Cette période correspond à la naissance de la théorie de l’informa-

tion. Claude Shannon en 1948 formalise cette théorie comme une branche
des mathématiques en commençant par montrer qu’il existe toujours un bon

code qui peut être utiliser pour envoyer de l’information à travers un canal,

sa preuve était probabilistique ; le fameux théorème de Shannon ne permet

pas de donner explicitement les bon codes, malgré qu’il montre leurs exis-
tence. C’était le début d’une nouvelle ère où une multitudes de branches des

sciences mathématiques et physiques se sont marié officiellement ou officieu-

sement pour donner naissance à la théorie de l’information avec toutes ses


branches. En effet, la théorie des nombres, la théorie des groupes, l’algèbre

5
linéaire, la géométrie algébrique, les statistiques, les probabilités, la combi-
natoire, l’électronique, la physique quantique, chimie quantique ... trouvent

toutes des applications dans la théorie de l’information (classique, quantique

ou même post-quantique). Plus encore plusieurs spécialités ont pu se déve-

lopper et ont tiré de grands profits de la théorie de l’information. Citons par

exemple les retombés du liste décodage sur les problèmes combinatoires ou

certaines preuvent des problèmes mathématiques qui utilisent l’information


quantique.
Au temps actuel la science des codes correcteurs d’erreurs est vue comme

une branche de la théorie de l’information, elle se résume à la construction

de nouveaux codes correcteurs d’erreurs performants et à l’étude de leurs


propriétés et aussi à leurs utilisation en pratique.

6
Chapitre 2

Généralités sur les codes linéaires

Définition 2.0.1 Soit A un alphabet (souvent on considère les corps finis),

et soit A l’ensemble des vecteurs formés à partir de A. Un code C est un

sous ensemble de vecteurs de A. Un élément de C est appelé mot du code.

Exemple 2.0.2 On considère le corps F2 = {0, 1} (l’alphabet). L’ensemble


C = {000, 111, 011, 101, 001} est un code de longueur 3 il contient 5 mots.
Ce genre de code est appelé code en bloque.

Dans la suite de ce chapitre nous introduisons les codes linéaires et leurs

propriétés. Ces codes sont les plus intéressants et les plus utilisés en pratique.

2.1 Les codes linéaires

Cette classe de codes est la plus abondante et la plus utilisé en pratique.

La puissance de ces codes est induite de leurs richesse mathématique et sur

la présence d’algorithmes efficaces d’encodage et de décodage. Ces codes sont

7
favoris pour les transmissions, (internet ”les codes fontaines”) pour les com-
munication intersatellitaires (codes BCH, Hadamard ...) ; pour résoudre les

problèmes de sécurité tels que numéro de RIB, numéro de sécurité sociale

(les codes de parités détecteurs) pour le stockage des donnés (les codes de

Reed–Solomon (DVD et CD))...


Soit Fq un corps fini à q éléments (on l’appelle aussi l’alphabet). Tout

sous ensemble C de Fnq est appelé code en bloque de longueur n sur Fq .


On peut considérer Fnq comme étant un Fq -espace vectoriel de dimension

n sur Fq et donc on peut considérer des sous espaces vectoriels de Fnq . Cela

justifie la définition suivante.

Définition 2.1.1 Un sous espace vectoriel C de Fnq de dimension k est ap-

pelé un code linéaire [n, k]. Les vecteurs de C sont appelés mots du code
ou (codeword).

Exercice 2.1.2 On considère les codes en bloque suivants :

C1 = {01, 10} et C2 = {01, 00},

lequels des codes précédents est linéaire.

Un code linéaire de dimension k sur Fq contient q k mots. La quantité


R = k/n est appelée taux de transmission ou bien rendement (rate). Pour

des applications on favorise des codes avec un grand rendement.

Exercice 2.1.3 Donner un encadrement pour R ;

<R≤ .

8
Comme un code linéaire est un espace vectoriel, alors il admet une base.
La matrice G dont les lignes forment une base de C est dite matrice géné-

ratrice de C. Comme C est de dimension k et de longueur n, alors G est de

type k × n. La matrice G définit complètement le code C du fait que :

C = {xG | x ∈ Fkq }. (2.1)

Exercice 2.1.4 Donner la matrice génératrice du code linéaire de l’exer-

cise 2.1.2 Soit C le code sur F2 tel que : C = {1100, 1110, 1010}

1. Ce code est-il linéaire ?

2. Comment transformer ce code en un code linéaire.

Montrer que si G est une matrice génératrice d’un code linéaire [n, k], alors
on a ce qui suit.

1. G est de rang k.

2. G admet une sous matrice k × k non singulière.

3. Les lignes de G sont linéairement indépendantes.

Exercice 2.1.5 (I) On considère un code linéaire de longueur n sur F2 dont

la matrice génératrice G est donnée ci-dessous : (ce code est dit code à répé-

tition)

G = (11 . . . 111).

(a) Quelle est la dimension de ce code.

(b) Déterminer les mots du code.

(II) On considère un code linéaire dont la matrice génératrice est donnée

ci-dessous :

9
 
 1 0 1 
G= ,
0 1 1

déterminer les mots du code.


Même question pour le code de matrice génératrice.
 
 1 0 0 1 1 
 
G=
 0 1 0 1 0
.

 
0 0 1 1 1

Comme une base d’un espace vectoriel n’est pas unique, la matrice géné-
ratrice d’un code linéaire n’est pas unique, cependant il existe une matrice

génératrice particulière qui est trés intéressante en pratique.

Définition 2.1.6 Une matrice génératrice d’un code est dite sous forme sys-

tématique si et seulement G = (Ik |A), où Ik est la matrice identité k × k et

A une matrice k × (n − k).

Exemple 2.1.7 La matrice G suivante est la matrice systématique du code

de Hamming [7, 4].  


 1 0 0 0 0 1 1 
 
 0 1 0 0 1 0 1 
 
 
 0 0 1 0 1 0 1 
 
 
0 0 0 1 1 1 1

On considère le code binaire défini par sa matrice génératrice,

10
 
 1 1 1 0 
G= 
0 0 1 1

Une permutation de la deuxième et quatrième colonne donne la matrice gé-


nératrice sous forme systématique :
 
 1 0 1 1 
Gsys =  
0 1 1 0

Exercice 2.1.8 Soit C le code binaire défini par

C = {0000, 1100, 1010, 1001, 0110, 0101, 0011, 1111}.

1. Montrer que C est un code linéaire de longueur 4 et dimension 3.

2. Donner sa matrice génératrice sous forme systématique.

Proposition 2.1.9 Tout code C[n, k] peut se mettre sous forme systéma-

tique à permutation près.

Preuve 2.1.10 Une matrice génératrice d’un code [n, k] étant une base du

code en tant qu’espace vectoriel, il existe nécessairement une sous matrice

k × k inversible dans cette matrice génératrice. Puisque des combinaisons

linéaires indépendantes des lignes de la matrice génératrice ne modifient pas


le code globalement il existe donc une matrice génératrice du code compor-

tant une sous matrice identité k × k on peut alors se ramener à une forme

systématique par permutation.

Un code linéaire peut être définit par sa matrice génératrice ou sa matrice

11
dite matrice de contrôle de parité (parity check matrix) de C, donnée
par :

C = {x ∈ Fnq | Hxt = 0}. (2.2)

La matrice de parité est une matrice de type (n − k) × n.

Théorème. 2.1.11 Si C est un code [n, k]q de matrice génératrice G =

[Ik , A]q , alors sa matrice de parité est H = [−At , In−k ]q .

Preuve 2.1.12 Si on prends H = [−At , In−k ]q , on peut vérifier qu’on a


HGt = −At + At = 0. Alors C est contenue dans le ker de la transformation
linéaire x 7→ Hxt . Comme H est de rang n − k, cette application admet un
ker de dimension k, qui est aussi la dimension de C, d’où d’après l’égalité 2.2

H est la matrice de contrôle de C.

Exemple 2.1.13 Prouver que la matrice suivante est la matrice de contrôle

associée au code donnée dans l’exemple 2.1.7


 
 1 1 1 0 
Hsys =  
1 0 0 1

Prouver que la matrice H suivante est la matrice de contrôle associé au code

de Hamming [7, 4]

 
 0 1 1 1 1 0 0 
 
H=
 1 0 1 1 0 1 0 

 
1 1 0 1 0 0 1

12
On peut définir sur Fnq une métrique d(., .) appelée distance de Ham-
ming, donnée par :

d(x, y) = |{i | xi 6= yi }|,

où x = (x1 , . . . , xn ) et y = (y1 , . . . , yn ) sont des vecteurs de Fnq .

Exemple 2.1.14

d(111, 011) = 1, d(0011, 1010) = 2.

Exercice 2.1.15 Montrer que la distance de Hamming est une métrique sur
Fnq au sens topologique, c’est à dire elle vérifie :

(i) d(x, y) ≥ 0; ∀x, y ∈ Fnq ,

(ii) d(x, y) = 0 si et seulement si x = y,

(iii) d(x, z) ≤ d(x, y) + d(y, z).

L’espace vectoriel Fnq munit de la métrique d est un espace métrique dit

espace de Hamming. On appelle boule de Hamming la boule fermée de


centre x et de rayon τ définie par :

Bτ (x) = {c ∈ Fnq | d(x, c) ≤ τ }.

Lemme 2.1.16 Soit τ un entier naturel. Pour tout x ∈ Fnq , alors le nombre
d’éléments d’une boule de Hamming est :

τ µ ¶
X n
|Bτ (x)| = (q − 1)τ (2.3)
i=0
i

13
Preuve 2.1.17 En effet soit j un entier tels que 0 ≤ j ≤ τ . Il existe alors
un mot qui est le centre de la boule tels que d(x, y) = 0, n(q − 1) élément de
¡ ¢
Fnq tels que d(x, y) = 1, n2 n(q − 1)2 élément de Fnq tels que d(x, y) = 2, . . .
P ¡ ¢
etc. Il y a donc au total τj=0 nj n(q − 1)j mots dans une boule.

On remarque que la cardinalité d’une boule de Hamming ne dépends pas de


x.

Le poids de Hamming d’un mot x qu’on note w(x) est le nombre de

coordonnés non nulles de x, i.e.

w(x) = d(x, 0).

Exercice 2.1.18 Quels sont les poids des mots suivants :

x = (1110100), w(x) =

y = (0101100), w(y) = .

La distance minimale d’un code C ⊂ Fnq est donnée par

d(C) = min {d(x, y) | x, y ∈ C, x 6= y}.

Le poids minimal d’un code C est

ω(C) = min {ω(x) | x ∈ C, x 6= 0}.

Un [n, k] code linéaire C de distance minimale d est appelé un [n, k, d]-code.

Exercice 2.1.19 Prouver que pour un code linéaire la distance minimale et

14
le poids minimal sont égaux, en remarquant que d(x, y) = w(x − y)
Donner la distance minimale d’un code à répétition [n, 1].

Donner la distance minimale du code C défini dans l’exercice 2.1.8.

Exercice 2.1.20 On considère le sous ensemble de F62 suivant

C = {000000, 100110, 010101, 110011, 001011, 101101, 011110, 111000}.

Montrer que C est un code linéaire de paramètres [6, 3, 3] de matrice généra-

trice et de contrôle respectivement les matrices G et H suivantes.


 
 1 0 0 1 1 0 
 
G= 
 0 1 0 1 0 1 
 
0 0 1 0 1 1

 
 1 1 0 1 0 0 
 
H=
 1 0 1 0 1 0 

 
0 1 1 0 0 1

2.2 Distribution des poids

On note Ai (C) le nombre de mots du code C de poids i. On peut alors

montrer l’exercice suivant.

Exercice 2.2.1 Soit C un code linéaire [n, k, d] sur Fq . Montrer ce qui suit

1. A0 (C) + A1 (C) + . . . + An (C) = q k .

2. A0 (C) = 1 et A1 (C) = A2 (C) = . . . Ad−1 = 0

15
3. Si C est un code binaire qui contient le mot (1 . . . 1) alors Ai (C) =
An−i (C)

Définition 2.2.2 Pour un code C de longueur n on appelle énumérateur de

poids le polynôme
n
X
WC (x) = A i xi , (2.4)
i=0

où Ai est égale au nombre de mots de poids i du code C.

En remplaçant x par x/y et en multipliant par y n , on peut transformer le

polynôme WC (x) en un polynôme en deux variables x et y comme suit :

n
X
WC (x, y) = Ai xn−i y i .
i=0

Exemple 2.2.3 Le code binaire C = {00, 11} admet comme énumérateur de

poids le polynôme
W (x, y) = x2 + y 2 .

Exercice 2.2.4 Sur F2 si C1 = {000, 111} et C2 = {000, 011, 110, 101},

montrer alors qu’on a :

WC1 (x, y) = x3 + y 3 et WC2 (x, y) = x3 + 3xy 2 .

Exercice 2.2.5 Prouver le polynôme énumérateur de poids du code C défini

sur F11 ayant pour matrice génératrice


 
 1 0 1 3 
G= ,
0 1 3 10

16
est égale à
WC1 (x, y) = x4 + 40xy 3 + 80y 4 .

Théorème. 2.2.6 (Les identités de MacWilliams) Soit C un code linéaire


P P
[n, k]q et C ⊥ son dual, alors WC (x) = ni=0 Ai xi et WC ⊥ (x) = ni=0 A⊥
i x
i

les polynômes énumérateurs de C et C ⊥ respectivement, alors

1 (1 − x)
WC ⊥ (x) = [1 + (q − 1)x]n WC ( ).
|C| 1 + (q − 1)x

Une conséquence du Théorème 2.2.6 on peut montrer

n−r µ ¶ r µ ¶
1 X n−i 1 X n−i
Ai = r A⊥ . (2.5)
q k i=0 r q i=0 n − r i

Preuve en exercice.

Problème 2.2.7 (de recherche) : Déterminer la distribution de poids des

codes cycliques défini un peu plus loin.

2.3 Détermination de la distance de Minimale

La distance minimale d de C se déduit d’une de ses matrices de contrôle

comme suit :

Proposition 2.3.1 Soit H une matrice de contrôle de C. L’entier d est égale


au nombre minimum de vecteurs colonnes de H qui, en tant que vecteurs de

Fn−k
q , sont linéairement dépendantes.

Il résulte de la proposition que tout système de d − 1 colonnes de H est libre.

C’est une conséquence de l’énoncé suivant :

17
Lemme 2.3.2 Soit r un entier > 1.

1. S’il existe dans C un mot de poids r, alors il existe r colonnes de H

linéairement dépendantes.

2. S’il existe r colonnes de H linéairement dépendantes, alors il existe


dans C un mot de poids r0 avec 1 ≤ r0 ≤ r.

Exemple 2.3.3 Donner la distance minimale du code de Hamming [7, 4].

Considérons la matrice H à coefficients dans F2 définie par


 
 1 1 1 0 1 0 0 
 
 1 0 1 1 0 1 0 
 
 
1 1 0 1 0 0 1

Montrer qu’elle est associé à un code [7, , ]

Exercice 2.3.4 Donner les paramètres des code C1 et C2 qui admettent pour
matrices génératrice respectivement G1 et G2 suivantes
 
 1 0 1 1 
G1 =  
0 1 α α2

à coefficient dans F4 = {0, 1, α, α2 }.

 
 1 0 0 1 1 1 
 
G2 = 
 0 1 0 1 α α 2 .

 
0 0 1 1 α2 α

18
2.3.1 Les bornes sur la distance minimale

Il existe des algorithmes probabilistiques pour la détermination de la dis-


tance minimale de grands codes, cependant le problème de la détermination
de la valeur exacte de la distance minimale n’a pas été résolue pour plusieurs

familles de codes bien connus. Ça a même été démontré par Dumer et al. que

l’approximation de la distance minimale des codes linéaires est un problème

N P -dur. Sous certaines conditions le problème est partiellement résolu ou des

bornes ont été données. Ces bornes permettent en utilisant des algorithmes

de recherche de trouver physiquement le mot du plus petit poids quand on


ne peut pas le faire mathématiquement. En effet la recherche exhaustive du
mot de plus petit poids n’est pas faisable, du fait que si k est la dimension du

code C, alors C contient q k mots, d’où l’importance des bornes supérieures


et inférieures sur d.

La plus simple des bornes, mais aussi la plus importante est la borne dite
de Singleton :

Lemme 2.3.5 (La Borne de Singleton )Un [n, k, d]q code C, vérifie l’inéga-
lité suivante

k + d ≤ n + 1,

dite borne de Singleton.

Preuve 2.3.6 On considère le sous espace linéaire W ⊂ Fnq défini par :

W = {a1 , . . . , an ) ∈ Fnq |ai = 0∀i ≥ d}.

Tout a ∈ W est de poids de Hamming ≤ d − 1, alors W ∩ C = {0}. Puisque

19
la dimension de W = d − 1 on obtient :

k +(d−1) = dim C +dim W = dim(C +W )−dim(W ∩C) = dim(C +W ) ≤ n

Les codes satisfaisant cette borne sont dit M DS (Maximum Distance Sepa-

rable) ils sont trés intéressants en pratique.

Exemple 2.3.7 Le code de binaire C de matrice génératrice


 
 1 1 0 
G= ,
0 1 1

est un code M DS.

Exercice 2.3.8 Montrer qu’un code C est M DS si et seulement si tout sys-

tème de n − k colonnes de H (la matrice de contrôle de C) est libre.

Proposition 2.3.9 Soit C un [n, k, d] code linéaire, alors les assertions sui-
vantes sont équivalentes :

1. C est un code M DS.

2. Chaque k colonnes de la matrice génératrice sont linéairement indépen-

dants.

3. Chaque n − k colonnes de la matrice de contrôle H sont linéairement

indépendants.

4. étant donnés d positions non nuls, il existe un mot du code de poids d

et de support exactement les d positions.

20
Exercice 2.3.10 En utilisant les identités de Macwilliams donnés par le
Théorème 2.2.6, montrer que le nombre de mots de poids n − k + 1 d’un code

M DS [n, k] est égale à


µ ¶
n
(q − 1) . (2.6)
n−k+1
En utilisant l’équation 2.6 montrer que si C est un code M DS [n, k]q et Ai

le nombre de mots de C de poids i alors,

¡ ¢ Pi−d ¡ ¢ i−d+1−j
Ai = ni j i
j=0 (−1) j (q − 1)
¡n¢ Pi−d ¡ ¢
= i (q − 1) j=0 (−1)j i−1j
q i−d−j .

Problème 2.3.11 Montrer que s’il existe un code [n, k]q qui est M DS, alors
n ≤ q + 1, à l’exception du cas où q est paire et k = 3 ou k = q − 1, dans ce

cas n ≤ q + 2.

La borne de Singleton est le cas linéaire pour la borne dite Borne de Gries-

mer donnée par le théorème suivant.

Théorème. 2.3.12 Soit C un [n, k, d] code sur Fq , alors

k−1
X d
n≥ d i e.
i=0
q

Preuve 2.3.13 La preuve se fait par recurrence voir [5, p 547].

Puisque dd/q 0 e = d et dd/q i e ≥ 1 pour i ∈ [k − 1], alors la borne de Griesmer


implique celle de Singleton.

Une autre importante borne sur les paramètres d’un code linéaire et qui

résout l’un des problèmes les plus importants en théorie des codes ; pour n, k

et d donnés est ce qu’il existe un [n, k, d] code sur Fq ?

21
Le théorème suivant appelé empilement des sphères ou borne de
Hamming donne la réponse.

Théorème. 2.3.14 ( [3, Théorème 1.12.1]) Pour des entiers n, k, d, il existe

un [n, k, d] code sur Fq dés lors que :

b d−1 cµ ¶
X 2
n
k
q (q − 1)i ≤ q n .
i=0
i

Exercice 2.3.15 Montrer qu’il ne peut exister un code binaire [12, 7, 5].

2.4 La dualité des codes linéaires

2.4.1 Le dual Euclidien

à chaque code linéaire C on peut associer un code linéaire donné par la


définition suivante.

Définition 2.4.1 Soit C ⊂ Fnq un code linéaire de dimension k. Le code

dual Euclidien ou simplement, code dual de C est l’orthogonal de C pour

le produit scalaire usuel défini sur Fnq × Fnq par

n
X
hx, yi = xi y i ,
i=1

où x = (x1 , . . . , xn ) et y = (y1 , . . . , yn ). Ce code est noté C ⊥ et il est défini

par
C ⊥ = {x ∈ Fnq , hx, yi = 0, ∀y ∈ C}.

Exemple 2.4.2 Sur F2 si C = {000, 111} alors C ⊥ = {000, 011, 110, 101}

22
Exercice 2.4.3 Montrer que le code dual C ⊥ d’un code linéaire est un code
linéaire de dimension k ⊥ = n − k. Sa matrice génératrice est la matrice de

contrôle de parité de H du code C, et sa matrice de contrôle de parité est la

matrice génératrice G de C.

Montrer que le code dual du code à répétition [n, 1, n] est le code linéaire

[n, n − 1, 2]. Ces deux codes avec l’espace tout entier (Fnq ) et son dual (le code

identiquement nul) sont appelés codes triviaux ou élémentaires.


Montrer que si C est M DS, alors C ⊥ est M DS.

La distance minimale de C ⊥ est appelée distance duale et notée d⊥ .

2.4.2 Le dual Hermitien

Si on considère des codes sur Fq2 , alors nous pouvons considérer le produit

scalaire Hermitien. Le code dual par rapport à ce produit scalaire est un code
linéaire noté par C ⊥h et appelé dual Hermitien. Il est défini par :

n
X
C ⊥h
= {x ∈ Fnq2 , xi yiq = 0 , ∀y ∈ C}.
i=1

2.4.3 Les codes auto-duaux

Un code linéaire est dit auto-orthogonal au sens Euclidien s’il vérifie


C ⊂ C ⊥ (self-orthogonal, weakly self-dual). Il est dit auto-dual au sens

Euclidien s’il vérifie C = C ⊥ .

Exercice 2.4.4 (Charactéristique de l’Auto-orthogonalité :)

En utilisant la définition 2.4.1 montrer que C est auto-orthogonal si et seule-

23
ment si :
x.x = 0, et x.y = 0, ∀x ∈ C, ∀y ∈ C. (2.7)

Remarque 2.4.5 D’aprés l’exercice 2.4.4 pour prouver l’auto-orthogonalité


de C, il suffit d’appliquer (2.7) pour les vecteurs de la matrice génératrice.

Exemple 2.4.6 Le code binaire C = {00, 11} est le plus simple code auto-
dual. Il admet comme énumérateur de poids le polynôme

W (x, y) = x2 + y 2 .

Un code auto-dual C doit être un [n, n/2] code avec n pair. Cette propriété
vient du fait que pour un code linéaire C on a

dim C + dim C ⊥ = n.

Remarque 2.4.7 De ce qui précède, on en déduit qu’un [n, k] code linéaire

est auto-dual si et seulement s’il est auto-orthogonal avec k = n/2.

Exemple 2.4.8 Soit le code linéaire binaire de matrice génératrice


 
 1 0 1 0 
G= 
0 1 0 1

Alors G.t G = 0. Par suite, C est autodual.

24
Exercice 2.4.9 Soit C un [6, 3, 2] code sur F2 , de matrice génératrice

 
 1 0 0 1 1 1 
 
G= 
 0 1 0 1 1 1 .
 
0 0 1 1 1 1

1. Montrer que C n’est pas auto-orthogonal,

2. que peut-on déduire de ce qui précède ?

Théorème. 2.4.10 ([6, P 209] Il existe un code [n, n/2] si et seulement si

on est dans l’un des cas suivants :

1. q et n sont tout deux paires.

2. q ≡ 1 mod 4 et n est paire.

3. q ≡ 3 mod 4 et n est divisible par 4

En particulier il existe des codes auto-duaux [n, n/2]2 pour tout entier

positive n. Un code linéaire est dit auto-orthogonal au sens Hermitien

s’il vérifie C ⊂ C ⊥h . Il est dit auto-dual au sens Hermitien s’il vérifie


C = C ⊥h .
Un code est dit divisible si tout les mots du code ont un poids divisible

par un entier commun ∆.

Théorème. 2.4.11 (gleason-Pierce-Ward)([3, Ch 9] Soit C un code [n, n/2]q

divisible avec divisor ∆ > 0, alors on a l’une des situations qui se présente

1. q = 2 et ∆ = 2, ou

2. q = 2 et ∆ = 4 et C est auto-dual, ou

25
3. q = 3 et ∆ = 3, et C est auto-dual Euclidien,

4. q = 4 et ∆ = 2, et C est auto-dual Hermitien, ou

5. ∆ = 2 et C est équivalent à un code sur Fq de matrice génératrice


[In/2 , In/2 ].

Exercice 2.4.12 On considère les codes binaires suivantes.

C1 = {0000, 1100, 1010, 1001, 0110, 0101, 0011, 1111} ⊂ (F2 )4 .


C2 = {10000, 01010, 00001} ⊂ (F2 )5 .

C3 = {00000, 10101, 01111, 11010} ⊂ (F2 )5

1. Dire dans chaque cas si le code est linéaire.

2. Lorsque le code est linéaire ; en donner une matrice génératrice, une


matrice de contrôle et la distance minimale.

Exercice 2.4.13 soit le code binaire C, dont la matrice génératrice est don-

née par  
 1 1 0 1 1 0 
 
G= 
 1 1 0 0 0 1 
 
0 1 1 1 0 0

1. combien de mots a le code C

2. trouver une matrice M telle que la matrice en block [IM ] engendre un

code C 0 équivalent à C.

3. En déduire une matrice de contrôle H 0 de C 0 puis H de C. Quelle est la

distance minimale de C ?

4. Si le mot 111110 est reçu, quel est le mot émis ?

5. Le mot 111111 est-il un mot de C ? Quel est le mot de C le plus proche ?

26
Exercice 2.4.14 Un [n, k, d]-code linéaire est dit M.D.S (maximum distance
séparable) si l’inégalité de singleton est une égalité pour ce code. i.e. si k =

n − d + 1.

1. Un code de Hamming binaire de longueur 7 est-il M.D.S ?

2. Soit C le code linéaire sur F5 dont une matrice génératrice est


 
 3 4 1 0 
G= 
0 3 4 1

(a) Déterminer la dimension et le cardinal de C.

(b) Déterminer une matrice de contrôle et la distance minimale de C.

(c) C est-il M.D.S ?

(d) Décoder les mots 3001, 1101 et 2311.

27
Chapitre 3

Les opérations d’encodage et de


décodage

Les codes correcteurs d’erreurs sont un outil visant à améliorer la fiabilité


des transmissions sur un canal bruité. Ils sont utilisés en pratique comme

suit : Nous avons un message constitué d’éléments de Fq (corps fini à q


éléments) qu’on veut transmettre à travers un canal. Les canaux considérés
sont souvent les canaux de communications (satellites, fibres optiques ... ) ou

des canaux de stockage CD, DVD... On utilise un code correcteur d’erreurs

pour transmettre ce message, suivant le schéma de la figure suivante.

PSfrag replacements
x = x1 . . . x k
c = c1 . . . c n
y =c+e

Fig. 3.1 – Système de communication

28
L’opération de transmission comporte plusieurs étapes, soient l’étape
d’encodage, l’envoie du message à travers le canal et enfin l’opération de

décodage. Ce qui nous intéresse dans ce cours ce sont les opérations d’enco-

dage et de décodage, puisque celle de l’envoie du message sort de l’ordre du

savoir faire de l’ingénierie.

3.1 L’étape d’encodage

Soit C un code [n, k] linéaire sur Fq de matrice génératrice G alors il

contiens q k mots et peut être utilisé pour envoyer q k message. L’étape d’en-
codage consiste à ajouter une certaine redondance au message de tels sorte à

le rendre cohérent avec le code. En effet, pour encoder un message x il suffit

de le multiplier par la matrice génératrice G, on obtient alors un mot du code.


Cela résulte de la caractérisation d’un code linéaire donné par l’équation (2.1)

Exemple 3.1.1 Soit C un code linéaire de matrice génératrice G donnée

par :  
 1 0 0 0 1 1 
 
G=
 0 1 0 1 0 1 

 
0 0 1 1 1 0

Trouver les mots du codes qui correspondent au messages suivant :

u1 = 011, u2 = 101.

Remarque 3.1.2 Se donner une matrice génératrice sous forme systéma-

tique s’avère être trés intéressant en pratique. En effet Si on on encode un

29
message x1 . . . xk par un code [n, k] on obtient le mot du code x1 . . . xk xk+1 . . . xn ,
les k premières coordonnées sont dites symboles d’informations, les autres

sont dites symboles de redondances.

L’opération d’encodage est la plus simple étape dans la transmission d’un

message et c’est aussi la moins coûteuse en temps et en espace ; elle nécessite

O(nk) opérations.

3.2 L’étape de décodage

La deuxième étape de la transmission consiste à envoyer le message à


travers un canal. Puisque le canal ajoute un bruit, le message arrive déformé
(un certains nombre d’erreurs a été ajouté au message initial) et là, le dé-

codeur doit corriger les erreurs pour retrouver le message initial avant de le

donner à l’utilisateur. C’est ce qu’on appelle par l’étape du décodage. Même


si ce schéma paraît élémentaire, la réalisation est bien plus compliqué. Pour
mieux comprendre les difficultés dans cette étape on commence par le modèle

mathématique du canal de communication puisque c’est lui le responsable du

bruit

Définition 3.2.1 Un canal de communication est dit discret si toutes les

entrés et les sorties sont discrètes (non continue). Un canal discret est dit

sans mémoire si la sortie de n’importe quelle transmission est indépendante

des sorties des transmissions précédentes ; i.e. si x = x1 . . . xn et y = y1 . . . yn

30
sont des vecteurs de longueur n sur Fq , alors

n
Y
P (y reçu| x envoyé) = P (yi reçu | xi envoyé ) (3.1)
i=1

Définition 3.2.2 Un canal symétrique q-aire (qSC), est un canal discret


sans mémoire sur Fq tels que :

1. chaque sortie de la transmission a la même probabilité p < 1/q appelée

la probabilité (crossover) ou la probabilité d’un q-dit d’être erroné.

2. si un symbole est reçu erroné alors chacune des q − 1 erreurs possible


a la même chance d’être reçu, on dit dans ce cas que la loi d’emission
est uniforme

3. la probabilité du canal est donnée par

P (y reçu | x envoyé ) = p pour y 6= x

P (x reçu | x envoyé ) = 1 − (q − 1)p

Question 3.2.3 D’après vous quelle est l’estimation de la probabilité sui-

vante
P (y reçu | y envoyé ) =

Exemple 3.2.4 Le canal symétrique binaire (BSC) est un canal sans mé-

moire qui admet comme alphabet {0, 1} et sa probabilité du canal est ,

P (1 reçu | 0 envoyé) = P (0 reçu | 1 envoyé ) = p

P (1 reçu | 1 envoyé ) = P (0 reçu | 0 envoyé ) = 1 − p

31
PSfrag replacements
1
1−p
1
p
p
0
reçu
1−p
0
envoyé

Fig. 3.2 – Canal symétrique binaire (BSC)

Exercice 3.2.5 Supposons que la probabilité crossover est de 0.2 sur un ca-
nal binaire symétrique, montrer que la probabilité d’envoyer 5 bits sans erreur

est alors 0.85

L’exercise précédent montre que la probabilité de ne pas avoir d’erreur sur

un message décroît rapidement en fonction de la longueur du message.

Exercice 3.2.6 On suppose que l’on utilise pour la transmission un canal

binaire symétrique de probabilité crossover p.

(a) Déterminer pour le code à 3 répétitions de longueur 12 la probabilité


de transmettre 4 bits sans erreurs en fonction de p.

(b) Même question avec le code de Hamming binaire de longueur 7. Com-

parer avec les résultats de la première question.

32
3.3 Les algorithmes de décodage

3.4 Décodage par maximum de vraisemblance

Le décodage par maximum de vraisemblance (Maximum likelihood deco-

ding (M LD)) est une règle de décodage basée sur l’idée que cy est le plus

probable mot qui a été envoyé si

P (y reçu | cy envoyé ) = max P (y reçu | c envoyé).


c∈C

Pour un qSC si cy et y sont différents en i positions alors en appliquant 3.1


on trouve

P (y reçu | cy envoyé ) = pi [1 − (q − 1)p]n−i . (3.2)

Puisque p < 1/q la quantité (3.2) est maximal si i est


minimale. Pour un code linéaire nous avons défini la distance de Hamming
d(x, y) entre deux vecteurs x, y du code C par le nombre of de coordonnées

différentes de x et y, alors sur un qSC le décodage par distance minimale

(minimum-distance) ou le décodage par le mot le plus proche (nearest-


neighbor), qui signifie décoder un mot reçu y en un mot x qui est le plus

proche que y dans le sens de la distance minimale de y est la même que

d’utilisé le décodage M LD. Souvent le mot trouvé n’est pas unique.

33
3.5 Le décodage par syndrôme

Définition 3.5.1 Soit C un [n, k] code linéaire, à toute matrice de parité H

de C on associe l’application linéaire suivante dite application syndrôme

SH : Fnq −→ Fn−k
q
(3.3)
y 7−→ SH (y) = Hy t .

Exercice 3.5.2 Considérons SH l’application définie dans (3.5) :

1. Montrer que SH est linéaire.

−1
De la définition de la matrice de contrôle H de C on obtient que SH ({0}) =
C. Le translaté d’un vecteur y ∈ Fnq est défini comme étant

{y + c|c ∈ C}.

Alors on peut démontrer la proposition suivante

Proposition 3.5.3 Deux mots sont dans le même translaté si et seulement

si ils ont le même syndrôme. Tous les translatés d’un code C ont le même

nombre d’éléments égale à |C| et ils forment une partition de Fnq .

Preuve 3.5.4 L’application linéaire syndrôme induit une relation d’équiva-

lence sur tout l’espace définie par

xRy ⇐⇒ Hxt = Hy t ⇐⇒ x + y ∈ C. (3.4)

Il est claire que la classe d’équivalence d’un mot de Fnq est le translaté du

code C de générateur x et est noté x + C. Elle correspond à tout les mots de

34
l’espace ayant le même syndrome Hxt . Considérons maintenant l’ensemble
des mots d’un translaté {a + c| c ∈ C}, supposons que deux éléments du

translatés sont égaux alors il existe c1 et c2 dans C tels que a + c1 = a + c2

et donc c1 = c2 , alors cela donne que tous les éléments a + c sont distincts

pour des mots c distincts du code, d’où le nombre d’élément du translaté du

code est |C|. Du faite que les classes d’équivalence forment une partition de

l’espace, alors ∪a∈Fq a + C = Fnq et les translatés sont ou bien disjoints ou


bien égaux.

En utilisant 3.5 on peut montrer qu’on a

−1
SH (Hy t ) = y + C.

A tous les translaté on peut associer un mot du plus petit poids contenu dans
le translaté (mot non nécessairement unique), ce mot est appelé coset leader

et est noté cl.


L’algorithme du décodage par syndrôme pour un code de matrice de

contrôle H consiste à décoder tout mot reçu y en y − cl pour cl le coset


leader associé au syndrôme Hy t de y. Autrement cet algorithme consiste à
faire les étapes suivantes :

1. Calculer le syndrôme s = Hy t de y.
−1
2. Dans la liste SH (s) + C trouver le coset leader cl.

3. Décoder y 7→ y − cl.

35
Exemple 3.5.5 On considère le code

C = {000000, 100110, 010101, 110011, 001011, 101101, 011110, 111000}.

 
 1 1 0 1 0 0 
 
C’est un code [6, 3, 3] de matrice de contrôle H = 
 1 0 1 0 1 0 .

 
0 1 1 0 0 1
Supposons qu’on a reçu le vecteur y = 101011. Le vecteur syndrôme de y est

s = H t y = (110)t . On a

−1
SH (s) = 101011+C = {101011, 001101, 111110, 011000, 10000, 000111, 010011, 011111},

le coset leader cl(s) = 10000, et donc on décode par y − cl(s) = 001011 ∈ C

Exercice 3.5.6 Décoder le mot reçu 1110000 en utilisant [7, 4, 3], en utili-
sant le décodage par syndrôme et le décodage par le mot le plus proche du

code de Hamming.

Exercice 3.5.7 1. Quel est la distance minimale et la capacité de correc-

tion du code binaire

C = {000000, 100110, 010101, 110011, 001011, 101101, 011110, 111000}

2. Le mot reçu est 110111. Quel est le mot de C le plus proche ?

36
Exercice 3.5.8 En utilisant le code de matrice de contrôle
 
 1 0 0 1 0 
 
H=
 0 1 0 1 0
,

 
0 0 1 1 0

décoder le mot 01101, puis le mot 10010, que remarquez vous.

Théorème. 3.5.9 Le décodage par syndrôme est un décodage à maximum

de vraisemblance.

Preuve 3.5.10 Un tel décodage décode y en un mot de C le plus proche de


y. En effet soit c = y − cl ∈ C obtenu par décodage par syndrôme de y
et soit c1 ∈ C alors d( y, c) ≤ d(y, c1 ) car dH (y, c) = wH (y − c) = wH (cl) ≤

wH (y −c1 ) = d(y, c1 ) puisque y −c et y −c1 appartiennent au même translaté.

3.5.1 Le M LD est N P -dur

Il a été démontrer par Berlekamp que le M LD est un problème N P -dur

pour un code binaire linéaire. Nous pouvons donc conclure de ce résultat que
toutes les méthodes de décodage que nous venons de voir sont N P -dur pour
les codes linéaires. Cependant on ne savait pas si le M LD est N P -dur pour

une famille spécifique de codes. Récemment Guruswami et Vardy ont montré

que le M LD est N P -dur pour les codes de Reed–Solomon.

Une façon bien astucieuse de contourner le faite que le M LD soit un

problème N P -dur est de le paramétrer en un sous problème on ne corrigeant

qu’un nombre limité d’erreurs. Cela a donné lieux à une règle de décodage

raisonnable donné par le paragraph suivant.

37
3.5.2 Le décodage à distance bornée

Le décodage à distance bornée (bounded distance decoding, BDD)


est défini comme suit :
Les données : Un code linéaire C, un vecteur r de Fnq , reçu et un entier
positive τ .

La sortie : un mot x de C tel d(x, r) ≤ τ, si un tel mot existe.

De ce qui précède un nouveau besoin surgit,il s’agit de ces deux nouvelles

définitions.

Définition 3.5.11 On appelle la capacité de correction d’un code C de dis-


tance minimale d la quantité suivante t = b d−1
2
c, on dit alors que C est
t-correcteur.

Exemple 3.5.12 Un code de distance minimale 3 est 1-correcteur.

Dans ce sens les codes M DS ont une capacité maximale de correction.

Lemme 3.5.13 Soit C un code linéaire de paramètres [n, k, d] sur Fq , alors


pour tous x et x0 tels que x 6= x0 , les boules et Bτ (x) et Bτ (x0 ) sont disjointes
si τ ≤ b(d − 1)/2c. Soit x un élément de Fnq , il existe au plus un élément de

C qui appartienne à la boule Bτ (x).

Preuve 3.5.14 Supposons qu’il existe un élément m ∈ Fnq qui appartienne à


Bτ (x) ∩ Bτ (x0 ) avec x 6= x0 . Dans ce cas, on a

d(x, x0 ) ≤ d(x, m) + d(m, x0 ) ≤ 2τ ≤ d − 1

38
Les mots x et x0 étant distincts et d étant la distance minimale de C, on
obtient ainsi une contradiction.

L’argument est le même pour la deuxième assertion : supposons qu’il

existe deux éléments m et m0 de C dans la boule Bτ (x). On a alors d(m, m0 ) ≤

d − 1, d’où m = m.

Du Lemme3.5.13 on en déduit le résultat suivant

Corollaire 3.5.15 Soit C un code [n, k, d] sur Fq , alors : C peut détecter


d − 1 erreurs, et il peut corriger d’une manière univoque par décodage par le
mot le plus proche au plus t = b d−1
2
c erreurs.

Preuve 3.5.16 Si moins de d erreurs ont été commise sur un mot du code

alors le mot reçu n’est pas un mot du code et on sait que les erreurs se sont
produites. Soit x un mot de C tel que d(x, y) = τ ≤ t, alors le mot x de C

appartient en particulier à Bτ (y) d’après le Lemme 3.5.13 x est l’unique mot


du code dans cette boule et c’est alors l’unique mot du code à une distance

τ de y et alors le décodage par le mot le plus proche permet de corriger les


erreurs.

Exercice 3.5.17 Combien d’erreurs peut détecter ou corriger le code de

Hamming de longueur 7.

Le code à répétition, solution partiel pour la transmission Dans les

paragraphes précédents nous avons vu quelques méthodes de décodage qui ne

sont pas du tout évidentes. Cependant il existe un moyen mais coûteux mais
trés simple pour encoder et décoder si on n’est pas trés exigent ! ! !. Il s’agit

39
d’utiliser le code à répétition. L’encodage dans ce cas est le même que pour
les codes linéaires Ce code est la forme la plus simple des codes linéaire. C’est

un code [d, 1, d] de matrice génératrice G la matrice de type 1 × d remplie de

1. Souvent on utilise les codes à répétition binaire, dans ce cas le code n’a

que deux mots ; le mot (0 . . . 0) et le mot (1 . . . 1). . Dans ce cas chaque bit

à transmettre est simplement répété d fois dans le message transmis. Ainsi

pour d = 3 sur F2 les bits 0 et 1 sont transmis suivant la règle suivante :

0 → 000
.
1 → 111

Le décodage se fait par le mot le plus proche dans ce cas on dit par vote
majoritaire. Par exemple, si le mot reçu est 001 on en déduit que le bit émis

était 0. Si le message qu’on veut envoyer est 1101 en encodant avec ce code
on trouve 111111000111. Le décodage est ensuite trés simple puisqu’il suffit

de garder le bit majoritaire dans chaque bloc. La capacité de correction ainsi


obtenue est donc de b d−1
2
c. Le principal problème est qu’avec ce code le taux
1
de transmission est de d
ce qui est peu.

3.6 Le décodage par liste

Du Corollaire 3.5.15 on peut déduire que si le nombre d’erreurs est plus

grand que b(d − 1)/2c, on a les situations suivantes

1. Le décodeur déclare échec ou,

2. donne comme résultat plusieurs mots.

40
La situation précédente semble catastrophique et pourtant nous l’utilisons
avec efficacité sans s’en apercevoir ! !. En effet juste par exemple si on utilise

un correcteurs de text dans le Word ou le Latex, nous obtenons une liste de

mots très probables et c’est à nous de décider du mot le plus correcte.

3.7 Construction de nouveaux codes à partir

des codes connus

3.7.1 Les codes poinçonnés

Soit C un code [n, k, d]q , le code poinçonné de C en la position i est le

code P (C, i) obtenu en enlevant la coordonnée ci des mots du code :

P (C, i) = {(c1 , . . . , ci−1 , ci+1 , . . . , cn ) ∈ Fn−1


q |∃ci ∈ Fq ; (c1 , . . . , ci−1 , ci , ci+1 , . . . , cn ) ∈ C}

Proposition 3.7.1 Si C un code [n, k, d ≥ 2]q et 1 ≤ i ≤ n, le code poin-

çonné en la position i est un code linéaire de longueur n − 1, de distance


minimale d0 vérifiant d − 1 ≤ d0 ≤ d. En plus dim P (C, i) = k − 1, s’il existe

un mot de C avec une coordonné non nulle à la position i. Dans ce cas le code
est [n − 1, k − 1, d − 1] s’il existe un mot de C de poids d avec une coordonnée

non nulle à la position i et d0 = d sinon.

Preuve 3.7.2 Puisque P (C, i) est constitué de (n − 1) uplets à coordon-

nées dans Fq , alors P (C, i) ⊂ Fn−1


q . Pour montrer que c’est un code linéaire

il suffit de montrer que c’est un sous espace vectoriel de Fqn−1 . Soit x =

x1 . . . xi−1 xi xi+1 . . . xn un mot de C de poids d, alors x0 = x1 . . . xi−1 xi+1 . . . xn

41
est un mot de P (C, i), son poids vérifie :

d − 1 ≤ wt(x0 ) ≤ d.

S’il existe un mot de C avec une coordonné non nulle à la position i, alors

dim P (C, i) = k − 1, sinon dim P (C, i) = k. La suite se déduit donc.

3.7.2 Les codes raccourcis

Le code raccourci de C en la position i est le code R(C, i) obtenu en


enlevant la coordonnée ci des mots de codes pour lesquels ci = 0 :

R(C, i) = {(c1 , . . . , ci−1 , ci+1 , . . . , cn ) ∈ Fn−1


q |(c1 , . . . , ci−1 , 0, ci+1 , . . . , cn ) ∈ C}.

Exercice 3.7.3 On suppose qu’il existe au moins un mot de code a ∈ C tel

que ai = 1, alors le sous code de longueur n de C formé des mots de codes


c tels que ci = 0 est de dimension k − 1. En effet : On considère l’ensemble

suivant C0 = {(c1 , . . . , ci−1 , 0, ci+1 , . . . , cn ) ∈ C}, on peut montrer facilement

que C0 est un sous code de C, c’est à dire un sous espace vectoriel de C. On

considère l’application suivante :

f : C −→ Fq
(3.5)
(c1 . . . cn ) 7−→ ci .

f est bien une application linéaire non identiquement nulle, car ∃a ∈ C avec

ai = 1. On a Imf = Fq car f non nulle et kerf = C0 , d’où dim C0 =

dim C − dim Imf = k − 1. On peut construire un isomorphisme canonique

42
entre C0 et R(C, i) d’où dim R(C, i) = k−1. Dans le cas contraire c’est à dire
∀c ∈ C la ième coordonné est nulle, alors C = C0 et donc dim R(C, i) = k.

S’il existe un mot dans C de poids d tels que sa ième coordonné est nulle

alors on a dR(C,i) = d, sinon dR(C,i) ≥ d.

Remarque 3.7.4

R(C, i) ⊂ P (C, i).

3.7.3 Les codes étendus

Il existe plusieurs manière d’étendre un code en ajoutant une colonne

aléatoire ou une combinaison linéaire de certaine colonnes de sorte à préserver


certaine propriétés du code, mais la manière la plus usuelle consiste à ajouter

à la matrice génératrice une colonne de parité de sorte que chaque nouvelle


ligne ainsi obtenue ait une somme nulle.

Définition 3.7.5 à chaque code linéaire C on peut associer le code linéaire

Ĉ définie par :

n
X
Ĉ = {(x0 , . . . , xn ) | (x1 , . . . , xn ) ∈ C tel que x0 = − xi }.
i=1

Le code Ĉ est appelé code étendu de C. Sa matrice de contrôle est donnée

par :  
1 ... 1 1
 
 
 0 
 
Ĥ =  ,
 .. 
 H . 
 
0

43
Exemple 3.7.6 On considère les codes C1 = {00, 11}, C2 = {00, 01} sur F2
alors Ĉ1 = {000, 011}, Ĉ2 = {000, 101}.

Exercice
 3.7.7Soit C1 le code défini sur F4 et de matrice génératrice G1 =

 1 0 1 1 
 , montrer que Ĉ1 = {11011, 001αα2 , 111α2 α, 0000}.
2
0 1 α α

Exercice 3.7.8 Montrer que le code Ĉ est linéaire et admet pour paramètres
ˆ avec dˆ = d ou d + 1. Dans le cas binaire, si d est impaire alors
[n + 1, k, d]

dˆ = d + 1.

3.7.4 La somme directe de codes

On définit la somme directe de deux codes C1 [n1 , k1 , d1 ]q C1 [n1 , k1 , d1 ]q

par
C1 ⊕ C2 = {(c1 , c2 )|c1 ∈ C1 et c2 ∈ C2 },

où (c1 , c2 ) est la concaténation des mots c1 et c2 . De cette manière on obtient

un code de paramètres [n1 +n2 , k1 +k2 , min(d1 , d2 )]. La matrice génératrice de


la somme des codes
 est la somme
 directe des 
matrices génératrices.
 Autrement

 G1 0   H1 0 
on a GC1 ⊕C2 =  , et HC1 ⊕C2 =  
0 G2 0 H2

Exemple 3.7.9 Soit C le code binaire [4, 2, 2], donné par la matrice :

 
 1 1 0 0 
G= ,
0 0 1 1

alors C = D ⊕ D, où D est le code à répétition [2, 1, 2].

44
La somme directe des codes satisfait une propriété intéressante dans le cas
binaire, qui est fausse en général.

WC1 ⊕C2 = WC1 WC2 .

Exercice 3.7.10 Donner le polynôme énumérateur du poids du code C donné

dans l’exemple précédent.

3.7.5 La construction (u|u + v)

étant donnés deux codes C1 et C2 de même longueur, on définit le code


obtenu par la construction (u|u + v) par

C = {(u|u + v); u ∈ C1 , v ∈ C2 }

de matrice génératrice  
 G1 G1 
G= .
0 G2

Exercice 3.7.11 Montrer que le code C obtenu par la construction (u|u + v)


de deux codes C1 et C2 admet pour matrice de contrôle
 
 H1 0 
H= .
−H2 H2

Cette construction est particulièrement intéressante pour le cas binaire.

Proposition 3.7.12 Si Ci [n, ki , di ] pour i ∈ {1, 2} sont deux codes binaires,

alors la construction donne un code C de paramètres [2n, k1 +k2 , min(2d1 , d2 )].

45
Exemple 3.7.13 On considère C le code [4, 3, 2] construit par la construc-
tion (u|u
 + v)à partir du code C1 et C2 de matrice génératrice respectives
µ ¶
 1 0 
G1 =   et G2 = 1 1
0 1

46
Chapitre 4

Codes cycliques

4.1 La Factorisation de xn − 1

4.1.1 Les racines n-ièmes de l’unité

Dans cette section on s’intéresse à la factorisation du polynôme xn − 1 ;


avec les codes cycliques de longueur n sur Fq .

Soit Fq un corps fini de caractéristique p et n = mph , avec (m, p) = 1,


alors le polynôme xn − 1 admet la décomposition suivante :

h h
xn − 1 = xmp − 1 = (xm − 1)p .

Pour cela on se restreint au cas où n et q sont relativement premiers.


On dénote par Fqs le corps de décomposition de xn −1 sur Fq , c’est l’extension

de Fq qui contient toutes les racines du polynôme xn − 1. Comme (n, q) = 1,

la dérivée de xn − 1 est égale à nxn−1 et donc xn − 1 n’a aucune racine


double, donc il admet n racines distinctes dans Fqs . Ces racines sont appelées

47
racines n-ièmes de l’unité sur Fq , elles forment le sous groupe E n de F∗qs
de cardinal n. Comme F∗qs est cyclique alors E n est cyclique d’ordre n. Un

élément primitif de E n est appelé racine primitive n-ième de l’unité.


Donc si α est une racine primitive nième de l’unité, on a alors :

s s −1
α ∈ Fqs ⇒ αq = α ⇒ αq = 1 ⇒ n/(q s − 1).

L’entier s est appelé l’ordre de q modulo n et on le note par s = ordn q, c’est


le plus petit entier qui vérifie q s ≡ 1 mod n.

Puisque tout groupe cyclique d’ordre n admet φ(n) éléments d’ordre n, alors
il existe exactement φ(n) racines primitives n-ièmes de l’unité sur Fq . En
particulier puisque φ(n) > 0, donc il existe une racine primitive n-ième de

l’unité sur Fq pour tout entier positif n qui est relativement premier à q.

Le résultat suivant nous permet de trouver les racines primitives n-ièmes


de l’unité.

Proposition 4.1.1 ([6]) Soit β un élément primitif du corps de décomposi-

tion Fqs de xn − 1, alors les racines primitives n-ièmes de l’unité sur Fq sont

exactement les éléments de l’ensemble suivant :

qs − 1
{β k | k = u, u < n, (u, n) = 1}.
n

D’après la proposition 4.1.1, si on a un élément primitif β de Fqs avec


q s −1
s = ordn q, alors on obtient une racine primitive nième de l’unité α = β n ,

48
donc les racines de xn − 1 sont données par

1, α, . . . , αn−1 ,

d’ù la décomposition de xn − 1 dans Fqs :

n−1
Y
n
x −1= (x − αi ). (4.1)
i=0

Puisque les αi sont distinctes, alors xn −1 n’est rien d’autre que le produit des

polynômes minimaux de ces racines. On rappelle la définition du polynôme


minimal.

Définition 4.1.2 Soit γ ∈ Fqs . Le polynôme minimal de γ sur Fq est le

polynôme unitaire de plus bas degré Mγ (x) dans Fq [x], vérifiant Mγ (γ) = 0

Proposition 4.1.3 Soient γ ∈ Fqs et Mγ (x) son polynôme minimal. Alors

deg Mγ (x) = d si et seulement si d est le plus petit entier positif vérifiant


d
γ q = γ.

De la définition de l’ordre de q modulo l et de la proposition 4.1.3 nous

déduisons le corollaire suivant.

Corollaire 4.1.4 Si γ ∈ Fqs tel que l est l’ordre de γ, alors

deg Mγ (x) = ord l q.

La proposition suivante donne la forme de Mγ (x).

49
Proposition 4.1.5 ([6] p. 310) Soit α une racine primitive n-ième de l’unité
de Fqs et γ = αj . Alors le polynôme minimal de γ est donné par,

ordl q−1
Y i
Mγ (x) = (x − αjq ). (4.2)
i=0

La forme de Mγ (x) donnée par la proposition 4.1.5 nous suggère de no-


ord l q−1
ter Mγ (x) simplement par Mj (x). à l’ensemble {αj , αjq , . . . , αjq } nous

pouvons associer l’ensemble

Cj = {j, jq, . . . , jq ord l q−1 }mod n.

Cet ensemble est appelé la classe cyclotomique de j modulo n, et alors r =


ordl q est le plus petit entier positif tel que jq r = j mod n. Les entiers j et

l sont reliés par le fait que l est l’ordre de γ = αj , i.e.

n
l= .
(n, j)

Remarque 4.1.6 L’ordre de q modulo n vérifie les propriétés suivantes :

1. Si n > 1, alors ordn q est l’ordre de q dans le groupe multiplicatif

(Z/nZ)∗ .

2. Si m est tel que q m = 1 mod n alors ordn q divise m.

De la proposition 4.1.5 et de l’équation (4.1) nous obtenons la factorisation

suivante de xn − 1 :
Y
xn − 1 = Mj (x),
j∈K

où K est un ensemble de représentants modulo n.

50
Remarque 4.1.7 Si α est une racine primitive nième de l’unité, son poly-
nôme minimale est M1 et donc ordn q = |C1 | = deg M1 .

Exemple 4.1.8 Les classes cyclotomiques correspondantes à 2 modulo 15


sont les classes suivantes :

C0 = {0}, C1 = {1, 2, 4, 8}, C3 = {3, 6, 9, 12}, C5 = {5, 10}, C7 = {7, 11, 13, 14}

4.2 Les propriétés des classes cyclotomiques

Dans cette section nous considérons quelques propriétés des classes cyclo-

tomiques utiles pour la suite.

Lemme 4.2.1 Pour tout j ∈ Zn := {0, . . . , n − 1}, le cardinal de Cj est un

diviseur du cardinal de C1 , et deg Mj divise deg M1 .

Preuve 4.2.2 Soit j ∈ Zn tel que γ = αj du corollaire 4.1.4, nous avons

deg Mj = ord l q,

n
où l = (n,j)
est l’ordre de γ. Puisque l divise n, alors ord l (q) divise ord n (q).

Cependant, d’après la remarque 4.1.7 on a ordn q = |C1 | = deg M1 , d’où le


résultat.

Exercice 4.2.3 Donner la forme des classes cyclotomiques de q modulo n


dans chacun des cas suivants :

1. n divise q − 1.

51
2. n divise q + 1.

Définition 4.2.4 Soient i ∈ Zn et Ci la classe cyclotomique de i modulo n


sur Fq . Alors Ci est dite réversible si elle satisfait,

Ci = C−i .

Dans ce qui suit nous démontrons le lemme suivant.

Lemme 4.2.5

Si C1 est réversible, alors ∀j ∈ Zn , Cj est réversible.

Preuve 4.2.6 Si C1 est réversible, alors il existe k, 1 ≤ k ≤ ordn (q) tel que
q k ≡ −1 mod n, il s’ensuit que jq k ≡ −j mod n, d’où Cj = C−j .

Lemme 4.2.7 S’il existe i > 0 tel que q i ≡ −1 mod n, alors C1 est réver-

sible.

Preuve 4.2.8 Puisque C1 = {1, q, . . . , q r−1 } mod n, où r = ordn q, alors il

suffit de vérifier l’existence d’un entier k, 1 ≤ k ≤ ordn q, tel que q k ≡ −1

mod n. Nous avons i ≡ j mod n. Pour j > 0 il suffit de prendre k = j.

Pour j < 0 il suffit de prendre k = j + ordn q > 0.

Exercice 4.2.9 Montrer ce qui suit :

1. Si (s, n) = 1, alors le nombre d’éléments de Cs est égale à ord n (q)

2. Toutes les classes cyclotomiques modulo n = q m + 1 sont réversibles.

52
3. Si ordq n est paire, alors il existe au moins une classe cyclotomique
modulo n qui est réversible.

4. Si n = pα et ordq n est paire, alors toutes les classes cyclotomiques


modulo n sont réversibles.

5. Si m > 1 et n = q m + 1, alors la cardinalité de C1 modulo n est 2m.

6. Si n = q m + 1 avec m > 1, alors |Cs | = ordq n pour s < q (sans avoir

la restriction (s, n) = 1).

4.3 Les codes cycliques

Un code linéaire de longueur n est dit cyclique s’il est invariant par le
décalage circulaire à droite,

(a0 , . . . , an−1 ) −→ (an−1 , a1 , . . . , an−2 ).

Exemple 4.3.1 Le code binaire C = {000, 101, 011, 110} est un code cy-

clique.
Le code [7, 3] constitué des mots suivants

{(0000000), (1011100), (0101110), (0010111), (1001011), (1100101), (1110010), (0111001)}

est un code cyclique.


Le code binaire C = {0000, 1001, 0110, 1111} n’est pas cyclique.

53
En considérant l’anneau des polynômes Fq [x] et son anneau quotient

Rn = Fq [x]/(xn − 1),

si on ignore la multiplication on peut construire un isomorphisme de groupe.

Fnq −→ Fq [x]/(xn − 1)

(a0 , . . . , an−1 ) 7→ a0 + a1 x + · · · + an−1 xn−1 .

Le décalage à droite n’est rien d’autre que la multiplication par x et alors

un code cyclique C est un idéal de Rn . Puisque Rn est un anneau principal,

alors C est un idéal principal engendré par un polynôme g(x). Donc un mot
c = (c0 , . . . , cn ) de C peut être interprété par le polynôme c(x) = c0 + c1 x +
. . . + cn−1 xn−1 avec g(x) un diviseur de c(x).

Lemme 4.3.2 Soit c(x) = c0 +c1 x+. . .+cn−1 xn−1 un mot d’un code cyclique
ˆ =
de longueur n sur Fq , alors le décalage à droite du mot c(x) est le mot c(x)
ˆ vérifie :
cn−1 + c0 x + . . . + cn−2 xn−1 . Les mots c(x) et c(x)

ˆ = xc(x) − cn−1 (xn − 1).


c(x)

Preuve 4.3.3 En exercice.

Les propriétés des codes cycliques sont résumés dans le Théorème suivant.

Théorème. 4.3.4 Soit C un code cyclique de longueur n sur Fq et de di-

mension k, alors on a les propriétés suivantes :

54
1. Il existe un unique polynôme g(x) unitaire non nul de degré minimal
dans C

2. g(x) divise tout mot c(x) de C

3. g(x) est un diviseur de xn − 1 dans Fq .

4. La dimension de C est n − r, où r = deg g, le polynôme g(x) est appelé

polynôme générateur du code C.

Preuve 4.3.5 Il existe au moins un polynôme unitaire de plus petit degré

de C puisque les degrés possible sont entiers et bornés par 1. Supposons qu’il
existe deux mots g1 (x) et g2 (x) qui soient unitaires et de degré minimales,
alors g1 (x) − g2 (x) est un mot du code car le code est linéaire. En plus et
il est de degré inférieur au degré de g1 ( car g1 et g2 sont unitaire), ce qui

contredit l’hypothèse de degré minimale. Ce qui donne qu’un tel polynôme


est unique. Soit maintenant c(x) un mot du code non nul, alors si on fait
la division euclidienne de c(x) par g(x) on obtient c(x) = g(x)q(x) + r(x)
avec deg(r(x)) < deg(g(x)) ou r(x) = 0. Comme C est cyclique et que la

multiplication par xj pour j ≤ n − 1 − deg(g(x)) est toujours un mot du code


et donc g(x)q(x) ce qui donne que r(x) est aussi mot du code comme il est

de degré strictement inférieure au degré de g(x) ce qui ne laisse q’une seule

solution est que r(x) = 0.

Soit maintenant c un mot du code tel que cn−1 = 1, alors comme g(x)
ˆ = xc(x)−cn−1 (xn −1) d’après le Lemme 4.3.2
divise c(x) et son décalé est c(x)

aussi divise g(x) et donc g(x) divise xn − 1.


Tout mot du code peut être vu comme un polynôme de degré au plus n − 1,

multiple d’un polynôme de degré deg(g), ces polynômes peuvent donc s’écrire

55
sous la forme g(x)h(x) pour deg(h) ≤ n − 1 − deg(g), il y a donc exactement
q n−deg(g) mots possibles qui par constructions sont tous distincts et donc la

dimension du code est k = n − deg(g).

Le polynôme donné dans le Théorème 4.3.4 est appelé polynôme généra-

teur du code cyclique C.

Exemple 4.3.6 Pour n = 7 sur F2 , les diviseurs irréductibles de x7 − 1 sont

x + 1, x3 + x2 + 1 et x3 + x2 + 1, les 23 diviseurs de x7 − 1 peuvent se déduire


de ces polynômes. En particulier le code cyclique engendré par le polynôme
x3 + x2 + 1 donne un code [7, 4, 3], c’est le code de Hamming.

Pour n = 2r − 1, si α est une racine primitive nième de l’unité, alors le


polynôme
r−1
Y
g(x) = (x − α2i ),
i=0

correspondant à la classe cyclotomique C1 = {1, 2, . . . , 2r−1 }. Le code cyclique

engendré par g(x) est un code de paramètre [2r − 1, 2r − r − 1, 3], c’est un

code de Hamming.

Du Théorème 4.3.4 on peut déduire le corollaire suivant :

Corollaire 4.3.7 Soit C un code cyclique sur Fq de longueur n de polynôme


P
générateur g(x) = ki=0 gi xi de degré k, alors l’ensemble des mots de C est

l’ensemble {g(x)a(x)| deg(a(x) < n − k − 1}, le code C est de dimension

56
n − k et admet pour matrice génératrice la matrice :

 
g g . . . gk 0 0 ... 0
 0 1 
 
 0 g0 g1 . . . gk 0 ... 0 
 
G= ,
 
 ... ... ... 
 
0 0 0 . . . 0 g0 . . . gk

Soit C un code cyclique engendré par g(x) et α une racine primitive nième

de l’unité, on appelle ensemble de définition du code C, un sous ensemble


de Zn = {1, . . . , n} défini par :

TC = {i ∈ Zn | g(αi ) = 0}.

Quelques propriétés de l’ensemble de définition d’un code cyclique sont don-


nées par la proposition suivante.

Proposition 4.3.8 Soit TC l’ensemble de définition d’un code cyclique C

engendré par g, alors on a :

1. TC = ∪Cj , la réunion est sur toutes les classes cyclotomiques Cj telle


que Mj divise g.

2. deg g = |TC | et alors dim C = n − |TC |.

3. C = {f (x) mod (xn − 1) | f (αi ) = 0 ∀ i ∈ T }.

Le dual Euclidien d’un code cyclique C =< g(x) > est un code cyclique qui
vérifie les propriétés données par le lemme suivant.

Proposition 4.3.9 Soit C un code cyclique engendré par le polynôme g de

degré r, et ayant pour ensemble de définition T , alors le code C ⊥ dual de C

57
xn −1
est un code cyclique engendré par g ⊥ = h∗ = xn−r h(x−1 ), avec h(x) = g(x)
.
De plus C ⊥ admet pour ensemble de définition l’ensemble suivant :

T ⊥ = {s ∈ Zn | n − s ∈
/ T } = Zn \ (−T ). (4.3)

Preuve 4.3.10 Si on montre que h⊥ (x) divise xn − 1, alors c’est le poly-

nôme générateur d’un code cyclique < h⊥ (x) > qui a un matrice génératrice

H et alors < h⊥ (x) = C ⊥ . Mais h(x)g(x) = xn − 1, ce qui implique que


h(x−1 )g(x−1 ) = x−1 , mais xn−r h(x−1 )xr g(x−1 ) = 1 − xn , ce qui montre que

h⊥ |xn − 1.

Le dual Hermitien d’un code cyclique C =< g(x) > est un code cyclique. Ses
propriétés sont données par le lemme suivant.

Lemme 4.3.11 Soit C un code cyclique engendré par le polynôme g, d’en-

semble de définition T , le code C ⊥h dual Hermitien de C est un code cyclique

engendré par
Y
(x − αi ). (4.4)
i∈Zn \(−qT )

Du lemme 4.3.11 on peut déduire que l’ensemble de définition T ⊥h de C ⊥h

est égale à

T ⊥h = Zn \ (−qT ). (4.5)

4.4 La distance minimale des codes cycliques

4.4.1 La borne BCH

Cette borne sera par la suite utilisé dans les codes BCH

58
Lemme 4.4.1 Soit C un code cyclique de longueur n sur Fq , (n, q) = 1, et
T son ensemble de définition. Si T contient r nombres consécutifs, alors la

distance minimale d de C vérifie,

d ≥ r + 1.

Preuve 4.4.2 Soit {s, s + 1, . . . , s + r − 1} ⊂ T . On considère la matrice

 
s 2s (n−1)s
1 α α ... α
 
 
 1 αs+1 α2(s+1) ... α(n−1)(s−1) 
 
H= ,
 
 ... ... ... ... ... 
 
1 αs+r−1 α2(s+r−1) . . . α(n−1)(s+r−1)

Si x ∈ C, alors Hxt = 0. Remarque : H n’est pas forcément la matrice de

contrôle complète.

Les sous déterminant d’ordre r de H sont non-nuls, si le mot x a un poids

w = w(x) ≤ r et si son support est {i1 , . . . , iw }, alors

 
i1 s iw s
 α ... α 
 
 ... ... ... .
 
 
αi1 (s+r−1) . . . αiw (s+r−1)

Ce qui implique xi1 = . . . = xiw = 0 et contredit l’hypothèse, donc d > r.

Exercice 4.4.3 Montrer que pour tout k, 1 ≤ k ≤ q + 1, il existe un [q +


1, k, q − k + 2] code cyclique M DS sur Fq .

59
4.5 L’équivalence des codes

Soit σ une permutation de Sn , on associe au code C le code linéaire σ(C)

définit par :

σ(C) = {(xσ−1 (1) , . . . , xσ−1 (n) ) | (x1 , . . . , xn ) ∈ C}.

Le groupe de permutations P er(C) d’un code linéaire de longueur n est

un sous groupe du groupe Sn qui laisse le code C invariant, autrement le


groupe de permutations c’est :

P er(C) = {σ ∈ Sn | σ(C) = C}. (4.6)

Proposition 4.5.1 Un code et son dual ont même groupe de permutation :

P er(C) = P er(C ⊥ ).

Preuve 4.5.2 C’est une conséquence directe de :

n−1
X n−1
X
< σ(x), σ(y) >= xσ(i) yσ(i) = xi yi =< x, y > .
i=0 i=0

On dit que deux codes C et C 0 sont équivalents par permutation (ou sim-

plement équivalent s’il n’y a pas de confusion), s’il existe une permutation

σ ∈ Sn tel que C 0 = σ(C). Un peu comme l’isomorphisme des graphes tes-


ter cette équivalence est un problème théoriquement difficile et pour lequel

on sait construire des instances difficiles. Cependant, Pertrand et Roth ont

prouver qu’il n’est ps N P -complet. De plus, contrairement aux problèmes

60
de décodages une instance aléatoire de ce problème est en général facile en
pratique, pour prouver qu’ils sont équivalents il est en revanche nécessaire

d’expliciter une transformation permettant de passer d’une matrice généra-

trice de C0 à C1 .

Deux codes équivalents ont les mêmes paramètres et les mêmes propriétés,

c’est pour cette raison que les algorithmes d’équivalence des codes trouvent

divers applications dans les problèmes de reconnaissances des codes, spé-


cialement dans le cryptosystème de McEliece avec toutes ces variantes. Le
problème de l’équivalence des codes trouve aussi des applications dans le pro-

blème de décodage des codesIl est à noter que le problème de décodage des

codes pour certaines familles de codes est N P -complet

4.6 les codes de BCH

Soit α une racine primitive nième de l’unité sur Fq , un code cyclique C


de longueur n sur Fq est appelé code BCH 1 de distance construite δ ≥ 1, s’il
existe b ∈ N tels que le polynôme générateur g vérifie :

g(αb ) = · · · = g(αb+δ−2 ) = 0.

Alors C est engendré par

g(x) = ppcm{Mb (x), Mb+1 (x), . . . , Mb+δ−2 (x).} (4.7)


1
Cette appelation est dûe aux auteurs qui les ont construits R. C. Bose, D. K. Ray-
Chaudhuri et A. Hocquenghem.

61
On note ce code Bq (n, δ, b), ou simplement Bq (n, δ) si b = 1. Dans ce dernier
cas, il est dit BCH au sens strict. Lorsque α est un élément primitif du

corps, i.e. n = q s − 1, alors Bq (n, δ, α, b) est appelé code BCH primitif. La

classe des codes BCH est l’une des plus anciennes classe de codes et les plus

utilisés en pratique, car malgré qu’elle soit mauvaise asymptotiquement, pour

des longueurs finies elle a un trés bon comportement. En plus les codes BCH

sont simples à encoder et relativement simple à décoder, en plus ils ont une
grande capacité de correction surtout s’ils sont combinés avec d’autre codes.

Exercice 4.6.1 Donner une borne inférieure sur la distance minimale d’un
code BCH(n, δ)q .

Exercice 4.6.2 Calcul explicite des ensembles de définition des codes BCH
binaires de longueur 16.

Théorème. 4.6.3 Pour un code Bq (n, δ, b) de longueur n et distance construite

δ, nous avons :

dim(Bq (n, δ, b) ≥ n − (δ − 1) ordn q,

et la distance minimale dBq (n,δ,b) vérifie :

dBq (n,δ,b) ≥ δ. (4.8)

Si q = 2 et C est un code au sens strict, alors δ peut être vu comme impaire,

de plus si δ = 2ω + 1, alors k ≥ n − ordn (q)ω.

Preuve 4.6.4 L’ensemble de définition de C contient au moins δ − 1 classes

cyclotomiques, comme chaque classe contient au plus ordn (q) éléments la

62
dimension du code est au moins n − ordn (q)(δ − 1). La borne (4.8) découle
de la borne BCH.

Pour le cas binaire et pour un code au sens strict on remarque que l’en-

semble de définition T = {1, 2, . . . 2ω} est contenu dans la réunion ∪ωi=1 Ci

puisque 2Ca = Ca pour a quelconque, C.Q.F.D.

La borne donnée par le théorème 4.6.3 est souvent large et insuffisante, d’où

la nécessité de trouver la dimension exacte pour ces codes. Bien évidemment,


nous pouvons calculer la dimension de Bq (n, δ, b) si on connait le polynôme
générateur, ce qui n’est pas toujours évident comme nous l’avons expliqué

plus haut.

Théorème. 4.6.5 Soit q la puissance d’un nombre premier, et m un entier


plus grand que 1. Alors un code Bq (n, δ) de longueur n = q m +1 et de distance
construite δ tel que 2 ≤ δ ≤ q admet pour dimension,

k = q m + 1 − 2m(δ − 1).

Preuve 4.6.6 L’exercice 4.2.9, donne que les classes cyclotomiques Cj pour

j < q sont disjointes et de cardinalité 2m. Comme à chaque polynôme mini-

mal Mj de αj correspond une classe cyclotomique Cj ; on en déduit que les


polynômes minimals sont distincts et chacun de degré 2m. Ce qui donne que

le polynôme générateur de Bq (n, δ) est

δ−1
Y
g= Mi ,
i=1

63
et son degré est 2m(δ − 1). Alors,

dim Bq (n, δ) = q m + 1 − 2m(δ − 1).

4.6.1 La distance minimale des codes BCH

Nous avons vu dans les chapitres précédents que la distance minimale est
un important paramètre des codes. Du lemme 4.4.1 nous pouvons déduire

que la distance minimale d d’un code BCH(n, δ, b) vérifie :

d ≥ δ.

Théorème. 4.6.7 (Farr) Soit B2 (2m − 1, δ) un code BCH de longueur n et

de distance construite δ = 2t + 1, tels que

t+1 µ m
X ¶
2 −1
> 2mt , (4.9)
i=0
i

alors nous avons

dmin = δ. (4.10)

Pour n = q m + 1 et δ ≤ q en utilisant la borne de Singleton et le résultat

du Théorème 4.6.5 nous obtenons le la borne suivante :

δ ≤ dmin ≤ 2m(δ − 1) + 1. (4.11)

Le théorème suivant nous permet d’améliorer la borne (4.11).

64
Théorème. 4.6.8 Soit Bq (n, δ) un code BCH de longueur n = q m + 1 et de
distance construite δ ≤ q, tels que

2(δ−1) µ m ¶
X q +1
(q − 1)i > q 2m(δ−1) , (4.12)
i=0
i

alors nous avons


dmin ≤ 4(δ − 1). (4.13)

Preuve 4.6.9 Supposons que dmin ≥ 4(δ − 1) + 1, du Théorème 4.6.5 la


dimension est q m + 1 − 2m(δ − 1). Par le théorème d’empilement des sphères
nous avons :
b d−1 cµ ¶
X 2
qm + 1
(q − 1)i ≤ q 2m(δ−1) ,
i=0
i

cela donne l’inégalité suivante :

2(δ−1) µ m ¶
X q +1
(q − 1)i ≤ q 2m(δ−1) ,
i=0
i

contradiction.

Théorème. 4.6.10 Un code BCH noté C qui est de longueur n = bδ et de

distance construite δ admet pour distance minimale exactement δ.

Preuve 4.6.11 Comme nous avons supposé que le code C admet pour dis-

tance construite δ, alors d’après le lemme 4.4.1 on a dC ≥ a. Soit α une


racine primitive nième de l’unité tels que αib 6= 1. Puisque

(xn − 1) = (xb − 1)(1 + xb + x2b + . . . + x(δ−1)b ),

65
les éléments α, α2 , . . . , αδ−1 ne sont pas racines de xb − 1, alors elles doivent
être des racines de 1 + xb + x2b + . . . + x(δ−1)b , ce qui donne un mot de poids

δ dans C et donc dC = δ.

Dans le cas où m est impair, ce qui implique que q + 1 divise q m + 1.

Alors dans ce cas le code Bq (n, δ) contient un mot de poids q + 1 ; la distance

minimale est donc inférieure ou égale à q + 1 ce qui nous donne une autre

borne, dans certains cas elle est meilleure que les précédentes.

Corollaire 4.6.12 La distance minimale d’un code BCH de longueur n =


q m + 1, avec m impair et de distance construite δ ≤ q est au plus

q + 1. (4.14)

Remarque 4.6.13 Il est évident que si q est impair alors tous les codes

B(q m + 1, 2) ont pour distance minimale d = 2 ; du fait que q m + 1 est pair


et donc divisible par 2, donc d’après le théorème 4.6.10 d = 2.

4.7 Les codes de Reed–Solomon

Les codes de Reed-Solomon, en abbreviation les codes RS, sont possi-


blement les codes les plus utilisable en pratique. En plus ils ont de bon

paramètres ; ils sont M DS, et il existe de bon algorithme de décodage pour

ces codes.

Un RS code peut être construit comme suit :.

On considère dans Fq , n éléments distincts α1 , . . . , αn . Pour k ∈ N, on

66
consider l’espace vectoriel

Lk = {f (x) ∈ Fq [x] | deg f ≤ k − 1}.

Il est claire que la dimension de Lk est k. Pour k ≤ n ≤ q un polynôme

f (x) ∈ Lk non nul ne peut pas s’annuler à tout les αi . Alors si n ≥ k,

l’application suivante

ev : Lk −→ Fnq
(4.15)
f 7−→ (f (α1 ), . . . , f (αn )),

est injective, et son image C est un [n, k] code, dit code de Reed–Solomon

code en abréviation RS code.

Théorème. 4.7.1 Un RS code [n, k] est M DS.

Preuve 4.7.2 Il est bien évident qu’un code RS est linéaire, la linéarité

découle de la linéarité de l’addition des polynômes de Lk . La dimension


du code du faite que ev est linéaire injective donc dim Ker(ev) = 0, d’òu

dim Lk = k = dim Im(ev) = dim C. Montrons maintenant que la distance

minimale de ce code est égale à n − k + 1. Soit ev(f ) un mot du mot non


nul, alors ev(f ) = (f (α1 ), . . . , f (αn )). Si f s’annule en un nombre de points

supérieur à k − 1, alors f est nécessairement le polynôme nul ce qui donne

wH (ev(f ) ≥ n − (k − 1), par la borne de Singleton nous avons légalité.

Cependant ces codes ont une faiblesse ; leur longueur n ≤ q. Ce qui les rends

impraticaple dans des situations où on exige des codes sur un petit alphabet.

67
En plus asymptotiquement ils sont mauvaix. Malgré cela ils trouvent divers
applications, surtout s’ils sont combinés avec d’autres codes.

Puisque 1, x, . . . , xk−1 est une base de Lk , une matrice génératrice de C

peut être donnée comme suit :

 
 1 ··· 1 
 
 α1 · · · αn 
 
 . .. .. 
 .. . . 
 
 
α1k−1 · · · αnk−1

Maintenant on va voir les Reed-Solomon codes comme étant une sous famille
de codes BCH. Un code de Reed-Solomon cyclique au sense-strict,
C sur Fq est un code BCH au sens strict de longueur n = q − 1. Alors

ord n q = 1, ce qui donne que toute classe cyclotomique modulo n ne peut


contenir qu’un seule élément et par conséquent le degré de chaque polynôme
minimale est 1.

Soit n = q − 1, on choisit k tel que 1 ≤ k ≤ q − 1, alors le polynôme

q−1−k
Y
g(x) = (x − αi )
i=1

est un générateur d’un code cycliqu C sur Fq de longueur q−1 et de dimension

k. De plus, puisque nous avons q − 1 − k racines consécutives, la borne BCH

implique que la distance minimale dmin de C est dmin ≥ q − k. Par la borne


de Singleton nous avons dmin − k ≤ q ce qui donne dmin = q − k, i.e. C est

M DS.

Exercice 4.7.3 Cette définition des codes RS est totalement différente de

68
la définition donnée dans 2.3. Faite le lien entre les deux définitions.

Exemple 4.7.4 Le code binaire de Golay [23, 12, 7] est un code cyclique d’en-
semble de définition T = C1 . C’est un code BCH au sens strict et de distance
construite δ = 2. Son étendu est un code [24, 12, 8] auto-dual.

4.8 Les Codes Duadiques

Soient q la puissance d’un nombre premier et n un entier impair premier

avec q. L’entier m est divisible par pα , mais n’est pas divisible par pα+1 .
Pour un entier s premier avec n on appelle multiplicateur une applica-
Fq [x] Fq [x]
tion µs : xn −1
7−→ xn −1
définie par :

µs (c(x)) = c(xs )( mod (xn − 1)).

Fq [x]
Au fait l’application µs est un automorphisme de xn −1
. Si C est un code

cyclique, on définit µs (C) = {µs (c(x)) = c(xs )|c(x) ∈ C} = {c(xs ) | c(x) ∈

C}. µs induit aussi une permutation sur Zn , définie par :

µs : i 7−→ is mod n.

On commence par la définition du splitting donnée comme suit :


Soient S1 et S2 des réunions de classes cyclotomiques modulo n, tels que :

1. S1 ∩ S2 = ∅,

2. S1 ∪ S2 = Zn \ {0} et

3. µs (Si mod n) = S(i+1) mod 2 .

69
Le triplet µs , S1 , S2 est appelé splitting modulo n. Ce splitting donne un qua-
driplet de codes ; deux codes cycliques sur Fq , D1 et D2 ayant pour ensembles

de définitions respectifs S1 et S2 et qui sont appelés les codes duadiques

odd-like et deux codes cycliques C1 et C2 sur Fq admettant pour ensembles

de définitions respectifs {0} ∪ S1 et {0} ∪ S2 et qui sont appelés les codes

duadique even-like.
n−1
De la dernière propriété nous obtenons que |S1 | = |S2 |, et alors |Si | = 2
,
ce qui justifie le choix de n impair.
Autrement, si on considère une racine primitive n-ième de l’unité α de

Fq , les codes Di sont des codes cycliques de polynômes générateurs

Y
gi = (x − αj ),
j∈Si

n+1
les codes Ci ont pour polynômes générateurs gi (x − 1) et alors dim Di = 2
n−1
et dim Ci = 2
.

Remarque 4.8.1 Nous avons une caractéristique des mots des codes Di et

Ci , en effet :

X
∀x = (x1 , . . . , xn ) ∈ Di , alors x vérifie xi 6= 0

X
∀x = (x1 , . . . , xn ) ∈ Ci , alors x vérifie xi = 0.

Le théorème suivant prouvé par M. Smid donne une condition nécessaire et

suffisante sur l’existence des codes duadiques sur Fq .

Théorème. 4.8.2 Les codes duadiques de longueur n sur Fq existent si et

70
seulement si q ≡ ¤ mod n, i.e., si n = pα1 1 . . . pαs s , alors il existe un code
duadique sur Fq si et seulement si q ≡ ¤ mod pi avec i ∈ [s].

Les codes duadiques sont une généralisation des codes dits résidus qua-
dratiques, construit comme suit :

Soient n un nombre premier impair tel que q = ¤ mod n, S1 = {0 <

i < n | i = ¤ mod n} et S2 = {0 < i < n | i = ¤ mod n}, pour un a ∈ S2

µa : S1 ↔ S2 est un splitting modulo n et les codes correspondants sont


appelés les codes résidus quadratiques, (car le produit de deux non résidues
est un résidu).

Les codes duadiques sont importants en pratique à cause de leurs dis-

tances minimales qui est large et aussi à cause de leurs lien avec les codes
auto-duaux, ce lien est donné par le théorème suivant.

Théorème. 4.8.3 (M. smid 87)


Soit C un code cyclique de longueur n sur Fq . Supposons que l’étendu de C
soit un code auto-dual, alors C est un code duadique et le splitting est donné

par µ−1 .

Nous avons le résultat suivant sur la distance minimale des codes dua-

diques.

Lemme 4.8.4 Soient D1 et D2 une paire de codes duadiques odd-like de

longueur n sur Fq . Alors D1 et D2 ont la même distance minimale d et on


a:

(i) d2 ≥ n,

(ii) d2 − d + 1 ≥ n, si le splitting est donné par µ−1 .

71
4.8.1 Orthogonalité des Codes Duadiques

Théorème. 4.8.5 Soit C un [n, (n − 1)/2] cyclique code sur Fq alors C est
auto-orthogonal si et seulement si C est even-like duadique code associé à un
splitting donnée par µ−1

Exercice 4.8.6 Combien existe-t-il de codes cycliques binaires de longueur

9 ? Pour chacun, préciser la dimension et le code dual.

Exercice 4.8.7 Le code binaire représenté par la matrice génératrice


 
 1 1 1 0 0 
 
 0 1 1 1 0 
 
 
0 0 1 1 1

est-il cyclique ?

Exercice 4.8.8 1. Vérifier que x2 + x + 1 divise x6 + 1 sur F2 .

2. Faire la liste des mots du code cyclique binaire de longueur 6 ayant

pour polynôme générateur x2 + x + 1.

3. Quelle est sa distance minimale ?

Exercice 4.8.9 1. Dans F7 [X], on considère le polynôme

g(x) = x2 + 2x + 6

Effectuer la division euclidienne de x6 − 1 par g et montrer que g divise

x6 − 1.

72
2. Soit C le code cyclique de longueur 6 engendré par g sur F7 [X].

(a) Déterminer la dimension de C.

(b) Montrer que C est un code de Reed Solomon.

(c) Déduire de la question (b), la distance minimale de C.

(d) Corriger le mot 612233, sachant qu’il comporte au plus un erreur.

3. Déterminer tous les codes de Reed Solomon de dimension sur F7 .

73
Chapitre 5

Les codes sur les anneaux

Les codes sur les anneaux ont commencé à attirer la communité scienti-

fique dès les début des années 90, lorsque Calderbank, Kumar, Hammon et

Solé ont montré que plusieurs familles de codes trés interessantes sont reliés
aux codes sur Z4 .

Définition 5.0.10 Un code linéaire sur Z4 de longueur n est un sous-groupe

additif de Zn4 . Un tel sous groupe est un sous-module de Z4 , qui peut être libre

ou pas. On rappel qu’un Z4 -module M est libre s’il existe un sous ensemble

B de M tels que chaque élément de M peut être exprimer sous forme de Z4

combinaison linéaire d’éléments de B.

Exemple 5.0.11 Consider le sous ensemble de Z34 suivant :

C = {000, 121, 202, 323.}

Montrer que C est un Z4 -module libre.

74
Remarque 5.0.12 Si v est un vecteur de Zn4 de composantes égale à 0 ou
2, alors 2v = 0, ce qui implique qu’un tel vecteur ne peut être un vecteur de

la base d’un module libre de Z4 .

Exemple 5.0.13 On peut montrer que l’ensemble des mots suivants de Z4

est un Z4 -linéaire code de longueurs 4 :

0000 1113 2222 3331 0202 1311 2020 3133

0022 1131 2200 3313 0220 1333 2002 3111.

C’est un sous groupe additive de Z44 . Si c’est un Z4 -module libre alors, il va

exister une base de deux vecteurs b1 et b2 ayant au moins une composante


égale à 1 ou 3. Tous les mots avec une composante égale à 1 ou 3 vérifient
2b1 = 2b2 = 2222. Alors {b1 , b2 } ne peuvent pas former une base ce qui
implique que C n’est pas libre. Cependant on peut montrer que tout mot de

C peut s’écrire sous la forme :

xc1 + yc2 + zc3 ,

avec c1 = 1113, c2 = 0202, c3 = 0022, x ∈ Z4 , y et z ∈ {0, 1}.

Soit C le code de Z4 donné par l’exemple 5.0.13, on peut montrer que


 
 1 1 1 3 
 
G=
 0 2 0 2 ,

 
0 0 2 2

75
est une matrice génératrice de C : dans le sens où tout mot de C peut s’écrire
comme étant (xyz)G pour un certain x ∈ Z4 et y ∈ Z2 et z ∈ Z4 .

Tout mot de C peut s’écrire sous la forme de

k1
X kX
1 +k2

ai ci + ai ci ,
i=1 i=k1

avec ai ∈ Z4 pour 1 ≤ i ≤ k1 et ai ∈ Z2 pour k1 + 1 ≤ i ≤ k1 + k2 . En plus

chaque ci admet une composante égale à 1 ou 3 pour 1 ≤ i ≤ k1 et tout ci

est égale à 0 ou 2 pour k1 + 1 ≤ i ≤ k1 + k2 . La matrice qui admet pour

ligne ci pour 1 ≤ i ≤ k1 + k2 est appelé matrice génératrice de C. Le code


C admet 4k1 2k2 mots et il est dit de type 4k1 2k2 . Le code de l’exemple 5.0.13

est de type 41 22 . Toute matrice d’un Z4 -code linéaire peut s’exprimer sous la
forme de  
 Ik1 A B1 + 2B2 
G= 
O 2Ik2 2C

avec A, B1 , B2 et C sont des matrices à coefficients dans Z2 , et O est une

k2 × k1 matrice nulle. Le code C est de type 4k1 2k2 .

Théorème. 5.0.14 Tout code linéaire sur Z4 est équivalent à un code avec
une matrice génératrice sous sa forme standard.

Il existe un produit scalaire modulo 4 sur Zn4 défini par :

x · y = x1 y 1 + . . . + xn y n ( mod 4),

avec x = x1 . . . xn et y = y1 . . . yn . On peut définir le code dual de C ⊥ = {x ∈

Zn4 |x · c = 0 pour tout c ∈ C}.

76
Exercice 5.0.15 Montrer que le code dual C ⊥ est un code Z4 linéaire. Un
Z4 -linéaire est un code auto-orthogonal s’il vérifie C ⊂ C ⊥ , il est dit auto-

dual s’il vérifie C = C ⊥ .

Montrer que le code de l’exemple 5.0.13 est un code auto-dual.

Si C est un code dans sa forme standard, alors C ⊥ admet pour matrice


génératrice :
 
t t t t
 −(B1 + 2B2 ) − C A C In−k1 −k2 
G⊥ =  ,
2At 2Ik2 0

où O est la matrice k2 × (n − k1 − k2 ) zéro matrice. En particulier, C ⊥ est

de type 4n−k1 −k2 2k2 .

Sur Z4 il existe différents poids pour un vecteur de Zn4 et alors différentes

distances minimales. Soit x ∈ Zn4 ; supposons que na (x) le nombre de compo-

santes de x égale à a pour a ∈ Z4 . Le poids de Hamming de x est wH (x) =


n1 (x)+n2 (x)+n3 (x), le poids de Lee de x est wL (x) = n1 (x)+2n2 (x)+n3 (x),

le poids Euclidien wE (x) = n1 (x) + 4n2 (x) + n3 (x). La distance de Hamming,


la distance de Lee respectivement la distance Euclidienne entre x et y sont

dH (x, y) = wtL (x − y) et dL (x, y) = wtL (x − y) dE (x, y) = wtE (x − y).

Exemple 5.0.16 Calculer les poids de Hamming de Lee, et Euclidien du

vecteur 120203303.

Exercice 5.0.17 Calculer le poids minimal de Hamming de Lee et Euclidien


du code de l’exemple 5.0.13

77
Théorème. 5.0.18 Soient C un code linéaire de Z4 qui est self-orthogonal
avec c ∈ C. Alors :

1. wtL (c) ≡ 0( mod 2), et

2. wtE (c) ≡ 0( mod 4)

5.1 Codes binaire de Z4-linéaire

Il existe des moyens d’obtenir des codes binaire à partir des codes sur Z4 .
En considérant la fonction dite ”Gray” définie par

G 0 (0) = 00, G 0 (1) = 01, G 0 (2) = 11, G 0 (3) = 10.

La généralisation de la fonction Gray est la fonction suivante G : Zn4 −→ F2n


2

défini par

G(a1 , . . . an ) = (G 0 (a1 ), . . . , G 0 (an )).

L’image d’un code linéaire C sur Zn4 par la fonction Gray est un code non

nécessairement linéaire G(C) sur F2n


2 . Cependant à cause du faite que la

fonction Gray est bijective les deux codes ont le même nombre d’éléments.

Exemple 5.1.1 On consider le code linéaire sur Z34 définie par C = {000, 121, 202, 323}.
L’image of C par la fonction Gray est le code {000000, 011101, 110011, 101110},

il admet pour distance minimale 4.

Exercice 5.1.2 Montrer que l’image des codes des exemples 5.0.13 par la

fonction Gray sont des codes linéaires.

78
On considère le code Z4 -linéaire C de matrice génératrice
 
 1 0 1 
G= .
0 1 3

1. Lister tout les mots du code C.

2. Lister les 16 mots de G(C).

3. Montrer que G(C) est non-linéaire.

4. Montrer que pour a et b dans Z4 on a

wtL (a − b) = wt(G(a) + G(b)).

Il est bien ardue de vérifier que G(C) n’est pas linéaire, mais en utilisant le
Théorème 5.1.4, on trouve que 2(013 ? 013) = 2(003) = 002 ∈
/ G(C)

Exercice 5.1.3 Trouver toutes les paires de Z4 telles que G(a) + G(b) 6=

G(a + b) Montrer que pour tout a et b dans Z4 , on a

G(a) + G(b) = G(a + b + 2ab). (5.1)

Théorème. 5.1.4 Soit C un code linéaire de Z4 . Le code binaire et G(C)

est linéaire si et seulement si pour tout v et w dans C, alors 2(v ? w) ∈ C.

Preuve 5.1.5 Si a et b sont dans Z4 , alors d’après G(a) + G(b) = G(a + b +

79
2ab). Alors pour v et w ∈ Zn4 , alors G(v) + G(w) = G(v + w + 2(v ? w)). En
particulier cela montre que si G(v) et G(w) sont dans C, alors G(v) + G(w) ∈

C, si et seulement si v + w + 2(v ? w) ∈ C si et seulement si 2(v ? w) ∈ C

puisque v + w ∈ C.

Théorème. 5.1.6 La fonction Gray vérifie les propriétés suivantes :

1. La fonction de Gray préserve la distance entre Zn4 muni de la distance


de Lee et F2n
2 munis de la distance de Hamming.

2. Si C est un Z4 −linéaire code, alors la distribution de poids de Hamming

est la même que la distribution du poids de Lee.

Théorème. 5.1.7 Le poids Euclidien vérifie ce qui suit :

1. Pour tout u et v ∈ Zn4 . Alors

wtE (u + v) ≡ wtE (u) + wtE (v) + 2(u · v)( mod 8).

2. Soit C un code auto-orthogonal sur Z4 telle que toute ligne l de sa


matrice génératrice vérifient wtE (l) ≡ 0 mod 8). Alors wtE (c) ≡ 0

mod 8 pour tout c ∈ C.

3. Soit C un Z4 code linéaire tels que wtE (c) ≡ 0 mod 8 pour tout c ∈ C,

alors C est auto-orthogonal.

Exemple 5.1.8 Soit O8 le code Z4 -linéaire de matrice génératrice donnée

80
par  
1 0 0 0 3 1 2 1
 
 
 0 1 0 0 1 2 3 1 
 
G= .
 
 0 0 1 0 3 3 3 2 
 
0 0 0 1 2 3 1 1

Dans ce qui suit on montre que le poids de Lee du code O8 est égale à 6.

1. Montrer qu’il n’existe pas de de mots de Zn4 de poids de Lee égale à 2

et de poids Euclidien égale à 8.

2. Montrer que les seules vecteurs de Zn4 de poids de Lee égale à 4 et

de poids Euclidien égale à 8, ont exactement deux composantes égales


à 2 et les autres composantes sont nulles. En considérant la matrice

génératrice G de O8 , montrer que O8 n’admet pas de mots de poids 4

3. Montrer que pour 1 ≤ i ≤ 4 les lignes li G vérifie li · lj = 0 pour

1 ≤ i ≤ 4, ce qui donne que le code O8 est auto-orthogonal ; il est


auto-dual et il est de type 44 . Le poids Euclidien de chaque mot est un
multiple de 8, le poids Euclidien de chaque ligne est égale à 8, alors le

poids Euclidien de O8 est égale à 8.

4. Montrer que le poids minimum de Lee est égale à 6. L’image G(O8 )

est alors un code binaire de paramètres (16, 256, 6). Le code G(O8 ) est

appelé Nordstrom-Robinson code.

Théorème. 5.1.9 Soient u et w dans Z4 . Alors wtE (u + v) ≡ wtE (u) +


wtE (v) + 2wtE (u · v) mod 8.

81
Un code linéaire sur Z4 admet une matrice génératrice sous la forme
 
 Ik1 A B1 + 2B2 
GC =   (∗)
0 2Ik2 2C

Exemple 5.1.10 C1 = {000, 121, 202, 323}, C1 est libre donc k1 = 1 et


k2 = 0
GC1 = (121) d’où A = C = 0 et B1 + 2B2 = (21)

Le code de l’exemple 5.0.13 admet pour matrice génératrice


 
 1 1 1 3 
 
GC2 =
 0 2 0 2 

 
0 0 2 2

Le dual d’un code C linéaire sur Z4 est un code linéaire.

Si GC est la matrice (∗) alors la matrice génératrice de C ⊥ est

 
t t t t
 −(B1 + 2B2 ) − C A C In−k1 −k2 
G⊥
C =  ,
t
2A 2Ik2 O

oà O est la matrice k2 × (n − k1 − k2 ). En particulier on a C ⊥ est de type

4n−k1 −k2 2k2 .


 
 2 1 0 
Exemple 5.1.11 Si GC1 = (121) alors G⊥
C1 =  
3 0 1

Exercice 5.1.12 1. Trouver la matrice génératrice du code C2⊥ .

2. Trouver la matrice du octacode O8⊥ .

82
3. Vérifier que G⊥ .Gt = 0 pour tout les codes précédents.
A chaque code linéaire C sur Z4 , on associe deux codes linéaires binaires.

Res(C) = {c( mod 2) | c ∈ C} c’est un [n, k1 ] code, dit code résidu de C.


T or(C) = {c ∈ Fn2 | 2c ∈ C} c’est un [n, k1 + k2 ] code, dit code de torsion de

C.

Exercice 5.1.13 Trouver les codes résidus et de torsion des codes donnés

dans l’exemple 5.0.13 et l’exercice 5.1.12.


Montrer que les matrices génératrice de Res(C) et T or(C) d’un code C sont

 
µ ¶
 Ik1 A B1 
G(1) = Ik1 A B1 et G(2) =  
0 Ik2 C

avec A, B et C les matrices données dans (∗).

Exercice 5.1.14 Donner les matrices génératrices des codes de l’exercice 5.1.13.

Proposition 5.1.15 On a Res(C) ⊂ T or(C). Si en plus C est auto-orthogonale

alors le poids de tout mot de Res(C) est divisible par 4 et Res(C) est auto-
orthogonale et on a Res(C) ⊂ T or(C) ⊂ Res(C)⊥ .
Si C est auto-dual alors T or(C) = Res(C)⊥ .

Preuve 5.1.16 Il est evident que Res(C) ⊂ T or(C) (Comparer les matrices
génératrices). Supposons maintenant que C soit Auto-orthogonale, alors on

a ∀x ∈ C, x.y = 0 mod 4, ∀y ∈ C, cela donne que ∀x(1) ∈ C (1) on a


x(1) .y (1) = 0 mod 2, ∀y (1) ∈ C (1) donc C (1) est aussi auto-orthogonal.

D’après le théorème (6.0.15) on a wtL (c) ≡ 0 mod 2 et wtE (c) ≡ 0 mod 4

83
∀c ∈ C(car C est auto-orthogonal), ce qui donne que wE t (c1 ) ≡ 0 mod 4
∀c1 ∈ Res(C), car wE (c) = n1 (c) + n3 (c) + 4n2 (c) ≡ 0 mod 4 d’où

wH (c1 ) = n1 (c) + n3 (c) ≡ 0 mod 4

d’où Res(C) est un code divisible par 4 (on l’appelle doubly-even).

Le code C admet pour matrice génératrice


 
 Ik1 A B1 + 2B2 
G= 
0 2Ik2 2C

comme C est auto-orthogonal, si on prend r = (i, a, 2b2 ), avec i, a, b1 + 2b2

sont des ligues de Ik1 , A, B1 + B2 . Soit s une ligue dans les k2 ligues de G

alors s = (0, 2i, 2c), comme C est auto-orthogonal alors r.s = 2a.i + 2b1 .c =

0 mod 4, d’où a.i + b1 .c = 0 mod 2 mais 2a.i + 2b1 .c = r1 .s1 avec r1 = (j, a, b1 )
et s1 = (0, i, c). s1 est une ligue dans les k2 ligues de G(2) et r1 est une ligue

dans les k1 ligues de G(1) . Ce qui donne que C (2) ⊂ C (1) .

Si C est Auto-dual alors 2k1 + k2 = n, d’où n − k1 = k1 + k2 d’où l’égalité

Res(C) = T or(C)⊥

Corollaire 5.1.17 Si n est pair, alors il ne peut exister un code C auto-

orthogonale de Zn4 de type 4n/2 2k2 avec k2 6= 0. En plus pour tout code C
auto-orthogonale de type 4n/2 on a le code C (1) est auto-dual.

Preuve 5.1.18 si C est un code auto-orthogonal de Zn4 de type 4n/2 2k2 , alors

le code Res(C) est auto-orthogonal de dimension n/2 et il est doubly even

(proposition 5.1.15, d’après le théorème de 2.4.11(Gleason-Pierce-Ward) on

84
a Res(C) es Auto-dual et alors Res(C)⊥ d’où

n
n − k1 = n 2 = 2
+ k2 d’où k2 = 0

Exemple 5.1.19 Res(O8 ) est un code auto-dual doubly-even (O8 est le oc-

tacode de l’exemple 5.1.8

85
Chapitre 6

Quelques Classes de Codes

6.1 Les codes de Reed-Muller

Les codes de Reed-Muller (RM )ont été introduits à l’origine par Muller

en 1954, puis Reed a donné une méthode de décodage la même année. Ils
ont été utilisé en pratique marinière en 1973. Plusieurs constructions de ces
codes sont possibles, nos donnons ici la construction matricielle.

Soit m un entier positif, les codes RM sont des codes binaires de longueur 2m ,

indicés par un paramètre 0 ≤ r ≤ m. On note R(r, m) le code de Reed-Muller


de longueur 2m et d’ordre r.

Définition 6.1.1 Les Rm codes sont définis par récurrence de la manière

suivante

R(r, m) = {(u|u + v); u ∈ R(r, m − 1), v ∈ R(r − 1, m − 1)} (6.1)

R(0, m) = le code à répétition de longueur 2m .

86
m
R(m, m) = F22
La matrice génératrice d’un tel code est G(r, m) telle que

 
 G(r, m − 1) G(r, m − 1) 
G(r, m) =  
0 G(r − 1, m − 1)

Exemple 6.1.2 Le code à répétition R(0, m) admet pour matrice génératrice


m
G(0, m) = (1, · · · , 1), R(m, m) = F22 admet pour matrice génératrice I2m .
pour m = 2,
 
 
µ ¶  1 0 1 0 
 1 0   
G(0, 2) = 1 1 , G(1, 1) =   alors G(1, 2) =  
 0 1 0 1 
0 1  
0 0 1 1

d’où le code R(1, 2) est un code [4, 3, 2]

Exercice 6.1.3 Trouver le code R(1, 3) et l’étendu du code de Hamming


[7, 4, 3], comparer.

Théorème. 6.1.4 Soit m un entier positif et 0 ≤ r ≤ m alors

i ) R(i, m) ⊂ R(j, m), 0 ≤ i ≤ j ≤ m.


X i µ ¶
m
ii ) dim(R(i, m)) = .
r=0
n
iii ) La distance minimale de R(i, m) est 2m .

Preuve 6.1.5 Le théorème se montre par récurrence.

Le premier point se montre par récurrence à partir de la construction. Pour


m
m = 1 et j = m, cela est vrai puisque R(m, m) = F22 . Supposons que

87
R(k, m − 1) ⊂ R(l, m − 1) pour tout 0 ≤ k ≤ l ≤ m. Soit 0 < i ≤ j < m.
Alors

n o
R(i, m) = (u|u + v); u ∈ R(i, m − 1), v ∈ R(i − 1, m − 1)

n o
⊆ (u|u + v); u ∈ R(j, m − 1), v ∈ R(j − 1, m − 1) = R(j, m)

alors par inclusion on a le résultat si on suppose 0 < i

Pour i = 0, comme R(0, m) est le code à répétition, alors on doit just montrer

que ∀j > 0, R(j, m) contient le vecteur (1 · · · 1) puisque c’est le générateur


de R(0, m), or R(1, m) contient R(0, m) par la définition (6.1 et comme on
a déjà montré que pour i > 0 on a R(i, m) ⊂ R(j, m) ∀0 < i < j alors
R(0, m) ⊂ R(j, m) ∀j > 0.

Le point (ii) s’obtient aussi par récurrence et par la propriété sur les coeffi-
cients binomiaux du triangle de pascal

µ ¶ µ ¶ µ ¶
m−1 m−1 m
+ = (6.2)
i−1 i i

 
 1 
Pour m = 1 on a R(0, 1) = h1i, dim(R(0, 1)) =   = 1
0
m
Pour m = r on a R(m, m) = F22 et

µ ¶ µ ¶ µ ¶
m m m
+ + ··· + = 2m
0 1 m

88
Supposons que R(i, m − 1) admet pour dimension

µ ¶ µ ¶ µ ¶
m−1 m−1 m−1
M1 = + + ··· + pour 0 ≤ i < m
0 1 i−1

et R(i − 1, m − 1) admet pour dimension pour 1 ≤ i < m − 1

µ ¶ µ ¶ µ ¶
m−1 m−1 m−1
M2 = + + ··· +
0 1 i−1

alors d’après la Proposition 3.7.12, la construction (u|u + v) donne un code


de paramètres [2m , M1 + M2 , min(2d1 , d2 )].
d’où le code R(i, m) est de dimension

µ ¶ µ ¶ µ ¶ µ ¶ µ ¶ µ ¶
m−1 m−1 m−1 m−1 m−1 m−1
M1 +M2 = + +· · ·+ + + +· · ·+
0 1 i−1 0 1 i−1

µ ¶ µ ¶
m−1 m
En utilisant 6.2 et en remarquant que = alors
0 0

µ ¶ µ ¶
m m
M1 + M2 = + ··· +
0 i

Pour montrer (iii) on utilise le résultat sur la distance minimale de la construc-

tion (u|u + v), en effet, de la Proposition 3.7.12 on a

dR(i,m) = min(2d1 , d2 )

si on utilise l’hypothèse de récurrence que


d1 = distance minimale de R(i, m − 1) = 2m−1−i .

d2 = distance minimale de R(i − 1, m − 1) = 2m−1−(i−1) = 2m−i .

89
alors min(2m−1−i , 2m−i ) = 2m−i ce qui donne le résultat.
dR(0,m) = 2m , (la distance minimale du code à répétition de longueur 2m ).

6.2 Les codes de Golay

Le code de Golay est le code cyclique de longueur 23 avec ensemble de

définition la classe C(1) = {1, 2, 3, 4, 6, 8, 9, 12, 13, 16, 18} i.e., c’est un code

BCH2 (23, 2), la dimension est 12 et d = 7.

Exercice 6.2.1 Montrer que 5 ≤ d ≤ 8.

Le code de Golay ternaire est le code duadique de longueur 11, d’ensemble


de définition C1 = {1, 3, 9, 5, 4}, il admet comme paramètre [12, 6, 6]3 , c’est

un code auto-dual. De même l’étendu du code de Golay binaire est code


Auto-dual [24, 12, 8]2 .

90
Chapitre 7

Solution des exercices

7.1 Exercices du chapitre 2

Exercise 2.1.2 :

Le code C1 = {01, 10} n’est pas linéaire car il ne contient pas le mot 00.
Exercice 2.1.3 :
0 < R ≤ 1.

Exercice 2.1.13

(i ) On a d(x, y) = 0 ⇐⇒ {i : xi 6= yi } = ∅ ←→ x = y.

(ii ) Il es clair que d(x, y) = d(y, x).

(iii ) Soient x, y, z ∈ Fnq ; Posons A = {i : xi = yi }, B = {i : yi = zi },

C = {i : xi = zi }. On a A ∪ B ⊂ C donc C ⊂ A ∪ B où X désigne le

complémentaire de X. On alors d(x, z) = card(C) ≤ card(A)+card(B).

Par conséquent d(x, z) ≤ d(x, y) + d(y, z).

Exercice 2.3.4 :

Le code C1 est un code [4, 2, 3]. Ses mots sont {1011, 01αα2 , 0000, 11α2 α}. Le

91
code C2 est un code [6, 3, 4],c’est un code célèbre appelé l’exacode.
Exercice 2.4.9 Le code n’est pas auto-orthogonal car le produit scalaire de

sa première et deuxième lignes est différent de 0. En en déduit qu’on peut

avoir un code longueur n et de dimension n/2 qui ne soit pas auto-orthogonal.

........................................................................................................................................................

Exercice 7.1.1 Soient q la puissance d’un nombre premier, m un entier

positif plus grand que 1, n = q m + 1, s et s0 deux entiers distincts tels que


1 ≤ s, s0 < q, alors les classes cyclotomiques Cs et Cs0 sont disjointes.

Solution de l’exercice 7.1.1 Supposons l’existence de deux entiers dis-


tincts s et s0 tels que 1 ≤ s, s0 < q et Cs = Cs0 , alors il existe 1 ≤ i < 2m et

1 ≤ j < 2m, tels que s ≡ q i s0 mod n et s0 ≡ q j s mod n. Donc i et j doivent


être différents de 2m, sinon on aura s ≡ q 2m s0 mod n, ce qui implique s ≡ s0

mod n. Cela est impossible puisque s, s0 < q.

Maintenant q i s0 ≡ s mod n ⇐⇒ q i s0 − s = k(q m + 1), avec k ∈ N∗ , car si


k < 0 on obtient q > s = q i s0 − k(q m + 1) ≥ q i + q m + 1. Ce qui est impossible
pour n’importe quelle valeur de i. Par conséquent

q i s0 − s = k(q m + 1), avec k ∈ N∗ ,

alors q i s0 ≥ kq m , et alors s0 > q m−i , ce qui est impossible pour i ≤ m − 1.

Par le même argument il est impossible d’avoir j ≤ m − 1.

Pour m ≤ i ≤ 2m − 2 nous avons :

q i s0 = s + k(q m + 1) et q m s = −s + s(q m + 1),

92
en additionnant les deux égalités on obtient que

q m (s + q i−m s0 ) = (s + k)(q m + 1),

par conséquent q m divise s + k et

s + q i−m s0 ≡ 0 mod (q m + 1)

Ce qui donne s + q i−m s0 ≥ q m + 1. Puisque s0 < q on obtient que


q > s > q m − q i−m+1 + 1 ≥ q m − q m−1 + 1, ce qui est absurde.
Par le même argument il est impossible d’avoir m ≤ j ≤ 2m − 2.

Si i = 2m − 1, j = 2m − 1, alors on a q 2m−1 s0 = s + k(q m + 1), en multipliant


par q les deux membres de l’égalité on obtient que q 2m s0 = sq + knq, mais

q 2m ≡ 1 mod n et alors on déduit que s0 ≡ sq mod n, et s ≡ s0 q mod n, et


alors s0 ≡ s0 q 2 mod n et s ≡ sq 2 mod n i.e., |Cs0 | = 2 et |Cs | = 2, absurde.

Solution de l’exercice 4.2.9 Soit 1 ≤ s < q, par le lemme ?? |C1 | = 2m.


Si on suppose que |Cs | = i < 2m, alors i divise 2m. De plus i est le plus petit

entier qui vérifie

sq i ≡ s mod n, alors s(q i − 1) ≡ 0 mod (q m + 1)

et donc s ≥ (q m + 1)/(q i − 1).


Si i ≤ m − 1, nous avons s ≥ (q m + 1)/(q i − 1) ≥ (q m + 1)/(q m−1 − 1 > q,

ce qui est impossible puisque s < q.

Si i = m, nous avons alors sq m = s + k(q m + 1) et sq m = −s + s(q m + 1),

93
en sommant les deux égalités, on obtient :

2sq m = (k + s)(q m + 1).

Puisque (q m , q m + 1) = 1, alors 2s ≡ 0mod (q m + 1), puisque 2s ≥ q m + 1 ce

qui est impossible puisque s < q et m > 1.

Puisque i < 2m et i divise 2m il n’existe aucun autre cas pour i.

Solution de l’exercice 1 Soit i un entier vérifiant les inégalités 0 ≤ i ≤ r.


¡ ¢
Il existe exactement ni (q − 1)i vecteurs y ∈ Fnq

Solution de l’exercice 3.5.6 En calculant Hy t on trouve (000)t ce qui


donne que y est un mot du code de Hamming.

Solution de l’exercice 3.5.8 La matrice H donnée dans l’exercice est la

matrice génératrice du code dual de C. Cependant on peut montrer que si


H = In−k |A, alors G = −At |Ik , cette forme n’est pas la forme systématique,

mais elle peut simplifier le calcul pour trouver les mots du code. Supposons
H = In−k |A, alors G = −At |Ik , vient du fait que la matrice de contrôle

et la matrice génératrice doivent vérifier HGt = 0. La dernière égalité est

équivalente à GH t = 0 ce qui est le cas,car GH t = A −


A = 0 (voir
 1 1 1 1 0 
la preuve ??). Donc dans notre cas G =   , Donc C =
0 0 0 0 1
{00000, 00001, 11110, 11111}. Le code C est un [5, 2, 1] code sa capacité de
correction et de détection est donc 0 ! ! Le mot y = 10010 ∈
/ C, du fait que

s(y) = Hy t 6= 0. En utilisant le décodage par syndrôme du mot 10010 on

94
trouve deux cosets leader cl1 = 01100 et cl2 = 10010 et donc on peut décoder
par deux mots x1 = y − cl1 = 00001 ou x2 = y − cl2 = 11111, cela n’est pas

surprenant puisque le nombre d’erreurs est 2 ce qui dépasse la capacité de

correction du code (0 dans notre cas).

On pouvait aussi trouver les mots du code C en trouvant une base i.e.,

deux vecteurs e1 et e2 linéairement indépendants de F52 tels que Het1 = 0 et

Het2 = 0, on trouve les plus simple e1 = 00001 et e2 = 11111. Ce qui donne


C = {00000, 00001, 11111, 11110}.

95
Série N˚1

Exercice 1 :
On considère le code à répétition [3, 1, 3]2 . Donner sa matrice génératrice
systématique et sa matrice de contrôle systématique.

Exercice 2 :

Soit M la matrice à coefficients dans F3 définie par


 
 1 2 0 1 1 2 
 
M = 
 2 1 0 0 1 1 
 
0 2 1 0 1 1

1. Déterminer le rang de M et en déduire que M est la matrice génératrice

d’un code linéaire C sur F3 de longueur 6 et de dimension 3

2. Déterminer le distance minimale de ce code.

Exercice 3 :

Montrer que n’importe quel corps fini on peut trouver des codes M DS.

96
Série N˚2

Exercice 1 : Supposons qu’après avoir émis le mot x d’un code C, nous avons
reçu un vecteur y erroné.Trouver le lien entre le syndrôme de y et celui de
l’erreur e.

Exercice 2 :

Donner les classes cyclotomiques de 2 mod S, S mod 2, 3 modulo 8, 5 modulo


7 et 4 modulo 9.
Exercice 3 :

Décomposer x5 − 1 dans une extension de F2 puis de F7 .


Même question avec x8 − 1 dans une extension de F3 et x9 − 1 dans une
extension de F4 . Exercice 4 :

1. Montrer que le code de Hamming [7, 4, 3] est cyclique.

2. Trouver les zeros et l’ensemble de définition de ce code.

Exercice 5 :

Supposons que nous avons utilisé le code de l’exemple (4.3.1) et nous avons

reçu le vecteur Y = 1111011.

En utilisant le décodage par syndrôme , trouver le mot émis.

Exercice 6 :
Donner les codes cycliques binaires de longueur n engendrés par le polynôme

1 + x + · · · + xn−1

97
Série N˚3

Exercice 1 :

1. Montrer que g(x) = x4 + x3 + x2 + 1 est le polynôme générateur d code

cyclique de l’exemple (4.3.1).

2. Trouver sa matrice génératrice.

Exercice 2 :

1. Montrer que g(x) = x6 + x3 + 1 divise x9 − 1 dans F2 [x].

2. Donner la dimension de C = hg(x)i et donner sa matrice génératrice.

3. Est ce que x8 + x6 + x5 + x3 + x2 + 1 es un mot de C ?

4. Donner la distance minimale de C.

Exercice 3 :

1. Décomposer x15 − 1 dans F2 [x].

2. Soit C le code cyclique binaire de polynôme générateur g(x) = (x +

1)(x4 + x + 1).

(a) Donner la dimension de C.

(b) Est ce que x14 + x12 + x8 + x4 + x + 1 est un mot de C.

(c) Donner le nombre des codes cyclique de longueur 15.

Exercice 4 :

On considère le code cyclique C = hg(x)i de longueur 21 avec

g(x) = (x6 + x4 + x2 + x + 1)(x3 + x2 + 1) = Mα Mα3

1. Donner une borne sur dc .

98
2. Montrer que x11 + x9 + x4 + x3 + 1 est un mot de C.

3. En déduire dc .

Exercice 5 :

1. Donner la dimension du code BC2 H(15, 5)

2. Donner une borne sur dc

Exercice 6 :

Soit C un code cyclique de longueur 63 sur F2 qui admet comme polynôme

générateur (x + 1)(x6 + x5 + 1).


Que peut-on dire de la distance minimale de C.

99
Série N˚4

Exercice 1 :
Le polynôme g(x) = x3 + x + 1 est un générateur d’un code cyclique de
longueur 7.

1. Déterminer la matrice génératrice de ce code et tout les mots de ce

code.

2. Donner sa matrice do contrôle, ainsi que le nombre d’erreurs détectées,


le nombre d’erreur corrigées.

3. Le code proposé est il parfait ?

4. Nous avons reçu le mot 1010111, s’agit il d’un mot du code ?

5. Calculer son syndrôme et corriger le.

Exercice 2 :

Donner les codes BCH primitifs binaires de longueur 15.


Exercice 3 :
Déterminer les paramètres associés au code binaire

© ª
C = 00001100, 00001111, 01010101, 11011101

100
Devoir N˚2

Exercice 1 :
lister tout les vecteurs de F42 qui sont à une distance égale à 2 de 1100.

Exercice 2 :

Si x a été envoyé et y = x + e a été reçu. Que peut on dire du poids de e, si

au plus 3 erreur ont été introduites.

Exercice 3 :

On utilise un code linéaire pour la transmission, si on veut corriger 8 erreurs


que doit vérifier d =distance minimale de C.

Exercice 4 :

Est ce qu’il peut exister un code linéaire de paramètres [9, 7, 4]


Exercice 5 :
Montrer que (C ⊥ )⊥ = C.

Exercice 6 :

On considère les sous ensemble de Z34 suivant

C = {000, 121, 202, 323}

1. Montrer que c est un Z4 -code linéaire, donner sa matrice génératrice.

2. Déterminer les codes Residue et Torsion du code C et son image par

la fonction Gray.

101
Corrigé du Devoir N˚2

Exercice 1 :
Les mots sont {0000, 0101, 0110, 1001, 1010, 1111}.
Exercice 2 :wt (e) ≤ 3

Exercice 3 :
d−1
On a 2
≥ e ⇐⇒ d ≥ 7.

Exercice 4 :
Par la formule de singleton n − k + 1 ≥ d, on obtient 3 = 9 − 7 + 1 ≥ 4.
Exercice 5 :

(C ⊥ )⊥ = {y ∈ Fnq tel que x.y = 0 mod q∀x ∈ C ⊥ } = C

Exercice 6 :
La matrice génératrice G = ( 1 2 1 ) c’est un code de type 4.

Res(C) = {000, 101} = T or(C)

son image par la fonction Gray est

G(C) = {000000, 011101, 110011, 101110}

102
Sujet N˚1

Exercice 1 :
C est un code cyclique binaire de longueur 7 engendré par g(x) = x3 + x2 + 1

1. Donner la matrice génératrice G de C et sa matrice de contrôle.

2. Quels sont les paramètres de C ?

3. C est il parfait, est il M DS ?

4. Noua avons reçu le mot y = 1010000, s’agit il d’un mot du code ?

Combien d’erreurs peut corriger le code C

5. Calculer son syndrôme et corriger le ?

Exercice 2 :

On considère le code C sur Z4 ayant pour matrice génératrice


 
 1 0 1 
G= 
0 1 3

1. Donner le type de C, sa distance de Hamming, de Lee et Euclidienne.

2. Est ce que G(C) est linéaire (G=La fonction Gray).

3. Est ce que C est auto-dual.

4. Calculer Res(c) et T or(C) (les codes résidu et de torsion) de C.

5. Donner le dual du code C

Exercice 3 :

Montrer qu’un code C est auto-dual si et seulement si ϕ est auto-orthogonal


et admet pour dimension k = n/2.

103
Chapitre 8

Rappels sur les corps finis

Définition 8.0.2 Un corps est un ensemble non vide munis de deux opé-

rations + et · et deux éléments différents de S notés 0 et 1 et tels que les

propriétés suivantes sont vérifiés :

1. ∀x, y ∈ S; x + y = y + x

2. ∀x, y, z ∈ S; (x + y) + z = x + (y + z)

3. ∀x ∈ S; x + 0 = x

4. ∀x ∈ S, ∃(−x); x + (−x) = 0

5. ∀x, y ∈ S, x · y = y · x

6. ∀x, y, z ∈ S; (x · y) · z = x · (y · z)

7. ∀x ∈ S; x · 1 = x

8. ∀x 6= 0∃x−1 ; x · x−1 ) = 1

9. ∀x, y, z ∈ S; x · (y + z) = x · y + x · z

Nous avons des examples classiques de corps connus tels que Q, R, ou C.

104
Dans ce chapitre on s’intéresse aux corps finis à cause de leurs liens avec les
codes correcteurs d’erreurs et plus généralament la cryptographie.

Exemple 8.0.3 Le corps fini F2 est le corps à deux éléments 0 et 1. Il est


appelé le corps binaire. Le corps ternaire est le corps F3 = {0, 1, 2}.

Exercice 8.0.4 Donner l’inverse de 2 dans F3 .

Donner F4 .

Théorème. 8.0.5 (Théorème de Wedderburn) Tout corps fini est commuta-

tif

Définition 8.0.6 On appelle la caracéristique d’un corps K le plus petit en-


tier k tels que k · 1K = 0K .

Lemme 8.0.7 Si un corps est de caractéristique k non nulle, alors k est un


nombre premier

Preuve 8.0.8 Supposons que n = p.q, avec p, q < n, alors p.q.1K = 0. Alors

(p.1).(q.1) = 0, comme K est un corps, alors c’est un anneau intègre d’où


p.1 = 0 ou q.1 = 0, ce qui contredit la définition de ka caractéristique.

Lemme 8.0.9 Soit K un corps fini à p 6= 0 éléments, avec p premier alors


K peut être identifier avec Z/pZ.

Preuve 8.0.10 On considère l’homomorphisme de groupe suivant

φ : Z −→ K
(8.1)
n 7−→ n · 1K ,

105
on peut montrer que ker(φ) = pZ. En plus d’après le premier Théorème
d’isomorphisme on obtient alors, Z/pZ ≡ H où H est un sous groupe de K.

Comme l’ordre est fini et premier, alors d’après Lagrange H = K. En plus

on sait que (Z/pZ, +, ·) ne peut être un corps que si p est premier.

On note Z/pZ = Fp , on l’appelle corps fini premier.

Corollaire 8.0.11 Tout corps fini K contient un sous corps fini premier.

Preuve 8.0.12 Soit K un corps de caractéristique p, alors Z/pZ = Zp est


un sous corps de K.

Lemme 8.0.13 Supposons que F est un corps fini et que K est une exten-
sion fini de F , avec d = [K : F ]. Alors |K| = |F |d .

Preuve 8.0.14 Soit α1 , . . . , αd une base de K sur F . Alors chaque élément

de K admet une unique représentation de la forme

a1 α1 + . . . + ad αd ,

avec ai ∈ F . Puisque il existe |F | possibilités à chaque coefficient ai , et

puisque chaque possibilité donne un élément différent de K, on déduit que

|K| = |F |d .

Théorème. 8.0.15 Si F est un corps fini de caractéristique p, alors F admet

pn éléments, où n ∈ N∗

Preuve 8.0.16 Nous avons montrer que F contient un sous corps premier

Zp . Puisque F est fini c’est alors une extension de Zp et alors si n = [F : Zp ]

on déduit du Lemme 8.0.13 que |F | = |Zp |n = pn .

106
Finalement nous avons obtenus le résultat suivant.

Théorème. 8.0.17 Tout corps fini est de caractéristique un nombre premier


p et possède pm éléments où m ∈ N∗ .

La propriété suivante des corps finis est une trés importante propriété.

Lemme 8.0.18 Si K est un corp fini de caractéristique p, alors on a

i i i
(a + b)p = ap + bp ,

pour tout a, b ∈ K et i ∈ N∗ .

Preuve 8.0.19 On raisonne par récurrence sur i. Si i = 1 par la formule


P ¡ ¢
du binôme de Newton s’écrit (a + b)p = pm=0 mp am bp−m et l’on vérifie que
¡ ¢
tous les coefficients mp sont divisible par p dés que 0 < m < p. En effet,
¡ ¢ ¡ ¢
de p(p − 1) . . . (p − m + 1) = m! mp on déduit que p divise m! mp . Comme
p est premier, il est premier avec tout nombre qu’il ne divise pas, donc en
particulier avec chacun des facteurs du produit m!. Et alors p est premier avec
¡ ¢ ¡ ¢
m!, et comme il divise le produit m! mp , il divisera mp d’après le Théorème

de Gauss. On aura donc (a + b)p = ap + bp . Enfin, si la propriété est vraie

jusqu’àu rang i,

i+1 i i i i+1 i+1


(a + b)p = [(a + b)p ]p = [ap + bp ]p = ap + ap .

8.1 Caractérisation des corps finis

Définition 8.1.1 Soit F un corps fini à q éléments, a ∈ F \ {0}. L’ordre de

a, ord(a) est le plus petit entier tels que as = 1.

107
Lemme 8.1.2 Soit F un corps fini à q éléments et soit a et b ∈ F \ {0} ;
alors :

1. ord(a) = s ⇒ a, a2 , . . . , as sont tous différents.

2. aj = 1 ≡ ord(a)|j.
ord(a)
3. ord(aj ) = (ord(a),j)
.

4. ord(a) = s, ord(b) = j, gcd(s, j) = 1 ⇒ ord(ab) = sj.

Preuve 8.1.3 1. Si ai = aj , 0 < i < j ≤ s on obtient aj−i = 1, avec

0 < j − i < s, ce qui contredit la définition de l’ordre.

2. Si ord(a) = s et j = sh, on obtient aj = ash = (as )h = 1. Si aj = 1 on


a j = sh + r, avec 0 ≤ r < s et on obtient 1 = aj = ash+r = (as )h ar et
alors r = 0, par définition de l’order, alors s|j.

3. Soit ord(a) = s et ord(aj ) = l ; alors 1 = (aj )l = ajl , alors en utili-

sant 2, on obtient s|jl et alors s


| jl ,
pgcd(s,j) pgcd(s,j)
alors s
pgcd(s,j)
|l. En plus
s s
nous avons (aj ) pgcd(s,j) , alors (aj ) gcd(s,j) , encore en utilisant 2 on trouve
s j
l| pgcd(s,j) et alors l = pgcd(s,j)
.

4. (ab)sj = (as )j (bj )s = 1, alors par 2 ord(ab)|sj, mais puisque gcd(s, j) =

1, alors ord(ab) = l1 l2 , avec l1 |s et l2 |j. Alors 1 = (ab)l1 l2 et alors


s
1 = [(ab)l1 l2 ] l1 = asl2 bsl2 = bsl2 et alors par 2 on aj|l2 s, mais puisque
pgcd(j, s) = 1, on a j|l2 et alors j = l2 . De même on obtient que s = l1 .

L’ensemble F ∗ des éléments non nulles de F forme un sous groupe pour la

multiplication. Si |F | = q, alors |F ∗ | = q − 1 et puisque l’ordre d’un élément

dans un groupe divise la cardinalité du groupe, alors α ∈ F ∗ ⇒ αq−1 = 1. ce

qui est équivalent à α ∈ F ⇒ αq = α. En d’autre terme tous éléments de F

108
est une racine du polynôme fq (x) = xq − x. Mais puisque le polynôme admet
au plus q éléments, alors F est aussi le corps de décomposition du polynôme

fq (x) = xq − x. Cela prouve le Théorème suivant

Théorème. 8.1.4 (Existence et unicité des corps finis) Soit q = pm où p

désigne un nombre premier et m ∈ N∗ . Soit Fp , la clôture algébrique de Fp .


Il existe alors un corps à q éléments et ce corps est unique à isomorphisme

près. Il est égale à


Fq = {x ∈ Fp /xq − x = 0}.

Preuve 8.1.5 S’il existe un corps K à q éléments, alors tout x ∈ K ∗ vérifie


xq−1 = 1. Par suite xq = x pour tout x ∈ k. Soit mathbbF p une clôture

algébrique de Fp on appelle ainsi toute extension algébrique de Fp qui est elle


même algébriquement close, et on sait qu’une telle clôture existe et est unique

à isomorphisme prés. L’ensemble Fq et donné par {x ∈ Fp /xq − x = 0} est


un sous corps de Fp . En effet si a et b ∈ Fq le Lemme 8.1.4 nous permet

d’écrire (a − b)q = aq − bq = a − b, donc a − b vérifie (a − b)q = a − b = 0 ce


qui donne a − b ∈ Fq . Pour finir (ab−1 )q = ab−1 montre que ab−1 ∈ Fq pour

tous a, b ∈ F∗q . Le corps Fq sera de cardinal q puisque les racines de xq − x

sont distinctes (en effet le polynômes dérivé −1 ne s’annule jamais sur Fp .

Un sous corps de Fpn est de caractéristique p donc de la forme Fpm . On peut


montrer le Théorème suivant.

Théorème. 8.1.6 Soient m, n ∈ N∗ . On a alors Fpm ⊂ Fpn si et seulement

si m divise n.

109
Preuve 8.1.7 L’inclusion Fpm ⊂ Fpn entraîne [Fqn : Fqm ] × [Fqm : Fq ] de
sorte que m divise n. Réciproquement, si m|n et si K est une clôture algé-

brique de Fqn , le Théorème 8.1.4 donne que Fqs = {x ∈ K/xq − x = 0}, et

l’on peut écrire

m −1 n −1
m|n ⇒ (q m − 1)|(q n − 1) ⇒ (xq − 1)|(xq − 1).

m m
Le polynôme xq − x divisera xq − x et l’on aura Fpm ⊂ Fpn .

110
Bibliographie

[1] M. Demazure, Cours D’Algèbre : Primalité. Divisibilité. Codes. Cassini,

Paris, 1997.

[2] K. Guenda Sur l’équivalence des codes, Thèse de Doctorat, Faculté des
Mathematiques, Université des Sciences et Technologie, Alger.

[3] W. C. Huffman and V. Pless, Fundamentals of error-correcting codes,

Cambridge, 2003.

[4] R. Lidl and H. Niederreiter, Introduction to finite fields and their appli-
cations, Cambridge University Press 1986.

[5] F. J. MacWilliams and N.J.A Sloane, The theory of error correcting-


codes, Benjamin, Inc. Amsterdam, North-Holland, 1977.

[6] S.Roman, Coding and information theory. Springer Verlag, New-York,

1992.

111

Vous aimerez peut-être aussi