Codes Correcteurs d`Erreurs Le bit de parité Le Checksum Codes

Transcription

Codes Correcteurs d`Erreurs Le bit de parité Le Checksum Codes
Codes Correcteurs d’Erreurs
Information
Codage
Information+Redondance
Bruit
Information+Bruit
Décodage
Information
bits utiles
calcul
effectif
modèle
erreur
détection
correction
Le Checksum
On groupe les bits par paquets de n bits. Après k paquets on
envoie un k + 1ème paquet de façon à ce que les sommes des
jème bits des k + 1 paquets soient paires.
On détecte une erreur sur un paquet de n bits sur k + 1 paquets
envoyés.
Le bit de parité
Après k bits on ajoute un bit de parité de façon à ce que la
somme des k + 1 bits envoyés soit paire.
On détecte une erreur sur k + 1 bits envoyés.
Codes produits
On combine le checksum et le bit de parité.
Détection de 3 erreurs, correction d’une erreur.
le CRC
Codes en bloc
A un alphabet fini de symboles (A = F2 ou A corps fini).
Un code C de longueur n est une partie de An . Les éléments du
code sont des mots de A∗ de longueur n.
Pour deux mots u et v de An , la distance de Hamming de u à v
est le nombre de lettres qui diffèrent entre u et v.
Cyclic Redundancy Check.
On interprète les données comme des polynômes, on n’envoie
que des multiples d’un polynôme de test.
Utilisé par Ethernet, CdRom, DVD, Modems, . . .
u = u1 . . . un , ui ∈ A
v = v1 . . . vn , vi ∈ A
d(u, v) = # {i, ui 6= vi }
On a les propriétés de distance : d(u, v) = d(v, u),
d(u, v) ≤ d(u, w) + d(w, v).
La distance de Hamming mesure le nombre d’erreurs : u
correct, v incorrect, d(u, v) est le nombre d’erreurs.
La distance minimale d’un code est la plus petite distance entre
deux mots distincts du code :
d(C) =
Décodage à distance minimale
min
u,v∈Cu6=v
(d(u, v))
La distance d’un mot u à un code C est la plus petite distance
de u à un mot de C.
Code
d(u,
C) = linéaires
min (d(u, c))
c∈C
Si d = d(C), c ∈ C, la boule ouverte de centre c et de rayon d
Pour un code C, décoder un mot u revient à chercher «le» mot c
de C le plus proche de u.
c ∈ C envoyé, u ∈ An reçu, c0 ∈ C «le» plus proche de u.
Si c = c0 , le décodage est correct.
P(c = c0 ) une loi de probabilité.
Le décodage à maximum de vraisemblance (logique majoritaire)
maximise la probabilité de décodage correct.
Si P est une erreur «habituelle» c’est aussi le décodage à
distance minimale.
C de distance minimale d, la capacité de détection de C est
d − 1, la capacité de correction de C est b d−1
2 c
n
d) =fini
{uK.
∈A
d(c, u)
< d}
L’alphabet est unB(c,
corps
Un, code
C est
un sous espace
n
vectoriel
de Kaucun
.
ne
rencontre
autre mot du code.
Le poids d’un mot u, w(u) est le nombre de coordonnées non
nulles de u. C’est aussi la distance de Hamming u à 0 (le
vecteur nul).
La distance de u à v est le poids de u − v : d(u, v) = w(u − v).
Le poids minimal d’un code C est le plus petit poids des mots
non nuls de C. C’est aussi la distance minimale de C.
La dimension d’un code C est sa dimension en tant que sous
espace vectoriel de Kn .
Si k est la dimension de C, le taux d’information de C est k/n.
Matrice Génératrice
n
On écrit les éléments de K en ligne ! u = u1 . . . un .
Un code linéaire de dimension k est l’image (dans Kn ) de Kk
par une application linéaire dont la matrice est G.
n
o
C = c = uG, u ∈ Kk
Les lignes de G sont les images (dans Kn ) des vecteurs de base
de Kk . La matrice G à k lignes et n colonnes !
u : information, G matrice génératrice (codage), c = uG mot du
code !
Exemple : 3 bits d’information + 1 bit parité paire, K = F2


1 0 0 1
G= 0 1 0 1 
0 0 1 1
Matrice de Contrôle
Un code linéaire C de dimension k peut aussi se voir comme le
noyau d’une application linéaire de Kn dans Kn−k dont la
matrice est H t .
C = c ∈ Kn , cH t = 0
La matrice H est la matrice génératrice d’un code de longueur n
et de dimension n − k. C’est le code C ⊥ dual (orthogonal) de C.
La matrice H t est la matrice de contrôle de C.
Le syndrome d’un mot u de Kn est le mot de longueur n − k
s = uH t
Les mots du code sont les mots dont le syndrome est nul.
∀u ∈ Kk , uGH t = 0 dans Kn−k ⇔ GH t = 0 dans Kk × Kn−k
Exemple :

Les mots du code s’obtiennent en faisant toutes les combinaisons
linéaires possibles des lignes de la matrice génératrice.

1 0 0 1
∀u1 , u2 , u3 [u1 u2 u3 ]  0 1 0 1  [a, b, c, d] = 0
0 0 1 1
Codage systématique
a=b=c=d=1
1
1
1
1
H
=
Correction d’Erreurs
Un code est sous forme systématique si les bits d’information
sont au début du mot. La matrice génératrice d’un code C sous
forme systématique à la matrcice identité au début :
G = [Ik || M ]
M a k lignes et n − k colonnes. On écrit
"
#
−M
t
GH = [Ik || M ]
In−k
et on a bien GH t = 0.
G = [Ik || M ] ⇔ H = −M t || In−k
Deux codes C et C 0 de longueur n sont équivalents si on obtient
C 0 à partir de C en réordonnant les vecteurs de base de Kn .
Proposition : Tout code est équivalent à un code sous forme
systématique !
Démonstration : méthode de Gauss pour inverser une matrice !
Étant donné un mot reçu u, on doit retrouver « le » mot c ∈ C
du code le plus proche de u.
Il faut que la distance de u à C soit inférieure à la capacité de
correction du code.
Classes Latérales
C un K-code de longueur n et de dimension k, u ∈ Kn . La
classe latérale de u est l’ensemble des translatés de u par C :
LC (u) = {u + c , u ∈ C}
Les classes latérales forment une partition de Kn en sous
ensembles ayant | K |k éléments. Il y a donc | K |n−k classes
latérales.
On peut écrire les | K |n en un tableau carré ayant 2n−k lignes
et 2k colonnes.
0
u1
u2n−k
c1
u1 + c1
on choisit
u2n−k + c1
...
c2k −1
les mots du code
...
u1 + c2k −1
la classe latérale de u1 ∈
/C
n
un élément de K non encore énuméré
. . . u2n−k + c2k −1 on a tous les mots du code
Tableau standard de décodage
Tous les mots d’une même classe latérale ont le même
syndrome :
v1 , v2 ∈ LC (u) , (v1 − v2 )H t = 0
puisque v1 − v2 ∈ C.
Les syndromes des mots de poids 1 sont les lignes de la matrice
H t où H est la matrice génératrice du code dual.
Le tableau standard de décodage est obtenu en écrivant un mot
de poids minimum d’une classe latérale de C en tête de ligne.
On écrit toutes les classes latérales ayant un mot de poids
inférieur à la capacité de détection du code.
Deux mots de poids inférieur à la capacité de détection d du
code C sont dans des classes latérales différentes (leur différence
est de poids 2d au plus).
Décodage à distance minimale
En pratique
Calculer les syndromes si des mots ei de poids inférieurs à
la capacité de correction c du code.
i=c
On les stocke dans une table d’association [(si , ei )]i=1
, les
syndrômes corrigeables.
Si on reçoit un mot u ∈ Kn de syndrome s = uH t non nul,
il faut regarder si s est corrigeable.
soit s ∈ Kn−k un syndrome corrigeable et e ∈ Kn le mot de
poids minimum produisant s. Décoder c = u − e.
C’est le mot du code le plus proche du mot reçu : e est de poids
plus petit que c puisque 0 est le mot du code le plus proche de e.
Si C ⊂ Kn est d-corecteur, il faut chercher dans une table de
taille
i=d
X
n
(| K | − 1)
{i
i=1
Codes Cycliques
Famille de codes utilisés en pratique. Bonne propriétés.
Un code C de longueur n est cyclique si pour tout mot
c = c1 . . . cn de C, cn c1 . . . cn−1 est encore un mot de C.
Toute permutation circulaire de mots du code est un mot du
code.
Interprétation polynomiale :
P
c = c1 . . . cn P
∈ Kn s’identifie à C(X) = i=n−1
ci+1 X i ∈ K[X]
i=0
ou C(X) = i=n−1
ci+1 X n−i−1 . Ce sont les polynômes de
i=0
degrés strictement inférieurs à n.
C(X) ∈ K[X] = c0 + . . . + cn−1 X n−1 , on décompose :
cn−1 X n = cn−1 (X n − 1) + cn−1
et
XC(X) = cn−1 + c0 X + . . . cn−2 X n−1 (mod X n − 1)
Structure de K[X]/< X n − 1 >
Xn
On se place dans An = K[X]/<
− 1 >, une permutation
circulaire d’un mot est la multiplication par X dans
K[X]/< X n − 1 > (endomorphisme de Frobenius).
C(X) ∈ C =⇒ XC(X) ∈ C
Proposition :
Un code linéaire et cyclique est un idéal de An :
c’est un sous groupe additif
il est stable par multiplication par λ ∈ K et X donc par
\ ∈ An .
multiplication par K(X) ∈ K[X] et donc par K(X)
Tout idéal de An est un code cyclique de longueur n :
Proposition :
Si P (X) ∈ K[X], l’anneau K[X]/< P (X) > est principal :
[ un élément de I tel que I(X) soit de
I un idéal de An , I(X)
degré minimal. On peut prendre G(X) de degré minimal parmi
les I(X).
Dans K[X], un élément I(X) s’écrit :
Matrice Génératrice
On choisit un générateur G(X) de l’idéal qui divise X n − 1. Les
mots du codes sont les multiples de G(X). La matrice
génératrice peut s’écrire :




G(X)
g0 . . . gk 0 . . . 0


XG(X)
 0 g0 . . . gk 0
 





G=
=

 
...


...
0 . . . 0 g0 . . . gk
n−k−1
X
G(X)
avec la base 1, X, . . . X n−k de An .
Le codage n’est pas systématique.
I(X) = K(X)G(X) + R(X)
et R(X) = 0 puisque
| G | estsystématique
minimal. Dans An on a bien :
Codage
[ = K(X)
\ G(X)
\
I(X)
G(X)
de degré de
minimal
engendrant
de dimension n.
\
et
les éléments
I sontkmultiples
de C
G(X).
u0 . . . un−k−1 , utile s’identifie à
U (X) =
i=n−k−1
X
ui X n−k−i
i=0
G s’obtient en calculant les restes modulo G(X) des X i :



G=
 In−k


X n mod G(X)

...

n+k+1−i
X
mod G(X) 


...
k
X
mod G(X)
Codes BCH
Bose, Chaudhuri, Hocquenhem
K = Fq , C un code cyclique engendré par G(X) sur Fq de
longueur n premier avec q. Soit k l’ordre de q modulo n, Fqk
une extension de degré k de Fq
Comme q k = 1 mod n, tous les éléments x non nuls de Fqk
vérifient xn = 1 et sont racines de G(X).
Théorème :
Si β est un générateur du groupe multiplicatif Fq∗k et si G(X) a
β i , β i+1 , . . . β i+d−2 parmi ses racines, alors C est au moins d
correcteur.
Codes de Reed Solomon
Les codes de Reed-Solomon sont maximum séparables. Ce sont
des codes BCH qui n’ont que β i , β i+1 , . . . β i+d−2 comme racines.