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.