TP sur les codes - IMJ-PRG

publicité
TP sur les codes correcteurs d’erreurs
Agrégation, option calcul formel
Delphine Boucher
29 Janvier 2008
1
1.1
Codes de Hamming
Matrice de contrôle.
Ecrire un programme qui prend en entrée un entier naturel r non nul et qui calcule la matrice de
contrôle d’un code de Hamming de longueur n = 2r − 1.
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énératrice.
Ecrire une procédure qui prend en entrée un entier r non nul et rend en sortie une matrice génératrice
d’un code de Hamming de longueur n = 2r − 1.
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ée
un mot de code c et ressortira le mot reçu x après passage dans le canal de transmission. Vous perturberez
aléatoirement le mot de code c en lui ajoutant un vecteur e de même 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ée prend le mot reçu x (perturbé) et retourne le mot de code initialement envoyé c.
2
Codes BCH.
2.1
Polynômes unitaires, polynomes minimaux d’éléments primitifs.
1. Ecrire une procédure qui rend la liste de tous les polynômes unitaires de degré r dans Z/2Z[x].
2. Ecrire une procédure qui rend la liste de tous les éléments primitifs ayant un polynôme minimal de
degré r dans Z/2Z[x]. On représentera les éléments primitifs par leurs polynômes minimaux.
Primitive(x^4+x+1) mod 2;
2.2
Table des éléments du code.
Ecrire une procédure qui prend en entrée un entier r et une racine primitive nième a de l’unité où
n = 2r −1 de polynôme minimal de degré r et qui exprime les éléments de F 2(a) sous forme des puissances
de a . On utilisera un alias pour représenter a comme 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ôme générateur du code.
Ecrire une procédure qui prend en entrée un entier naturel non nul r, un entier naturel t, une racine
primitive nième de 1 a (n = 2r − 1) de polynome minimal de degré r et une variable x et qui calcule le
polynome générateur d’un code BCH t-correcteur d’erreurs de longueur n en la variable x.
2.4
Canal de transmission.
Ecrire une procédure qui simule le canal de transmission : en entrée un entier naturel r, un entier
naturel t, une variable x et un élément c du code BCH t-correcteur de longueur n = 2r − 1 (polynôme en
x) ; en sortie, un mot de code perturbé aléatoirement, X.
2.5
Vecteur syndrome.
Ecrire une procédure qui calcule le vecteur syndrome d’un polynôme. Petit rappel : Le vecteur syndrome d’un polynome p est le vecteur des p(ai ) avec i = 1 . . . d = 2t + 1 où t est la capcité de correction
2
2.6
Correction via l’algorithme d’Euclide étendu.
Ecrire une procédure de décodage via l’algorithme d’Euclide étendu. Elle prendra en entrée un entier
naturel non nul r, un entier naturel t, une racine primitive n-ième de l’unité a (avec n = 2r − 1) une
variable x et un mot reçu X (polynôme en la variable x) ; en sortie le mot de code corrigé C du 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ômes suivants :
X = 1 + x2 + x3 + x4 + x5 + x6 + x7 + x10
X = 1 + x3 + x7 + x10 + x11 + x13
3
Polynômes générateurs des codes BCH
Le but de cet exercice est de construire un algorithme de calcul du polynôme générateur d’un code
BCH via les polynômes cyclotomiques.
Soit n un entier non nul et soit un corps fini contenant des racines nièmes de l’unité. On note Φn (x) le
nième polynôme cyclotomique, c’est le produit des x − w où w est une racine primitive nième de l’unité.
On rappelle deux propriétés des polynômes cyclotomiques :
Y
xn − 1 =
Φd
d|n
et par la formule d’inversion de Mobius :
Φn =
Y
(xd − 1)µ(n/d)
d|n
où µ désigne la fonction de Mobius définie par

si n = 1
 1
(−1)k si n est le produit de k premiers distincts
µ(n) =

0
si n n’est pas sans facteur carré
3.1
Propriétés calculatoires des polynômes cyclotomiques.
Montrer les propriétés suivantes :
1. Si n est premier alors Φn (x) = xn−1 + · · · + x + 1.
2. Si p est premier et ne divise pas n, alors Φpn (x) =
Φn (xp )
Φn (x) .
3. Si n est impair, alors Φ2n (x) = Φn (−x).
k−1
4. Si p est premier et ne divise pas m alors Φmpk = Φmp (xp )
5. Si p est premier et divise n, alors Φpn (x) = Φn (xp )
n
6. Si m est la partie sans facteur carré de n alors Φn (x) = Φm (x m )
3.2
Algorithme de calcul des polynômes cyclotomiques
Montrer que l’algorithme qui suit retourne bien Φn (x) et le programmer :
entrée : n
sortie : n ième 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ûte O(M (n) log(n)) opérations dans ZZ où M (n) désigne le coût de la multiplication de deux polynômes de degré < n dans ZZ.
On pourra rappeler les valeurs de M (n) suivant la méthode utilisée pour multiplier les polynômes.
Comparer le programme obtenu avec la commande Maple numtheory[cyclotomic].
3.3
Factorisation des polynômes cyclotomiques
Soit Fq un corps fini de caractéristique p ne divisant pas n. Montrer que pour n entier non nul impair,
Φn (x) se factorise en un produit de ϕ(n)/d polynômes irréductibles sur Fq de degré d où d est l’ordre
multiplicatif de q modulo n.
Expliquer comment procéder pour factoriser Φn (x) (rappeler l’algorithme de factorisation le plus approprié pour la situation).
Programmer cet algorithme (on se placera sur Fp , p premier).
3.4
Algorithme de calcul du polynôme générateur d’un code BCH
Ecrire un algorithme de construction du polynôme générateur d’un code BCH sur Fp , p premier de
longueur n et de distance prescrite δ. Le programmer.
4
Téléchargement