Codes linéaires et cycliques Code linéaire Exemple Distance d`un

Transcription

Codes linéaires et cycliques Code linéaire Exemple Distance d`un
Hypothèse sur le vocabulaire V du canal
Codes linéaires et cycliques
• V est un corps fini :
soient a,b ∈ V : e0, e1, a+b, -a, a*b, a/b ∈ V
• Hypothèse sur V = vocabulaire source
• Code linéaire - caractérisation
• Codage et décodage d’un code linéaire
• Possible ssi |V| = pm avec p premier
Soit q = pm : V est alors isomorphe à GFq
– Exemple: V= {0,1} ; V={mots de 32 bits}
• Code cyclique – caractérisation
• Distance d’un code cyclique
• Code de Reed-Solomon
• Implantation
– GFq isomorphe à (Z/pZ[x])/Q(x) avec Q polynôme irréductible de
degré m à coefficients dans Z/pZ
– NB avec p= 2: facile à implanter avec desregistres à décalage !
Code linéaire
Exemple
• V corps => Vn est un espace vectoriel
• Définition : code linéaire  sev de Vn de dim k
– Si x=[x0, …, x n-1] ∈C, y=[y0 , …, y n-1] ∈C
=> x+y =[x0+y0,…, x n-1+y n-1] ∈C
• V = {a=00, b=01, c=10, d=11}
• Code (7,4) engendré par G
• C est engendré par une matrice génératrice G
k colonnes
• C=Im(G)
G=
n lignes
Distance d’un code linéaire
• d = Min { dH ( x , y) ; ∀ x,y ∈ C }
= Min { wH(x - y) ; ∀ x,y ∈ C }
= Min { wH( z ) ; ∀ z ∈ C }
• Borne de singleton :
d ≤ n-k+1
G=
01 10 11 10 11 00 00
10 11 10 00 01 10 10
10 01 11 10 11 10 01
01 10 11 11 10 01 01
Décodage d’un code linéaire
• Il existe G génératrice = [Idk | A ]
• Codage( [s0, …, sk-1] ) =[c0,…, ck-1 , ck…, cn-1]
[ck…, cn-1] = [s0, …, sk-1].A = [c0, …, ck-1].A
• Prop: d = nbre minimal de cols indép. de H
• Donc: [c0, …, ck-1].A - [ck…, cn-1].Idn-k = [0]n-k
• On peut donc corriger :
• Soit [-At | Idn-k ].ct = H .ct = 0
– jusqu’à (d-1)/2 erreurs quelconques
– Jusqu’à (d-1) erreurs localisées (effacements)
H = Matrice de contrôle : (n-k, n)
1
Détection d’erreurs
• On émet x et on reçoit y;
y est un mot de code H.yt = 0
• Syndrome d’erreur : s = H .yt
s ≠ 0 => il y eu erreur de transmission
Correction d’erreurs
•
x = [x1 .. xk] émis ;
•
Corriger y trouver x :
•
.yt
Or: s = H
=
H.et
Le syndrome donne toute l’information pour corriger :
e = vecteur d’erreur de poids minimal tel que H.et = s
•
Deux méthodes possibles :
H.x t -
y = [y1 .. y k] reçu
x=y- e avec e = vecteur de correction (=erreur)
H.et =
– Localisation des erreurs puis résolution du système linéaire H.et = s
– Par tabulation de la correction e associé à chaque syndrome possible
• on stocke dans un tableau Cor[s] := e pour chaque syndrome s
• Ex: V= {0,1}, n=64 k=52 :
264 erreurs possibles
mais seulement 212=4096 syndromes : donc table des corrections de taille 4096
Bon codes
• Facile et efficace à implémenter
– Codes cycliques
Codes cycliques
• Famille de codes linéaire avec distance garantie,
faciles à construire et implémenter.
– Cas particulier: codes de Reed-Solomon
• Etant donné un taux de correction, pouvoir
facilement construire un code (n,k,d) qui
donne ce taux de correction:
• Très utilisés dans les applications pratiques
– Codes de Reed-Solomon
Codes cycliques
• Décalage : σ( [c0…, cn-1] ) = [cn-1,c0…, cn-2]
• Définition: Code cyclique  code linéaire stable par σ
• Description simple, de coût O(n-k=r):
– Un code (n,k) est engendré par un mot de code
m=[c 0 , …, cn-k-1 , c n-k=1, 0 …, 0]
Caractérisation
• Mot de code  polynôme de V[X]
[c0 , …, cn-1 ]  P c = Σi=0 n-1 ci.Xi
• σ(c) associé au polynôme : X. Pc mod Xn –1
• m=[c0 , …, ck-2 , ck-1=1, 0 …, 0] associé à un
polynôme: g(X) = Σi=0 k-1 ci.Xi
– Ex: code binaire (7,4) engendré{1011000}
• Prop. g est un diviseur unitaire de Xn –1de degré r
2
Codage/décodage code cyclique
Distance minimale d’un code cyclique
• Théorème BCH ( n premier avec q)
• Codage : P[a.G] = g(X).Pa mod Xn –1
– Tout mot de code est un multiple de g mod Xn –1
– Tout multiple de g mod Xn –1 est un mot de code
– Soit α racine primitive de X n –1 dans GF(q)
– Soit g = ∏i∈S (X – αi)
• Détection : on reçoit y = Py
– Si il existe a entier tq {a+1, a+2, …, a+s} ∈S
d( C ) ≥ s+1
– Si P y n’est pas multiple de g mod Xn –1 => erreur
– Syndrome d’erreur: P e = Py mod g
C est au moins s-détecteur et [s/2]-correcteur
• Correction: à partir du syndrome (algorithme de
Meggitt)
Codes de Reed-Solomon
Exemples de codes
utilisés
dans des matériels
• q = 2m
n = 2m - 1
• Xn-1x= ∏a∈GF(q)* (X – a)
• Il suffit de prendre α générateur de GF(q)* et g =
∏i=s. s+r-1 (X – αi) de degré r
• Code cyclique (n=k+r, k, r+1)
• Optimal, car atteint la borne de Singleton
• Ex. Galileo : RS(255,233) sur V={octets}
Code du minitel
•
Faible taux d’erreur, mais paquets longs :
•
Source = suite de paquets de 15 octets = 120 bits
•
Correction d’1 erreur : Code Hamming(127,120,3) :
– Code de Hamming + detection paquets
Codes réseaux informatiques
•
CRC : cyclic redundancy check avec r bits de redondance
Polynome générateur g= Σ i gi .xi de degré r sur F2
•
Source: x=k bits  m(x) polynome de degré k-1
– Exemple: m=01101 m(x) = x+x2+x4
•
– 7 bits + 1 bit parité pour les 7 bits contrôle = 1 octet
•
– On a c multiple de g
– Redondance r bits
(gr = 1)
Détection de paquets: 1octet avec que des 0
– Si erreur détectée : ARQ
• Total : 17 octets, rendement = 15/17 = 88%
Codage: c = m.x r - (m.x r mod g) = m.x r + (m.x r mod g)
•
Propriétés: CRC détecte :
– erreurs de poids 1 si : g 0 = 1
– erreurs de poids 2 si g(x) a un facteur avec au moins 3 termes
– nombre impair d’erreurs si g a (x+1) comme facteur
3
CRC standards
•
•
•
•
•
•
CRC-8 : x8+x2+x+1
CRC-10 : x10+x9+ x5+x4 x+1
CRC-12 : x12+x11+ x3+x2+1
CRC-16 : x16+x15+ x2+1
CRC-CCITT : x16+x12+ x5+1
CRC-32 : x32+x26+x23+x22+x16+x12+x11+x10+
x8+x7+x5+x4+ x2+x+1
CDROM / DVDROM (1/3)
Satellites : ex. Voyager
• Photos de Saturne et Jupiter (1977)
– Données peu critiques (images 800x800 - 8 bits)
– Données critiques: GSE (General Science&Engineering)
• Mesures
• Contrôle
• Données GSE codées par Golay(24,12) sur F2 (6correcteur)
• Autres données: code convolutif
CDROM : code CIRC (2/3)
• Codes par bloc cycliques
• Exemple : CD Audio :
– Données = octets
– K=trame = 24 octets codés sur 32 octets sur le CD
– CIRC = Code de Reed-Solomon entrelacé croisé
• Code (32, 24) = entrelacement de 2 codes cycliques
– Base:
• code de Reed-Solomon (255, 251, 5)
• Code C1(28,24, 5)
• Code C2(32,28,5)
– Codes en détail
– Description de l’entrelacement
CDROM : code CIRC (3/3)
GSM
• Signal parole: par tranche de 20 ms
• Codec: Numérisation : 260 bits
= 50 très critiques + 132 critiques + 78 complémentaires
• Codage de canal : 456 bits
» 50 bits : CRC (X3+x+1)
» 182+3 : codage convolutif : x2 : 378 bits
» +78= 4 bits controles :
• Entrelacement (diagonal : sur plusieurs trames de 456 bits)
• Chiffrement / modulation
4