Vous êtes sur la page 1sur 38

Université Bordeaux I

Master CSI 2
Année 2004-2005
Cours de codes (UE Codes/Signal)

Christine Bachoc
Bibliography

[1] J.H. van Lint, Introduction to coding theory, 3eme edition, Springer

[2] W. C. Huffman, V. Pless, Fundamentals of error-correcting codes, Cam-


bridge University Press 2003

[3] The handbook of Coding Theory

1
Chapter 1

Introduction

La théorie des codes s’est développée pour répondre au problème de la correc-


tion des erreurs introduites dans un système de transmission de l’information. À
l’origine développée par des ingénieurs en électronique, elle constitue maintenant
une branche des mathématiques discrètes. Dans le cadre du Master CSI, l’objectif
de ce cours est d’initier les étudiants à une autre problématique de la transmission
des informations, en insistant sur les applications pratiques, et de développer les
connections de ce sujet avec la cryptographie.
Le support physique utilisé pour transmettre ou stocker une information (par
exemple le téléphone, l’atmosphère, l’espace (penser aux communications par
satellite), mais aussi la mémoire d’un ordinateur, les disques compacts, etc..)
soumet cette information à des distorsions indésirables, ou bruit, qui l’altèrent.
Ce bruit peut être causé par un rayonnement, une altération du support, des in-
terférences, etc.. L’information recueillie par le receveur du canal est en général
différente de celle émise par la source. L’objectif de la théorie des codes est de
protéger l’information de cet éventuelle altération.
En théorie de l’information, les caractéristiques statistiques du mode de trans-
mission considéré sont modélisées par le canal de transmission. Par exemple, le
canal symétrique binaire transmet des mots binaires c ∈ Fn2 , où chaque bit est
transmis indépendamment, avec une probabilité p d’erreur.
On peut schématiser grossièrement la situation de la façon suivante:

2
Afin d’augmenter la fiabilité du canal, c’est-à-dire le taux d’information cor-
rectement transmise, on peut penser à introduire de la répétition dans cette in-
formation. Tous les enseignants savent bien que pour transmettre une informa-
tion à leurs élèves, et pour être sûrs que celle-ci n’a pas été dénaturée, il ne faut
pas hésiter à la répéter aussi souvent que possible. Sur ce beau principe, imagi-
nons que nous voulons envoyer le message binaire suivant : 11111111. Si nous
l’envoyons deux fois, le receveur pourra comparer les deux versions de notre mes-
sage. Si ces deux versions ne sont pas identiques, il peut conclure à l’existence
d’une erreur au moins dans la transmission. Il faut remarquer ici que cet objectif
est aussi atteint en rajoutant seulement un bit de contrôle de parité, c’est-à-dire la
valeur de la somme des bits modulo 2. Ici cela donnerait 111111110. À nouveau,
si la somme des bits n’est pas 0 modulo 2 à l’arrivée, on peut conclure à l’existence
d’une erreur au moins. Il est bon de remarquer que, dans le premier cas, le taux de
transmission du canal, qui est la proportion d’information utile transmise, est égal
à 1/2, tandis que dans le second cas, ce taux vaut 8/9. Reprenant l’exemple de
la répétition, on voit intuitivement que, si le message est répété un grand nombre
de fois, le receveur pourra “jeter” à coup sûr un plus grand nombre de messages
erronés, et avoir une confiance plus solide en les messages qui ont “l’air” corrects.
Un nouveau phénomène apparait même: si le message est répété r fois, et que ces
r copies ne sont pas toutes identiques, le receveur peut opter pour la version du
message la plus souvent reçue.

1.1 Le canal symétrique binaire et la théorie de Shan-


non
Le canal symétrique binaire (BSC) transmet des mots binaires de longueur n, ap-
partenant à un code C ⊂ Fn2 . On suppose que les bits sont transmis indépendamment,
et que un bit est transmis correctement avec probabilité 1 − p, incorrectement avec
probabilité p. On suppose p < 1/2 et dans la pratique p est petit. (Schéma). On
suppose également que les mots de C sont équiprobables.
Notons c la variable aléatoire représentant le mot transmis, y la variable aléatoire
représentant le mot reçu. On a:

3
n
Y
prob(y | c) = prob(yi | ci ) = (1 − p)card{i|yi =ci } pcard{i|yi 6=ci }
i=1
 card{i|yi 6=ci }
n p
= (1 − p)
1−p

Un décodeur par maximum de vraisemblance choisit de renvoyer le mot ĉ qui


maximise c ∈ C → prob(y | c). Comme p/(1 − p) < 1, maximiser prob(y | c)
revient à minimiser card{i | yi 6= ci }. Ainsi, le décodeur renvoi un mot du code
qui diffère de y sur le moins de coordonnées.
On voit apparaitre ici la notion de distance de Hamming entre deux mots:
dH (c, y) = card{i | yi 6= ci }.
Le taux de transmission d’un code C est par définition R = log(|C|)/n. Il
mesure la quantité d’information utile transmise. On pourrait penser que la fia-
bilité de la transmission ne peut être obtenue qu’au détriment de ce taux de trans-
mission. En fait il n’en est rien, comme l’a montré Shannon en 1948.
À tout canal est associé une valeur, appelée capacité. Sans entrer dans les
détails, la capacité du canal BSC est C(p) = 1 + p log p + (1 − p) log(1 − p). Soit
Perr la probabilité d’erreur, c’est-à-dire la moyenne des probabilités que ĉ 6= c.

Théorème 1 (Shannon, 1948) Soit R < C(p) et soit  > 0. Pour n assez grand,
il existe des codes C ⊂ Fn2 de taux de transmission égal à R, et tels que Perr < .

Le théorème de Shannon, que nous ne démontrerons pas ici, laisse entiers deux
problèmes majeurs: D’abord il est purement existentiel, il ne répond donc pas à
la question de la construction effective de tels codes; ensuite, il ne prend pas en
compte le problème algorithmique, qui est surtout celui de réaliser un décodage
efficace.

4
Chapter 2

Codes, Codes linéaires, généralités

Dans ce chapitre, nous allons étudier les codes linéaires sur un corps fini Fq .
Même si l’on ne s’intéresse ultimement qu’aux codes binaires, il est nécessaire de
considérer dans certaines constructions des codes sur des corps finis plus généraux,
c’est pourquoi nous nous plaçons d’emblée dans ce cadre plus général (mais pas
plus difficile..).
Pour l’instant, les seules choses à savoir sur les corps finis sont les suivantes:
si p est un nombre premier, il existe un unique (à isomorphisme près) corps fini à p
éléments qui est Z/pZ muni des opérations usuelles. Pour un entier q quelconque,
il existe un corps fini à q éléments si et seulement si q est une puissance d’un
nombre premier p, soir q = pr ; dans ce cas il est unique (à isomorphisme près), il
contient un unique sous-corps isomorphe à Fp = Z/pZ, sur lequel il est un espace
vectoriel de dimension r.

2.1 Poids et distance de Hamming


Introduites par Hamming en 1950, ces notions sont fondamentales comme on l’a
vu pour estimer l’efficacité d’un code dans le cadre d’un canal où les variables
aléatoires définies par les coordonnées sont indépendantes et égales.
Définition 1 Soit x = (x1 , . . . , xn ) ∈ Fnq . Le poids de Hamming de x, noté wt(x)
est égal au nombre de coordonnées non nulles de x.

wt(x) := card{i : 1 ≤ i ≤ n | xi 6= 0}.


Soit x, y ∈ Fnq . La distance de Hamming de x et y, notée dH (x, y) est égale
au nombre d’indices i où les coordonnées de x et y diffèrent.

5
dH (x, y) = wt(x − y) := card{i : 1 ≤ i ≤ n | xi 6= yi }.

.
le support d’un élément x ∈ Fnq est l’ensemble des indices i tels que xi 6= 0.
Le poids de x est donc le cardinal de son support.
Il faut remarquer que la distance de Hamming, est une vraie distance au sens
métrique du terme. Rappelons brièvement les propriétés d’une distance d(x, y),
faciles à vérifier sur dH .

• d(x, y) = 0 ⇔ x = y

• d(x, y) = d(y, x)

• d(x, z) ≤ d(x, y) + d(y, z)

La boule de centre x et de rayon R est par définition l’ensemble

B(x, R) := {y : y ∈ Fnq | d(x, y) ≤ R}.

On peut remarquer que y ∈ B(x, R) ⇔ y − x ∈ B(0, R).


Exercice: Montrer que card(B(x, R)) = R n
P  k
k=0 k (q − 1) .

Définition 2 Un code C de longueur n est un sous-ensemble de Fnq . La distance


minimale de C, notée d(C), est le minimum des distances entre deux éléments
distincts de C.
d(C) = min dH (x, y).
x,y∈C,x6=y

Proposition 1 Notons t = [ d−1 2


]. Les boules B(x, t) avec x ∈ C sont deux à deux
disjointes, et t est la valeur maximale du rayon pour cette propriété.

.
Supposons que l’on utilise un code C pour la transmission de mots de Fnq , de
distance minimale d. On note c un mot transmis et y le mot reçu, avec e = y − c.
Un décodeur peut opérer de la façon suivante. Si y appartient à l’une des boules
B(z, t) avec z ∈ C, il renvoi ĉ = z. Sinon, il renvoi un message d’erreur (variante:
il renvoi un des mots les plus proches mais pas unicité). On voit que ĉ 6= c dès
que y ∈/ B(c, t). Alors:

6
X
Perr = prob(c) prob(wt(e) > t)
c∈C
 wt(e)
1 X
n p
= (1 − p)
|C| 1−p
e∈Fn
2 ,wt(e)>t
n w  
(1 − p)n X

p n
= (q − 1)w
|C| w=t+1 1 − p w

et on voit que Perr diminue lorsque t augmente. En clair, à cardinal fixé, on


cherche un code avec d aussi grand que possible.
On dit que C détecte d − 1 erreurs et corrige t = [(d − 1)/2] erreurs.

2.2 Codes linéaires


Dans notre étude des codes contenus dans Fnq , nous allons nous concentrer sur les
codes linéaires, c’est-à-dire ceux qui ont une structure d’espaces vectoriels. En ef-
fet, les outils de l’algèbre linéaire facilitent dans ce cas les opérations d’encodage
et de décodage, comme nous le verrons. De plus, il a été démontré que le résultat
(non constructif) de Shannon reste vrai si l’on se restreint aux codes linéaires.
Nous voilà donc rassurés, on peut en principe être tout aussi efficace dans la cor-
rection de l’information avec des codes linéaires..

Définition 3 Un code est dit linéaire si C est un Fq -sous espace vectoriel de Fnq .
Dans ce cas, on note k sa dimension.

Si C est linéaire, on peut remarquer que, si x et y sont dans C, alors x − y


appartient également à C. Comme dH (x, y) = wt(x − y), la distance minimale
de C est égale au minimum des poids des éléments non nuls de C. On a:

d(C) = wt(C) = min{wt(x), x ∈ C \ {0}}.


D’un point de vue algorithmique, le calcul de la distance d’un code quel-
conque nécessite |C|2 opérations, tandis que pour un code linéaire il n’en faut
que |C| (environ).
Si C est un code linéaire, longueur, dimension et distance sont les paramètres
fondamentaux de C et sont notés [n, k, d].

7
2.3 Orthogonalité
Nous introduisons une notion d’orthogonalité
Pn sur l’espace Fnq avec la forme bilinéaire
symmétrique non dégénérée x · y = i=1 xi yi .
Lorsque Fq = F2 , on identifie souvent un mot de Fn2 avec son support. La
notation x∩y désigne donc le mot de support l’intersection des supports respectifs
de x et y. On a alors:

• x · y = wt(x ∩ y) mod 2

• En particulier, x · x = wt(x) mod 2.

• wt(x + y) = wt(x) + wt(y) − 2wt(x ∩ y)

Parfois on considère d’autres formes que celle définie plus haut. Un cas impor-
tant est celui de Fq = F4 . Rappelons que F4 = {0, 1, w, w2 }, où w2 + w + 1 = 0.
Sur ce corps, l’application x → x2 est un automorphisme de corps, qui définit
2
Pn aussi x̄ = x . Il est usuel de
une involution encore appelée conjugaison. On note
n
considérer sur F4 la forme hermitienne x · y = i=1 xi ȳi .

2.4 Matrice génératrice, de contrôle de parité


Définition 4 Soit C un code linéaire de longueur n et de dimension k. Une ma-
trice génératrice de C est une matrice k × n dont les lignes forment une base
de C. Le Pcode dual du code C est l’orthogonal C ⊥ de C pour la forme usuelle
n
x · y = i=1 xi yi .

C ⊥ := {u : u ∈ Fnq | u · v = 0 pour tout v ∈ C}.


Une matrice de contôle de parité de C est une matrice (n − k) × n génératrice de
C ⊥ . Un code est dit autodual s’il est égal à son dual.

Proposition 2 Soit C un code linéaire, de longueur n et de dimension k, soit G


une matrice génératrice de C et soit H une matrice de contrôle de parité de C.
alors:

• x ∈ C ⇔ Il existe u ∈ Fkq | x = uG

• x ∈ C ⇔ Hxt = 0

8
• C contient un mot de poids au plus w, ssi w colonnes de H sont linéairement
dépendantes.

Remarque 1 Ainsi, un code C est de poids d si et seulement si, il existe d colonnes


de sa matrice de contrôle de parité linéairement dépendantes, tandis que d − 1
colonnes quelconques sont indépendantes. cette remarque est à la base du pro-
cessus de construction des codes de Hamming, que nous verrons au paragraphe
suivant.

Proposition 3 Soit C un code linéaire de matrice génératrice G. Supposons que


G soit de la forme dite canonique ou systématique G = [Ik | A]. Alors une
matrice de contrôle de parité est H = [−At | In−k ].

2.5 Équivalence de codes


Soit Sn le groupe des permutations de l’ensemble {1, 2, . . . , n}. Ce groupe opère
sur Fnq par permutation des coordonnées:

σ ∈ Sn , (x1 , . . . , xn )σ := (xσ(1) , . . . , xσ(n) ).

Exercice: Montrer que (xσ )τ = xστ .


Toutes les notions introduites sont invariantes par permutation: ainsi, wt(σ(x)) =
wt(x), σ(x) · σ(y) = s · y, dH (σ(x), σ(y)) = dH (x, y), etc.. Si un code C1 est
l’image d’un code C2 par une permutation σ, bien que distincts, ces codes auront
les mêmes propriétés relativement au problème de la correction de l’information.
Pour cette raison, on étudie en général les codes à permutation près.
À toute permutation σ, on associe une matrice Mσ qui est la matrice de la
transformation linéaire de Fnq associée à σ. C’est une matrice n × n, dont toutes
les entrées sont nulles, sauf les (σ(i), i) où elles sont égales à 1. On a:

xσ = xMσ .
Si C est un code linéaire de matrice génératrice G, C σ est encore un code
linéaire, de matrice génératrice GMσ . Celle-ci est obtenue à partir de G par per-
mutation, suivant σ, des colonnes de G.

Proposition 4 (et définition.) Soit C1 , C2 deux codes linéaires de matrices génératrices


respectivement G1 et G2 . On dit que les codes C1 et C2 sont équivalents s’il existe

9
une permutation σ telle que C2 = C1σ . Cela est équivalent à demander qu’il existe
une matrice de permutation Mσ et une matrice k × k P à coefficients dans Fq et
inversible telles que

G 2 = P G 1 Mσ .

On utilise aussi la notion d’équivalence monomiale. Deux codes sont dit


monomialement équivalents s’ils sont échangés par une tranformation monomi-
ale, où une transformation monomiale est une transformation du type

(x1 , . . . , xn ) → (a1 xσ(1) , . . . , an xσ(n) ),

avec, pour tout i, ai ∈ F∗q .


Exercice: Quelles notions sont invariantes par transformation monomiale, et quelles
notions ne le sont pas ? Quelle est la matrice d’une transformation monomiale ?
Montrer que l’ensemble des transformations monomiales forme un groupe, iso-
morphe au produit semi-direct (F∗q )n o Sn . Quel est son cardinal ?

Définition 5 L’ensemble des permutations σ ∈ Sn telles que σ(C) = C forme un


groupe, appelé le groupe des permutations (ou le groupe des automorphismes) du
code C, et noté Aut(C).

2.6 Les codes de Hamming


Dans ce paragraphe, on construit une famille de codes qui ont pour propriété de
corriger une erreur. En vertu de la Proposition 2 et de la remarque qui la suit, on
doit donc construire des matrices de contrôle de parité H telles que deux colonnes
ne soient pas linéairement dépendantes. Si r est le nombre de lignes de H, ces
colonnes appartiennent à Frq , doivent donc être non nulles, et on doit en choisir
au plus une par droite de Frq . Le nombre maximum de colonnes est donc (q r −
1)/(q − 1).

Définition 6 On note H(q, r) et on appelle code de Hamming sur Fq d’ordre r le


code défini (à équivalence monomiale près) par la matrice de contrôle de parité
dont les colonnes décrivent l’ensemble Frq \ {0} modulo F∗q (i.e. l’espace projectif
de dimension r − 1).

10
Exemple: : Pour q = 2 et r = 3, on obtient pour matrice de contrôle de parité
 
1 0 0 1 0 1 1
H = 0 1 0 1 1 0 1 .
0 0 1 0 1 1 1

Une matrice génératrice de H(2, 3) est donc


 
1 1 0 1 0 0 0
0 1 1 0 1 0 0
G= 1 0 1 0
.
0 1 0
1 1 1 0 0 0 1
Le code H(2, 3) a pour paramètres [7, 4, 3] et son dual [7, 3, 4].

Proposition 5 1. Le code H(q, r) est de longueur n = (q r − 1)/(q − 1), de


dimension n − r et de distance minimal 3.

2. C’est un code parfait, c’est-à-dire ∪x∈H(q,r) B(x, 1) = Fnq .

3. Son dual H(q, r)⊥ est un code simplexe, c’est-à-dire tous ses mots non nuls
sont de même poids. La valeur commune de leur poids est q r−1 .

Preuve: Le point 1. est déjà démontré. Notons que le poids 3 est bien atteint
puisque toutes les droites sont représentées. Les boules B(x, 1) sont disjointes et
n

on a vu que card(B(x, 1)) = 1 + 1 (q − 1) = 1 + n(q − 1) = q r . On a donc:

card(∪x∈H(q,r) B(x, 1)) = card(H(x, r))q r = q n−r q r = q n .

Comme q n est précisément le cardinal de Fnq , on en déduit l’égalité des ensembles.


Notons H la matrice de contrôle de parité de H(q, r) décrite plus haut. Un
mot de H(q, r)⊥ est de la forme x = uH où u parcourt Frq . Notons c1 , . . . , cn les
colonnes de H. Alors x = (u·c1 , . . . , u·cn ). On sait que les ci parcourent Frq \{0}
modulo F∗q ; d’autre part, u · c = 0 si et seulement si u · λc = 0 pour λ ∈ F∗q . Donc:

wt(u) = card{c ∈ Frq | u · c 6= 0}/(q − 1).


Si u est non nul, ce cardinal vaut q r−1 (q − 1) (en effet, un hyperplan de Frq a
q r−1 éléments donc son complémentaire en a q r − q r−1 = q r−1 (q − 1). Donc
wt(u) = q r−1 .

11
La procédure de décodage des codes de Hamming est très simple. Soit y ∈ Fnq ;
on garde les notations précédentes. Pour trouver le mot x ∈ H(q, r) le plus proche
de y, il suffit de:

• Calculer s := Hy t .

• Si s = 0, retourner x = y.

• Si s 6= 0, chercher l’indice i tel que s = λci .

• Remplacer yi par yi − λ, et retourner x = y.

Preuve: : Notons i le mot dont les coordonnées sont toutes nulles sauf la i-ème
qui vaut 1. Clairement, on a Hy t = H(λi )t . Donc x := y − λi appartient à
H(q, r) et est à distance 1 de y. Remarquons qu’on trouve toujours un indice i
convenable, puisque toutes les droites de Frq sont représentées dans les colonnes.
C’est donc une autre façon de voir que ce code est parfait.

2.7 Distribution des poids d’un code.


Définition 7 La distribution des poids d’un code C linéaire est le n-uplet
(A0 , A1 , . . . , An ),Poù Ai est égal au nombre des mots de C de poids i. En parti-
culier, A0 = 1 et i Ai = q k , où k est la dimension de C.

Exercice: Montrer que deux codes équivalents, et même monomialement équiva-


lents, ont même distribution des poids.

Définition 8 Soit C un code binaire. On dit que C est un code pair si tous les
mots de C ont un poids de Hamming pair.
On dit que C est un code doublement pair si tous les mots de C ont un poids
de Hamming divisible par 4.

Proposition 6 Si C est un code binaire tel que C ⊂ C ⊥ , alors C est un code pair.
Si C est un code binaire tel que C ⊂ C ⊥ , et possédant une base de mots de
poids divisibles par 4, alors C est un code doublement pair.

12
Preuve: Si C ⊂ C ⊥ , alors pour tout x ∈ C, x · x = 0. Mais wt(x) ≡ x · x
mod 2, donc wt(x) ≡ 0 mod 2. Si, en outre, C a une base de mots de poids
divisibles par 4, alors tous les mots de C sont bien divisibles par 4 à cause de la
relation wt(x + y) = wt(x) + wt(y) − 2wt(x ∩ y).

Exercice: Montrer qu’un code peut être pair sans vérifier C ⊂ C ⊥ . Par contre,
montrer que, si C est doublement pair, alors C vérifie C ⊂ C ⊥ .
Montrer que le code de Hamming étendu est un code doublement pair.
On peut se demander s’il existe une relation entre la distance minimale d’un
code, et celle de son dual. En fait, la distance du code dual dépend non seulement
de la distance minimale du code, mais aussi de toute sa distribution des poids,
comme le montre la formule de MacWilliams. Cette formule dit que la distribution
des poids de C ⊥ s’exprime linéairement en fonction de celle de C. Elle est une
conséquence de la formule de Poisson discrète que nous rappelons maintenant.

Théorème 2 (Formule de Poisson) Soit f : Fnq → A une application de Fnq dans


un C-module A. Soit fˆ : Fnq → A définie par: fˆ(v) =
P
u∈Fn
q
(v, u)f (u), où
traceFq /Fp (v·u)
(v, u) = ζp . Alors
X 1 Xˆ
f (u) = f (v).
|C| v∈C
u∈C ⊥

Preuve: On a

X X X
fˆ(v) = ( (v, u)f (u)) (2.1)
v∈C v∈C u∈Fn
q
X X
= f (u)( (v, u)). (2.2)
u∈Fn
q v∈C

L’application v → (v, u) est un caractère du groupe


PC, et on utilise les propriétés
d’orthogonalité des caractères pour conclure que v∈C (v, u) = 0 si u ∈ / C ⊥ , et
= |C| sinon.

Théorème 3 (et définition). Le polynôme énumérateur des poids d’un code C de


longueur n sur Fq est le polynôme homogène en deux variables x et y, de degré
n, défini par:

13
X
WC (x, y) = xn−wt(u) y wt(u) .
u∈C
On a (formule de MacWilliams):
1
WC ⊥ (x, y) = WC (x + (q − 1)y, x − y).
|C|
Preuve: On applique la formule de Poisson à la fonction f (u) = xn−wt(u) y wt(u) .
Il faut calculer fˆ.

X
fˆ(v) = (v, u)xn−wt(u) y wt(u) (2.3)
u∈Fn
q
n
XY
= (vi , ui )x1−wt(ui ) y wt(ui ) (2.4)
u∈Fn
q i=1
n X
Y
= (vi , a)x1−wt(a) y wt(a) (2.5)
i=1 a∈Fq
n
Y X
= ((vi , 0)x + ( (vi , a))y) (2.6)
i=1 a6=0
P
et on utilise a6=0 (vi , a) = q − 1 si vi = 0, = −1 sinon. On obtient:

fˆ(v) = (x + (q − 1)y)n−wt(v) (x − y)wt(v) . (2.7)

Exemple: On a vu que le code H(q, r)⊥ est un code dont tous les mots non nuls
sont de poids q r−1 . Son polynôme énumérateur des poids est donc
r−1 r−1
WH(q,r)⊥ (x, y) = xn + (q r − 1)xn−q yq .
La formule de MacWilliams nous permet donc de calculer WH (q, r):

1
WH(q,r) (x, y) = r (x+(q − 1)y)n +
q

r n−q r−1 q r−1
(q − 1)(x + (q − 1)y) (x − y) .

14
Pour q = 2, on obtient:

1 2r−1 −1

2r−1 r 2r−1

WH(2,r) (x, y) = r (x + y) (x + y) + (2 − 1)(x − y)
2
et, pour q = 2 et r = 3,

WH(2,3) (x, y) = x7 + 7x4 y 3 + 7x3 y 4 + y 7 .

2.8 Quelques constructions standards.


Des constructions standards permettent de fabriquer de nouveaux codes à partir
d’anciens. Dans ce paragraphe, on décrit quelques-unes de ces constructions.
Extension par parité: Soit C un code de longueur n et de dimension k. On
rajoute une coordonnée aux mots du code, de sorte que la somme des coordonnées
d’un mot du nouveau code égale zéro. Le nouveau code est donc de longueur n+1
et de même dimension. Dans le cas binaire, cette construction est particulièrement
intéressante si le code de départ a une distance impaire d, car alors le code étendu
est de distance d + 1.
Exemple: Le code de Hamming étendu H(2, 3)e xt est un code de paramètres
[8,4,4]. Il est de plus autodual.
Somme orthogonale: Soit C1 et C2 deux codes de paramètres respectifs [n1 , k1 , d1 ]
et [n2 , k2 , d2 ]. On définite C1 ⊕ C2 := {(x, y) : x ∈ C1 , y ∈ C2 }. Alors claire-
ment, ce code a pour paramètres [n1 + n2 , k1 + k2 , min(d1 , d2 )].
Somme: La précédente construction ne doit pas être confondue avec la somme
dans Fnq . Si C1 et C2 sont deux codes de longueur n sur Fq , on définit C1 + C2 :=
{x + y : x ∈ C1 , y ∈ C2 }. Le dual de ce code est l’intersection des codes duaux.

2.9 Encodage et décodage, les classes d’un code li-


néaire.
L’avantage des codes linéaires pour la transmission d’information est multiple.
D’une part, il suffit de stocker une matrice génératrice du code pour connaı̂tre
tous ses éléments. D’autre part, l’encodage des mots de Fnq est très facile à met-
tre en oeuvre à partir d’une matrice génératrice G, puisque il suffit d’effectuer

15
l’opération uG, si u = (u1 , . . . , uk ) est le mot à transmettre. On peut remar-
quer que, si G est sous forme canonique, v = uG a ses k premières coordonnées
égales à celles de u. A partir d’un mot du code il est donc très facile de revenir au
message initial.
En ce qui concerne le décodage, la situation est plus compliquée. On s’intéresse
ici au décodage par maximum de vraisemblance, qui consiste, pour un élément
w ∈ Fnq , à trouver un élément du code à plus petite distance de w.

Définition 9 Les classes d’un code C de longueur n sur Fq sont les ensembles
x + C, où x ∈ Fnq . Si k est la dimension de C, il y a q n−k classes distinctes.
Le poids, ou la distance minimale d’une classe différente de C est wt(x + C) :=
min{wt(y) : y ∈ x + C}.
Le rayon de recouvrement du code C est le maximum des poids des classes.
C’est le plus petit entier δ tel que les boules de centres les mots du code et de
rayon δ recouvrent Fnq :

Fm
q = ∪x∈C B(x, δ).

Un code est dit parfait si son rayon de recouvrement δ est égal à t := [(d −
1)/2], où d est sa distance minimale (clairement il est toujours supérieur..). Dans
ce cas, les boules forment une partition de l’espace Fnq .

Proposition 7 Soit C un code de distance minimale d et soit t := [(d − 1)/2].


Alors les ensembles x + C, pour x ∈ Fnq avec 1 ≤ wt(x) ≤ t sont tous distincts.
Soit w ∈ Fnq et soit H une matrice de contrôle de parité de C. le vecteur w
appartient à la réunion des boules de centre les mots du code et de rayon t, si et
seulement si Hwt appartient à l’ensemble {Hxt : 1 ≤ wt(x) ≤ t}. Dans ce cas,
si Hwt = Hxt , alors w se décode en w − x.

Exemple: Le code de Hamming binaire de paramètres [7, 4, 3]. On a t = 1, et


27−4 = 7 + 1. Les classes de ce code sont donc C lui-même, plus les x + C avec C
de poids 1. Si on note ei l’élément de F72 dont toutes les coordonnées sont nulles
sauf la i-ème qui vaut 1, Heti est simplement la i-ème colonne de H.

16
Chapter 3

Codes cycliques

Dans ce chapitre, nous allons étudier une famille de codes particulière, les codes
cycliques. Nous allons voir qu’avec un peu d’algèbre, ils peuvent être analysés
facilement. En particulier, nous allons généraliser la construction des codes de
Hamming, faits pour corriger une erreur, en imposant de corriger un nombre
d’erreurs fixé à l’avance. Ce sont les codes BCH, qui en outre possèdent un bon
algorithme de décodage. Ces codes sont très utilisés pour la correction d’erreurs.

3.1 Codes cycliques: généralités


On définit la fonction “décalage” sur Fnq , qui est une permutation circulaire des
coordonnées:

Fnq −→ Fqn
s : (c0 , c1 , . . . , cn−1 ) 7−→ (cn−1 , c0 , c1 , . . . , cn−2 )

Définition 10 Soit C un code linéaire sur Fnq . On dit que C est cyclique si s(C) =
C.

En tant que transformation de Fnq , s vérifie bien sûr sn = Id, et s est d’ordre n.
On vérifie facilement que, si C est cyclique, C ⊥ est aussi cyclique. Un exemple
très simple de code cyclique est le code de contrôle de parité.
La propriété d’être cyclique pour un code s’interprète très bien en termes de
polynômes. On associe à un mot c = (c0 , c1 , . . . , cn−1 ) un polynôme, noté c(x):
c(x) = c0 + c1 x + · · · + cn−1 xn−1 . On considère l’application composée φ:

17
Fnq −→ Fq [x] −→ Fq [x]/(xn − 1)Fq [x]
φ : c 7−→ c(x) 7−→ c(x) mod xn − 1

L’application φ est un isomorphisme de Fq -espaces vectoriels.

Proposition 8 Un code linéaire C est cyclique si et seulement si φ(C) est un idéal


de l’anneau Rn := Fq [x]/(xn − 1)Fq [x].

Preuve: Dans Rn , la multiplication par x correspond à la permutation circulaire


des coefficients. Ainsi, pour tout u ∈ Fnq , φ(s(u)) = xφ(u); un code C est stable
par s si et seulement si xφ(C) = φ(C). Comme d’autre part un code linéaire est
aussi un Fq -espace vectoriel, il est stable par s si et seulement si son image par φ
est un idéal de Rn .

Il reste à étudier la structure des idéaux de Rn . Dans ce but, on supposera


toujours que n est premier à p = car(Fq ). En effet, sous cette hypothèse, le
polynôme xn − 1 n’a que des racines simples.
D’autre part, on identifiera dans la suite un élément c de Fnq et le polynôme
c(x) qui lui est associé.

Théorème 4 Soit C un code cyclique sur Fq . Il existe un unique polynôme g(x) ∈


Fq [x] tel que:
1. C = g(x)Rn mod xn − 1

2. g(x) divise xn − 1
De plus, g(x) est le polynôme unitaire de plus petit degré de C; si deg(g) = k,
alors dim(C) = n − k et une base de C est: {g(x), xg(x), . . . , xn−k−1 g(x)}. Ce
polynôme est appelé polynôme générateur du code.

Preuve: Les idéaux de Rn sont en bijection avec les idéaux de Fq [x] qui conti-
ennent xn − 1. D’autre part, les idéaux de Fq [x] sont principaux, et g(x)Fq [x]
contient xn − 1 si et seulement si g(x) divise xn − 1.
Soit D ⊂ C le Fq -espace vectoriel engendré par {g(x), xg(x), . . . , xn−k−1 g(x)}.
Clairement, D est de dimension n − k, car ces éléments sont “triangulaires” sur
{1, x, . . . , xn−1 }. Il reste à montrer que D est égal à C, et pour cela, que les

18
xu g(x) mod xn − 1 pour u ≥ n − k sont dans D. On effectue la division eucli-
dienne de xu g(x) par xn − 1 (dans Fq [x] bien sûr). Il existe des polynômes q et r,
qvec deg(r) < n, tels que

xu g(x) = (xn − 1)q(x) + r(x).

Comme g(x) divise xn −1, g(x) divise aussi r(x). Écrivons r(x) = g(x)r1 (x);
on a deg(r1 ) < n − k et xu g(x) = g(x)r1 (x) mod xn − 1 ce qui montre bien que
xu g(x) appartient à D.

La matrice génératrice de C associée à la base mise en évidence dans le


théorème précédent a une forme bien particulière: si g = g0 + g1 x + · · · + gk xk ,
 
g0 g1 . . . gk 0 . . . . . . 0
 0 g0 g1 . . . gk 0 . . . 0 
.. .. ..
 
G=
 . . . 


 . .
.. .. . ..


0 . . . . . . g0 g1 . . . gk
Quelques propriétés élémentaires laissées en exercice:

1. C1 ⊂ C2 ssi g2 divise g1

2. C1 ∩ C2 correspond au polynôme ppcm(g1 , g2 )

3. C1 + C2 correspond au polynôme pgcd(g1 , g2 )

4. C ⊥ a pour polynôme générateur le polynôme réciproque de g: xdeg(g) g(1/x).

Exemple: Les codes cycliques de longueur 7 sur F2 . x7 − 1 = (x − 1)(x3 + x +


1)(x3 + x2 + 1). Dimensions, distance minimales? nombre?

Définition 11 Soit C un code cyclique de longueur n sur Fq , engendré par le


polynôme g(x). Soit α une racine primitive n-ième de l’unité dans une clôture
algébrique de Fq . L’ensemble des zéros de C est l’ensemble

Z(C) := {αi | g(αi ) = 0}.

19
Remarquons que la plus petite extension de Fq qui contienne α est Fqr . où r
est le plus petit entier tel que n divise q r − 1.
Puisque g(x) appartient à Fq , le Frobenius σq , défini par σq (x) = xq opère sur
les racines de g. Il sépare l’ensemble Z(C) en orbites, correspondant au différents
polynômes minimaux sur Fq .

Définition 12 Les classes cyclotomiques modulo n sont les ensembles

C(k) := {kq i mod n}.

Elles forment une partition de l’ensemble {0, 1, 2, . . . , n Q


− 1}.
Le polynôme minimal de αk sur Fq est égal à Pαk = i∈C(k) (x − αi ).

Il est clair qu’un polynôme générateur d’un code cyclique de longueur n est
le produit d’un certain nombre de ces polynômes minimaux. Un code cyclique de
longueur n sur Fq est donc déterminé par un ensemble de classes cyclotomiques
modulo n. On va voir que ces classes déterminent une borne inférieure pour la
distance minimale du code.

3.2 Codes BCH


On fixe désormais une racine primitive n-ième de l’unité α dans une clôture
algébrique de Fq .

Théorème 5 (de la borne BCH) Soit C un code cyclique de longueur n sur Fq .


Si Z(C) contient δ − 1 puissances successives de α, i.e. s’il existe b tel que
{αb , αb+1 , . . . , αb+δ−2 } ⊂ Z(C), alors d(C) ≥ δ.

Preuve: Tout d’abord, on remarque que l’ensemble Z(C) permet de caractériser


les éléments de C, de la façon suivante:

Lemme 1 Soit c = (c0 , c1 , . . . , cn−1 ) ∈ Fnq . On a: c ∈ C ssi c(αi ) = 0 pour tout


αi ∈ Z(C).

Preuve: Les éléments de C sont les c(x) = g(x)h(x) mod xn − 1. Donc, si


g(αi ) = 0, on a aussi c(αi ) = 0. Réciproquement, si c(αi ) = 0 pour tout αi ∈
Z(C), il est clair que g(X) divise c(X) puisque les zéros de g sont simples.

20
On peut traduire cette condition matriciellement. Soit

Z(C) := {αi1 , . . . , αis }

et soit P la matrice à s lignes et n colonnes:


 
1 αi1 (αi1 )2 . . . (αi1 )n−1
 .. .. .. ..
P :=  . .

. ... . 
1 αis (αis )2 . . . (αis )n−1
On a:
   
c0 c(αi1 )
P  ...  =  ... 
   
cn−1 c(αis )
donc
  
c0 0
 ..   .. 
c ∈ C ⇐⇒ P  .  =  .  .
cn−1 0
Notons que P n’est pas tout à fait une matrice de contrôle de parité de C,
car ses coefficients ne sont pas à priori dans Fq . Malgré cela, comme dans la
Proposition 2, les mots de C correspondent à des combinaisons linéaires nulles de
ses colonnes. Ainsi:

C contient un mot non nul de poids ≤ δ−1 ⇐⇒ P contient δ−1 colonnes liées.

Fixons donc δ − 1 colonnes, associées aux puissances j1 , j2 , . . . , jδ−1 . On


extrait de ces δ − 1 colonnes les lignes associées aux δ − 1 puissances successives
de α appartenant à Z(C). On se retrouve avec la matrice carrée de taille δ − 1
suivante:
 
(αb )j1 (αb )j2 ... (αb )jδ−1
 (αb+1 )j1 (αb+1 )j2 . . . (αb+1 )jδ−1 
A= .
 
.. .. ..
 . . ... . 
b+δ−2 j1 b+δ−2 j2 b+δ−2 jδ−1
(α ) (α ) . . . (α )

21
Le déterminant de cette matrice vaut


1 1 ... 1

αj1 αj2 ... α jδ−1
b j1 b j2 b jδ−1
det(A) = (α ) (α ) . . . (α )

.. .. ..
.
δ−2 j1 . ... .
(α )j2
δ−2 δ−2 jδ−1

(α ) ... (α )
Y
= αbj1 +bj2 +···+bjδ−1 (αjk − αjl )
1≤k<l≤s

par la formule de Van der Monde. Comme ce déterminant est non nul, on peut
conclure que les δ − 1 colonnes sont linéairement indépendantes, et donc que C
ne contient pas de mot non nul de poids inférieur ou égal à δ − 1.

Définition 13 Un code BCH de distance prescrite δ est un code cyclique, de


longueur n sur Fq , engendré par le polynôme:

g(x) = ppcm(Pαb+i | 0 ≤ i ≤ δ − 2)
où Pαj est le polynôme minimal de αj sur Fq .
Si b = 1, on l’appelle code BCH au sens restreint. Le poids minimal d’un code
BCH de distance prescrite δ est au moins égal à δ.

Exemple: Prenons q = 2, et δ = 3. On a Pα = Pα2 puisque α2 = σ(α). Si


r = deg(Pα ) et n = 2r − 1, i.e. si α est un générateur de F∗2r , le code C n’est
autre que H(2, r).

Remarque 2 Il peut arriver que d(BCH) > δ.

3.3 Le décodage des codes BCH


Non seulement la construction des codes BCH assure une borne inférieure pour
leur distance minimale, mais de plus on a un algorithme de décodage efficace pour
ces codes (dû à Berlekamp).
Soit donc C un code BCH (au sens restreint pour simplifier) de distance pre-
scrite δ = 2t + 1. C corrige dont t erreurs. Soit y = y0 + y1 x + · · · + yn−1 xn−1
le mot reçu; on cherche donc c ∈ C tel que d(y, c) ≤ t. On pose

22
e = y − c = e0 + e1 x + · · · + en−1 xn−1 .
La stratégie de l’algorithme consiste à d’abord déterminer les positions des
erreurs, c’est-à-dire l’ensemble des indices i tels que ei 6= 0, puis leurs valeurs ei .
On pose donc:

P := {i : 0 ≤ i ≤ n − 1 | ei 6= 0}
et on construit un polynôme localisateur des erreurs σ:
Y
σ(z) := (1 − αi z).
i∈P

Remarquons que connaitre σ revient à connaitre P , et que l’hypothèse d(y, c) ≤ t


se traduit par: deg(σ) ≤ t.
On pose ensuite
2t
X
S(z) := y(αl )z l−1 .
l=1

Le polynôme S est connu, puiqu’il ne dépend que de y.

Proposition 9 Il existe un polynôme w(z) de degré deg(w) < t, et premier à σ,


tel que
S(z)σ(z) = w(z) mod z 2t . (3.1)
Réciproquement, si σ 0 et w0 sont deux polynômes tels que deg(σ 0 ) ≤ t, deg(w) <
t et
S(z)σ 0 (z) = w0 (z) mod z 2t ,
alors il existe un polynôme q(z) tel que:
(
σ 0 (z) = σ(z)q(z)
w0 (z) = w(z)q(z)

Preuve: On y(αl ) = e(αl ) = ei αli pour tout 1 ≤ l ≤ 2t, puisque {αl , 1 ≤


P
i∈P
l ≤ 2t} ⊂ Z(C).

23
2t
X X
ei αli z l−1 σ(z)

S(z)σ(z) =
l=1 i∈P
X 2t
X
αli z l−1 σ(z)

= ei
i∈P l=1
X 1 − (αi z)2t 
= ei αi iz
σ(z)
i∈P
1 − α
X Y
= ei αi 1 − (αi z)2t (1 − αj z)
i∈P j6=i
X Y
i
= ei α (1 − αj z) mod z 2t
i∈P j6=i

Posons w(z) := i∈P ei αi j6=i (1 − αj z). Ce polynôme est bien de degré au


P Q

plus égal à t − 1; de plus, w(α−i ) = ei αi j6=i (1 − αj−i ) 6= 0 donc w est premier


Q
à σ.
Supposons qu’il existe w0 et σ 0 comme indiqué. On a:

w(z)σ 0 (z) = S(z)σ(z)σ 0 (z) mod z 2t


= w0 (z)σ(z) mod z 2t

Comme deg(wσ 0 ) < 2t et deg(w0 σ) < 2t, on peut conclure

w(z)σ 0 (z) = w0 (z)σ(z).

Comme pgcd(σ, w) = 1, on conclut que σ divise σ 0 et w divise w0 , d’où le résultat.

Remarque 3 En termes de LFSR, l’équation (3.1) s’interprète par: la suite [y(αl ), 1 ≤


l ≤ 2t] est engendrée par un LFSR de longueur t, de polynôme de connection σ.
Donc σ est calculé par l’algorithme de Berlekamp-Massey! Noter que, comme on
a 2t termes de la suite, il est unique.

On peut maintenant décrire trois méthodes pour déterminer σ:

24
• La plus basique: on a t − 1 inconnues qui sont les coefficients de σ (son
terme constant est 1); on a t − 1 conditions linéaires qui sont que les coeffi-
cients de z t , z t+1 , . . . , z 2t−1 dans le produit S(z)σ(z) sont nuls. On résoud
un système linéaire de taille t − 1, d’où une complexité en t3 .
• On applique Berlekamp-Massey pour trouver σ: complexité en t2 .
• On fait de l’algorithme d’Euclide étendu entre z 2t et S(z) et on s’arrête en
chemin.. En effet, dans l’algorithme d’Euclide étendu, on pose:

p0 = z 2t , p1 = S, p 0 = p 1 q1 + r 1
p1 = S, p2 = r1 , p1 = p 2 q2 + r 2
...
pi−1 , pi = ri−1 , pi−1 = pi qi + ri
...

jusqu’à ce qu’on obtienne ri = 0. Notons que pgcd(z 2t , S) ne peut être


un z k avec k ≥ t, car dans ce cas on aurait y(αl ) = 0 pour l = 1, . . . , t,
mézalor e(αl ) = 0 pour l = 1, . . . , t alors que e est supposé de poids au
plus t. On a:

           
z 2t p0 q1 1 p1 q1 1 qi 1 pi
= = = ... .
S p1 1 0 p2 1 0 1 0 pi+1
ou encore
   2t   
ai b i z pi
=
ci di S pi+1
avec ai , bi , ci , di ∈ K[z] et vérifient:
    
ai+1 bi+1 0 −1 ai b i
= .
ci+1 di+1 −1 qi+1 ci di
Comme pi est le reste de la division par pi−1 , on a deg(pi ) < deg(pi−1 ).
Donc, il existe i tel que deg(pi ) < t ≤ deg(pi−1 ). On a alors:

ai z 2t + bi S = pi

25
soit
bi S = p i mod z 2t .

Il reste à se persuader que deg(bi ) ≤ t. Les relations bi+1 = −di et


di = −bi−1 + qi di−1 montrent par récurrence que deg(bi ) = deg(qi−1 ) +
deg(qi−2 )+· · ·+deg(q1 ). Or deg(qi ) = deg(pi−1 )−deg(pi ) donc deg(bi ) =
deg(p0 ) − deg(pi−1 ) = 2t − deg(pi−1 ) ≤ t. On a donc trouvé σ = bi .

Une fois que σ est calculé, on trouve ses racines et donc les localisations des
erreurs. Pour conclure, il faut calculer les valeurs des ei . Il suffit maintenant de
résoudre les équations en deg(σ) inconnues:

e(αl ) = y(αl ), 1 ≤ l ≤ 2t

26
Chapter 4

Codes de Reed-Muller et fonctions


booléennes

4.1 Fonctions booléennes


Définition 14 Une fonction booléenne à m variables est une fonction f : Fm
2 →
F2 .

Notons xi l’application qui à y ∈ Fm 2 associe sa i-ème coordonnée yi . Les


expressions x1 +x2 , x1 x2 , et, de façon plus générale, toute expression polynomiale
en les xi , définissent une fonction booléenne. Remarquons que x2i = xi puisqu’on
est sur F2 , donc il est inutile d’introduire des exposants plus grands que 1. La
proposition suivante montre que l’on décrit ainsi toutes les fonctions booléennes.

Proposition 10 L’espace F des fonctions booléennes à m variables est un F2 -


espace
Q vectoriel de dimension n = 2m . Pour I ⊂ {1, . . . , m}, notons xI =
i∈I xi . Toute fonction booléenne f a une écriture unique sous la forme
X X
f= aI x I = ai1 ,...,is xi1 . . . xis .
I⊂{1,2,...,m} 1≤i1 <i2 <···<is ≤m

Le plus grand cardinal de I pour lequel aI 6= 0 s’appelle le degré de f .

Preuve: Notons δy la fonction booléenne définie par δy (y) = 1,Pδy (x) = 0 si


x 6= y. Clairement, pour toute fonction booléenne f , on a f = y∈Fm f (y)δy ,
2
et les δy forment une base de l’espace des fonctions booléennes qui est donc de
dimension n = 2m .

27
D’autre part, on peut exprimer les fonctions δy algébriquement en les xi :
m
Y
δy = (xi + yi + 1).
i=1
monômes xi1 . . . xis engendrent bien l’espace F; comme il y en a ex-
Donc les P
actement m m m
s=0 s = 2 , ils forment une base de F.

4.2 Codes de Reed-Muller


Soit n = 2m . On met en bijection les entiers de 0 à n − 1 et les éléments de
Fm2 via l’écriture binaire d’un nombre: on identifie donc k ∈ {0, . . . n − 1} et
k ∈ Fm 2 , où k = 2
m−1
k 1 + 2m−2 k 2 + · · · + k m . Pour alléger les notations, on note
indifféremment k = k.
Il y a alors (au moins) trois façons de voir un élément de Fn2 :
• Comme un n-uplet u = (u0 , u1 , . . . , un−1 ) ∈ Fn2
• Comme une fonction booléenne f , définie par: f (x) = ux ,
• Comme un sous-ensemble A ⊂ Fm 2 , correspondant aux coordonnées égales
à 1: A = {x ∈ Fm
2 | u x = 1}.
Définition 15 Le code de Reed-Muller R(r, m) est le code binaire engendré par
les éléments de Fn2 associés aux fonctions booléennes: xI telles que |I| ≤ m.
Exemples: le code R(1, 3) est engendré par les lignes de :

1 1 1 1 1 1 1 1 1
x1 0 0 0 0 1 1 1 1
x2 0 0 1 1 0 0 1 1
x3 0 1 0 1 0 1 0 1
Le code R(2, 3) est engendré par les lignes de :

1 1 1 1 1 1 1 1 1
x1 0 0 0 0 1 1 1 1
x2 0 0 1 1 0 0 1 1
x3 0 1 0 1 0 1 0 1
x1 x2 0 0 0 0 0 0 1 1
x1 x3 0 0 0 0 0 1 0 1
x2 x3 0 0 0 1 0 0 0 1

28
Théorème 6 Le code R(r, m) a les propriétés suivantes:

1. Sa dimension est 1 + m1 + · · · + mr .
 

2. Sa distance minimale est 2m−r

3. R(r, m)⊥ = R(m − r − 1, m).

4. AGL(m, 2) ⊂ Aut(R(r, m)).

Preuve: Seule la distance minimale est un peu difficile, on la démontre en dernier.


On a vu que les xI sont linéairement indépendants, donc le calcul de la dimension
de R(r, m) revient à compter les xI ∈ R(r, m).
Posons Ai := {u ∈ Fm 2 | xi (u) = 1}. Clairement, Ai est un sous-espace
affine de Fm 2 de codimension 1. Plus généralement, AI := {xi = 1, i ∈ I} est
un sous-espace affine de codimension |I| (AI = ∩i∈I Ai ). Le produit scalaire des
deux mots associés à xI et xJ vérifie: xI · xJ = wt(xI∪J ) mod 2. Or un espace
affine est de cardinal pair (plus précisément une puissance de 2 bien sûr), sauf s’il
est réduit à un point. Cela arrive seulement pour I ∪ J = {1, 2, . . . , m}. Donc
xI · xJ = 0 pour |I| ≤ r et |J| ≤ m − r − 1, ce qui prouve que R(m − r −
1, m) ⊂ R(r, m)⊥ . Le calcul de leurs dimensions respectives conclut à l’égalité
R(m − r − 1, m) = R(r, m)⊥ .
Le groupe AGL(m, 2) est le groupe des transformations affines sur Fm 2 . Il
n
opère donc par permutation des n coordonnées de F2 : si φ ∈ AGL(m, 2), Pm(φ.u)x =
uφ(x) . Posons y = φ(x); il existe des coefficients ai,j et ci tels que yi =P j=1 ai,j xj +
ci . Explicitons l’action de φ sur les xi : (φ.xi )(x) = xi (φ(x)) = yi = m j=1 ai,j xj +
ci . De même, Q
(φ.xI )(x) = i∈I yi = i∈I ( m
Q P
j=1 ai,j xj + ci ). Ainsi, si |I| ≤ r, φ.xI est de
degré au plus égal à r, donc φ(R(r, m)) ⊂ R(r, m).
Le poids de xI est égal au cardinal de AI , soit à 2m−|I| . Il reste à évaluer le
poids des combinaisons linéaires des xI . Pour cela, on utilise le lemme suivant:

Lemme 2 Soit P (t) ∈ F2 [t] un polynôme à coefficients dans F2 . Le poids de P ,


noté wt(P
P(t)), est défini comme étant le nombre de ses coefficients non nuls. Soit
P (t) = l bl (1 + t)l . Soit i0 le plus petit indice tel que bi0 6= 0. Alors

wt(P (t)) ≥ wt((1 + t)i0 .

29
Preuve: On définit un entier s par: 2s ≤ deg(P ) < 2s+1 et on procède par
récurrence sur s. Le
P cas
s
s = 0 correspond auPdegré de P égal à 1, il est clair.
Posons P1 := 2i=0−1 bi (1 + t)i et P2 := i=2
deg(P ) s
s bi (1 + t)i−2 . On a donc:

s s s
P = P1 + (1 + t)2 P2 = P1 + (1 + t2 )P2 = (P1 + P2 ) + t2 P2 .

Remarquons que les puissances de t qui interviennent dans P1 + P2 et dans


2s
t P2 sont disjointes. Donc

wt(P ) = wt(P1 + P2 ) + wt(P2 ).


Si P1 6= 0, on utilise l’inégalité wt(u + v) ≤ wt(u) + wt(v) pour conclure que
s
wt(P ) ≥ wt(P1 ), puis on applique la récurrence. Si P1 = 0, P = (1 + t)2 P2 ;
on a donc i0 (P ) = 2s + i0 (P2 ) avec des notations évidentes, et wt((1 + t)i0 (P ) ) =
s
wt((1 + t)i0 (P2 ) + t2 (1 + t)i0 (P2 ) ) = 2wt((1 + t)i0 (P2 ) . L’hypothèse de récurrence
appliquée à P2 , avec wt(P ) = 2wt(P2 ), fournit l’inégalité.

Démontrons maintenant que la distance minimale de R(r, m) est égale à 2m−r .


m−|I|
On a déjà vu que le poids de xI est
P égal à 2 , donc est au moins égal à 2m−r ,
si |I| ≤ r. Soit maintenant a := |I|≤r aI xI un élément quelconque de R(r, m).
On considère le polynôme associé
n−1
X X Xn−1
P (t) := a(v)tn−1−v = aI ( xI (v)tn−1−v ).
v=0 I v=0

2i . On a dans F2 [t]:
P
Lemme 3 Soit I ⊂ {1, . . . , m} et soit l := i∈I
/

n−1
X
l
(1 + t) = xI (v)tn−1−v .
v=0

Preuve: On a
i i
Y Y
(1 + t)l = (1 + t)2 = (1 + t2 ).
i∈I
/ i∈I
/

Le développement de ce produit fait apparaı̂tre les tk tels que k s’écrive k = 2i


P
avec des exposants i ∈
/ I. On peut aussi traduire cette condition sur k par: k est

30
Q Q
tel que i∈I (1 + xi (k)) = 1, ou encore i∈I xi (n − 1 − k) = 1. Finalement, en
posant k = n − 1 − v,
n−1
X
l
(1 + t) = xI (v)tn−1−v .
v=0

Revenons à P (t). On obtient donc l’expression:


X
P (t) = aI (1 + t)lI
|I|≤r

où lI est l’entier associé à I comme dans le lemme précédent. D’après le Lemme
2, wt(P (t)) ≥ wt((1 + t)lI0 ), où I0 est un certain sous-ensemble de {1, . . . , m},
de cardinal au plus égal à r, plus précisément celui pour lequel lI0 est minimal.
D’autre part, pour a = xI , le polynôme P (t) associé est (1 + t)lI . Donc
wt(xI ) = wt((1 + t)lI ) = 2m−|I| . Cela montre que wt((1 + t)lI ) ≥ 2m−r dès que
|I| ≤ r. Donc on a bien, dans le cas général,

wt(P (t)) ≥ wt((1 + t)lI0 ) ≥ 2m−r .

4.3 Le décodage des codes de Reed-Muller


On va décrire un algorithme de décodage, dit par maximum de vraisemblance, qui
est un algorithme de décodage complet dans le sens où il fournit un mot du code
quel que soit le nombre d’erreurs (et pas seulement lorsque le nombre d’erreurs
est inférieur ou égal à [(d − 1)/2], qui vaut ici 2m−r−1 − 1).
Comme le groupe affine est contenu dans le groupe des permutations de R(r, m),
et comme celui-ci est transitif sur les sous-espaces affines de Fm 2 de dimension
donnée, il est clair que tout sous-espace affine de dimension d = r+1, r+2, . . . , m
appartient à R(m − r − 1, m) = R(r, m)⊥ . Pour A ⊂ Fm 2 , notons uA le mot de
n
F2 qui lui est associé (comme expliqué au début du paragraphe). Soit maintenant
R ∈ Fn2 ; on cherche M ∈ R(r, m) tel que dH (M, R) soit le plus petit possible, et
on note R = M + E.

31
Notre hypothèse est que M ∈ R(r, m), donc, pour tout A sous-espace affine
de dimension dim(A) = r + 1, r + 2, . . . , m, on a

E · uA = R · u A
D’un aute côté, les espaces affines de dimension 0 étant réduits à des points, on
connaitrait complètement E si on connaissait E · uA pour les sous-espaces affines
A de dimension 0.
La stratégie de l’algorithme consiste à descendre dans les dimensions, en
déduisant de la connaissance des valeurs de E · uA pour dim(A) = r + 1, celle
des E · uA pour dim(A) = r, et ainsi de suite, jusqu’à arriver à r = 0.
Supposons donc avoir obtenu les valeurs de E · uA pour tous les sous-espaces
affines A de dimension s + 1, pour un s ≤ r. Fixons maintenant un sous-espace
affine B de dimension s. On va se concentrer sur l’ensemble EB des espaces de
dimension s + 1 contenant B. Notons que EB est de cardinal 2m−s − 1. Si A ∈ EB ,
on peut écrire

A = B ∪ (A \ B)
et A \ B a même cardinal que B; pour deux espaces A distincts, les complémen-
taires A \ B sont deux à deux distincts car deux espaces de dimension s + 1 ne
peuvent pas avoir en commun un sous-espace de dimension s et un autre point
sans être égaux. On calcule les 2m−s − 1 valeurs prises par E · uA lorsque A
parcourt EB , et on regarde lequel de 0 ou 1 apparait le plus souvent. Comme

E · uA = E · uB + E · uA\B ,
si E · uA = 0 un nombre t ≥ 2m−s−1 de fois, c’est que:
(
E · uA\B = 0 pour t sous-espaces A ∈ EB
• soit E·uB = 0, et
E · uA\B = 1 pour 2m−s − 1 − t sous-espaces A ∈ EB
(
E · uA\B = 1 pour t sous-espaces A ∈ EB
• soit E·uB = 1, et
E · uA\B = 0 pour 2m−s − 1 − t sous-espaces A ∈ EB

Dans ce dernier cas de figure, on aurait un nombre d’erreurs au moins égale à


t puisque les ensembles A \ B sont deux à deux disjoints, soit wt(E) ≥ t ≥
2m−s−1 > 2m−r−1 − 1. Ce cas est donc exclu si le nombre d’erreurs est plus petit
que 2m−r−1 − 1, et peu probable si le nombre d’erreurs est plus grand.

32
Si E · uA = 1 un nombre t ≥ 2m−s−1 de fois, on conclu de façon analogue
que E · uB = 1. Ayant déterminé tous les E · uB pour B de dimension s, on passe
à la dimension s − 1, et ainsi de suite jusqu’à la dimension 0.

4.4 Rayon de recouvrement des codes de Reed-Muller


Un paramètre important d’un code C est son rayon de recouvrement.

Définition 16 Soit C un code de longueur n sur Fq . Le rayon de recouvrement ρ


de C est le maximum des distances des mots de Fnq au code.

ρ = maxn dH (u, C) = maxn (min dH (u, v)).


u∈Fq u∈Fq v∈C

C’est aussi le plus petit rayon tel que les boules de centre les mots du code et
de rayon ρ recouvrent l’espace Fnq .

Remarquons qu’on a l’inégalité triviale ρ ≥ [(d−1)/2], et que c’est une égalité


si et seulement si le code est parfait. Par exemple, les codes de Hamming sont
parfaits. En général, la détermination du rayon de recouvrement d’un code est
difficile. Nous allons voir ce qu’il en est pour les codes R(1, m). Les fonctions
booléennes qui réalisent la distance maximale ρ (les fonctions courbes) ont des
applications importantes en cryptographie. Pour étudier ces fonctions, on utilise
la transformée de Fourier discrète (c’est la même transformée qui nous a permis
de démontrer la formule de Mac-Williams).

Définition 17 Soit g : Fm
2 → R. On note ĝ et on appelle transformée de Fourier
m
de g la fonction ĝ : F2 → R définie par
X
ĝ(w) = (−1)x·w g(x).
x∈Fm
2

Proposition 11 (Formule de Parceval). Avec les notations précédentes,


X X
ĝ(w)2 = 2m g(x)2 .
w∈Fm
2 x∈Fm
2

33
Preuve:
X X X
ĝ(w)2 = ( (−1)(x+y)·w g(x)g(y))
w∈Fm
2 w∈Fm m
2 x,y∈F2
X X
= g(x)g(y) (−1)(x+y)·w
x,y∈Fm
2 w∈Fm
2

mais on a:
(
X 0 si x + y 6= 0
(−1)(x+y)·w =
w∈Fm
2m si x + y = 0
2

d’où la formule.

Si f : Fm m
2 → F2 est une fonction booléenne, on lui associe χf : F2 → R
définie par:

χf (x) = (−1)f (x)


et on va utiliser sa transformé de Fourier χ̂f , encore appelée transformée de Walsh-
Hadamard de f .

Corollaire 1 X
χ̂f (w)2 = 22m .
w∈Fm
2

Preuve: C’est la formule de Parceval, puisque χf (x)2 = 1 pour tout x.


.

Théorème 7 On suppose m pair.

1. Le rayon de recouvrement du code R(1, m) est égal à


ρm = 2m−1 − 2m/2−1 . Une fonction booléenne f : Fm 2 → F2 telle que
dH (f, R(1, m)) = ρm est appelé fonction courbe.

2. On a équivalence de:

(a) f est une fonction courbe


(b) Pour tout w ∈ Fm
2 , |χ̂f (w)| = 2
m/2
.

34
(c) Pour tout s 6= 0, x 7→ f (x + s) − f (x) est équilibrée c’est-à-dire prend
aussi souvent la valeur 1 que la valeur 0.

Preuve: Pour a ∈ Fm 0
2 , notons `a la fonction linéaire

`0a (x) := a · x = a1 x1 + · · · + am xm

et `1a la fonction affine `1a (x) = a · x + 1. Lorsque a varie, ces fonctions parcourent
R(1, m).
Remarquons, que, pour un x fixé, si f (x) 6= `0a (x), c’est que f (x) = `1a (x), et
réciproquement. D’autre part,

dH (f, `0a ) = card{x ∈ Fm 0


2 | f (x) 6= `a (x)}.

En particulier, on a donc

dH (f, `0a ) + dH (f, `1a ) = 2m .


Calculons χ̂f (a). On a:

X
χ̂f (a) = (−1)f (x)+a·x
x∈Fm
2

= dH (f, `1a ) − dH (f, `0a )


= 2dH (f, `0a ) − 2m = 2m − 2dH (f, `1a )

donc

max |χ̂f (a)| = 2|2m−1 − dH (f, RM (1, m))|.


a

D’après l’équation du Corollaire 1, on a toujours maxa |χ̂f (a)| ≥ 2m/2 , avec


égalité lorsque |χ̂f | est constante. Cela démontre l’inégalité

ρm ≤ 2m−1 − 2m/2−1 .

Il reste à montrer l’existence de fonctions f vérifiant |χ̂f (a)| = 2m/2 pour tout
a ∈ Fm 2 . L’exemple le plus simple est le suivant: posons x = x
(1)
| x(2) où x(1)
(2)
(respectivement x ) est le m/2-uplet correspondant aux m/2 premiers bits de x
(respectivement derniers bits de x). Soit f (x) = x(1) · x(2) . On a, en écrivant
également w = w(1) | w(2) ,

35
(1) ·x(2) +x·w
X
χ̂f (w) = (−1)x
m/2
x(1) ,x(2) ∈F2
(1) ·x(2) +x(1) ·w (1) +x(2) ·w (2)
X
= (−1)x
m/2
x(1) ,x(2) ∈F2
(1) ·w (1) (1) +w (2) )·x(2)
X X
= (−1)x ( (−1)(x )
m/2 m/2
x(1) ∈F2 x(2) ∈F2
(2) ·w (1)
= (−1)w (2m/2 )

donc |χ̂f (w)| = 2m/2 .


Équivalence entre (b) et (c): on calcule

X
χ̂f (w)2 = (−1)f (x)+f (y)+(x+y)·w
x,y∈Fm
2
X
= (−1)f (x)+f (x+s)+s·w
x,s∈Fm
2
X X
= (−1)s·w ( (−1)f (x)+f (x+s) ).
s∈Fm
2 x∈Fm
2

(−1)f (x)+f (x+s) est nul lorsque s 6= 0.


P
Sous l’hypothèse (c), le terme x∈Fm Il
2
reste donc le terme pour s = 0, ce qui conduit à χ̂f (w)2 = 2m .
Réciproquement, si χ̂f (w)2 = 2m pour tout w ∈ Fm 2 , on a, pour tout s 6= 0:

X X X
0= (−1)s·w χ̂f (w)2 = (−1)s·w ( (−1)f (x)+f (y)+(x+y)·w )
w∈Fm
2 w∈Fm
2 x,y∈Fm
2
X X
= (−1)f (x)+f (y) ( (−1)(s+x+y)·w ).
x,y∈Fm
2 w∈Fm
2

(−1)(s+x+y)·w
P
La somme w∈Fm vaut 0 sauf si s + x + y = 0. Il reste donc:
2
X
0 = 2m (−1)f (x+s)+f (x)
x∈Fm
2

ce qui démontre (c).

36
Remarquer qu’une fonction courbe ne peut pas, elle, être équilibrée, puisque
χ̂f (0) = ±2m/2 . Cela limite leur utilisation en crypto..
Il est important de remarquer que le groupe affine AGL(2, m) opère sur les
fonctions courbes. On étudie donc ces fonctions à équivalence affine près, et on
ne sait pas grand chose.. à part:

• Les fonctions courbes de degré 2 sont équivalentes à x1 x2 + x3 x4 + · · · +


xm−1 xm +  (c’est l’exemple donné dans la démonstration).

• Les fonctions courbes ont un degré majoré par m/2

• m = 6,

• m = 8, deg(f ) = 3.

• Quelques constructions mais peu

• On ne connait pas le rayon de recouvrement lorsque m est impair, ou lorsqu’on


se limite aux fonctions équilibrées. Lorsque m est impair, on connait des
fonctions plus éloignées des fonctions affines que les quadratiques (dès
n = 15).

Une construction: la classe des fonctions de Maiorana-Mac Farland: On coupe


en deux et on pose f (x) = x(1) · π(x(2) ) + g(x(2) ). Ça marche quel que soit g,
donc degré quelconque!

37