TP sur les codes correcteurs d’erreurs
Agr´egation, option calcul formel
Delphine Boucher
29 Janvier 2008
1 Codes de Hamming
1.1 Matrice de contrˆole.
Ecrire un programme qui prend en entr´ee un entier naturel rnon nul et qui calcule la matrice de
contrˆole d’un code de Hamming de longueur n= 2r1.
Indications :
with(linalg):
r:=4;
H:=[];
colH:=convert(1,base,2):
ncolH:=nops(colH):
colH:=[op(colH),seq(0,j=1..r-ncolH)]:
colH:=[seq(colH[r+1-i],i=1..r)];
H:=augment(op(H),colH);
1.2 Matrice g´en´eratrice.
Ecrire une proc´edure qui prend en entr´ee un entier rnon nul et rend en sortie une matrice g´en´eratrice
d’un code de Hamming de longueur n= 2r1.
Indications :
H := matrix([[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]]);
Ker:=Nullspace(H) mod 2;
G:=[]:
for v in Ker do G:=stackmatrix(op(G),v): od:
evalm(G);
#Construction d’un mot du code :
m:=vector([1,1,1,1,1,0,1,0,1,0,0]);
c:=evalm(m&*G);
c:=evalm(m&*G) mod 2;
c:=map(X->X mod 2,evalm(m&*G));
1.3 Canal de transmission.
Ecrire un programme qui simule l’erreur produite dans le canal de transmission. Il prendra en entr´ee
un mot de code cet ressortira le mot re¸cu xapr`es passage dans le canal de transmission. Vous perturberez
al´eatoirement le mot de code cen lui ajoutant un vecteur ede mˆeme longueur ayant des 0 partout sauf
1
en une position, pos, que vous choisirez au hasard.
Indications :
r:=4;
n:=2^r-1;
pos:=3;
e:=vector([seq(0,i=1..pos-1),1,seq(0,i=pos+1..n)]);
die:=rand(1..n):
pos:=die();
e:=vector([seq(0,i=1..pos-1),1,seq(0,i=pos+1..n)]);
x:=map (X->X mod 2,evalm(c+e));
1.4 Correction de l’erreur.
Ecrire un programme qui en entr´ee prend le mot re¸cu x(perturb´e) et retourne le mot de code initia-
lement envoy´e c.
2 Codes BCH.
2.1 Polynˆomes unitaires, polynomes minimaux d’´el´ements primitifs.
1. Ecrire une proc´edure qui rend la liste de tous les polynˆomes unitaires de degr´e rdans Z/2Z[x].
2. Ecrire une proc´edure qui rend la liste de tous les ´el´ements primitifs ayant un polynˆome minimal de
degr´e rdans Z/2Z[x]. On repr´esentera les ´el´ements primitifs par leurs polynˆomes minimaux.
Primitive(x^4+x+1) mod 2;
2.2 Table des ´el´ements du code.
Ecrire une proc´edure qui prend en entr´ee un entier ret une racine primitive ni`eme a de l’unit´e o`u
n= 2r1 de polynˆome minimal de degr´e ret qui exprime les ´el´ements de F2(a) sous forme des puissances
de a. On utilisera un alias pour repr´esenter acomme racine de son polynome minimal p:
p:=x^4+x+1;
alias(a=RootOf(p) mod 2);
evala(Normal(a^5)) mod 2;
evala(Normal(a^6+a+1)) mod 2;
2.3 Polynˆome g´en´erateur du code.
Ecrire une proc´edure qui prend en entr´ee un entier naturel non nul r, un entier naturel t, une racine
primitive ni`eme de 1 a (n= 2r1) de polynome minimal de degr´e ret une variable xet qui calcule le
polynome g´en´erateur d’un code BCH t-correcteur d’erreurs de longueur nen la variable x.
2.4 Canal de transmission.
Ecrire une proc´edure qui simule le canal de transmission : en entr´ee un entier naturel r, un entier
naturel t, une variable xet un ´el´ement cdu code BCH t-correcteur de longueur n= 2r1 (polynˆome en
x) ; en sortie, un mot de code perturb´e al´eatoirement, X.
2.5 Vecteur syndrome.
Ecrire une proc´edure qui calcule le vecteur syndrome d’un polynˆome. Petit rappel : Le vecteur syn-
drome d’un polynome pest le vecteur des p(ai) avec i= 1 . . . d = 2t+ 1 o`u test la capcit´e de correction
2
2.6 Correction via l’algorithme d’Euclide ´etendu.
Ecrire une proc´edure de d´ecodage via l’algorithme d’Euclide ´etendu. Elle prendra en entr´ee un entier
naturel non nul r, un entier naturel t, une racine primitive n-i`eme de l’unit´e a (avec n= 2r1) une
variable xet un mot re¸cu X(polynˆome en la variable x) ; en sortie le mot de code corrig´e Cdu code
BCH t-correcteur d’erreurs de longueur n. Testez-la sur le code BCH 3-correcteur d’erreurs (toujours
avec a4+a+ 1 = 0) et sur les polynˆomes suivants :
X= 1 + x2+x3+x4+x5+x6+x7+x10
X= 1 + x3+x7+x10 +x11 +x13
3 Polynˆomes g´en´erateurs des codes BCH
Le but de cet exercice est de construire un algorithme de calcul du polynˆome g´en´erateur d’un code
BCH via les polynˆomes cyclotomiques.
Soit nun entier non nul et soit un corps fini contenant des racines ni`emes de l’unit´e. On note Φn(x) le
ni`eme polynˆome cyclotomique, c’est le produit des xwo`u west une racine primitive ni`eme de l’unit´e.
On rappelle deux propri´et´es des polynˆomes cyclotomiques :
xn1 = Y
d|n
Φd
et par la formule d’inversion de Mobius :
Φn=Y
d|n
(xd1)µ(n/d)
o`u µd´esigne la fonction de Mobius d´efinie par
µ(n) =
1 si n= 1
(1)ksi nest le produit de kpremiers distincts
0 si nn’est pas sans facteur carr´e
3.1 Propri´et´es calculatoires des polynˆomes cyclotomiques.
Montrer les propri´et´es suivantes :
1. Si nest premier alors Φn(x) = xn1+· · · +x+ 1.
2. Si pest premier et ne divise pas n, alors Φpn(x) = Φn(xp)
Φn(x).
3. Si nest impair, alors Φ2n(x) = Φn(x).
4. Si pest premier et ne divise pas malors Φmpk= Φmp(xpk1)
5. Si pest premier et divise n, alors Φpn(x) = Φn(xp)
6. Si mest la partie sans facteur carr´e de nalors Φn(x) = Φm(xn
m)
3.2 Algorithme de calcul des polynˆomes cyclotomiques
Montrer que l’algorithme qui suit retourne bien Φn(x) et le programmer :
entr´ee : n
sortie : n i`eme polyn^ome cyclotomique
Calculer les facteurs premiers distincts de n : p_1, ..., p_r
m:=p_1 ... p_r
f_0 := x-1
Pour i = 1 ...r
calculer f_i=f_{i-1}(x^{p_i})/f_{i-1}(x)
Retourner f_r(x^{n/m})
3
Montrer que l’algorithme coˆute O(M(n) log(n)) op´erations dans ZZ o`u M(n) d´esigne le coˆut de la multi-
plication de deux polynˆomes de degr´e < n dans ZZ.
On pourra rappeler les valeurs de M(n) suivant la m´ethode utilis´ee pour multiplier les polynˆomes.
Comparer le programme obtenu avec la commande Maple numtheory[cyclotomic].
3.3 Factorisation des polynˆomes cyclotomiques
Soit Fqun corps fini de caract´eristique pne divisant pas n. Montrer que pour nentier non nul impair,
Φn(x) se factorise en un produit de ϕ(n)/d polynˆomes irr´eductibles sur Fqde degr´e do`u dest l’ordre
multiplicatif de qmodulo n.
Expliquer comment proc´eder pour factoriser Φn(x) (rappeler l’algorithme de factorisation le plus appro-
pri´e pour la situation).
Programmer cet algorithme (on se placera sur Fp,ppremier).
3.4 Algorithme de calcul du polynˆome g´en´erateur d’un code BCH
Ecrire un algorithme de construction du polynˆome g´en´erateur d’un code BCH sur Fp,ppremier de
longueur net de distance prescrite δ. Le programmer.
4
1 / 4 100%