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