THEORIE ALG EBRIQUE DU CODAGE

103
HANS BHERER TH ´ EORIE ALG ´ EBRIQUE DU CODAGE emoire pr´ esent´ e ` a la Facult´ e des ´ etudes sup´ erieures de l’Universit´ e Laval pour l’obtention du grade de maˆ ıtre ` es Sciences (M.Sc.) epartement de math´ ematiques et statistique FACULT ´ E DES SCIENCES ET DE G ´ ENIE UNIVERSIT ´ E LAVAL Septembre 2000 c Hans Bherer, 2000

Transcript of THEORIE ALG EBRIQUE DU CODAGE

Page 1: THEORIE ALG EBRIQUE DU CODAGE

HANS BHERER

THEORIE ALGEBRIQUE DU CODAGE

Memoire

presente

a la Faculte des etudes superieures

de l’Universite Laval

pour l’obtention

du grade de maıtre es Sciences (M.Sc.)

Departement de mathematiques et statistique

FACULTE DES SCIENCES ET DE GENIE

UNIVERSITE LAVAL

Septembre 2000

c©Hans Bherer, 2000

Page 2: THEORIE ALG EBRIQUE DU CODAGE

Resume

La theorie du codage est l’etude des methodes permettant le transfert d’informations de

facon efficace et precise. Cette theorie est utilisee dans de multiples champs d’applications. On

la retrouve dans l’enregistrement des disques compacts, dans la transmission d’information

sur les reseaux ou encore dans les communications par satellites pour n’en nommer que

quelques-uns.

Le present memoire consiste a presenter et a analyser les differents concepts mathema-

tiques et les differentes structures algebriques associes aux codes lineaires. Les principaux

codes lineaires seront consideres, et on trouvera en annexe quelques programmes MAPLE

illustrant quelques-uns de ces codes.

Claude Levesque Hans Bherer

directeur de recherche etudiant

i

Page 3: THEORIE ALG EBRIQUE DU CODAGE

Avant-propos

J’aimerais remercier mon directeur de recherche, le professeur Claude Levesque, pour son

excellente supervision et son soutien pedagogique. Je tiens aussi a remercier mon collegue

Jean-Norbert, non seulement pour son aide mais aussi pour son amitie. Enfin je veux sou-

ligner le grand soutien de mon entourage et de ma famille et plus particulierement celui de

Nathalie et de Anne car c’est aussi grace a eux si j’ai pu poursuivre plus avant mes etudes.

Je dedie ce memoire a Michele.

ii

Page 4: THEORIE ALG EBRIQUE DU CODAGE

Table des matieres

Resume i

Avant-propos ii

1 Introduction 1

2 Remarques generales en theorie du codage 4

2.1 Definitions generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.2 Probabilites associees a la detection d’erreur . . . . . . . . . . . . . . . . . . 6

2.3 Probabilites associees a la correction d’erreurs . . . . . . . . . . . . . . . . . 6

2.4 Principe de la distance minimale pour le decodage . . . . . . . . . . . . . . . 8

2.5 Distance versus la detection et la correction d’erreurs . . . . . . . . . . . . . 10

2.6 Codes equivalents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3 Le probleme central en theorie du codage 12

3.1 Le probleme central : Aq(n, d) . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.2 Quelques bornes superieures sur Aq(n, d) . . . . . . . . . . . . . . . . . . . . 13

4 Codes lineaires 15

iii

Page 5: THEORIE ALG EBRIQUE DU CODAGE

TABLE DES MATIERES iv

4.1 Structure et codage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

4.2 Decodage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

4.3 Distribution de poids et enumerateur de poids . . . . . . . . . . . . . . . . . 20

4.3.1 Distribution de poids et enumerateur de poids . . . . . . . . . . . . . 20

4.3.2 Une propriete de la distribution des poids d’un code lineaire binaire . 23

4.3.3 MacWilliams et l’existence de codes lineaires . . . . . . . . . . . . . . 24

4.3.4 L’identite de MacWilliams et Aq[n, d] . . . . . . . . . . . . . . . . . . 25

4.3.5 L’identite de MacWilliams et la distribution de poids . . . . . . . . . 26

4.4 Codes de Hamming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

4.5 Codes de Golay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

4.6 Codes de Reed-Muller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

5 Codes lineaires cycliques 36

5.1 Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

5.2 Codage-decodage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

5.3 Codes BCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

5.4 Codes de Reed-Solomon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

5.5 Codes Residus Quadratiques . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

5.6 Codes de Goppa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

6 Conclusion 61

A Programmes MAPLE 62

A.1 Enumerateur de poids . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

Page 6: THEORIE ALG EBRIQUE DU CODAGE

TABLE DES MATIERES v

A.2 Codes de Hamming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

A.3 Codes BCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

B Programmes MAPLE avec sorties 71

B.1 Enumerateur de poids . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

B.2 Codes de Hamming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

B.3 Codes BCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

Bibliographie 94

Page 7: THEORIE ALG EBRIQUE DU CODAGE

Table des figures

2.1 Le canal symetrique binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

vi

Page 8: THEORIE ALG EBRIQUE DU CODAGE

Liste des tableaux

1.1 Repetition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

3.1 A2(n, d) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

4.1 Distributions pour un [n, k, d]−code sur F2 . . . . . . . . . . . . . . . . . . . 26

4.2 Code [7,3, ?] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

5.1 Syndromes de H2(3) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

5.2 Syndrome necessaire de H2(3) . . . . . . . . . . . . . . . . . . . . . . . . . . 47

5.3 F24 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

5.4 Reed − Solomon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

5.5 F23 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

vii

Page 9: THEORIE ALG EBRIQUE DU CODAGE

Chapitre 1

Introduction

Le transfert d’informations prend de plus en plus d’importance dans notre societe. Que ce

soit pour la transmission de photographies de planetes eloignees, pour des communications

entre ordinateurs ou encore pour la lecture de nos disques lasers, le besoin de communi-

cations efficaces et sans erreurs est plus important que jamais. Nous savons tous que des

communications sans erreurs sont physiquement impossibles. Les codes ne sont pas la pour

eliminer les erreurs mais plutot pour les detecter et si possible les corriger. Afin d’illustrer

sommairement un code, exploitons une idee intuitive qui consiste a repeter l’information un

certain nombre de fois.

Supposons que l’on ait quatre messages a envoyer, soit 00, 01, 10 et 11, dans un canal

qui produit une erreur de temps en temps. Pour resister au bruit du canal, on peut coder

l’information en la repetant trois fois comme le montre le tableau 1.1.

Information Mot du code

00 00 00 00

01 01 01 01

10 10 10 10

11 11 11 11

Tab. 1.1: Repetition

S’il survient une erreur dans la transmission, elle n’affectera que l’un des trois couples

1

Page 10: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 1. INTRODUCTION 2

formant le mot du code. Le decodage pourra alors se faire par vote majoritaire sur ces trois

couples de bits. Une question naturelle nous vient a l’esprit : Peut-on faire mieux ? C’est dans

le but de repondre a cette question que nous doterons nos codes de structures mathematiques

permettant de les analyser et meme de les creer. Nous voudrons alors obtenir des codes

permettant de coder le maximum de mots, de detecter et de corriger le maximum d’erreurs

tout en ayant la longueur la plus petite possible (rapidite de transmission). Plusieurs de ces

caracteristiques sont en conflit et l’elaboration de bons modeles mathematiques permet de

maximiser la satisfaction globale. Peut-on vraiment ameliorer la fiabilite des communications

a l’aide d’un code ? Afin de repondre a cette question, nous preferons presenter un exemple

qui, nous l’esperons, saura convaincre le lecteur de l’utilite du codage de l’information.

Supposons que nous ayons un code binaire de longueur 11 ayant 211 = 2048 mots. Comme

notre code contient toutes les chaınes de longueur 11, il ne detecte aucune erreur. Supposons

que la probabilite qu’un bit soit transmis sans erreur soit de 1 − 1108 et supposons que la

transmission se fasse a un taux de 107 bits par seconde. Alors la probabilite qu’un mot soit

transmis de facon incorrecte est

1 − P (0 erreur) = 1 −(

1 − 1

108

)11

≈ 11

108.

Cela implique qu’il y aura approximativement

11

108× 107

11= 0.1

mot par seconde qui sera transmis incorrectement sans etre detecte. Cela represente donc

8640 mots incorrects par jour. Supposons maintenant que l’on ajoute a chaque mot un bit

dit bit de parite (le bit de parite vaut 1 si le nombre de bits egaux a 1 est impair, sinon il

vaut 0). On doit avoir au moins 2 erreurs dans notre mot afin que celui-ci soit mal interprete.

Cette probabilite est

1 − P (0 erreur) − P (1 erreur) = 1 −(

1 − 1

108

)12

−(

12

1

) (1 − 1

108

)11 (1

108

)1

≈ 66

1016.

Cela implique qu’il y aura approximativement

66

1016× 107

12= 5.5 × 10−9

mot par seconde qui sera transmis incorrectement sans etre detecte. Cela represente donc

une seule erreur a tous les 2000 jours !

Page 11: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 1. INTRODUCTION 3

Dans ce memoire, nous presenterons les differentes structures algebriques utilisees en

theorie du codage pour les codes lineaires. Nous nous proposons de balayer la theorie en

largeur. Nous entendons par la de presenter l’ensemble des principaux codes ainsi que des

principales methodes de codage et de decodage. Nous optons pour un memoire qui ne se

specialise pas sur un code en particulier. Voulant etablir un lien direct entre la theorie et la

pratique, nous preferons opter pour des exemples de codes binaires plutot que sur un autre

corps. Cela n’est en aucun cas restrictif puisque nous presenterons notre theorie pour les

codes definis sur un corps fini quelconque.

Page 12: THEORIE ALG EBRIQUE DU CODAGE

Chapitre 2

Remarques generales en theorie du

codage

2.1 Definitions generales

Soit A = {a1, ..., aq} un ensemble fini que nous appellerons un alphabet de code et soit

An l’ensemble de toutes les chaınes de longueur n sur A.

Nous dirons que chaque sous-ensemble C ⊂ An s’appelle un code. Chacune des chaınes

c de C est appelee mot du code. De plus, nous dirons qu’un code C ⊂ An est de cardinalite

M si M = |C|. La dimension n de An est appelee la longueur du code. Un code de longueur

n contenant M mots sera appele un (n, M)−code. Le corps fini a q elements sera note Fq .

L’espace vectoriel de dimension n sur Fq sera note Vn(Fq ).

Le taux d’un code sera defini par :

R =logq M

n.

Un canal discret sans memoire (C.D.S.M.) consiste en un alphabet A = {a1, ..., aq}d’entrees, un alphabet de sorties O = {b1, ..., bt} ou A ⊂ O, et un ensemble de probabilites

de canal P (bj|ai) satisfaisantt∑

j=1

P (bj|ai) = 1.

4

Page 13: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 2. REMARQUES GENERALES EN THEORIE DU CODAGE 5

De plus, si c = c1...cn et d = d1...dn sont des mots, alors

P (d|c) =

n∏i=1

P (di|ci).

A titre d’exemple, citons un des plus importants C.D.S.M., le canal symetrique binaire :

0

1

0

1

1-p

p

p

1-p

Fig. 2.1: Le canal symetrique binaire

ou P (1|0) = P (0|1) = p et P (1|1) = P (0|0) = 1 − p.

Notations : La variable aleatoire X representera la distribution d’entrees alors que la

variable aleatoire Y representera la distribution de sorties. Le mot c sera le mot fourni en

entree et d representera la chaıne en sortie. Les probabilites seront notees de la facon suivate :

P (c) = P (X = c),

P (d) = P (Y = d),

P (c|d) = P (X = c|Y = d),

P (d|c) = P (Y = d|X = c),

P (c,d) = P (X = c, Y = d).

Un schema de decision est une fonction partielle f

f : On −→ C

de l’ensemble des chaınes de sortie vers l’ensemble des mots du code. Ainsi, l’ensemble

f−1(c) = {d|f(d) = c}

sera l’ensemble des chaınes de sortie que nous associerons au mot c du code. De plus, si f(d)

n’est pas le mot qui avait ete envoye, nous dirons qu’une erreur de decision a ete commise.

Page 14: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 2. REMARQUES GENERALES EN THEORIE DU CODAGE 6

2.2 Probabilites associees a la detection d’erreur

Si des erreurs se produisent dans la transmission, elles seront detectees si et seulement si

le mot recu ne fait pas partie du code. Ainsi,

P (erreur non detectee|c est transmis) =∑d∈Cd6=c

P (d|c).

Ainsi, la probabilite de ne pas detecter une erreur est :

Perr non det =∑c∈C

∑d∈Cd6=c

P (d|c)P (c).

2.3 Probabilites associees a la correction d’erreurs

Pour tout schema de decisions, un mot c etant envoye, la probabilite d’une erreur de

decision est

P (erreur|c) =∑

d6∈f−1(c)

p(d|c);

ainsi la probabilite conditionnelle Pe d’une erreur de decision est

Pe =∑c

P (erreur|c)p(c) =∑c

∑d6∈f−1(c)

p(d|c)p(c).

On remarque que Pe est fonction du schema de decisions f de meme que de la distribution

d’entrees p(c). Dans le but de trouver un schema de decisions qui minimise Pe, calculons

cette erreur en conditionnant sur la sortie. Soit d la sortie du canal ; alors une bonne decision

sera effectuee si et seulement si f(d) est le mot d’entree, c’est-a-dire

P (erreur|d) = 1 − p(f(d)|d).

Pour toutes les sorties nous obtenons

Pe =∑d

p(erreur|d)p(d) = 1 −∑d

p(f(d)|d)p(d).

Comme p(d) ne depend pas du schema de decision f , Pe sera minimum en maximisant

p(f(d)|d) pour tout d ∈ On. Cela nous guidera donc dans la selection d’un schema de

Page 15: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 2. REMARQUES GENERALES EN THEORIE DU CODAGE 7

decisions. Pour une distribution d’entrees donnee, tout schema de decisions f pour lequel

p(f(d)|d) = maxc∈C

p(c|d) ∀d ∈ On

est appele un schema de decisions d’observateur ideal et tout schema de decisions f

pour lequel

p(d|f(d)) = maxc∈C

p(d|c) ∀d ∈ On

est appele un schema de decisions de maximum de vraisemblance

Avant d’enoncer le theoreme de Shannon, qui est a la base meme de la theorie du codage,

nous avons besoin de deux theoremes ainsi que d’une definition appartenant a la theorie de

l’information et dont le lecteur trouvera demonstration dans [9].

Theoreme 2.1 Pour toutes les distributions d’entrees et parmi tous les schemas de

decisions, un schema de decisions d’observateur ideal minimise Pe.

Theoreme 2.2 Pour la distribution uniforme d’entrees, un schema de decisions d’ob-

servateur ideal est equivalent a un schema de decisions de maximum de vraisemblance.

Pour la suite, nous assumerons que la distribution d’entrees de notre canal est uniforme.

Definition 2.1 La capacite d’un canal binaire symetrique avec probabilite d’erreur p

est

C(p) = 1 + p log2 p + (1 − p) log2(1 − p).

Nous sommes maintenant en mesure d’enoncer le theoreme qui donna naissance a la

theorie du codage.

Theoreme 2.3 (Shannon Noisy Coding Theorem) ∀ε > 0, si R < C(p) et pour

un n assez grand, il existe un code binaire de longeur n de taux k/n ≥ R avec Pe < ε.

Bien entendu nous avons des resultats similaires pour les codes non binaires mais dans

ces cas, la definition de la capacite differe. Nous sommes donc assures de l’existence de bons

codes dans la mesure ou nous sommes prets a diminuer le taux.

Page 16: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 2. REMARQUES GENERALES EN THEORIE DU CODAGE 8

2.4 Principe de la distance minimale pour le decodage

Nous aimerions adopter un schema de decisions qui serait en accord avec un schema

decisionnel de maximum de vraisemblance. En effet, en supposant une distribution uniforme

d’entrees, on obtiendrait ainsi un schema equivalent a celui d’un observateur ideal et Pe serait

donc minimise. Nous allons montrer que c’est precisement ce que nous fournit le principe de

la distance minimale.

Definition 2.2 Soient x et y deux chaınes de meme longueur definies sur le meme

alphabet. La distance de Hamming d(x,y) est le nombre de positions ou x et y different.

Montrons que la distance de Hamming

d : An ×An → N

est bien une metrique et qu’ainsi (An, d) devient un espace metrique. Montrons que ∀ x,y,z

∈ An nous avons :

(1) d(x,y) ≥ 0 et d(x,y) = 0 ⇐⇒ x = y,

(2) d(x,y) = d(y,x),

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

Les points 1 et 2 sont immediats. Prouvons le point 3. Soient

x = x1x2 . . . xn,

y = y1y2 . . . yn,

z = z1z2 . . . zn,

U = {i|xi 6= zi},S = {i|xi 6= zi ∧ xi = yi},T = {i|xi 6= zi ∧ xi 6= yi}.

On voit alors facilement que

S ∪ T = U,

S ∩ T = ∅;

Page 17: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 2. REMARQUES GENERALES EN THEORIE DU CODAGE 9

ceci implique alors que d(x, z) = |U | = |T | + |S|. De plus, comme |T | ≤ d(x,y) et que

|S| ≤ d(y, z) le resultat est immediat. �

Definition 2.3 Le poids wt(x) d’une chaıne x ∈ Vn(q) est le nombre de symboles

differents de 0 que contient x. Le poids minimal wt(C) est minc∈Cc6=0

wt(c).

Il est immediat de verifier que d(x,y) = wt(x − y).

Definition 2.4 La distance minimale d d’un code C est donnee par :

d(C) = minx,y∈Cx6=y

d(x,y).

Un (n, M)−code avec distance minimale d sera appele un (n, M, d)−code. Considerons

maintenant un canal binaire symetrique avec p < 12. Si le mot x est envoye et que la chaıne

y est recue, alors

p(y|x) = pd(x,y)(1 − p)n−d(x,y).

Comme p < 12, cette probabilite sera maximale lorsque d(x,y) sera minimale. Ainsi, decoder

en utilisant un schema de maximum de vraisemblance revient a choisir le mot x du code qui

est le plus pres de y. C’est ce que nous appelons le principe du decodage a distance

minimale. C’est le principe qui nous guidera dans nos procedures de decodages.

Enfin, la distance de Hamming nous permet de definir la notion de boule et de volume

sur l’espace An.

Definition 2.5 Soit x une chaıne de An, ou |A| = q et soit r un entier non negatif. La

boule de rayon r centree en x notee Sq(x, r) est l’ensemble

Sq(x, r) = {y ∈ An | d(x,y) ≤ r}.

Definition 2.6 Le volume de la boule Sq(x, r) note Vq(n, r) est le nombre d’elements

de Sq(x, r). Le volume est independent de x et est donne par

Vq(n, r) =

r∑k=0

(n

k

)(q − 1)k.

Page 18: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 2. REMARQUES GENERALES EN THEORIE DU CODAGE 10

2.5 Distance versus la detection et la correction d’er-

reurs

Le but du codage est evidemment la detection et surtout la correction d’erreurs. Il nous

faut cependent definir ce que l’on entend par detection et correction d’erreurs dans le cadre

de la theorie du codage. Pour ce faire, nous utiliserons les definitions de distance de Hamming

et de distance minimale.

Definition 2.7 Soit t ≥ 1. Nous dirons qu’un code C detecte t erreurs si pour x ∈ C,

les chaınes y ∈ An verifiant x 6= y et d(x,y) ≤ t ne sont pas dans C.

Definition 2.8 Soit t ≥ 1. Nous dirons qu’un code C corrige t erreurs si pour tout

y ∈ An, il existe au plus un x ∈ C tel que x 6= y et d(x,y) ≤ t.

Pour ce qui est de la detection, il est clair qu’un code C detectera t erreurs si et seulement

si t < d. Pour ce qui est de la correction, le resultat est moins evident et fera l’objet du

prochain theoreme.

Theoreme 2.4 Un code C avec distance minimale d corrige t erreurs si et seulement

si d ≥ 2t + 1.

Preuve

⇐Soit d ≥ 2t + 1. Soit y ∈ An. Nous aimerions montrer qu’il existe au plus un mot x ∈ C tel

que x 6= y et d(x,y) ≤ t. Soit z ∈ C ou z 6= x, d(x,y) ≤ t et d(y, z) ≤ t. Alors nous avons

que d(x, z) ≤ 2t. Ce qui contredit le fait que d ≥ 2t + 1.

⇒Soit d ≤ 2t. Soit x, z ∈ C ou x 6= z et ou d(x, z) ≤ 2t. On peut alors choisir un y ∈ An tel

que d(x,y) ≤ t et d(z,y) ≤ t. Nous avons donc deux mots du code dont la distance a y est

≤ t. Ceci implique que le code ne corrige pas t erreurs. �

Page 19: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 2. REMARQUES GENERALES EN THEORIE DU CODAGE 11

2.6 Codes equivalents

En theorie du codage on retrouve plusieurs definitions de codes equivalents. Nous adop-

terons la definition suivante :

Definition 2.9 Deux (n, M)−codes q-aires C1 et C2 sont equivalents s’il existe une

permutation σ des n coordonnees de chaque mot et des permutations π1, π2, . . . , πn de l’alpha-

bet telles que

c1c2c3 · · · cn ∈ C1 ⇐⇒ π1(cσ(1))π2(cσ(2))π3(cσ(3)) · · ·πn(cσ(n)) ∈ C2.

Autrement dit, deux codes C1 et C2 sont equivalents si nous pouvons obtenir l’un a

partir de l’autre en permutant les coordonnees de chacun des mots ou encore les symboles

de l’alphabet dans chacunes des positions de chacun des mots. Deux codes equivalents ont

evidemment les meme parametres.

Page 20: THEORIE ALG EBRIQUE DU CODAGE

Chapitre 3

Le probleme central en theorie du

codage

3.1 Le probleme central : Aq(n, d)

Pour un (n, m, d)−code donne, nous aimerions que sa distance minimale d soit aussi

grande que possible tout en ayant une cardinalite M maximale. Ces deux exigences sont

evidemment en conflit. On note Aq(n, d) la plus grande cardinalite M pour laquelle un

(n, M, d)−code sur Fq existe. Un code pour lequel M = Aq(n, d) sera dit optimal. Determi-

ner Aq(n, d) est appele le probleme central en theorie du codage. A titre indicatif, on

a quelques resultats connus pour A2(n, d) dans le tableau 3.1.

Afin d’etudier Aq(n, d), nous presentons ici les quatres principales bornes utilisees en

theorie du codage. L’utilisation de certaines bornes de concert avec l’identite de MacWilliams

nous permettra d’etudier l’existence ou la non-existence de certains codes lineaires de pa-

rametres donnes.

12

Page 21: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 3. LE PROBLEME CENTRAL EN THEORIE DU CODAGE 13

A2(n, d)

n d = 3 d = 5 d = 7 n d = 3 d = 5 d = 7

5 4 2 - 11 144-158 24 4

6 8 2 - 12 256 32 4

7 16 2 2 13 512 64 8

8 20 4 2 14 1024 128 16

9 40 6 2 15 2048 256 32

10 72-79 12 2 16 2560-3276 256-340 36-37

Tab. 3.1: A2(n, d)

3.2 Quelques bornes superieures sur Aq(n, d)

Dans le but de resoudre (pour certains parametres) le probleme central de la theorie

du codage, l’utilisation de certaines bornes pour Aq(n, d) s’avere tres utile. Nous presentons

ici quatre des bornes les plus utilisees et connues en theorie du codage. Nous fournirons la

demonstration pour les deux premieres et referons le lecteur a [7] pour les demonstrations

des deux autres.

Theoreme 3.1 (La borne de Singleton)

Aq(n, d) ≤ qn−d+1.

Preuve

Soit C un (n, M, d)−code. Si on enleve les d − 1 dernieres positions de chaque mot, on

obtient des mots de longueur n − d + 1. Ces mots sont tous differents car sinon la distance

minimale ne serait pas d. Ainsi, on obtient immediatement que M ≤ qn−d+1. �

Sachant que dans le cas d’un code lineaire nous avons que M = qk, nous obtenons alors

la tres importante relation : d ≤ n− k +1. Un code lineaire C pour lequel nous avons egalite

dans la borne de Singleton est appele un code separable de distance maximale.

Theoreme 3.2 (La borne de l’empilement des spheres)

Aq(n, d) ≤ qn∑tk=0

(nk

)(q − 1)k

, t =

⌊d − 1

2

⌋.

Page 22: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 3. LE PROBLEME CENTRAL EN THEORIE DU CODAGE 14

Preuve

Soit C un (n, M, d)−code. Il est clair que M ·Vn(q, t) ≤ qn. Le resultat est alors immediat.�

Un code C pour lequel nous avons egalite dans la borne de l’empilement des spheres est

appele un code parfait.

Theoreme 3.3 (La borne de Plotkin) Soit θ = q−1q

. Si d > θn. Alors

Aq(n, d) ≤ d

d − θn.

Theoreme 3.4 (La borne d’Elias) Soit θ = q−1q

. Si r est un entier positif satisfaisant

r < θn et r2 − 2θnr + θnd > 0, alors

Aq(n, d) ≤ θnd · qn

r2 − 2θnr + θnd · Vq(n, r).

Page 23: THEORIE ALG EBRIQUE DU CODAGE

Chapitre 4

Codes lineaires

4.1 Structure et codage

Nous nous proposons maintenant de presenter la plus importante classe de codes : la

classe des codes lineaires.

Rappelons que notre alphabet de code A ne possede aucune structure particuliere. Si nous

voulons doter nos codes d’une certaine structure nous devons prealablement doter A d’une

structure. Nous imposerons a A la structure de corps fini. Le but d’une telle imposition

est qu’alors nous pourrons considerer les mots du code comme des vecteurs de l’espace

vectoriel Vn(Fq ). On remarque alors que la longueur du code est en fait la dimension de

l’espace vectoriel qui lui est associe. Comme il est primordial que la somme de deux mots

ou encore la multiplication d’un mot par un scalaire soit encore un mot du code, nous nous

interesserons aux codes qui sont en fait des sous-espaces vectoriels de Vn(Fq ). Cela nous

conduit a la definition suivante.

Definition 4.1 Un code C ⊂ Vn(Fq ) est un code lineaire si C est un sous-espace vec-

toriel de Vn(Fq ). Si la dimension de C est k on dit que C est un [n, k]−code. De plus, si la

distance minimale du code C est d on dit alors que C est un [n, k, d]−code (on utilise les

crochets pour un code lineaire alors qu’on utilise les parentheses pour un code en general).

15

Page 24: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 4. CODES LINEAIRES 16

Montrons maintenant que pour un code lineaire C nous avons d(C)=wt(C) :

d(C) = minc,d∈Cc6=d

d(c,d) = minc,d∈Cc6=d

wt(c− d) = min06=c∈C

wt(c). �

Comme un code lineaire est en fait un espace vectoriel, il devient naturel de le representer

par une base. En theorie du codage on presente habituellement la base comme des vecteurs

lignes d’une matrice. Nous respecterons cette convention.

Definition 4.2 Soit C un [n, k]−code. Une matrice G de dimension k × n ayant pour

lignes une base de C est appelee la matrice generatrice du code (bien que nous disions

la matrice de generatrice, il faut comprendre qu’elle est unique a equivalence pres).

Il est immediat de verifier que le code C peut etre represente de la facon suivante :

C = {xG|x ∈ Vk(Fq )}.

La procedure de codage est alors triviale. Il suffit de coder le vecteur x de longueur k par le

mot xG du code.

Il peut s’averer utile d’avoir une matrice generatrice sous une forme speciale. Nous dirons

que G est sous la forme standard si G = (Ik|A). On peut aisement montrer que toute

matrice G peut etre transformee sous la forme standard sans changer le code (a equivalence

pres).

L’espace vectoriel Vn(Fq ) peut etre muni d’un produit scalaire de la facon suivante. Soient

x = x1 · · ·xn et y = y1 · · · yn, alors le produit scalaire de x et y nous est donne par :

〈x,y〉 = x1y1 + · · ·+ xnyn.

A l’aide de ce produit scalaire nous allons definir l’un des concepts fondamentaux de la

theorie du codage, soit le concept de code dual.

Definition 4.3 Soit C un [n, k]−code. Le code C⊥ defini par

C⊥ = {x ∈ Vn(q)|〈x, c〉 = 0 ∀c ∈ C}

est appele le code dual du code C.

Page 25: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 4. CODES LINEAIRES 17

Le theoreme suivant caracterise le code dual C⊥ associe au code C.

Theoreme 4.1 (Dual)

(1) Soit G une matrice generatrice de C. Alors C⊥ = {x ∈ Vn(Fq )|xGt = 0}.(2) Si C est un [n, k]−code alors C⊥ est un [n, n − k]−code.

(3) C⊥⊥ = C.

Preuve

(1) Decoule du fait que x ⊥ C ⇐⇒ x est perpendiculaire a tous les vecteurs d’une base

de C.

(2) Decoule de (1).

(3) Comme dim(C) = dim(C⊥⊥) et que C ⊂ C⊥⊥, alors C⊥⊥ = C. �

Nous avons montre que si C est un code lineaire alors C⊥ est aussi un code lineaire. Il

est naturel de nous demander si les deux matrices generatrices ne seraient pas reliees entre

elles. Nous verrons que oui et nous allons de plus montrer comment obtenir l’une connaissant

l’autre.

Soit G = (Ik|A) une matrice generatrice du code C sous sa forme standard. Definissons

la matrice H = (−At|In−k) et montrons que H est la matrice generatrice de C⊥.

On verifie facilement que

GH t = (Ik|A)

( −A

In−k

)= −A + A = 0.

C’est donc dire que les lignes de H sont orthogonales aux lignes de G. De plus, comme

rang(H) = n−k = dim(C⊥), on en deduit que H est en fait une matrice generatrice du code

C⊥. La matrice H est aussi appele la matrice de controle du code C. Cette denomination

decoule du fait suivant :

x ∈ C ⇐⇒ xH t = 0.(4.1)

Il est a noter que la notion de matrice de controle et la propriete 4.1 s’avereront fondamentales

dans le processus de decodage.

Page 26: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 4. CODES LINEAIRES 18

On sait que la distance minimale d d’un code C est un parametre fondamental afin

de caracteriser un code. De plus, comme la capacite d’un code a corriger les erreurs est

directement reliee a d, il est interessant de remarquer qu’il est possible de determiner d si on

connaıt la matrice de controle H du code. C’est le but du prochain theoreme.

Theoreme 4.2 Soient C un [n, k, d]−code et H une matrice de controle du code C. La

distance d est le plus petit entier r pour lequel la matrice H contient r colonnes lineairement

dependantes.

Preuve

Soit x = x1 . . . xn ∈ Vn(Fq ) et soit Hj la j-ieme colonne de H. Alors

x ∈ C ⇐⇒ xH t = 0

⇐⇒ x1H1 + x2H2 + · · ·+ xnHn = 0.

Ainsi pour chaque mot de poids d, il existe un ensemble de d colonnes lineairement dependan-

tes. D’un autre cote, s’il existait un ensemble de d − 1 colonnes lineairement dependantes,

il existerait un mot de poids = d − 1 < d dans notre code. Cela contredirait le fait que

d = wt(C).�

4.2 Decodage

Une methode efficace de decodage peut etre construite a l’aide de la matrice de controle.

Cette methode s’appelle le decodage avec syndromes.

Definition 4.4 Soit C un [n, k]−code ayant H comme matrice de controle. Alors pour

tout x ∈ Vn(Fq ) on definit le syndrome de x, note syn(x), par

syn(x) = xH t.

On verifie immediatement que

syn(x) = 0 ⇐⇒ x ∈ C.

Page 27: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 4. CODES LINEAIRES 19

Voyons cette methode en details. Rappelons tout d’abord que l’espace quotient Vn(Fq )/Cest aussi un espace vectoriel sur Fq. Nous savons aussi que x + C = y + C ⇐⇒ x − y ∈ C.

Nous pouvons alors etablir un lien entre les classes modulo C et les syndromes de la facon

suivante.

Theoreme 4.3 Soit C un [n, k]−code ayant H comme matrice de controle. Alors

syn(x) = syn(y) ⇐⇒ x et y appartiennent a la meme classe de Vn(Fq )/C.

Preuve

x + C = y + C ⇐⇒ x − y ∈ C ⇐⇒ (x − y)H t = 0 ⇐⇒ xH t = yH t. �

Nous allons maintenant utiliser l’ensemble de nos resultats precedents afin d’etablir une

methode de decodage en accord avec le principe de la distance minimale.

Supposons qu’un vecteur x (pas necessairement un mot du code) soit recu. Le principe

de la distance minimale nous demande de decoder x par c ∈ C ou c est le mot du code

C le plus pres (au sens de notre metrique) de x. Si e represente l’erreur de transmission,

nous obtenons alors que e = x − c. Chercher la distance minimale est alors equivalent a

minimiser wt(e). Comme syn(e) = syn(x − c) = syn(x) − syn(c) = syn(x), on en deduit

alors que e et x appartiennent a la meme classe modulo C. Si nous choisissons le mot de

poids minimal comme representant de chaque classe, e est alors le representant de la classe

de x. Nous pouvons alors decoder x comme le mot c du code ou c = x + e . Il suffit donc de

garder en memoire une table des representants de chaque classe modulo C ainsi que de leur

syndrome respectif.

Bien que cette methode puisse s’appliquer a tous les codes lineaires, il est souvent sou-

haitable de la modifier pour certains codes en particulier. On devine deja que plus le taux

R d’un code sera faible, plus le nombre de classes sera eleve. Maintenir une table de chaque

representant et de son syndrome peut ne s’averer d’aucune utilite en pratique. Pensons sim-

plement a un code de dimension k = 12 sur V24(F2). Le nombre de classes serait alors de224

212 = 212 = 4096 ce qui ne serait d’aucune efficacite (nous verrons qu’un tel code existe ; c’est

le code de Golay). Dans la pratique on s’interessera non seulement aux codes ayant certains

parametres donnes mais aussi et surtout aux codes admettant des procedures de decodage

simples et rapides.

Page 28: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 4. CODES LINEAIRES 20

4.3 Distribution de poids et enumerateur de poids

4.3.1 Distribution de poids et enumerateur de poids

Soit C un [n, M ]−code et soit Ai le nombre de mots de poids i. Le vecteur (A0, . . . , An)

est appele la distribution des poids du code C ou encore le vecteur de distribution

de poids.

Definition 4.5 Soit C un [n, k]−code de distribution (A0, . . . , An). Alors l’enumerateur

de poids est le polynome a deux inconnues

WC(x, y) =n∑

i=0

Aixn−iyi.

De plus, pour u ∈ Vn(Fq ), on definit

P (u) = xn−wt(u)ywt(u).

Nous obtenons ainsi

∑u∈C

P (u) =

n∑i=0

Aixn−iyi = WC(x, y).(4.2)

Il est important de noter que si on connaıt (A0, . . . , An) pour un certain code lineaire,

alors la distance devient facile a trouver car A0 = 1, Ai = 0 pour 1 ≤ i ≤ d − 1 et Ad ≥ 1.

Un des plus interessants resultats en regard de l’enumerateur de poids est certes l’identite

de MacWilliams qui relie l’enumerateur de poids d’un code lineaire C a l’enumerateur de poids

de son code dual C⊥.

Bien que l’identite de MacWilliams s’applique aux codes lineaires definis sur Fq , nous

ne nous interesserons ici qu’au cas ou le code lineaire est defini sur F2 . Afin de demontrer

l’identite de MacWilliams dans le cas binaire, deux lemmes seront necessaires.

Definition 4.6 Soit Vn = Vn (F2) un espace vectoriel binaire de dimension n. Pour

u ∈ Vn, definissons

gn(u) =∑v∈Vn

(−1)〈u,v〉P (v).

Page 29: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 4. CODES LINEAIRES 21

Lemme 4.1 Soit C un [n, k]−code binaire. Alors∑u∈C⊥

P (u) =1

|C|∑u∈C

gn(u).

Preuve

Nous avons ∑u∈C

gn(u) =∑u∈C

∑v∈Vn

(−1)〈u,v〉P (v)

=∑v∈Vn

P (v)S(v)

ou S(v) =∑

u∈C(−1)〈u,v〉, pour v ∈ Vn. Montrons que S(v) =

{|C| si v ∈ C⊥,

0 si v 6∈ C⊥.

Pour v ∈ Vn, soit C0(v) = {u ∈ C : 〈u,v〉 = 0}. Alors C0(v) est un sous-groupe de C(et meme un sous-espace vectoriel). Si w1,w2 ∈ C, 〈w1,v〉 = 1 et 〈w2,v〉 = 1, alors nous

avons que 〈w1−w2,v〉 = 0 et par consequent, w1−w2 ∈ C0. Cela implique que C1(v) defini

par C1(v) = {u ∈ C : 〈u,v〉 = 1} est soit l’ensemble vide ou une classe de C modulo C0(v) ;

de plus, nous avons que C1(v) = ∅ ⇐⇒ v ∈ C⊥. Si v ∈ C⊥, alors

S(v) =∑

u∈C0(v)

(−1)0 = |C|.

Pour v 6∈ C⊥, nous avons |C0(v)| = |C1(v)| et comme C = C0(v)⋃ C1(v), nous avons

S(v) =∑

u∈C0(v)

(−1)〈u,v〉 +∑

u∈C1(v)

(−1)〈u,v〉 = 0.

Ainsi ∑u∈C

gn(u) =∑v∈C⊥

P (v)S(v) +∑v 6∈C⊥

P (v)S(v)

= |C|∑v∈C⊥

P (v). �

Lemme 4.2 Soit u ∈ Vn = Vn (F2). Alors

gn(u) = (x + y)n−w(u)(x − y)w(u).

Page 30: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 4. CODES LINEAIRES 22

Preuve

Nous allons proceder par induction. Par definition, lorsque nous avons u ∈ Vn, nous avons

gn(u) =∑v∈Vn

(−1)〈u,v〉P (v).

Montrons que c’est vrai pour n = 1. En effet, pour u ∈ V1,

g1(u) = (−1)〈u,0〉P ((0)) + (−1)〈u,1〉P ((1))

=

{x + y si u = 0

x − y si u = 1

=

{(x + y)1−w(0)(x − y)w(0) si u = 0

(x + y)1−w(1)(x − y)w(1) si u = 1

= (x + y)1−w(u) · (x − y)w(u).

Supposons que c’est vrai pour n = k. Montrons alors que cela est vrai pour n = k+1. Soient

u = (u1, . . . , uk+1), v = (v1, . . . , vk+1), u′ = (u1, . . . , uk), v

′ = (v1, . . . , vk). Alors nous avons

gk+1(u) =∑

v∈Vk+1vk+1=0

(−1)〈u,v〉P (v) +∑

v∈Vk+1vk+1=1

(−1)〈u,v〉P (v)

=∑v′∈Vk

(−1)〈u′,v′〉xk+1−w(v′)yw(v′) +

∑v′∈Vk

(−1)〈u′,v′〉+uk+1xk−w(v′)yw(v′)+1

= xgk(u′) + y(−1)uk+1gk(u

′)

= gk(u′)(x + y(−1)uk+1)

= (x + y)k−w(u′)(x − y)w(u′)(x + y(−1)uk+1) (d’apres l’hypothese d’induction)

= (x + y)k+1−w(u)(x − y)w(u)

en considerant uk+1 = 0, uk+1 = 1. �

Nous sommes maintenant prets a demontrer l’identite de MacWilliams sur F2 .

Theoreme 4.4 (Identite de MacWilliams sur F2) Soit C un [n, k]−code binaire.

Alors

WC⊥(x, y) =1

2kWC(x + y, x − y).

Preuve

Page 31: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 4. CODES LINEAIRES 23

Soit (A0, A1, . . . , An) la distribution des poids de C. Comme

∑u∈C⊥

P (u) =1

|C|∑u∈C

gn(u) (d’apres le lemme 4.1)

=1

|C|∑u∈C

(x + y)n−w(u)(x − y)w(u) (d’apres le lemme 4.2)

=1

|C|n∑

i=1

Ai(x + y)n−i(x − y)i

=1

|C|WC(x + y, x − y) (d’apres l’equation 4.2)

et comme d’apres l’equation 4.2,

∑u∈C⊥

P (u) = W⊥C (x, y),

nous avons le resultat voulu. �

4.3.2 Une propriete de la distribution des poids d’un code lineaire

binaire

Nous allons montrer une propriete interessante des codes lineaires binaires. Pour ce faire,

nous utiliserons le theoreme suivant.

Theoreme 4.5 Soit (G, +) un groupe abelien contenant un sous-ensemble A non vide

tel que

(1) a1, a2 ∈ A ⇒ a1 − a2 ∈ A,

(2) b1, b2 /∈ A ⇒ b1 − b2 ∈ A.

Alors ou bien A = G ou bien A < G et [G : A] = 2.

Preuve

L’implication (1) nous dit que A est un sous-groupe. L’implication (2) nous dit que

[G : A] = 2. �

Ainsi nous sommes en mesure d’enoncer le theoreme suivant.

Page 32: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 4. CODES LINEAIRES 24

Theoreme 4.6 Les mots d’un code lineaire binaire sont soit tous de poids pair ou soit

en nombre egal de poids pair et impair.

Preuve

Appliquer le theoreme precedent avec A = {mots de poids pairs}. �

4.3.3 MacWilliams et l’existence de codes lineaires

En theorie du codage on s’interesse souvent a l’existence d’un code de parametres donnes.

Nous allons montrer comment l’identite de MacWilliams peut nous servir a montrer la non-

existence d’un code.

Question : Existe-t-il un [7, 2, 5]−code binaire ?

La borne de Singleton nous donne k ≤ 7−5+1 = 3. Ainsi k = 2 est possible. Maintenant

en utilisant le theoreme 4.6 nous obtenons seulement deux possibilites pour la distribution

de poids d’un tel code, a savoir :

(1, 0, 0, 0, 0, 1, 1, 1),

(1, 0, 0, 0, 0, 2, 1, 0),

ce qui nous donne respectivement les deux polynomes de distribution de poids suivants :

Wc(x, y) = x7 + x2y5 + xy6 + y7,

Wc(x, y) = x7 + 2x2y5 + xy6.

En appliquant l’identite de MacWilliams afin d’obtenir le polynome de distribution de

poids du code dual nous obtenons respectivement :

Wc⊥(x, y) = 2x2y5 + 3xy6 + x7 − 2x6y + 13x5y2 + 15x3y4,

Wc⊥(x, y) = x7 − x6y + 8x5y2 + 10x4y3 + 5x4y4 + 7x2y5 + 2xy6.

Comme on sait que le dual d’un code lineaire est aussi un code lineaire, on en deduit la

non-existence de notre [7, 2, 5]−code simplement en remarquant que les coefficients de Wc⊥

ne sont pas tous positifs.

Page 33: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 4. CODES LINEAIRES 25

On peut enfin remarquer que ce resultat est en accord avec la valeur de A2(7, 5). Si un

tel code avait existe, il aurait contenu 4 mots ce qui impliquerait A2(7, 5) ≥ 4 alors que nous

savons que A2(7, 5) = 2.

4.3.4 L’identite de MacWilliams et Aq[n, d]

Le probleme central en theorie du codage est de determiner Aq(n, d). Si nous nous

interessons a Aq[n, d], nous disons alors que c’est le probleme central en theorie du co-

dage lineaire. Nous avons evidemment que Aq[n, d] ≤ Aq(n, d). De plus, nous savons que

Aq[n, d] = qk ou k est le plus grand entier pour lequel il existe un [n, k, d]−code sur Fq . C’est

donc dans le but de determiner Aq[n, d] que l’identite de MacWilliams peut nous venir en

aide. En effet, pour chacune des distributions possibles d’un code lineaire nous savons que

la distribution de son dual, qui nous est donnee par l’identite de MacWilliams, doit etre

la distribution d’un code lineaire. Si, etant donnee une distribution initiale, la distribution

du dual que nous donne MacWilliams n’est pas valide, on en deduit alors qu’il n’existe pas

de code lineaire ayant comme distribution la distribution initiale. En utilisant l’ordinateur

(voir le programme MAPLE en annexe) nous avons donc, pour un k donne, genere toutes

les distributions valides et pour chacune d’elles, nous avons obtenu la distribution du dual.

En rejetant toutes les distributions pour lesquelles la distribution du dual n’etait pas valide,

nous avons obtenu une borne superieure pour k. Nos resultats sont presentes au tableau

4.1. En plus de nous aider a determiner Aq[n, d], notre methode nous donne aussi l’ensemble

des seules distributions possibles pour un [n, k, d]−code. Concretement, nous avons dans un

premier temps calculer une borne superieure pour k en nous basant sur les theoremes du

chapitre 3. Nous avons ameliore ces bornes dans quelques cas comme le montre le tableau

4.1. Nous avons meme fait quelques tests en forcant une valeur de k superieure aux bornes

theoriques et notre methode s’est encore averee efficace. Soulignons enfin que notre methode

ne nous garantit pas l’existence d’un code meme si elle nous permet eventuellement de sup-

poser son existence. Il serait interessant dans un travail futur d’explorer les liens entre une

distribution valide et l’existence concrete d’un code ayant cette distribution.

Page 34: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 4. CODES LINEAIRES 26

n d k (min. bornes theoriques) 2k A2(n, d) Distributions possibles

9 7 1 2 2 (1, 0, 0, 0, 0, 0, 0, 1, 0, 0)

9 5 3 8 6 aucune

9 5 2 4 6 (1, 0, 0, 0, 0, 1, 1, 1, 0, 0)

(1, 0, 0, 0, 0, 2, 0, 0, 1, 0)

(1, 0, 0, 0, 0, 2, 1, 0, 0, 0)

10 5 4 16 12 aucune

10 5 3 8 12 (1, 0, 0, 0, 0, 3, 3, 1, 0, 0, 0)

(1, 0, 0, 0, 0, 4, 2, 0, 1, 0, 0)

11 5 4 16 24 (1, 0, 0, 0, 0, 6, 6, 2, 1, 0, 0, 0)

(1, 0, 0, 0, 0, 7, 6, 0, 1, 1, 0, 0)

Tab. 4.1: Distributions pour un [n, k, d]−code sur F2

4.3.5 L’identite de MacWilliams et la distribution de poids

Il est justifie de nous demander comment MacWilliams peut nous aider dans la recherche

de distribution de poids (qui nous donne immediatement la distance minimale) d’un code

lineaire. L’idee est la suivante. Si le taux R d’un code est bas, il devient facile de faire la

liste des codes et ainsi obtenir la distribution de poids. Si par contre le taux R d’un code est

eleve (c’est d’ailleurs ce que nous recherchons), alors la dimension de son dual est petite. Il

devient alors facile d’enumerer les mots du dual et ainsi facilement obtenir le polynome de

distribution de poids du code dual. Comme C⊥⊥ = C, on applique l’identite de MacWilliams

a WC⊥ afin d’obtenir WC . Si le taux R est pres de 12, notre methode sera sans succes car les

dimensions du code et de son dual sont alors sensiblement les memes. Comme notre intention

est de trouver des codes pour lesquels le taux R est eleve, notre methode merite l’attention.

Appliquons notre methode a un exemple simple mais qui en illustre bien la philosophie.

Supposons que l’on s’interesse a la distribution de poids et a la distance minimale d’un

code ayant la matrice de controle suivante :

C =

1 0 1 0 1 0 1

0 1 1 0 0 1 1

0 0 0 1 1 1 1

.

Page 35: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 4. CODES LINEAIRES 27

Il est facile de faire la liste des mots ainsi que leur poids respectif. Le tableau 4.2 presente

cette liste. Ainsi on obtient facilement que C = (1, 0, 0, 0, 7, 0, 0, 0).

Code [7,3, ?]

MOT POIDS

0000000 0

1010101 4

0110011 4

0001111 4

1100110 4

1011010 4

0111100 4

1101001 4

Tab. 4.2: Code [7,3, ?]

Il est alors immediat de calculer Wc pour ce code.

Wc(x, y) = x7 + 7x3y4.

En appliquant l’identite de MacWillams on obtient :

Wc⊥(x, y) =1

8Wc(x + y, x− y) = x7 + 7x4y3 + 7x3y4 + y7.

On obtient alors que C⊥ = (1, 0, 0, 7, 7, 0, 1) et que sa distance minimale est 3.

4.4 Codes de Hamming

Les codes de Hamming sont des codes lineaires qui corrigent une seule erreur. Bien qu’ils

peuvent etre definis sur Fq , nous ne presenterons ici que la version binaire (q = 2). La facon

traditionnelle de les presenter est de le faire via la matrice de controle ; c’est la facon que

nous allons utiliser. Le lecteur trouvera en annexe un programme MAPLE pour les codes de

Hamming.

Definition 4.7 Soir r un entier positif et soit H une matrice dont les colonnes sont les

vecteurs differents de zero de Vr(F2). Alors le code ayant H comme matrice de controle est

appele un code de Hamming binaire et est note H2(r).

Page 36: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 4. CODES LINEAIRES 28

Exemple.

Pour r = 3 nous obtenons (a equivalence pres)

H =

0 0 0 1 1 1 1

0 1 1 0 0 1 1

1 0 1 0 1 0 1

.

Ce n’est pas par hasard que nous avons place les colonnes dans l’ordre naturel (la colonne

i est la representation dyadique du nombre i). Nous justifierons ce choix un peu plus tard

lorsque nous parlerons du decodage des codes H2(r). Si nous avions voulu exhiber la matrice

generatrice du code, il est evident que nous aurions opte pour la representation sous forme

standard de H . Le theoreme suivant rend explicite les proprietes de H2(r).

Theoreme 4.7 Soit C le code de Hamming H2(r) ou r ≥ 2. Alors

(1) C est un [2r − 1, 2r − 1 − r]−code ;

(2) la distance minimale de C est egale a 3 ;

(3) C est un code parfait.

Preuve

(1) Comme nous avons que H2(r)⊥ est un [2r − 1, r]−code, le resultat suit.

(2) Comme H ne contient pas de colonne egale a zero et qu’il n’y a pas deux colonnes

identiques, on en deduit que d ≥ 3. Si on additionne les colonnes qui representent les nombres

1,2 et 3 en binaire, on obtient 0 ce qui implique que d = 3.

(3) Montrons que nous avons egalite pour la borne de l’empilement des spheres. Comme

nous avons que t = 1, n = 2r − 1 et que M = 2n−r, on obtient

2n−r

(1 +

(n

1

))= 2n−r(1 + n) = 2n−r(1 + 2r − 1) = 2n.

Ainsi, C est bien un code parfait. �

En ordonnant les colonnes de la matrice de controle H selon l’ordre naturel et en suppo-

sant qu’au plus une seule erreur de transmission s’est produite, on obtient une methode de

decodage tres elegante. En effet, si d est recu alors son syndrome dH t sera evidemment la

Page 37: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 4. CODES LINEAIRES 29

representation binaire de la position ou l’erreur s’est produite ; (on sait que si dH t = 0 alors

aucune erreur ne s’est produite). Illustrons le tout par un exemple.

Exemple. Soit C le code H2(4) ayant pour matrice de controle la matrice

H =

0 0 0 0 0 0 0 1 1 1 1 1 1 1 1

0 0 0 1 1 1 1 0 0 0 0 1 1 1 1

0 1 1 0 0 1 1 0 0 1 1 0 0 1 1

1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

.

Supposons maintenant que nous transmettons le mot c = 000000011111111. Introduisons

maintenant une erreur et soit d = 001000011111111 le vecteur recu. Comme syn(d) =

dH t = 0011 et que 0011 represente la position 3, on en deduit que le mot envoye etait

c = 000000011111111, ce qui est bien le cas.

4.5 Codes de Golay

En 1948, Marcel Golay a introduit quatre codes lineaires notes G23,G24,G11 et G12 qui

sont maintenant appeles des codes de Golay. Nous nous interesserons, pour le moment,

seulement a G24. C’est le code qui a ete utilise pour la mission Voyager afin de transmettre des

photographies couleurs de Jupiter et de Saturne. Nous le definirons de la maniere classique en

donnant sa matrice generatrice. Notre but n’est pas de demontrer les proprietes de G24 mais

plutot de presenter le code ainsi qu’une methode de decodage tirant profit de la structure

du code. Comme nous l’avons mentionne precedemment, le principe de decodage necessitant

le calcul du syndrome de chaque classe modulo G24 s’avere souvent inutilisable en pratique.

Nous verrons que l’on peut decoder G24 d’une facon elegante, et ce, avec un nombre reduit de

calculs de syndromes. Pour la justification des parametres de G24 nous renvoyons le lecteur

a [7] et pour la justification de la methode de decodage, nous renvoyons le lecteur a [11].

Definition 4.8 Un code lineaire C est un code auto-dual si C = C⊥.

Definition 4.9 Le code de Golay G24 est un code binaire ayant comme matrice gene-

Page 38: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 4. CODES LINEAIRES 30

ratrice G = [I12 B] ou

B =

0 1 1 1 1 1 1 1 1 1 1 1

1 1 1 0 1 1 1 0 0 0 1 0

1 1 0 1 1 1 0 0 0 1 0 1

1 0 1 1 1 0 0 0 1 0 1 1

1 1 1 1 0 0 0 1 0 1 1 0

1 1 1 0 0 0 1 0 1 1 0 1

1 1 0 0 0 1 0 1 1 0 1 1

1 0 0 0 1 0 1 1 0 1 1 1

1 0 0 1 0 1 1 0 1 1 1 0

1 0 1 0 1 1 0 1 1 1 0 0

1 1 0 1 1 0 1 1 1 0 0 0

1 0 1 1 0 1 1 1 0 0 0 1

.

On obtient alors que le code de Golay G24 est un [24, 12, 8]−code binaire auto-dual.

La famille des codes de Golay n’est pas aussi vaste que la famille des codes de Hamming,

mais son interet vient surtout du fait que les codes de Golay se pretent bien au decodage.

Comme nous l’avons deja mentionne, le decodage classique de G24 necessiterait une table

contenant 212 lignes. Voici maintenant un algorithme de decodage n’utilisant pas une telle

table. Nous allons bien entendu illustrer notre methode a l’aide de quelques exemples.

Voici la notation que nous utiliserons. La matrice generatrice est notee G et G = [I12 B].

La colonne i de B sera notee ci et la ligne i de B sera notee ri. Un 12-uplet binaire ou la

seule composante differente de zero est la composante i sera note x(i) ou y(i). Le mot envoye

sera note c et r sera le vecteur recu. Le vecteur nul de longueur 12 sera note 0 et la notation

(x,y) representera le vecteur de longueur 24 obtenu par la concatenation de x et y.

Algorithme de decodage (code G24).

(1) Calculer s = GrT .

(2) Si wt(s) ≤ 3, alors e = (sT , 0) et aller a (8).

(3) Si wt(s + ci) ≤ 2 pour un certain i (1 ≤ i ≤ 12), alors e = ((s + ci)T ,y(i)) et aller a

(8).

Page 39: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 4. CODES LINEAIRES 31

(4) Calculer BT s.

(5) Si wt(BTs) ≤ 3, alors e = (0, (BT s)T ) et aller a (8).

(6) Si wt(BT s + rTi ) ≤ 2 pour un certain ri (1 ≤ i ≤ 12), alors e = (x(i), (BT s)T + ri) et

aller a (8).

(7) Imprimer <Au moins 4 erreurs se sont produites> et fin.

(8) Decoder r comme r − e = c et fin.

Comme on le remarque facilement, avec cette methode, nous avons un maximum de 24

syndromes a calculer ce qui est nettement plus efficace que si nous decodions sans tirer profit

de la structure de G24. Illustrons le tout par deux exemples.

Exemple 1.

Soit c = 110000000000100100011101 le mot du code forme par la premiere rangee plus

la seconde rangee de G. Introduisons 2 erreurs. Supposons alors que le vecteur recu est

r = 10001000000010011101. On calcule s = GrT = (010010000000)T . Comme wt(s) ≤ 3,

on prend e = (sT , 0) = 010010000000000000000000 et on decode simplement par r − e =

110000000000100100011101, qui est bien le mot c envoye. Remarquons qu’un seul calcul de

syndrome a ete necessaire.

Exemple 2.

Soit c = 001100010000111011111001 le mot du code forme par la somme des rangees 3,4

et 8 de G. Supposons alors que le vecteur recu est r = 101100010000110011110001 (3 erreurs).

On calcule s = GrT = (110010101011)T . Comme wt(s) > 3 et qu’il n’y a aucune colonne ci de

B telle que wt(s+ci) ≤ 2, on calcule alors BT s = (010111110111)T . Comme wt(BT s) > 3, on

cherche alors une rangee ri de B telle que wt(BT s+rTi ) ≤ 2. Pour i = 1 on obtient BT s+rT

1 =

(001000001000)T = yT . Ainsi, on choisit e = (x(1),y) = 100000000000001000001000 et on

decode simplement par r − e = 001100010000111011111001, qui est bien le mot c envoye.

Remarquons que nous avons eu besoin de seulement 15 calculs de syndromes ce qui est encore

loin de 212.

Page 40: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 4. CODES LINEAIRES 32

4.6 Codes de Reed-Muller

Les codes de Reed-Muller sont habituellement definis a l’aide de la matrice generatrice du

code et nous respecterons cette convention. Nous allons, dans un premier temps, presenter

les codes de Reed-Muller comme des extensions des codes de Hamming. Ce seront les codes

de Reed-Muller du premier ordre. Dans un deuxieme temps nous presenterons une definition

recursive des codes de Reed-Muller d’ordre m. Nous faisons volontairement ce choix afin de

montrer que certains codes sont des generalisations d’autres codes ou encore que la facon

de definir un code n’est pas unique. Dans le cas des codes de Reed-Muller du premier ordre

nous exhiberons explicitement leurs parametres alors que pour les code Reed-Muller d’ordre

m nous renvoyons le lecteur a [7] pour les demonstrations. Notons enfin que c’est un code de

Reed-Muller du premier ordre que Mariner 9 a utilise afin de transmettre des photographies

de la planete Mars en 1972.

Soit Hr la matrice de controle du [2r − 1, 2r − 1 − r]−code binaire de Hamming H2(r).

Soit maintenant Br = [Hr 0] la matrice Hr auquelle nous avons ajoute une colonne de zeros.

Soient v1,v2, . . . ,vr les rangees de Br et soit enfin 1 le vecteur ligne de longueur 2r dont

toutes les composantes sont egales a 1. Nous pouvons alors definir les codes de Reed-Muller

du premier ordre de la facon suivante.

Definition 4.10 Le code de Reed-Muller du premier ordre, note RM(1, r), est le

sous-espace vectoriel engendre par les vecteurs 1,v1,v2, . . . ,vr. La matrice generatrice de

RM(1, r) est alors

G =

[1

Br

]=

[1

Hr 0

].

Exemple 1.

Construisons la matrice generatrice de RM(1, 3). Comme

H3 =

0 0 0 1 1 1 1

0 1 1 0 0 1 1

1 0 1 0 1 0 1

,

Page 41: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 4. CODES LINEAIRES 33

nous avons alors

B3 = [H3 0] =

0 0 0 1 1 1 1 0

0 1 1 0 0 1 1 0

1 0 1 0 1 0 1 0

.

Nous en deduisons donc que

G =

[1

Br

]=

[1

Hr 0

]=

1 1 1 1 1 1 1 1

0 0 0 1 1 1 1 0

0 1 1 0 0 1 1 0

1 0 1 0 1 0 1 0

.

Nous pouvons alors facilement verifier que RM(1, 3) est un [8, 4, 4]−code.

Nous aimerions maintenant montrer que le parametre r determine tous les autres pa-

rametres du code. C’est l’objet du prochain theoreme.

Theoreme 4.8 RM(1, r) est un [2r, r + 1, 2r−1]−code.

Preuve

Comme la matrice G possede 2r colonnes, la longueur du code est evidemment 2r. Comme

les vecteurs 1,v1,v2, . . . ,vr sont lineairement independants, on en deduit que la dimension

est egale a r + 1. Il nous reste alors a montrer que la distance d du code est egale a 2r−1.

Pour cela, nous montrerons que tous les mots du code (sauf 0 et 1) ont un poids egal a 2r−1.

Tout mot c 6= 0 du code s’ecrit

c = ri1 + ri2 + · · ·+ rih

ou rij est la ij-ieme rangee de G, 1 ≤ h ≤ r + 1. Supposons qu’aucun rij n’est egal a 1 et

considerons alors la matrice

A =

ri1

ri2...

rih

.

Maintenant, la composante t de c sera 0 si la t-ieme colonne de A possede un nombre pair

de 1 et sera 1 si cette colonne de A contient un nombre impair de 1. Remarquons que pour

Page 42: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 4. CODES LINEAIRES 34

chaque colonne distincte u∗ de A, le nombre de colonnes u de Br ou la ij-ieme composante,

1 ≤ j ≤ h, est la meme que la composante j de u∗ est 2r−h car chacune des r−h composantes

restantes de u est libre de prendre les valeurs 1 ou 0 (par definition de Br). On obtient donc

que chaque colonne distincte de A apparaıt precisement 2r−h fois dans A. Mais comme chaque

h-uplet binaire et distinct apparaıt comme colonne de A et que le nombre de ces h-uplets

de poids pairs est egal a celui de poids impairs, on obtient que exactement la moitie des

composantes de c sont egales a 1 et ainsi que wt(c) = 2r−1.

Si par contre nous avons que rij = 1, alors il suffit de considerer c − 1. Ainsi le meme

argument peut etre applique (il s’applique a tout mot different de 0) et on obtient alors

wt(c− 1) = 2r−1 (pour c 6= 1). On obtient alors que wt(c) = 2r−1 simplement en changeant

les 1 et les 0 dans c − 1. �

Passons maintenant a la definition des codes de Reed-Muller d’ordre m.

Definition 4.11 Un code de Reed-Muller d’ordre m et de longueur 2r ou 0 ≤m ≤ r, note RM(m, r), est le [2r,

∑mi=0

(ir

), 2r−m]−code defini recursivement de la facon

suivante :

RM(0, r) = {00 . . . 0, 11 . . . 1},RM(r, r) = V2r(F2),

RM(m, r) = {(x,x + y)|x ∈ RM(m, r − 1),y ∈ RM(m − 1, r − 1)}, (0 < m < r).

Plutot que d’utiliser cette description du code, nous allons donner une methode recursive

permettant de construire la matrice generatrice de RM(m, r). Nous noterons cette matrice

G(m, r). Pour 0 < m < r, on definit

G(m, r) =

[G(m, r − 1) G(m, r − 1)

0 G(m − 1, r − 1)

].

Pour m = 0 on definit la matrice 1 × 2r suivante

G(0, r) =[

11 . . . 1]

et pour m = r on definit la matrice 2r × 2r suivante

G(r, r) =

[G(r − 1, r)

0 . . . 01

].

Page 43: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 4. CODES LINEAIRES 35

Exemple 2.

Utilisons cette methode afin de determiner G(1, 3) (c’est la matrice G de l’exemple 1).

On obtient

G(1, 3) =

[G(1, 2) G(1, 2)

0 G(0, 2)

]

ou

G(1, 2) =

[G(1, 1) G(1, 1)

0 G(0, 1)

]et G(0, 2) =

[1 1 1 1

]avec

G(1, 1) =

[1 1

0 1

]et G(0, 1) =

[1 1

].

On obtient alors

G(1, 3) =

1 1 1 1 1 1 1 1

0 1 0 1 0 1 0 1

0 0 1 1 0 0 1 1

0 0 0 0 1 1 1 1

qui est bien (a equivalence pres) la matrice G de l’exemple 1.

Page 44: THEORIE ALG EBRIQUE DU CODAGE

Chapitre 5

Codes lineaires cycliques

5.1 Structure

Une des classes de codes lineaires les plus importantes est la classe des codes cycliques.

Afin de bien les definir, le concept de sous-espace cyclique nous sera necessaire.

Definition 5.1 Un sous-espace S de Vn(Fq ) est un sous-espace cyclique si

(a1, a2, . . . , an) ∈ S ⇒ (an, a1, . . . , an−1) ∈ S.

Ainsi, on obtient la definition suivante pour un code lineaire cyclique.

Definition 5.2 Un code lineaire C est cyclique s’il est un sous-espace cyclique.

La construction et l’existence de codes cycliques se ramene donc a la construction et l’exis-

tence de sous-espaces vectoriels cycliques. Voyons comment contruire de tels sous-espaces.

Nous nous permettons de rappeler au lecteur que Fq [x] et Fq [x]�<f(x)> sont des anneaux

principaux. De plus, nous savons qu’il y a un isomorphisme entre Vn(Fq ) et l’anneau des

polynomes de degre inferieur a n sur Fq note F(n)q [x] := Fq [x]�<f(x)>, ou f(x) est un polynome

de degre n. Cet isomorphisme nous permet de considerer indifferement un mot de C comme

un vecteur de Vn(Fq ) ou comme un polynome de F(n)q [x] de la facon suivante :

v = a1a2 . . . an ∈ Vn(Fq ) 7−→ v(x) = a1 + a2x + · + anxn−1 ∈ F(n)q [x],

36

Page 45: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 37

Lorsque f(x) = xn − 1, on notera Fq [x]�<xn−1> par Rn.

Theoreme 5.1 Un sous-ensemble non-vide S de Vn(Fq ) est un sous-espace cyclique si

et seulement si l’ensemble des polynomes I associes a S est un ideal dans l’anneau des

polynomes F(n)q [x] associe a Vn(Fq ).

Preuve

Par hypothese, S est cyclique. Le fait que (I, +) est un groupe abelien decoule du fait

que S est un sous-espace.

Montrons que I est ferme sous la multiplication. Soit v = (a0, . . . , an−1) ∈ S. Alors

v(x) ∈ I implique (an−1, a0, . . . , an−2) ∈ S car S est cyclique. Alors xv(x) ∈ I.

Comme S est un espace vectoriel, si v ∈ S alors λv ∈ S pour tout λ ∈ Fq . Ainsi λxiv(x) ∈I pour tout λ ∈ Fq , pour 0 ≤ i ≤ n − 1. Ainsi a(x)v(x) ∈ I ou a(x) =

∑n−1j=0 λjx

j ∈ F(n)q [x].

Par hypothese, I est un ideal dans F(n)q [x]. De plus, (I, +) est un groupe et la multipli-

cation par un scalaire n’est en fait que la multiplication par un polynome constant. Donc S

est un sous-espace. Comme la multiplication par x revient a un decalage cyclique et que I

est un ideal, on deduit directement que S est cyclique. �

Theoreme 5.2 Soit I 6= (0) un ideal de Rn ou f(x) = xn − 1. Soit g(x) un polynome

unitaire de plus petit degre tel que [g(x)] represente une classe modulo I. Alors [g(x)] (que

nous pourrons noter g(x) par abus d’ecriture) genere I et de plus g(x)|xn − 1.

Preuve

Le fait que I =< g(x) > decoule du fait que F(n)q [x] est un anneau principal. Montrons

que g(x)|xn − 1. Soit f(x) = h(x)g(x) + r(x) ou deg(r(x)) < deg(g(x)) ou r(x) = 0. Alors

[f(x)] = [h(x)g(x) + r(x)] = [h(x)][g(x)] + [r(x)]. Comme [f(x)] = [0], nous obtenons

[r(x)] = [−h(x)][g(x)] ∈ I.

Ainsi r(x) = 0 (a cause du choix de g(x)). Donc g(x)|f(x) = xn − 1. �

Page 46: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 38

Montrons maintenant que ce polynome est unique.

Theoreme 5.3 Il y a un unique polynome unitaire g(x) de plus petit degre (≤ n − 1)

qui engendre tout ideal 6= (0) de F(n)q [x].

Preuve

Soit g(x) et h(x) ∈ Fq [x] de plus petit degre et unitaires tels que

< [g(x)] >=< [h(x)] >= I ⊂ F(n)q [x].

Alors [h(x)] = [a(x)g(x)] pour un certain a(x). Comme deg h(x) = deg g(x) et que h(x) et

g(x) sont unitaires le resultat suit. �

Ainsi nous parlerons maintenant du polynome unitaire g(x) de plus petit degre qui

engendre I.

Definition 5.3 g(x) est appele le polynome generateur de l’ideal I de Rn.

Theoreme 5.4 Soit h(x) un polynome unitaire diviseur de f(x) = xn − 1. Alors h(x)

est le generateur de l’ideal I = {a(x)h(x) : a(x) ∈ Rn} .

Preuve

Soit g(x) le generateur de I. Nous savons que g(x)|f(x). De plus, comme g(x) ∈ I, il

existe un polynome a(x) tel que

[g(x)] = [a(x)h(x)].

Nous avons g(x) = a(x)h(x) + l(x)f(x) pour un certain polynome l(x) ; comme h(x)|f(x),

cela implique que h(x)|g(x). De plus, g(x)|h(x) car g(x) est le generateur. Comme les deux

sont unitaires, on conclut que g(x) = h(x). �

Comme on sait qu’un code C peut etre engendre par un polynome different de son po-

lynome generateur, la notation C =< g(x) > n’impose pas que g(x) soit l’unique polynome

unitaire de degre minimal qui genere C. Nous introduisons alors la notation C =�g(x)� qui

signifie que dans ce cas on impose a g(x) d’etre l’unique polynome unitaire de degre minimal

qui genere C. Il est clair que �g(x)� et < g(x) > representent en fait le meme code C.

Page 47: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 39

Ainsi en combinant nos resultats precedents, nous obtenons notre resultat principal a

savoir :

Il y a une bijection entre les sous-espace cycliques de Vn(Fq )

et les polynomes unitaires g(x) ∈ F(n)q [x] qui divisent f(x) = xn − 1.

Comme nous l’avons fait pour les codes lineaires, nous aimerions exhiber une base de

chacun de nos sous-espaces vectoriels cycliques et ainsi obtenir la matrice generatrice du

code associe. Le theoreme suivant repond a cette attente.

Theoreme 5.5 Soit g(x) un polynome unitaire qui divise xn−1 sur Fq et ou deg g(x) =

n − k. Alors g(x) est le polynome generateur d’un sous-espace vectoriel cyclique de Vn(Fq )

de dimension k.

Preuve

Soit S un sous-espace vectoriel de Vn(Fq ) genere par g(x). Soit

B ={g(x), xg(x), . . . , xk−1g(x)

}.

Afin d’obtenir notre resultat nous allons montrer que B est une base.

Premierement, on suppose que

k−1∑i=0

λixig(x) = 0, λi ∈ Fq .

De cette equation, on voit facilement que le seul terme pouvant avoir xn−1 est λk−1xk−1g(x)

et comme le degre de xk−1g(x) est inferieur a n, cela implique que λk−1 = 0. On en deduit

que λi = 0, 0 ≤ i ≤ k − 1. Donc B est lineairement independant.

Deuxiemement. Soit h(x) ∈ S. Alors h(x) = a(x)g(x) ou sans perte de generalite

deg a(x) < k. Alors

a(x) =

k−1∑i=0

λixi et h(x) =

k−1∑i=0

λixig(x),

de sorte que B engendre S. �

Page 48: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 40

Maintenant que nous sommes en mesure de construire la matrice generatrice associee a

un code lineaire cyclique. Nous aimerions exhiber la matrice de controle du meme code. Pour

cela, il nous faut definir le polynome de controle d’un code lineaire cyclique.

Soit g(x) le polynome generateur de degre r d’un code lineaire cyclique de parametres

[n, n− r]. Aussi, nous savons que xn −1 = g(x)h(x) ou h(x) est un polynome de degre n− r.

Le polynome h(x) est appele le polynome de controle du code C ayant comme generateur

g(x). Le theoreme suivant montre comment a l’aide de h(x) nous pouvons obtenir la matrice

de controle.

Theoreme 5.6 Soit h(x) le polynome de controle d’un code lineaire cyclique C dans

Rn.

(1) Le code C peut etre represente par

C = {p(x) ∈ Rn|p(x)h(x) ≡ 0}.

(2) Soit h(x) = h0 + h1x + · · · + hn−rxn−r. Alors une matrice de controle du code C est

donnee par

H =

hn−r · · · h0 0 0 · · · 0

0 hn−r · · · h0 0 · · · 0

0 0 hn−r · · · h0 · · · ......

.... . .

. . . · · · . . . 0

0 0 · · · 0 hn−r · · · h0

.

(3) Le code dual C⊥ est un code cyclique de dimension r et son polynome generateur est

donne par

h⊥(x) = h−10 xn−rh(x−1) = h−1

0 (h0xn−r + h1x

n−r−1 + . . . + hn−r).

Preuve

(1) Soit g(x) le polynome generateur de C. Si p(x) ∈ C, alors p(x) = f(x)g(x) pour un

certain f(x) ∈ Rn. Ainsi

p(x)h(x) = f(x)g(x)h(x) = f(x)(xn − 1) ≡ 0.

De plus, si p(x) ∈ Rn et que p(x)h(x) ≡ 0, alors nous pouvons ecrire que p(x) =

q(x)g(x) + r(x) ou deg(r(x)) < r. Nous obtenons alors

p(x)h(x) = q(x)g(x)h(x) + r(x)h(x),

Page 49: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 41

ce qui implique que r(x)h(x) ≡ 0. Cependant, comme deg(r(x)h(x)) < r+(n−r) = n,

cela implique que r(x)h(x) = 0. Ainsi r(x) = 0 et p(x) = q(x)g(x) ∈ C.

(2) Si c(x) ∈ C alors c(x)h(x) ≡ 0. Comme deg(c(x)h(x)) < 2n−r et qu’ainsi les coefficients

de xn−r, xn−r+1, . . . , xn−1, que nous retrouvons dans le produit c(x)h(x) doivent etre

nuls, nous obtenons :

c0hn−r + c1hn−r−1 + · · · + cn−rh0 = 0

c1hn−r + c2hn−r−1 + · · · + cn−r+1h0 = 0...

......

...

cr−1hn−r + crhn−r−1 + · · · + cn−1h0 = 0

Ce systeme est equivalent a (c0, c1, . . . , cn−1)H⊥ = 0. On en deduit alors que H est

la matrice generatrice d’un code C∗ qui est orthogonal a C. Ainsi C∗ ⊂ C⊥. Comme

hn−r 6= 0, nous deduisont que dim(C∗) = r et qu’alors C∗ = C⊥.

(3) Ici, il suffit de montrer que h⊥(x)|xn − 1. Ainsi h⊥(x) sera le generateur d’un code

cyclique C =< h⊥(x) > ayant H comme matrice generatrice et alors < h⊥(x) >= C⊥.

Comme h(x)g(x) = xn − 1 implique h(x−1)g(x−1) = x−n − 1, i.e.

xn−rh(x−1)xrg(x−1) = 1 − xn,

ceci montre alors que h⊥(x)|xn − 1. �

Comme nous venons de le voir, une fois le polynome xn−1 factorise en polynomes unitaires

irreductibles, la construction d’un code lineaire cyclique est chose relativement aisee.

Avant d’aborder le codage et le decodage des codes lineaires cycliques ainsi que les codes

eux-memes, il nous faut voir une autre facon de representer un code lineaire cyclique, soit a

travers la notion de zeros d’un code.

Definition 5.4 Les zeros d’un code lineaire cyclique sont les racines de son polynome

generateur.

Comme la factorisation de xn − 1 sur Fq joue un role important dans l’elaboration de

la theorie des codes lineaires cycliques, nous nous permettons de rappeler certains faits

concernant cette factorisation. Nous savons que

xn − 1 =∏

i

mi(x)

Page 50: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 42

ou les mi(x) sont des polynomes irreductibles sur Fq . Si ω est une racine primitive n-ieme

de l’unite sur Fq , nous savons que les racines du polynome mi(x) sont conjuguees. Elles sont

de la forme {ωi, ωiq, . . . , ωiqd−1} ou d est le plus petit entier positif tel que iqd ≡ i mod n.

L’ensemble Ci = {i, iq, . . . , iqd−1} est alors appele la i-ieme classe cyclotomique de q

modulo p. On obtient alors

mi(x) =∏j∈Ci

(x − ωj).

Voyons maintenant comment definir un code a l’aide de la notion de zeros.

Soit xn−1 =∏

i mi(x) ou les mi(x) sont des polynomes unitaires irreductibles sur Fq . Soit

α une racine de mi(x) dans un corps de decomposition de Fq . Ainsi mi(x) est le polynome

minimal de α sur Fq . Si f(x) ∈ Fq [x] et que f(α) = 0 alors f(x) = a(x)mi(x) pour un certain

a(x). En particulier, si f(x) ∈ Rn, alors f(α) = 0 ⇐⇒ f(x) ∈�mi(x)�.

Voyons comment appliquer cela aux codes lineaires cycliques. Soit g(x) = q1(x) · · · qt(x)

(ou les qi(x) sont des facteurs irreductibles de xn − 1). Soient {α1, . . . , αu} l’ensemble des

racines de g(x). Alors

�g(x)�= {f(x) ∈ Rn|f(α1) = f(α2) = . . . = f(αu) = 0}.

De plus, il suffit de prendre une seule racine pour chacun des qi(x). Soit βi une racine de

qi(x). Alors

�g(x)�= {f(x) ∈ Rn|f(β1) = f(β2) = . . . = f(βt) = 0}.Il faut souligner que si {α1, . . . , αn} est un ensemble quelconque de racines de xn−1, alors le

polynome generateur g(x) sera evidemment le ppcm des polynomes minimaux associes aux

αi. A l’aide de cette representation, il est tres facile d’obtenir la matrice de controle. Voyons

comment la construire.

Soit {α1, . . . , αn} un ensemble de racines de xn−1 appartenant au corps de decomposition

Fqd . Soit f(x) =∑

ajxj ∈ Rn. Alors f(αi) = 0 si et seulement si

∑j ajα

ji = 0. Voyons

maintenant Fqd comme l’espace vectoriel Vd(Fq ) de dimension d sur Fq . Notons [αji ] le vecteur

colonne de longueur d sur Fq . De plus, comme aj ∈ Fq nous obtenons

[ajαji ] = aj[α

ji ]

Page 51: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 43

et ainsi ∑j

aj [xji ] =

[∑j

ajαji

]= 0.

Definissons alors la matrice H de dimension ud × n de la facon suivante :

H =

[α01] [α1

1] . . .[αn−1

1

][α0

2] [α12] . . .

[αn−1

2

]...

......

[α0u] [α1

u] . . . [αn−1u ]

,

et definissons f = (a0, . . . , an−1). Nous obtenons alors

f(αi) = 0 pour i = 1, . . . , u ⇐⇒ fHT = 0.

En supprimant les lignes lineairements dependantes, nous obtenons ainsi une matrice de

controle pour le code ayant {α1, . . . , αu} comme zeros.

Cette representation nous sera fort utile lors de la definition des codes BCH, RS et des

codes de Goppa.

Avant de passer a un exemple illustrant toute la theorie developpee jusqu’ici pour les

codes lieaires cycliques, nous allons voir comment coder et decoder avec un code cyclique.

5.2 Codage-decodage

Soit C =� g(x) � un [n, n − r]−code q-aire cyclique (le degre de g(x) est alors egal

a r). Ainsi, nous pouvons coder des messages de longueur n − r auxquels seront ajoutes

r symboles de verification. Soit le message a0a1 · · ·an−r−1 auquel on associe le polynome

a(x) = a0xn−1 + a1x

n−2 + . . . + an−r−1xr. Ensuite on calcule r(x) ou a(x) = q(x)g(x) + r(x).

Enfin, on envoie c(x) = a(x) − r(x).

On voit facilement que deg(r(x)) < r et comme a(x) et r(x) n’ont pas de terme de meme

degre, le codage est alors systematique. Par codage systematique on entend qu’en lisant le

mot en partant de la plus grande puissance de r, on verifie facilement que les n−r premieres

positions contiennent l’information alors que les r dernieres contiennent les symboles de

verification.

Page 52: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 44

Comme un code cyclique est un code lineaire, nous pouvons utiliser la meme procedure

de decodage que celle utilisee pour nos codes lineaires a savoir la methode du syndrome.

Ainsi si c(x) ∈ C est le mot envoye et que u(x) est recu, err(x) = u(x) − c(x) est le

polynome erreur. Nous definirons le poids d’un polynome comme le nombre de coefficients

differents de zero. Il nous reste maintenant a voir ce que l’on entend par le syndrome d’un

polynome.

Definition 5.5 Soit C =� g(x) � un [n, n − r]−code q-aire cyclique. Le syndrome

d’un polynome u(x), note syn(u(x)), est le reste de la divison de u(x) par g(x) :

u(x) = q(x)g(x) + syn(u(x)) ou deg syn(u(x)) < r.

Il est clair que u(x) ∈ C ⇐⇒ syn(u(x)) = 0 et que syn(u(x)) = syn(u∗(x)) ⇐⇒u(x) − u∗(x) ∈ C. Ainsi cette definition de syndrome est equivalente a celle presentee pour

nos codes lineaires.

Passons maintenant a un exemple permettant d’illustrer tout ce qui precede.

Exemple

Nous voulons contruire un code cyclique de parametres [7, 4] = [7, 7 − 3] sur F2 (si c’est

possible !). (On reconnaıt ici les parametres du code de Hamming H2(3)). Ce code lineaire

est-il cyclique ? Oui !

Il faut d’abord factoriser x7 − 1 sur F2 . Nous obtenons

(x7 − 1) = (x + 1)(x3 + x + 1)(x3 + x2 + 1).

Pour obtenir un code de parametres [7, 4], il nous faut donc un facteur irreductible de degre 3

qui divise x7 − 1. Nous avons alors deux choix pour le polynome generateur. Choisissons

g(x) = x3 + x + 1. Nous obtenons alors un code cyclique C =� g(x) � de dimension

7 − 3 = 4 et ayant pour matrice generatrice la matrice suivante

G =

1 1 0 1 0 0 0

0 1 1 0 1 0 0

0 0 1 1 0 1 0

0 0 0 1 1 0 1

.

Page 53: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 45

Afin d’obtenir notre matrice de controle, calculons h⊥(x). (Nous savons que dim(C⊥) = 3.)

Il nous faut alors le polynome h(x) satisfaisant x7 − 1 = g(x)h(x). Ainsi h(x) = (x+1)(x3 +

x2 + 1) = x4 + x2 + x + 1. On en deduit alors que h⊥(x) = x4 + x3 + x2 + 1. Nous obtenons

ainsi la matrice de controle H suivante

H =

1 0 1 1 1 0 0

0 1 0 1 1 1 0

0 0 1 0 1 1 1

.

On verifie alors facilement que GHT = 0. Comme nous pouvons le constater, la matrice

H comporte tous les vecteurs non nuls de F32 comme colonnes. Ainsi c’est bien la matrice de

controle du code H2(3). Essayons maintenant d’obtenir H avec la methode des zeros.

Pour ce faire, il nous suffit d’obtenir une racine de x3 + x + 1 et ainsi obtenir H =

[α0 α1 α2 α3 α4 α5 α6] comme matrice de controle. Faisons quelques observations.

Le polynome x3 + x + 1 etant primitif, il possede donc β comme racine ou β est un

generateur de F∗q . Ainsi H devient

H =[β0 β1 β2 β3 β4 β5 β6

].

Comme β est un element primitif, on obtient facilement que

H =

1 0 0 1 0 1 1

0 1 0 1 1 1 0

0 0 1 0 1 1 1

,

qui est equivalente a celle calculee avec notre autre methode. Le code H2(3) est donc cyclique !

Montrons explicitement comment coder avec ce code. Supposons que l’on desire envoyer

le mot 1001. Ce mot correspond au polynome 1 + x3 = a(x). Formons a(x) = x6 + x3.

Maintenant

x6 + x3 = (x3 + x)(x3 + x + 1) + (x2 + x).

Ainsi

c(x) = a(x) − r(x) = x6 + x3 − x2 − x

= x6 + x3 + x2 + x

= 0111001 ∈ C

Page 54: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 46

Ainsi nous avons code :

1001 7−→ 0111001,

1 + x3 7−→ x + x2 + x3 + x6.

Maintenant comme nous savons que H2(3) corrige seulement une erreur, introduisons une

erreur et verifions notre methode de decodage. Pour cela, formons une table de syndromes

et de representants de classes. Comme H2(3) corrige une seule erreur, il corrige les err(x)

de poids egaux a 1. Le tableau 4.1 presente cette table.

representants de classes syndromes

0 0

1 1

x x

x2 x2

x3 x + 1

x4 x2 + x

x5 x2 + x + 1

x6 x2 + 1

Tab. 5.1: Syndromes de H2(3)

Supposons alors que ayant transmis c(x) = x + x2 + x3 + x6, nous ayons recu u(x) =

x + x3 + x6. Calculons son syndrome. Or

x6 + x3 + x = (x3 + x)(x3 + x + 1) + x2.

Donc syn(u(x)) = x2. Le representant de la classe de x2 etant x2, on decode u(x) de la facon

suivante :

c(x) = u(x) − x2 = x + x2 + x3 + x6

= 0111001,

qui est bien le mot qui avait ete envoye.

Tel que nous l’avions mentionne avec les codes lineaires, un tel principe de decodage

necessite la tenue d’une table de representants de classes qui peut devenir tres longue. Ainsi

Page 55: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 47

nous sommes en droit de nous demander si une methode de decodage tirant profit de la

structure cyclique du code n’aurait pas pour effet d’ameliorer le decodage. La reponse est

evidemment oui. Explicitons cette methode que nous appliquerons a notre exemple.

Voici le principe de cette nouvelle methode. Supposons que l’on est capable de decoder

le coefficient de xn − 1. On pourrait, decoder ce coefficient, puis effectuer une permutation

circulaire, et decoder a nouveau le coefficient dominant qui serait en fait le coefficient de xn−1

de u(x). Ainsi, nous n’avons besoin que des lignes de la table pour lesquelles le representant

de la classe est de degre egal a n − 1.

Appliquons cette methode a notre exemple. La table en devient alors une qui ne compte

representant de classe syndrome

x6 x2 + 1

Tab. 5.2: Syndrome necessaire de H2(3)

qu’une seule ligne.

Soit maintenant notre u(x) = x6 + x3 + x. Comme syn(u(x)) = x2 n’est pas dans la

table, on en deduit que le coefficient de x6 est correct. Calculons syn(xu(x)). Comme

syn(xu(x)) = ( syn(x7 + x4 + x2) mod x7 − 1) = syn(x4 + x2 + 1)

et comme (x4 +x2 +1) = (x)(x3 +x+1)+(1+x), on obtient alors que syn(xu(x)) = 1+x.

Puisque que ce dernier n’est pas dans la table, alors le coefficient de x5 est correct.

Calculons x2u(x) = x5 + x3 + x ou x5 + x3 + x = x2(x7 + x + 1) + x + x2. Ainsi

syn(x2u(x)) = x + x2 ; alors le coefficient de x4 est correct.

Calculons x3u(x) = x6 + x4 + x2 ou x6 + x4 + x2 = x3(x3 + x + 1) + x3 + x2. Ainsi

syn(x3u(x)) = x3 + x2 ; alors le coefficient de x3 est correct.

Calculons x4u(x) = x7 + x5 + x3 = x5 + x3 + 1 ou x5 + x3 + x = x2(x3 + x + 1) + x2 + 1.

Ainsi syn(x4u(x)) = x2 + 1 ; alors le coefficient de x2 est inexact.

Ainsi, on decode u(x) = x6 + x3 + x comme u(x) − x2 = x6 + x3 + x2 + x. Qui est bien

notre mot de depart !

Page 56: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 48

La theorie portant sur les codes lineaires cycliques ayant ete exposee et illustree par un

exemple, passons maintenant a la descriptions des cinq principaux codes lineaires cycliques.

5.3 Codes BCH

Les codes BCH (Bose, Ray-Chaudhuri, Hocquenghem 1960) forment une tres importante

classe de codes lineaires cycliques. Leur distance est facile a minorer, les mots peuvent etre

encodes et les vecteurs, decodes de facon relativement simple. Le lecteur trouvera en annexe

un programme MAPLE pour les codes BCH.

Definition 5.6 Soit ω une racine n-ieme primitive de l’unite sur Fq et soit g(x) le

polynome unitaire de plus petit degre sur Fq ayant les δ − 1 nombres

ωb, ωb+1, . . . , ωb+δ−2

parmi ses racines (ou b ≥ 0 et δ ≥ 1). Un code cyclique C =� g(x)� de longueur n note

Bq(n, δ, ω, b) est appele un code BCH avec distance planifiee δ. De plus, lorsque b = 1

nous dirons que nous avons un code BCH strict et nous le noterons par Bq(n, δ, ω). Si

n = qs − 1 pour un certain s ≥ 1 nous dirons alors que le code BCH est un code BCH

primitif (car ω est alors un element primitif de Fqs ).

Nous allons maintenant montrer que le choix de δ nous donne une borne inferieure pour

la distance d du code.

Theoreme 5.7 (La borne BCH) Soit ω une racine n-ieme primitive de l’unite sur

Fq . Soit C un code cyclique et soit g(x) son polynome generateur. Si pour un certain b ≥ 0

et un certain δ ≥ 1 nous avons

g(ωb) = g(ωb+1) = · · · = g(ωb+δ−2) = 0,

alors la distance minimale du code C est superieure ou egale a δ.

Preuve

Si c = c0c1 . . . cn−1 ∈ C, alors pour c(x) = c0 + c1x + · · · + cn−1xn−1, on a

c(ωb) = c(ωb+1) = · · · = c(ωb+δ−2) = 0,

Page 57: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 49

et ainsi on obtient que H∗ct = 0 ou

H∗ =

1 ωb ω2b · · · ω(n−1)b

1 ωb+1 ω2(b+1) · · · ω(n−1)(b+1)

......

......

1 ωb+δ−2 ω2(b+δ−2) · · · ω(n−1)(b+δ−2)

.

Nous aimerions maintenant montrer que si on choisit au plus δ − 1 colonnes de H∗, alors

ces colonnes seront lineairement independantes sur Fqm . Supposons que w = wt(c) ≤ δ − 1.

Cela signifie que ci 6= 0 si et seulement si i ∈ {a1, a2, . . . , aw}. Alors H∗ct = 0 implique

ωa1b ωa2b · · · ωawb

ωa1(b+1) ωa2(b+1) · · · ωaw(b+1)

......

...

ωa1(b+w−1 ωa2(b+w−1 · · · ωaw(b+w−1)

ca1

ca2

...

caw

= 0.

Le determinant de la matrice de gauche doit alors etre nul. Ce determinant est cependant

egal a ω(a1+···+aw)b multiplie par le determinant de la matrice,

1 1 · · · 1

ωa1 ωa2 · · · ωaw

......

...

ωa1(w−1 ωa2(w−1 · · · ωaw(w−1)

,

qui est une matrice de Vandermonde. Il est facile de voir que le determinant de cette matrice

n’est pas nul et qu’ainsi le resultat suit. �

La construction d’un code BCH revient a exhiber son polynome generateur g(x). Nous

devons etre en mesure de trouver g(x) a partir des racines n-iemes de l’unite utilisees pour

le definir. Nous expliciterons la demarche par deux exemples de construction de codes BCH.

Nous avons choisi nos exemples de facon a ce que le corps de decomposition soit F24 . Nous

avons alors construit F24 avec le polynome primitif f(x) = x4 + x + 1 ou α est une racine de

f(x). Le tabeau 5.3 presente ce corps.

Exemple 1.

Nous voulons construire un code BCH strict de longueur egale a 15 et de distance planifiee

egale a 7 sur F2 . Remarquons que nous sommes en presence d’un code BCH primitif car

Page 58: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 50

α, racine de x4 + x + 1 F24

0 0

α0 1

α1 α

α2 α2

α3 α3

α4 α + 1

α5 α2 + α

α6 α3 + α2

α7 α3 + α + 1

α8 α2 + 1

α9 α3 + α

α10 α2 + α + 1

α11 α3 + α2 + α

α12 α3 + α2 + α + 1

α13 α3 + α2 + 1

α14 α3 + 1

Tab. 5.3: F24

15 = 24 − 1. Calculons en premier lieu les classes cyclotomiques de 2 modulo 15. Nous

obtenons :

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

Notre choix de δ = 7 nous force a inclure les ωj ou j ∈ C1, C3 et C5. On obtient alors

g(x) = (x− ω)(x− ω2)(x− ω4)(x− ω8)(x− ω3)(x− ω6)(x− ω9)(x− ω12)(x− ω5)(x− ω10),

ou ω est une racine primitive 15-ieme de l’unite. Comme notre code est primitif, nous pouvons

prendre ω = α ou α est un element primitif de F24 . On obtient alors

g(x) = (x− α)(x− α2)(x − α4)(x− α8)(x− α3)(x− α6)(x− α9)(x− α12)(x− α5)(x− α10).

Page 59: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 51

En utilisant notre construction de F24 , nous obtenons

g(x) = (1 + x + x4)(1 + x + x2 + x3 + x4)(1 + x + x2)

= 1 + x + x2 + x4 + x5 + x8 + x10.

Comme wt(g(x)) = 7, on en deduit que la distance d est egale a 7 (egale a la distance

planifiee). De plus, comme le degre de g(x) est egale a 10, la dimension de notre code est 5.

Nous avons donc construit un code BCH qui est un [15, 5, 7]−code.

Exemple 2.

Nous voulons construire un code BCH strict de longueur egale a 5 et de distance planifiee

egale a 3 sur F2 . Remarquons que nous sommes en presence d’un code BCH qui n’est pas

primitif. Calculons en premier lieu les classes cyclotomiques de 2 modulo 5. Nous obtenons :

C0 = {0}C1 = {1, 2, 3, 4}.

Notre choix de δ = 3 nous donne alors que

g(x) = (x − ω)(x − ω2)(x − ω3)(x − ω4),

ou ω est une racine primitive 5-ieme de l’unite. Comme le plus petit entier r satisfaisant

5|2r − 1 est 4, on en deduit que ω ∈ F24 . De plus, comme 24−15

= 3, on en deduit que l’on

peut prendre ω = α3 ou α est un element primitif de F24 . On obtient alors

g(x) = (x − α3)(x − α6)(x − α9)(x − α12).

En utilisant notre construction de F24 , nous obtenons

g(x) = 1 + x + x2 + x3 + x4.

Il est interessant de remarquer que nous avions δ = 3 mais que δ = 5 produit le meme

code. Comme wt(g(x)) = 5, on en deduit que la distance d est egale a 5. Nous avons alors

construit un code BCH qui est un [5, 1, 5]−code (bien entendu tout cela etait previsible en

regardant la factorisation de x5 − 1 en facteurs irreductibles sur F2).

Page 60: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 52

5.4 Codes de Reed-Solomon

Les codes de Reed-Solomon (RS) forment une classe particuliere des codes BCH. La

NASA les utilise depuis 1977 dans differentes missions spatiales. Ils ont, par exemple, ete

utilises dans les missions de Galilee, Magellan et Ulysse. La sonde Voyager II les a utilises

en janvier 1986 afin de transmettre des photographies de Uranus. Sony et Philips utilisent

les code RS depuis 1980 pour l’enregistrement des disques compacts. Nous verrons aussi

comment les codes RS peuvent etre utilises afin de corriger un eclat d’erreurs (ce qui explique

leur choix pour l’enregistrement des disques compacts).

Definition 5.7 Soit q ≥ 3. Un code Reed-Solomon q-aire note R(n, δ, ω, b) est un

code BCH Bq(q − 1, δ, ω, b) ou n = q − 1.

Comme n = q − 1, on obtient alors la factorisation suivante pour xn − 1.

xn − 1 = xq−1 − 1 =∏α∈F∗q

(x − α)

Ainsi, si ω est une racine (q − 1)-ieme primitive de l’unite, on obtient alors que le code RS

de distance planifiee δ admet comme polynome generateur le polynome

g(x) = (x − ωb)(x − ωb+1) · · · (x − ωb+δ−1)

ou b ≥ 0.

Dans le cas des codes RS, la distance planifiee presente une caracteristique interessante.

Cette caracteristique fait l’objet du prochain theoreme.

Theoreme 5.8 La distance minimale d d’un code RS est egale a sa distance planifiee δ.

Preuve

Soit g(x) le polynome generateur d’un code RS de distance planifiee δ. Nous avons alors

que deg(g(x))= δ−1 et donc que la dimension k du code est egale a n−deg(g(x))= n−δ+1.

La borne BCH nous dit que d ≥ δ = n − k + 1 et la borne de Singleton nous dit que

d ≤ n − k + 1 = δ d’ou d = δ. �

Corollaire 5.1 Les codes RS sont des codes separables de distance maximale.

Page 61: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 53

Preuve

(d = δ = n − k + 1). �

La principale caracteristique des codes RS est qu’ils permettent de corriger un eclat

d’erreurs. Nous n’avons qu’a penser a une egratignure sur un disque compact afin de nous

convaincre que dans ces cas, les eclats d’erreurs sont frequents. Voyons comment utiliser un

code RS afin de corriger un eclat d’erreurs.

Les codes RS pour lesquels q = 2m sont des codes C definis sur F2m . Ce sont donc des

[n, k]−codes q-aires. Voyons maintenant F2m comme Fm2 . Le meme code C devient alors un

[mn, mk]−code binaire C+. Dans le premier cas, le code C est un espace vectoriel de dimension

k sur F2m alors que dans le deuxieme cas, le code C+ est un espace vectoriel de dimension

mk sur F2 (notons que C+ peut ne plus etre cyclique). En resume, si C est un [n, m, d]−code

2m-aire alors C+ est un [mn, mk,≥ d]−code binaire. Illustrons nos propos par un exemple.

Exemple.

Soient q = 4, n = 3 et k = 2. Soit ω une racine du polynome primitif (pour F4) x4 +x+1

sur F2 . Nous avons alors que F4 = {0, 1, ω, ω2}. Soit alors un code C =�g(x)�= R(3, 2, ω, 1)

ou g(x) = x − ω. On obtient alors que

C = {p(x)(x − ω)|deg(p(x)) ≤ 1}.

Considerons maintenant {1, ω} comme une base ordonnee de F4 sur F2 . On obtient alors que

0 = 0(1)+0(ω) = 00, 1 = 1(1)+0(ω) = 10, ω = 0(1)+1(ω) = 01, et que ω2 = 1(1)+1(ω) = 11.

Nous obtenons ainsi les C et C+ illustres au tableau 5.4.

Il est alors evident que si le code original C corrige t erreurs alors le code C+ corrigera

des eclats d’erreurs pouvant atteindre une longueur b = (t − 1)m + 1.

5.5 Codes Residus Quadratiques

Comme nous l’avons vu, les codes cycliques peuvent etre definis avec la notion de zeros

d’un code. En choisissant les zeros d’une facon particuliere nous avons obtenu, par exemple,

les codes BCH. Les codes Residus Quadratiques sont des codes lineaires cycliques pour

Page 62: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 54

C (sur F4) C+ (sur F2)

000 000000

ω10 011000

ω2ω0 110100

1ω20 101100

0ω1 000110

0ω2ω 001101

01ω2 001011

ωω21 011110

ω201 110010

111 101010

ωωω 010101

ω21ω 111001

10ω 100001

ωωω2 010111

ω2ω2ω2 111111

ω2ω0 110100

1ωω2 100111

Tab. 5.4: Reed − Solomon

lesquels un choix particulier de zeros est impose. Comme son nom l’indique, ce choix reposera

sur la notion de residu quadratique.

Definition 5.8 Soit p un nombre premier impair. Si (a, p) = 1 alors a est un residu

quadratique modulo p s’il existe un x tel que x2 ≡ a mod p. Si aucun x ne satisfait cette

congruence alors on dira que a est un non-residu quadratique modulo p.

Par la suite, nous noterons RQ l’ensemble des residus quadratiques modulo p de l’en-

semble ZZ∗p = {1, . . . , p − 1} et l’ensemble des non-residus quadratiques de ZZ∗

p sera note

NRQ. Nous nous permettons de rappeler au lecteur les proprietes suivantes des residus

quadratiques :

(1) RQ = {12, 22, . . . ,(

p−12

)2};(2) RQ ∪ NRQ = ZZ∗

p;

Page 63: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 55

(3) |RQ| = |NRQ| = p−12

;

(4) a, b ∈ RQ ⇒ ab ∈ RQ;

(5) a, b ∈ NRQ ⇒ ab ∈ RQ;

(6) a ∈ RQ, b ∈ NRQ ⇒ ab ∈ NRQ;

(7) 2 ∈ RQ ⇐⇒ p ≡ ±1 mod 8;

(8) −1 ∈ RQ ⇐⇒ p ≡ 1 mod 4.

Passons maintenant a des considerations qui nous conduiront a la definition des code RQ.

Soit ω une racine primitive p-ieme de l’unite. Nous aimerions alors que les zeros de notre

code soient l’ensemble

Z = {ωi|i ∈ RQ}.Pour ce faire, il faut que

i ∈ RQ ⇒ Ci = {i, iq, . . . , iqd−1} ⊂ RQ.

Cette condition impose donc a q d’etre un residu quadratique modulo p. Ainsi, pour un tel

q, nous obtenons des polynomes q(x) et n(x) a coefficients dans Fq ou

xp − 1 = (x − 1)q(x)n(x)

avec

q(x) =∏

r∈RQ

(x − ωr) et n(x) =∏

u∈NRQ

(x − ωu).

Nous sommes maintenant en mesure de definir un code RQ.

Definition 5.9 Soit p un nombre premier impair et soit q un premier qui est un residu

quadratique modulo p. Alors, les codes cycliques q-aires

Q(p) =�q(x)�, Q∗(p) =�(x − 1)q(x)�,

N (p) =�n(x)�, N ∗(p) =�(x − 1)n(x)�de longueur p dans Rp = Fq [x]/ < xp−1 > sont appeles des codes Residus Quadratiques.

Avant de presenter un code Residu Quadratique, nous allons nous interesser a sa distance

minimale. A cet egard nous avons le theoreme suivant.

Page 64: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 56

Theoreme 5.9 (Borne de la racine carree) La distance minimale d des codes Re-

sidus Quadratiques Q(p) et N (p) satisfait

d2 ≥ p.

De plus, si p = 4k − 1 alors on obtient

d2 − d + 1 ≥ p.

Preuve

Soit a(x) 6= 0 un mot de poids minimal d dans Q(p). Si n ∈ NRQ, alors a∗(x) = a(xn) est

un mot de poids minimal dans N (p). Ainsi le mot a(x)a∗(x) doit appartenir a Q(p)∩N (p).

Alors a(x)a∗(x) est alors un multiple de

∏r∈RQ

(x − ωr)∏

n∈NRQ

(x − ωn) =

p−1∏i=1

(x − ωi) =

p−1∏i=0

xi.

Nous obtenons donc que wt(a(x)a∗(x)) = p. Comme wt(a(x)) = d alors le nombre maximum

de coefficients differents de zero dans a(x)a∗(x) est d2, d’ou d2 ≥ p.

Si p = 4k − 1, on peut prendre n = −1. De plus, comme a(x)a(x−1) possede d termes

egaux a 1 on en deduit que le poids maximal du produit est d2 − d + 1. �

Passons maintenant a un exemple de codes Residus Quadratiques.

Exemple.

Comme nous voulons travailler sur F2 , nous aimerions que 2 soit un residu quadratique.

Pour ce faire, nous allons choisir p = 8m− 1 ou m = 1. Pour p = 7 on obtient alors les deux

ensembles suivants :

RQ = {1, 2, 4};NRQ = {3, 5, 6}.

Nous avons alors que

q(x) = (x − ω)(x − ω2)(x − ω4)

et

n(x) = (x − ω3)(x − ω5)(c − ω6)

Page 65: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 57

ou ω est une racine primitive septieme de l’unite. Comme p = 23 − 1 nous pouvons prendre

ω = α ou α est un element primitif de F8 (tel que presente au tableau 5.5). Cette remarque

nous permet d’exprimer q(x) (par exemple) comme un polynome irreductible sur F2 de la

facon suivante :

q(x) = (x − ω)(x − ω2)(x − ω4)

= (x − α)(x − α2)(x − α4)

= x3 − x2(α + α2 + α2 + α) + x(α3 + α5 + α6) − α7

= x3 + x + 1.

Ainsi notre code RQ est le code �q(x)�=�x3 + x + 1�. Comme nous savons que le

code H2(3) est aussi un code cyclique BCH avec ω comme zero, notre code est en fait le code

H2(3). Autrement dit, nous avons vu que le code de Hamming H2(3) etait un code lineaire,

puis nous avons vu qu’il etait un code cyclique BCH et maintenant nous venons de montrer

qu’il peut aussi etre vu comme un code RQ.

5.6 Codes de Goppa

Bien que les codes de Goppa ne sont pas en general des codes cycliques, ils sont neanmoins

une generalisation des codes BCH. C’est pourquoi nous les presentons ici. Leur construction

et l’etablissement de leurs parametres etant plutot longs, nous nous contenterons de bien les

definir et d’exhiber la forme generale de la matrice de controle. Enfin, nous fournirons un

exemple detaille de construction d’un code de Goppa. Pour ce qui est de la justification de

la construction de la matrice de controle, nous referons le lecteur a [9].

Soit G(x) un polynome a coefficients dans Fqm et soit

Sm =Fqm [x]

< G(x) >

l’anneau des polynomes a coefficients dans Fqm modulo < G(x) >. Si G(α) 6= 0, alors le

polynome x − α est inversible dans Sm. En effet, si on divise G(x) par x − α on obtient

G(x) = q(x)(x − α) + G(α).

Page 66: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 58

On en deduit alors que q(x)(x − α) ≡ −G(α) mod < G(x) > et donc que

[−G(α)−1q(x)](x − α) ≡ 1 mod < G(x) > .

Mais comme nous avons alors que

q(x) =G(x) − G(α)

x − α,

nous obtenons finalement que

1

x − α= −G(x) − G(α)

x − αG(α)−1.

Avec cette definition de (x−α)−1 nous sommes en mesure de definir les codes de Goppa.

Definition 5.10 Soit G(x) un polynome sur Fqm et soit L = {α1, . . . , αn} un ensemble

d’elements de Fqm ou G(αi) 6= 0 et ou n > deg(G(x)). De plus, pour tout a = a1 · · ·an avec

ai ∈ Fq , definissons

Ra =n∑

i=1

ai

x − αi

∈ Sm.

Alors le code de Goppa note Γ = Γ(L, G) est donne par :

Γ(L, G) = {a ∈ Fnq |Ra(x) ≡ 0 mod < G(x) >}.

La matrice de controle d’un code de Goppa est alors de la forme suivante :

H =

G(α1)−1 G(α2)

−1 · · · G(αn)−1

α1G(α1)−1 α2G(α2)

−1 · · · αnG(αn)−1

α21G(α1)

−1 α22G(α2)

−1 · · · α2nG(αn)−1

......

...

αr−11 G(α1)

−1 αr−12 G(α2)

−1 · · · αr−1n G(αn)

−1

ou r = deg(G(x)).

Notons enfin que pour la distance minimale d d’un code de Goppa nous avons d ≥ r+1. On

peut donc, seulement a partir du polynome G(x) (appele polynome de Goppa), minorer

la distance minimale du code.

Page 67: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 59

Montrons maintenant a l’aide d’un exemple comment construire explicitement la matrice

de controle d’un code de Goppa donne. Comme notre exemple utilisera le corps F8 , nous

l’avons construit avec le polynome primitif p(x) = x3 + x + 1 et ou p(α) = 0. Le tableau 5.5

presente ce corps ainsi construit.

α, racine de x3 + x + 1 F23

0 0

α0 1

α1 α

α2 α2

α3 α + 1

α4 α2 + α

α5 α2 + α + 1

α6 α2 + 1

Tab. 5.5: F23

Exemple.

Soit G(x) = x2 + x + 1 un polynome irreductible sur F2 et L = {0, 1, α, . . . , α6} = F8 .

Dans ce cas nous obtenons q = 2, m = 3, r = 2, n = 8 et α est un element primitif de F8 .

Comme G(x) ne possede aucun zero dans F8 (son corps de decomposition etant F22 ), nous

obtenons alors la matrice

H =

[G(0)−1 G(1)−1 G(α1)

−1 G(α2)−1 · · · G(α5)

−1 G(α6)−1

0G(0)−1 1G(1)−1 αG(α1)−1 α2G(α2)

−1 · · · α5G(α5)−1 α6G(α6)

−1

]

comme matrice de controle.

Page 68: THEORIE ALG EBRIQUE DU CODAGE

CHAPITRE 5. CODES LINEAIRES CYCLIQUES 60

Construisons explicitement les elements de la matrice. On obtient alors

G(0)−1 = 1−1 = 1,

G(1)−1 = (1 + 1 + 1)−1 = 1,

G(α)−1 = (α2 + α + 1)−1 = α−5 = α2,

G(α2)−1 = (α4 + α2 + 1)−1 = (α + 1)−1 = α−3 = α4,

G(α3)−1 = (α6 + α3 + 1)−1 = (α2 + α + 1)−1α−5 = α2,

G(α4)−1 = (α8 + α4 + 1)−1 = (α2 + 1)−1α−6 = α,

G(α5)−1 = (α10 + α5 + 1)−1 = (α2 + 1)−1α−6 = α,

G(α6)−1 = (α12 + α6 + 1)−1 = (α + 1)−1α−3 = α4.

En calculant de facon semblable les elements de la deuxieme ligne, on obtient

H =

[1 1 α2 α4 α2 α α α4

0 1 α3 α6 α5 α5 α6 α3

].

Ce qui nous donne explicitement la matrice de controle suivante :

H =

1 1 0 0 0 0 0 0

0 0 0 1 0 1 1 1

0 0 1 1 1 0 0 1

0 1 1 1 1 1 1 1

0 0 1 0 1 1 0 1

0 0 0 1 1 1 1 0

.

Enfin, nous pourrions verifier que le rang de la matrice H est egal a 6, ce qui implique donc

que la dimension de notre code est 8 − 6 = 2.

Page 69: THEORIE ALG EBRIQUE DU CODAGE

Chapitre 6

Conclusion

Les objectifs de ce memoire ont ete d’investiguer les structures algebriques associees

aux codes lineaires. Pour chacune des principales classes de codes, nous avons presente les

principaux codes utilises. Pour certains codes, nous avons aborde leur creation de differentes

facons afin d’illustrer que la methode de construction d’un code n’est, en general, pas unique.

L’important probleme qui consiste a etablir l’existence d’un code de parametres donnes a

ete aborde, nous le croyons, d’une facon originale sous l’angle de l’identite de MacWilliams.

A cet effet, nous avons montre comment utiliser l’identite de MacWilliams afin d’exhiber les

seules distributions possibles pour un code de parametres donnes.

En termes de perspectives, on peut signaler que dans un travail futur, nous aimerions

etablir des conditions necessaires et suffisantes pour l’existence de certains codes lineaires

pour lesquels l’identite de MacWilliams nous permet de supposer leur existence. Afin de

combler l’ecart entre Aq(n, d) et Aq[n, d], l’etude des codes de geometrie algebrique semble

etre des plus prometteuses. Soulignons a cet effet que la facon la plus interessante de definir

et d’analyser les codes de Goppa, c’est de les voir comme des codes de geometrie algebrique.

Toujours en termes de perspectives, notons enfin que le fait de supposer une distribution

uniforme en entrees nous a permis de justifier notre methode de decodage basee sur un

schema de maximum de vraisemblance, mais nous croyons fermement que la connaissance

pratique de la distribution d’entrees pourrait conduire a des methodes de decodage encore

plus efficaces.

61

Page 70: THEORIE ALG EBRIQUE DU CODAGE

Annexe A

Programmes MAPLE

A.1 Enumerateur de poids

# ------------------

# Utilisation de

# l’identite de MacWilliams

# -----------------

# Programme permettant d’exhiber

# les seules possibilites pour les

# distributions d’un code lineaire

# de parametres [ n , k , d ].

#

> restart;

# Determination de q,n,d

>

> q:=2:

> n:=11:

> d:=5:

>

# Calculs des 3 bornes

62

Page 71: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE A. PROGRAMMES MAPLE 63

# 1 - de Singleton

# 2 - empilement des spheres

# 3 - Elias

>

> k[1]:=evalf(floor(evalf(log[q](q^(n-d+1)))));:t:=floor((d-1)/2):

> k[2]:=evalf(floor(evalf(log[q](q^n/sum(’binomial(n,k)*(q-1)^k’,’k’=0..

> t)))));

>

> Theta:=(q-1)/q:

> if(d>Theta*n)

> then k[3]:=evalf(floor(evalf(log[q](d/(d-Theta*n)))));

> else k[3]:=999;

> fi;

>

>

> kmin:=min(k[1],k[2],k[3]):

>

>

> print(’DEBUT’);

>

> A[0]:=1:

> A[1]:=0:

> A[2]:=0:

> A[3]:=0:

> A[4]:=0:

> for k from kmin to 1 by -1 do : M:=q^k:print(’debut_k’=k);

>

> for A[5] from 1 to (M-1) do

>

> for A[6] from 0 to (M-1-A[5]) do

>

> for A[7] from 0 to (M-1-A[5]-A[6]) do

>

Page 72: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE A. PROGRAMMES MAPLE 64

> for A[8] from 0 to (M-1-A[5]-A[6]-A[7]) do

>

> for A[9] from 0 to (M-1-A[5]-A[6]-A[7]-A[8]) do

>

> for A[10] from 0 to (M-1-A[5]-A[6]-A[7]-A[8]-A[9]) do

>

> A[11]:=M-1-A[5]-A[6]-A[7]-A[8]-A[9]-A[10];

> #

>

> if (

> (A[1]+A[3]+A[5]+A[7]+A[9]+A[11]=0)or

>

> (A[0]+A[2]+A[4]+A[6]+A[8]+A[10]=A[1]+A[3]+A[5]+A[7]+A[9]+A[11])

> )

>

> then

> P:=sum(A[j]*(x^(n-j))*(y^j),j=0..n);

> Q:=expand(subs(x=v+w, y=v-w,P));

> Q:=Q*(1/(q^k));

> LC := [coeffs(Q)];

> Entier := 0;

> for L from 1 to nops(LC) do

> if frac(LC[L]) <> 0

> then

> Entier :=1;

> fi;

> od;

>

> if ((min(coeffs(expand(Q)))>=0) and ( Entier = 0 ))

> then

> print(’n’=n,’k’=k,’d’=d,’q’=2);

> print(P);

Page 73: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE A. PROGRAMMES MAPLE 65

> print(simplify(Q));

> fi;

> fi;

>

> od:od:od:od:od:od:

> print(’fin_k’=k):od:

> print(’FIN’);

>

Page 74: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE A. PROGRAMMES MAPLE 66

A.2 Codes de Hamming

# CODES DE HAMMING

# ======================================================================

# But : (1) Construire la matrice de controle ainsi que la matrice

# generatrice d’un code de Hamming

# de longueur 15 (r = 4).

# (2) Illustrer la procedure de codage et de decodage

# ======================================================================

> restart:

> with(linalg):

> r:=4:

# -----------------------

# construction de la matrice de controle

# -----------------------

> H:=[]:

> for j from 1 to 2^r-1 do

> cb := convert(j,base,2):

> bv := vector(r,0):

> for i from 1 to vectdim(cb) do

> bv[r-i+1] := cb[i]:

> od:

> H := augment(op(H),bv):

> od:

>

> evalm(H);

> nH := Nullspace(H) mod 2;

# -----------------------------------

# Construction de la matrice generatrice

# -----------------------------------

> G:= []:

> for i from 1 to nops(nH) do

Page 75: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE A. PROGRAMMES MAPLE 67

> G := stackmatrix(op(G), nH[i]):

> od:

>

> evalm(G);

>

# --------------------------------

# Codage et decodage

#

# w = vecteur a coder

# c = mot du code correspondant a wG

# vr = vecteur recu

# --------------------------------

> w:= vector([1,0,1,1,1,0,1,1,1,1,0]):

> c:= map(x -> x mod 2, evalm(w &* G));

>

# -----------------

# Introduisons une erreur

# -----------------

> vr:= vector ([0,0,1,1,1,1,1,1,0,1,1,1,1,1,0]):

# ---------------

# calcul du syndrome

# ---------------

#

> syn := map( x -> x mod 2, evalm(H &* vr));

> fc:=0:

> cn := 0:

> while (fc <> 1) and (cn < 2^r-1) do

> cn := cn +1:

> if equal(col(H,cn),syn) = true then

> fc := 1:

> fi:

> od:

> print(‘Erreur en position:‘,cn):

Page 76: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE A. PROGRAMMES MAPLE 68

# -------------------

# correction de l’erreur en position "cn"

# e : vecteur erreur

> e:= vector ( 2^r-1,0):

> e[cn]:=1:

> vd:=map(x -> x mod 2, evalm (vr + e)):

>

> print(‘Le mot envoye est :‘,c):

> print(‘Le vecteur recu est :‘,vr):

> print(‘Le vecteur erreur est :‘,e):

> print(‘Le mot envoye etait :‘,vd):

Page 77: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE A. PROGRAMMES MAPLE 69

A.3 Codes BCH

# CODES BCH

# ========================================================

# But : exhiber le polynome generateur pour un code BCH binaire de

# longueur 15

# ayant les 6 premieres puissances d’une racine primitive 15

# ieme de l’unite comme racines

# ========================================================

#

# ---------------------------

# Construction du corps a 16 elements

# ---------------------------

> restart:

> with(linalg):

> p:=x -> x^4+x+1:

> Primitive(p(x)) mod 2;

> fs:=2^(degree(p(x)));

> field := vector(fs);

> for i from 1 to fs-1 do

> field[i] := Powmod(alpha,i,p(alpha),alpha) mod 2:

> od:

> field[fs] :=0:

> evalm(field);

> ftable := table():

> for i from 1 to fs-1 do

> ftable[ field[i] ] := alpha^i:

> od:

> ftable [ field[fs] ] := 0:

>

# ----------------------------------

# construction du polynome generateur

# ----------------------------------

Page 78: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE A. PROGRAMMES MAPLE 70

> f := x -> x^(fs-1) -1;

> factf := Factor (f(x)) mod 2;

# -------------------

# t est le nombre d’erreurs que notre code peut corriger

# -------------------

#

> t:=3:

> for i from 1 to 2*t do

> for j from 1 to nops(factf) do

> fj := op(j,factf):

> fj := unapply(fj,x):

> if Rem(fj(alpha^i),p(alpha),alpha) mod 2 = 0 then

> print(omega^i,‘ est une racine de ‘, fj(x)):

> break:

> fi:

> od:

> od:

>

> m1:= x -> x^4 + x + 1:

> m2:= x -> x^4 + x^3 +x^2 +x + 1:

> m3:= x -> x^2 + x + 1:

> g:= m1(x)*m2(x)*m3(x);

> print(‘Le polynome generateur est :‘,expand(g) mod 2):

Page 79: THEORIE ALG EBRIQUE DU CODAGE

Annexe B

Programmes MAPLE avec sorties

B.1 Enumerateur de poids

# ------------------

# Utilisation de

# l’identite de MacWilliams

# -----------------

# Programme permettant d’exhiber

# les seules possibilites pour les

# distributions d’un code lineaire

# de parametres [ n , k , d ].

#

> restart;

# Determination de q,n,d

>

> q:=2:

> n:=11:

> d:=5:

>

71

Page 80: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 72

# Calculs des 3 bornes

# 1 - de Singleton

# 2 - empilement des spheres

# 3 - Elias

>

> k[1]:=evalf(floor(evalf(log[q](q^(n-d+1)))));:t:=floor((d-1)/2):

> k[2]:=evalf(floor(evalf(log[q](q^n/sum(’binomial(n,k)*(q-1)^k’,’k’=0..

> t)))));

>

> Theta:=(q-1)/q:

> if(d>Theta*n)

> then k[3]:=evalf(floor(evalf(log[q](d/(d-Theta*n)))));

> else k[3]:=999;

> fi;

>

>

> kmin:=min(k[1],k[2],k[3]):

k[1] := 7.

k[2] := 4.

k[3] := 999

>

>

> print(’DEBUT’);

>

> A[0]:=1:

> A[1]:=0:

> A[2]:=0:

Page 81: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 73

> A[3]:=0:

> A[4]:=0:

> for k from kmin to 1 by -1 do : M:=q^k:print(’debut_k’=k);

>

> for A[5] from 1 to (M-1) do

>

> for A[6] from 0 to (M-1-A[5]) do

>

> for A[7] from 0 to (M-1-A[5]-A[6]) do

>

> for A[8] from 0 to (M-1-A[5]-A[6]-A[7]) do

>

> for A[9] from 0 to (M-1-A[5]-A[6]-A[7]-A[8]) do

>

> for A[10] from 0 to (M-1-A[5]-A[6]-A[7]-A[8]-A[9]) do

>

> A[11]:=M-1-A[5]-A[6]-A[7]-A[8]-A[9]-A[10];

> #

>

> if (

> (A[1]+A[3]+A[5]+A[7]+A[9]+A[11]=0)or

>

> (A[0]+A[2]+A[4]+A[6]+A[8]+A[10]=A[1]+A[3]+A[5]+A[7]+A[9]+A[11])

> )

>

> then

> P:=sum(A[j]*(x^(n-j))*(y^j),j=0..n);

> Q:=expand(subs(x=v+w, y=v-w,P));

> Q:=Q*(1/(q^k));

> LC := [coeffs(Q)];

> Entier := 0;

> for L from 1 to nops(LC) do

Page 82: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 74

> if frac(LC[L]) <> 0

> then

> Entier :=1;

> fi;

> od;

>

> if ((min(coeffs(expand(Q)))>=0) and ( Entier = 0 ))

> then

> print(’n’=n,’k’=k,’d’=d,’q’=2);

> print(P);

> print(simplify(Q));

> fi;

> fi;

>

> od:od:od:od:od:od:

> print(’fin_k’=k):od:

> print(’FIN’);

>

>

>

>

DEBUT

debut_k = 4.

n = 11, k = 4., d = 5, q = 2

11 6 5 5 6 4 7 3 8

x + 6 x y + 6 x y + 2 x y + x y

Page 83: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 75

11 4 7 6 5 7 4 9 2 8 3

v + 26. w v + 24. w v + 20. w v + 4. w v + 13. w v

3 8 5 6

+ 12. w v + 28. w v

n = 11, k = 4., d = 5, q = 2

11 6 5 5 6 3 8 2 9

x + 7 x y + 6 x y + x y + x y

11 2 9 4 7 6 5 7 4 9 2

v + w v + 27. w v + 19. w v + 19. w v + 3. w v

8 3 3 8 5 6

+ 16. w v + 9. w v + 33. w v

fin_k = 4.

debut_k = 3.

n = 11, k = 3., d = 5, q = 2

11 6 5 5 6 4 7

Page 84: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 76

x + x y + 3 x y + 3 x y

11 2 9 4 7 6 5 7 4 9 2

v + 4. w v + 44. w v + 58. w v + 46. w v + 6. w v

10 8 3 3 8 5 6

+ 2. w v + 19. w v + 26. w v + 50. w v

n = 11, k = 3., d = 5, q = 2

11 6 5 5 6 4 7 3 8

x + 2 x y + 2 x y + 2 x y + x y

11 2 9 4 7 6 5 7 4 9 2

v + 5. w v + 42. w v + 58. w v + 40. w v + 8. w v

10 8 3 3 8 5 6

+ w v + 21. w v + 24. w v + 56. w v

n = 11, k = 3., d = 5, q = 2

11 6 5 5 6 4 7 2 9

x + 2 x y + 3 x y + x y + x y

11 2 9 4 7 6 5 7 4 9 2

v + 6. w v + 46. w v + 48. w v + 44. w v + 4. w v

Page 85: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 77

10 8 3 3 8 5 6

+ 2. w v + 25. w v + 20. w v + 60. w v

n = 11, k = 3., d = 5, q = 2

11 6 5 5 6 4 7 3 8

x + 3 x y + x y + x y + 2 x y

11 2 9 4 7 6 5 7 4 9 2

v + 6. w v + 40. w v + 58. w v + 34. w v + 10. w v

8 3 3 8 5 6

+ 23. w v + 22. w v + 62. w v

n = 11, k = 3., d = 5, q = 2

11 6 5 5 6 3 8 2 9

x + 3 x y + 2 x y + x y + x y

11 2 9 4 7 6 5 7 4 9 2

v + 7. w v + 44. w v + 48. w v + 38. w v + 6. w v

8 3 3 8 10 5 6

+ 27. w v + 18. w v + w v + 66. w v

Page 86: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 78

n = 11, k = 3., d = 5, q = 2

11 6 5 5 6 4 7 10

x + 3 x y + 2 x y + x y + x y

11 2 9 4 7 6 5 7 4 9 2

v + 8. w v + 58. w v + 48. w v + 52. w v + 12. w v

8 3 3 8 5 6

+ 13. w v + 12. w v + 52. w v

n = 11, k = 3., d = 5, q = 2

11 6 5 5 6 11

x + 3 x y + 3 x y + 1. y

11 2 9 4 7 6 5 8 3 10

v + 10. w v + 90. w v + 108. w v + 45. w v + 2. w v

n = 11, k = 3., d = 5, q = 2

11 6 5 5 6 4 7

x + 3 x y + 3 x y + x y

11 10 2 9 4 7 6 5 7 4

Page 87: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 79

v + w v + 3. w v + 48. w v + 52. w v + 42. w v

9 2 8 3 3 8 10 5 6

+ 7. w v + 23. w v + 22. w v + w v + 56. w v

n = 11, k = 3., d = 5, q = 2

11 6 5 5 6 3 8

x + 4 x y + 2 x y + x y

11 10 2 9 4 7 6 5 7 4

v + w v + 4. w v + 46. w v + 52. w v + 36. w v

9 2 8 3 3 8 5 6

+ 9. w v + 25. w v + 20. w v + 62. w v

fin_k = 3.

debut_k = 2.

n = 11, k = 2., d = 5, q = 2

11 6 5 3 8 2 9

x + x y + x y + x y

Page 88: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 80

11 2 9 4 7 6 5 7 4 9 2

v + 19. w v + 78. w v + 106. w v + 76. w v + 12. w v

8 3 3 8 10 5 6

+ 49. w v + 36. w v + 3. w v + 132. w v

n = 11, k = 2., d = 5, q = 2

11 6 5 4 7 10

x + x y + x y + x y

11 2 9 4 7 6 5 7 4 9 2

v + 21. w v + 106. w v + 106. w v + 104. w v + 24. w v

8 3 3 8 10 5 6

+ 21. w v + 24. w v + w v + 104. w v

n = 11, k = 2., d = 5, q = 2

11 6 5 4 7 3 8

x + x y + x y + x y

11 10 2 9 4 7 6 5 7 4

v + w v + 14. w v + 78. w v + 120. w v + 76. w v

9 2 8 3 3 8 10 5 6

+ 17. w v + 41. w v + 44. w v + 2. w v + 118. w v

Page 89: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 81

n = 11, k = 2., d = 5, q = 2

11 6 5 5 6 11

x + x y + x y + 1. y

11 2 9 4 7 6 5 8 3 10

v + 25. w v + 170. w v + 226. w v + 85. w v + 5. w v

n = 11, k = 2., d = 5, q = 2

11 6 5 5 6 2 9

x + x y + x y + x y

11 10 2 9 4 7 6 5 7 4

v + w v + 16. w v + 86. w v + 100. w v + 84. w v

9 2 8 3 3 8 10 5 6

+ 9. w v + 49. w v + 36. w v + 4. w v + 126. w v

n = 11, k = 2., d = 5, q = 2

11 6 5 5 6 4 7

x + x y + x y + x y

Page 90: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 82

11 10 2 9 4 7 6 5 7 4

v + 2. w v + 11. w v + 86. w v + 114. w v + 84. w v

9 2 8 3 3 8 10 5 6

+ 14. w v + 41. w v + 44. w v + 3. w v + 112. w v

n = 11, k = 2., d = 5, q = 2

11 6 5 10

x + 2 x y + x y

11 10 2 9 4 7 6 5 7 4

v + w v + 20. w v + 110. w v + 100. w v + 100. w v

9 2 8 3 3 8 5 6

+ 25. w v + 25. w v + 20. w v + 110. w v

n = 11, k = 2., d = 5, q = 2

11 6 5 3 8

x + 2 x y + x y

11 10 2 9 4 7 6 5 7 4

v + 2. w v + 13. w v + 82. w v + 114. w v + 72. w v

9 2 8 3 3 8 10 5 6

Page 91: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 83

+ 18. w v + 45. w v + 40. w v + w v + 124. w v

n = 11, k = 2., d = 5, q = 2

11 6 5 5 6

x + 2 x y + x y

11 10 2 9 4 7 6 5 7 4

v + 3. w v + 10. w v + 90. w v + 108. w v + 80. w v

9 2 8 3 3 8 10 5 6

+ 15. w v + 45. w v + 40. w v + 2. w v + 118. w v

fin_k = 2.

debut_k = 1.

n = 11, k = 1., d = 5, q = 2

11 6 5

x + x y

11 10 2 9 3 8 4 7 5 6

v + 6. w v + 25. w v + 80. w v + 170. w v + 236. w v

Page 92: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 84

6 5 7 4 8 3 9 2 10

+ 226. w v + 160. w v + 85. w v + 30. w v + 5. w v

fin_k = 1.

FIN

>

Page 93: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 85

B.2 Codes de Hamming

# CODES DE HAMMING

# =====================================================================

# But : (1) Construire la matrice de controle ainsi que la matrice

# generatrice d’un code de Hamming

# de longueur 15 (r = 4).

# (2) Illustrer la procedure de codage et de decodage

# ======================================================================

> restart:

> with(linalg):

> r:=4:

# -----------------------

# construction de la matrice de controle

# -----------------------

> H:=[]:

> for j from 1 to 2^r-1 do

> cb := convert(j,base,2):

> bv := vector(r,0):

> for i from 1 to vectdim(cb) do

> bv[r-i+1] := cb[i]:

> od:

> H := augment(op(H),bv):

> od:

>

> evalm(H);

[0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1]

[0 , 0 , 0 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1]

[0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 1]

Page 94: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 86

[1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1]

> nH := Nullspace(H) mod 2;

nH := {[1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],

[1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],

[1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1],

[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],

[1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],

[0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0],

[1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0],

[0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0],

[0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0],

[0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],

[1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0]}

# -----------------------------------

# Construction de la matrice generatrice

# -----------------------------------

> G:= []:

> for i from 1 to nops(nH) do

> G := stackmatrix(op(G), nH[i]):

> od:

Page 95: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 87

>

> evalm(G);

[1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0]

[0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0]

[1 , 1 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1]

[1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0]

[1 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0]

[1 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0]

[0 , 1 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 1 , 0]

[0 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0]

[1 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0]

[1 , 1 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0]

[0 , 1 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0]

>

# --------------------------------

# Codage et decodage

#

# w = vecteur a coder

# c = mot du code correspondant a wG

# vr = vecteur recu

# --------------------------------

Page 96: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 88

> w:= vector([1,0,1,1,1,0,1,1,1,1,0]):

> c:= map(x -> x mod 2, evalm(w &* G));

c := [0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1]

>

# -----------------

# Introduisons une erreur

# -----------------

> vr:= vector ([0,0,1,1,1,1,1,1,0,1,1,1,1,1,0]):

# ---------------

# calcul du syndrome

# ---------------

#

> syn := map( x -> x mod 2, evalm(H &* vr));

syn := [0, 1, 0, 1]

> fc:=0:

> cn := 0:

> while (fc <> 1) and (cn < 2^r-1) do

> cn := cn +1:

> if equal(col(H,cn),syn) = true then

> fc := 1:

> fi:

> od:

> print(‘Erreur en position:‘,cn):

Erreur en position:, 5

# -------------------

# correction de l’erreur en position "cn"

# e : vecteur erreur

Page 97: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 89

> e:= vector ( 2^r-1,0):

> e[cn]:=1:

> vd:=map(x -> x mod 2, evalm (vr + e)):

>

> print(‘Le mot envoye est :‘,c):

> print(‘Le vecteur recu est :‘,vr):

> print(‘Le vecteur erreur est :‘,e):

> print(‘Le mot envoye etait :‘,vd):

>

Le mot envoye est :,

[0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1]

Le vecteur recu est :,

[0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0]

Le vecteur erreur est :,

[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Le mot envoye etait :,

[0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0]

>

Page 98: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 90

B.3 Codes BCH

# CODES BCH

# ========================================================

# But : exhiber le polynome generateur pour un code BCH binaire de

# longueur 15

# ayant les 6 premieres puissances d’une racine primitive 15

# ieme de l’unite comme racines

# ========================================================

#

# ---------------------------

# Construction du corps a 16 elements

# ---------------------------

> restart:

> with(linalg):

> p:=x -> x^4+x+1:

> Primitive(p(x)) mod 2;

true

> fs:=2^(degree(p(x)));

fs := 16

> field := vector(fs);

field := array(1 .. 16, [])

> for i from 1 to fs-1 do

> field[i] := Powmod(alpha,i,p(alpha),alpha) mod 2:

> od:

> field[fs] :=0:

> evalm(field);

Page 99: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 91

[ 2 3 2 3 2

[alpha, alpha , alpha , alpha + 1, alpha + alpha, alpha + alpha ,

3 2 3

alpha + alpha + 1, alpha + 1, alpha + alpha,

2 3 2

alpha + alpha + 1, alpha + alpha + alpha,

3 2 3 2 3

alpha + alpha + alpha + 1, alpha + alpha + 1, alpha + 1,

]

1, 0]

> ftable := table():

> for i from 1 to fs-1 do

> ftable[ field[i] ] := alpha^i:

> od:

> ftable [ field[fs] ] := 0:

>

# ----------------------------------

# construction du polynome generateur

# ----------------------------------

> f := x -> x^(fs-1) -1;

(fs - 1)

f := x -> x - 1

> factf := Factor (f(x)) mod 2;

Page 100: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 92

4 3 2 4 2

factf := (x + x + x + x + 1) (x + x + 1) (x + x + 1) (x + 1)

4 3

(x + x + 1)

# -------------------

# t est le nombre d’erreurs que notre code peut corriger

# -------------------

#

> t:=3:

> for i from 1 to 2*t do

> for j from 1 to nops(factf) do

> fj := op(j,factf):

> fj := unapply(fj,x):

> if Rem(fj(alpha^i),p(alpha),alpha) mod 2 = 0 then

> print(omega^i,‘ est une racine de ‘, fj(x)):

> break:

> fi:

> od:

> od:

>

4

omega, est une racine de , x + x + 1

2 4

omega , est une racine de , x + x + 1

3 4 3 2

omega , est une racine de , x + x + x + x + 1

Page 101: THEORIE ALG EBRIQUE DU CODAGE

ANNEXE B. PROGRAMMES MAPLE AVEC SORTIES 93

4 4

omega , est une racine de , x + x + 1

5 2

omega , est une racine de , x + x + 1

6 4 3 2

omega , est une racine de , x + x + x + x + 1

> m1:= x -> x^4 + x + 1:

> m2:= x -> x^4 + x^3 +x^2 +x + 1:

> m3:= x -> x^2 + x + 1:

> g:= m1(x)*m2(x)*m3(x);

> print(‘Le polynome generateur est :‘,expand(g) mod 2):

4 4 3 2 2

g := (x + x + 1) (x + x + x + x + 1) (x + x + 1)

2 8 5 10 4

Le polynome generateur est :, 1 + x + x + x + x + x + x

Page 102: THEORIE ALG EBRIQUE DU CODAGE

Bibliographie

[1] Courteau, B., Mathematiques d’hier et d’aujourd’hui : Les codes correcteurs d’erreurs,

Modulo,1999.

[2] Dummit, D.S. and Foote, R.M., Abstract Algebra, Prentice-Hall, 1999.

[3] Fraleigh, J.B. and Beauregard, R.A., Linear Algebra, Addison-Wesley, Reading, 1995.

[4] Hill, R., A First Course in Coding Theory , Oxford applied mathematics and computing

science series, Oxford, 1986.

[5] Hoffman, D.G., Leonard, D.A., Lindner, C.C., Phelps, K.T., Rodger, C.A. and Wall,

J.R., Coding Theory , Marcel Dekker, Inc., New York, 1991.

[6] Klima, R.E., Sigmon, N. and Stitzinger, E., Applications of Abstract Algebra with

MAPLE, CRC Press, 2000.

[7] MacWilliams, F.J. and Sloane, N.J.A., The Theory of Error-Correcting Codes, North-

Holland, Amsterdam, 1977.

[8] Pretzel, O., Error-Correcting Codes and Finite Fields, Oxford applied mathematics and

computing science series, London, 1992.

[9] Roman, S., Coding and Information Theory , Springer-Verlag, New-York, 1992.

[10] van Lint, J.H., Introduction to Coding Theory, Springer-Verlag, Berlin, 1992.

[11] Vanstone, S.A. and van Oorschot, P.C., An Introduction to Error Correcting Codes with

Applications, Kluwer Academic Publishers, Boston, 1989.

[12] Vermani, L.R., Elements of Algebraic Coding Theory , Chapman and Hall Mathematics

Series, London, 1996.

[13] Walker, J.L., Codes and Curves, American Mathematical Society, Volume 7, 2000.

94

Page 103: THEORIE ALG EBRIQUE DU CODAGE

BIBLIOGRAPHIE 95

[14] Wesley-Peterson, W. and Weldon, E.J., Error-Correcting Codes, The Massachusetts

Institute of Technology, 1972.