Communication Numérique - Codes correcteurs d - Xymaths
Transcription
Communication Numérique - Codes correcteurs d - Xymaths
Communication Numérique Communication Numérique Codes correcteurs d’erreurs Yoann Morel http://xymaths.free.fr/Signal/Communication-Numerique-cours-TP.php Communication Numérique 1 Introduction Définition Position du problème Exemples 2 Généralités sur les codes Canal binaire symétrique sans mémoire Paramètres d’un code 3 Codes en bloc linéaires Définition Forme systématique d’un code Caractérisation d’un mot code Décodage par le syndrôme Code de Hamming 4 Autres codes Codes cycliques Communication Numérique Introduction 1 Introduction Définition Position du problème Exemples 2 Généralités sur les codes Canal binaire symétrique sans mémoire Paramètres d’un code 3 Codes en bloc linéaires Définition Forme systématique d’un code Caractérisation d’un mot code Décodage par le syndrôme Code de Hamming 4 Autres codes Codes cycliques Communication Numérique Introduction Définition 1 Introduction Définition Position du problème Exemples 2 Généralités sur les codes Canal binaire symétrique sans mémoire Paramètres d’un code 3 Codes en bloc linéaires Définition Forme systématique d’un code Caractérisation d’un mot code Décodage par le syndrôme Code de Hamming 4 Autres codes Codes cycliques Communication Numérique Introduction Définition Introduction Définition Un code correcteur d’erreurs est une technique de codage basée sur la redondance de l’information, destinée à détecter, voire corriger, les erreurs qui peuvent-être générées par un canal de communication peu fiable. Communication Numérique Introduction Définition Introduction Définition Un code correcteur d’erreurs est une technique de codage basée sur la redondance de l’information, destinée à détecter, voire corriger, les erreurs qui peuvent-être générées par un canal de communication peu fiable. La détection d’une erreur dans un message peut sembler naturelle ; sa localisation précise et sa correction sont quant à elles moins évidentes. Communication Numérique Introduction Définition Introduction Définition Un code correcteur d’erreurs est une technique de codage basée sur la redondance de l’information, destinée à détecter, voire corriger, les erreurs qui peuvent-être générées par un canal de communication peu fiable. La détection d’une erreur dans un message peut sembler naturelle ; sa localisation précise et sa correction sont quant à elles moins évidentes. L’origine de la théorie des codes peut-être située en 1947 par Richard W. Hamming, utilisant un ordinateur développé aux laboratoires Bell, “Two weekends in a row I came in and found that all my stuff had been dumped and nothing was done. I was really aroused and annoyed because I wanted those answers and two weeks had been lost. And so I said, “Damn it, if the machine can detect an error, why can’t it locate the position of the error and correct it ?”” Communication Numérique Introduction Position du problème 1 Introduction Définition Position du problème Exemples 2 Généralités sur les codes Canal binaire symétrique sans mémoire Paramètres d’un code 3 Codes en bloc linéaires Définition Forme systématique d’un code Caractérisation d’un mot code Décodage par le syndrôme Code de Hamming 4 Autres codes Codes cycliques Communication Numérique Introduction Position du problème Introduction Le rôle du correcteur d’erreurs peut-être limité à la simple détection (et localisation . . .) d’erreurs. La correction s’effectue alors par une nouvelle requête de transmission du message, ou seulement des parties erronées. • Cas du protocole TCP • sommes de contrôle (checksum) • Cela peut se révéler insuffisant, ou inadapté suivant le contexte (GSM par exemple) Communication Numérique Introduction Position du problème Introduction Deux situations principales peuvent se présenter : • Présence de petites erreurs relativement fréquentes et isolées. ,→ Ex : Télécommunication, communication perturbée par un bruit additif aléatoire • Présence d’erreurs peu fréquentes, mais plus volumineuses ,→ Ex : CD : norme Philips permet de corriger jusqu’à 4096 bits erronés consécutifs (rayure de environ 1 mm de large) • Effacement de caractère(s) : un bit n’est pas altéré, mais simplement supprimé. Communication Numérique Introduction Exemples 1 Introduction Définition Position du problème Exemples 2 Généralités sur les codes Canal binaire symétrique sans mémoire Paramètres d’un code 3 Codes en bloc linéaires Définition Forme systématique d’un code Caractérisation d’un mot code Décodage par le syndrôme Code de Hamming 4 Autres codes Codes cycliques Communication Numérique Introduction Exemples 1er exemple : Code à répétitions Il s’agit de la manière la plus “naı̈ve” d’aborder le problème : si la transmission d’un mot peut-être entachée d’erreur(s), il n’y a qu’à le transmettre directement plusieurs fois ! Supposons que l’on ait 4 messages à envoyer : 00, 01, 10 et 11 (ou que l’on ait préalablement découpé le message initial en blocs de 2 bits). Pour augmenter nos chances de recevoir un message correct, on peut encoder nos 4 mots suivant : mot original 00 01 10 11 mot codé 00 00 00 01 01 01 10 10 10 11 11 11 Communication Numérique Introduction Exemples 1er exemple : Code à répétitions S’il survient une erreur dans la transmission, elle n’affectera pas les trois couples formant le mot du code. Le décodage peut donc se faire par vote majoritaire sur les 3 couples de bits. Pour ce code à répétition, le taux d’information est seulement 33 % (33 % des bits transmis correspondent à de l’information), tandis que 66 % ont pour seul but la protection de cette information. Communication Numérique Introduction Exemples 2ème exemple : Code à répétition amélioré Un autre exemple de codage est le suivant : mot original 00 01 10 11 mot codé 00 000 01 101 10 110 11 011 Communication Numérique Introduction Exemples 2ème exemple : Code à répétition amélioré Un autre exemple de codage est le suivant : Supposons que le mot reçu soit y = 01001. mot original 00 01 10 11 mot codé 00 000 01 101 10 110 11 011 Communication Numérique Introduction Exemples 2ème exemple : Code à répétition amélioré Un autre exemple de codage est le suivant : Supposons que le mot reçu soit y = 01001. mot original 00 01 10 11 Ce mot ne correspond à aucun mot du code : il comporte donc une, ou plusieurs, erreurs. mot codé 00 000 01 101 10 110 11 011 Communication Numérique Introduction Exemples 2ème exemple : Code à répétition amélioré Un autre exemple de codage est le suivant : Supposons que le mot reçu soit y = 01001. mot original 00 01 10 11 mot codé 00 000 01 101 10 110 11 011 Ce mot ne correspond à aucun mot du code : il comporte donc une, ou plusieurs, erreurs. L’idée de la correction est de rechercher parmi tous les mots du code celui qui est le “plus proche” : Ecart mot reçu/mot du code y − 00 000 = 01001 y − 01 101 = 00100 y − 10 110 = 11111 y − 11 011 = 10010 Poids de l’erreur 2 1 5 2 Communication Numérique Introduction Exemples 2ème exemple : Code à répétition amélioré Un autre exemple de codage est le suivant : Supposons que le mot reçu soit y = 01001. mot original 00 01 10 11 mot codé 00 000 01 101 10 110 11 011 Ce mot ne correspond à aucun mot du code : il comporte donc une, ou plusieurs, erreurs. L’idée de la correction est de rechercher parmi tous les mots du nc code celui qui est le “plus proche” : do it Ecart mot reçu/mot du code Poids de l’erreur et ois n h , c o 1 y − 00 000 = 01001 2 ati 10 On stim 01 1 y − 01 101 = 00100 1 0 l’e = = y − 10 110 = 11111 5 x̂ ŷ nc y − 11 011 = 10010 2 do Communication Numérique Introduction Exemples 2ème exemple : Code à répétition amélioré Remarques : • Si on avait eu 2, ou plus, erreurs de même poids, on n’aurait pas été en mesure de déterminer le mot le plus proche. • En regardant d’un peu plus près, tous les mots du code diffèrent d’au moins 3 bits, et ce code permet donc de corriger de manière certaine une erreur unique. • On ne peut pas corriger avec ce code des mots contenant 2 erreurs, et encore moins 3 erreurs (qui peuvent alors n’être même pas détectées !) • Le coût de ce code est de 3/5 = 60 % d’occupation à la protection de l’information (le taux d’information est de 2/5 = 40 %) Communication Numérique Introduction Exemples 3ème exemple : Code de parité Supposons que l’on ait des mots de 7 bits à envoyer (code ASCII par exemple), et que l’on s’intéresse simplement à la détection d’une erreur. Un moyen et de coder chacun des mots sur 8 bits, en ajoutant un 8ème bit, appelé bit de parité, de telle sorte que dans tous les mots le nombre de 1 soit pair. 1011001 est codé 10110010 Par exemple, 0110100 est codé 01101001 Communication Numérique Introduction Exemples 3ème exemple : Code de parité Supposons que l’on ait des mots de 7 bits à envoyer (code ASCII par exemple), et que l’on s’intéresse simplement à la détection d’une erreur. Un moyen et de coder chacun des mots sur 8 bits, en ajoutant un 8ème bit, appelé bit de parité, de telle sorte que dans tous les mots le nombre de 1 soit pair. 1011001 est codé 10110010 Par exemple, 0110100 est codé 01101001 D’une manière générale, un mot du code est de la forme x = [u1 u2 u3 u4 u5 u6 u7 p] X ui = u1 + u2 + u3 + u4 + u5 + u6 + u7 + p ≡ 0 [2] X ou encore p≡ ui [2] où Communication Numérique Introduction Exemples 3ème exemple : Code de parité Supposons que l’on ait des mots de 7 bits à envoyer (code ASCII par exemple), et que l’on s’intéresse simplement à la détection d’une erreur. Un moyen et de coder chacun des mots sur 8 bits, en ajoutant un 8ème bit, appelé bit de parité, de telle sorte que dans tous les mots le nombre de 1 soit pair. 1011001 est codé 10110010 Par exemple, 0110100 est codé 01101001 • Ce code permet de détecter une erreur, ou 3 erreurs ou 5 erreurs, ou 7 erreurs, mais pas 2, 4 ou 6 erreurs. • De plus, ce code ne permet pas la localisation de l’erreur, et donc pas sa correction. • Par contre, ce code permet de rétablir un caractère effacé ! Communication Numérique Introduction Exemples 4ème exemple : Code ISBN Le code ISBN (International Standard Book Number) est un code permettant d’identifier un livre. Il utilise l’alphabet {0; 1; 2; 3; 4; 5; 6; 7; 8; 9; X} Seuls les 9 premiers caractères permettent d’identifier le livre, le 10ème servant à contrôler la validité du code (de même que la clé d’un RIB, où les 2 derniers chiffres d’un numéro de sécurité sociale, ou encore pour un numéro de carte bancaire . . .) Par exemple, le premier caractère permet d’identifier la langue de l’ouvrage (0 pour l’anglais, 2 pour le français . . .), tandis que les deux numéros suivants identifient l’éditeur. Communication Numérique Introduction Exemples 4ème exemple : Code ISBN Le 10ème caractère se détermine suivant : c10 ≡ 9 X i ci [11] ou encore, i=1 10 X i ci ≡ 0 [11] i=1 Le code ISBN permet de : • détecter s’il y a au moins une erreur dans le numéro • retrouver un numéro effacer • détecter une transposition de 2 caractères Communication Numérique Introduction Exemples 4ème exemple : Code ISBN Le 10ème caractère se détermine suivant : c10 ≡ 9 X i ci [11] ou encore, i=1 10 X i ci ≡ 0 [11] i=1 Le code ISBN permet de : • détecter s’il y a au moins une erreur dans le numéro • retrouver un numéro effacer • détecter une transposition de 2 caractères Ex : Le numéro ISBN suivant est-il valide ? 2 - 70 - 42 1030 - 6 Ex : Retrouver le chiffre manquant : 0 - 201 - 1 ? - 502 - 7 Communication Numérique Introduction Exemples 4ème exemple : Code ISBN Le 10ème caractère se détermine suivant : c10 ≡ 9 X i ci [11] ou encore, i=1 10 X i ci ≡ 0 [11] i=1 Le code ISBN permet de : • détecter s’il y a au moins une erreur dans le numéro • retrouver un numéro effacer • détecter une transposition de 2 caractères Ex : Le numéro ISBN suivant est-il valide ? 2 - 70 - 42 1030 - 6 Ex : Retrouver le chiffre manquant : 0 - 201 - 1 3 - 502 - 7 Communication Numérique Généralités sur les codes 1 Introduction Définition Position du problème Exemples 2 Généralités sur les codes Canal binaire symétrique sans mémoire Paramètres d’un code 3 Codes en bloc linéaires Définition Forme systématique d’un code Caractérisation d’un mot code Décodage par le syndrôme Code de Hamming 4 Autres codes Codes cycliques Communication Numérique Généralités sur les codes Canal binaire symétrique sans mémoire 1 Introduction Définition Position du problème Exemples 2 Généralités sur les codes Canal binaire symétrique sans mémoire Paramètres d’un code 3 Codes en bloc linéaires Définition Forme systématique d’un code Caractérisation d’un mot code Décodage par le syndrôme Code de Hamming 4 Autres codes Codes cycliques Communication Numérique Généralités sur les codes Canal binaire symétrique sans mémoire Canal binaire symétrique sans mémoire Bruit AGB Codage Xk Filtre adapté kT Décision ? - h(t) - L - h(−t) Yk @ @ - - Xk et Yk prennent leurs valeurs dans l’alphabet {0, 1} La probabilité d’erreurs est : r p = P (Yk = 1|Xk = 0) = P (Yk = 0|Xk = 1) = erfc εb N0 La probabilté d’erreur ne dépend pas de l’instant k d’utilisation du canal : le canal est dit sans mémoire Communication Numérique Généralités sur les codes Canal binaire symétrique sans mémoire Canal binaire symétrique sans mémoire On peut alors représenter la chaı̂ne de transmission entre Xk et Yk par le schéma : 1−p HH * Xk H p Yk HHH j - 1−p Tout se passe comme si Xk était soumis à un bruit additif et que l’observation Yk s’écrivait : Yk = Xk ⊕ Bk où ⊕ désigne l’addition modulo 2 (ou exclusif) et Bk est une suite de variables aléatoires à valeurs dans {0, 1}, indépendantes et identiquement distribuées avec, P (Bk = 1) = p Communication Numérique Généralités sur les codes Canal binaire symétrique sans mémoire Probabilité d’erreur. Distance Notons c = [c1 c2 . . . cn ] le mot transmis, et y = [y1 y2 . . . yn ] le mot reçu, alors Prob (y|c) = Qn i=1 Prob (yi |ci ) = (1 − p)card{i/yi =ci } pcard{i/yi 6=ci } card{i/yi 6=ci } p n = (1 − p) 1−p Un décodeur par maximum de vraisemblance doit choisir de renvoyer le mot ĉ qui maximise la fonction : c 7→ Prob (y|c). Comme p/(1 − p) < 1, maximiser cette probabilité revient à minimiser le nombre d’erreurs : card {i/yi 6= ci } Communication Numérique Généralités sur les codes Canal binaire symétrique sans mémoire Distance et poids de Hamming Soit x = [x1 x2 . . . xn ] et y = [y1 y2 . . . yn ] sont deux messages de longueur n. Définition La distance de Hamming entre x et y est le nombre d(x, y) de composantes où x et y diffèrent. Le poids de Hamming de x est le nombre w(x) de composantes non nulles de x. Ex : Si x = 10110 et y = 00101, alors d(x, y) = 4 et w(x) = 3 et w(y) = 2. Communication Numérique Généralités sur les codes Paramètres d’un code 1 Introduction Définition Position du problème Exemples 2 Généralités sur les codes Canal binaire symétrique sans mémoire Paramètres d’un code 3 Codes en bloc linéaires Définition Forme systématique d’un code Caractérisation d’un mot code Décodage par le syndrôme Code de Hamming 4 Autres codes Codes cycliques Communication Numérique Généralités sur les codes Paramètres d’un code Codeur : Dispositif qui associe à une suite de k bits d’information une suite de n bits. Code : Un code est un ensemble de mots de n bits. Distance et poids d’un code : Soit C un code : • la distance minimum de C est le nombre d∗ = Min {d(x, y)/x, y ∈ C, x 6= y} • le poids minimum de C est le nombre : w∗ = Min {w(x)/x ∈ C, x 6= 0} Communication Numérique Généralités sur les codes Paramètres d’un code Codeur : Dispositif qui associe à une suite de k bits d’information une suite de n bits. Code : Un code est un ensemble de mots de n bits. Distance et poids d’un code : Soit C un code : • la distance minimum de C est le nombre d∗ = Min {d(x, y)/x, y ∈ C, x 6= y} • le poids minimum de C est le nombre : w∗ = Min {w(x)/x ∈ C, x 6= 0} Ex : mot original 00 01 10 11 mot codé 00 000 01 101 10 110 11 011 n=5; k=2 d∗ = 3 w∗ = 3 Communication Numérique Généralités sur les codes Paramètres d’un code Le taux d’information d’un code est le nombre r = k/n. r < 1 : ajout d’information r = 1 : pas d’information supplémentaire r > 1 : compression de donnée . . . Un code est dit t-correcteur si il permet de corriger toute erreur de au plus t caractères. On a la caractérisation : C est t-correcteur ⇐⇒ d∗ ≥ 2t + 1 ou encore, comme d∗ = w∗ , ∗ ∗ d −1 w −1 t=E =E 2 2 Communication Numérique Généralités sur les codes Paramètres d’un code Ex : mot original 00 01 10 11 mot codé 00 000 01 101 10 110 11 011 n=5; k=2 d∗ = 3 w∗ = 3 On dit que le code C est de paramètres (5, 2, 3). Un tel code a : • un taux d’information : r = 2/5 (ou un taux de redondance de 3/5). • un pouvoir de correction de 1 bit, on dit qu’il est 1-correcteur. Communication Numérique Généralités sur les codes Paramètres d’un code Autre exemple : Code de parité Ce code ajoute un bit, appelé bit de parité, à une suite de k bits d’information de façon à ce que le nombre total de 1 du mot code ainsi formé soit pair. Ex : Pour k = 3, on a n = 4 et, par exemple : 000 → 0000 010 → 0101 111 → 1111 C’est un code (4, 3) dont le taux d’information est r = On a d∗ = w∗ = 2, et donc t = 0 : Ce code ne permet aucune correction. 3 = 75 %. 4 Communication Numérique Codes en bloc linéaires 1 Introduction Définition Position du problème Exemples 2 Généralités sur les codes Canal binaire symétrique sans mémoire Paramètres d’un code 3 Codes en bloc linéaires Définition Forme systématique d’un code Caractérisation d’un mot code Décodage par le syndrôme Code de Hamming 4 Autres codes Codes cycliques Communication Numérique Codes en bloc linéaires Définition 1 Introduction Définition Position du problème Exemples 2 Généralités sur les codes Canal binaire symétrique sans mémoire Paramètres d’un code 3 Codes en bloc linéaires Définition Forme systématique d’un code Caractérisation d’un mot code Décodage par le syndrôme Code de Hamming 4 Autres codes Codes cycliques Communication Numérique Codes en bloc linéaires Définition Codes linéaires Code linéaire : si c1 et c2 désignent les mots codes respectifs des deux suites d’information de k bits d1 et d2 , alors à la suite d’information de k bits d1 ⊕ d2 est associé le mot code c1 ⊕ c2 . ( d1 → c1 alors , d1 ⊕ d2 → c1 ⊕ c2 d2 → c2 où ⊕ est l’addition bit à bit modulo 2. Communication Numérique Codes en bloc linéaires Définition Codes en blocs Code en bloc : Dans un code en bloc, les n éléments binaires des mots code sont calculés uniquement avec les k bits d’information du bloc courant. [ d1 d2 . . . dk ] → [ c1 c2 . . . cn ] Au besoin, le message initial est découpé en paquets, ou blocs, de taille k. Communication Numérique Codes en bloc linéaires Définition Codes en blocs Code en bloc : Dans un code en bloc, les n éléments binaires des mots code sont calculés uniquement avec les k bits d’information du bloc courant. [ d1 d2 . . . dk ] → [ c1 c2 . . . cn ] Au besoin, le message initial est découpé en paquets, ou blocs, de taille k. Pour un code en bloc linéaire, le mot code c s’obtient à partir du mot d’information d par une expression matricielle de la forme : c=dG où, d est un vecteur ligne de taille 1 × k, c est un vecteur ligne de taille 1 × n et G est une matrice de taille k × n appelée matrice génératrice du code. Communication Numérique Codes en bloc linéaires Définition Exemple du code parité : Le taux d’information est r = taille (n − 1) × n est : n−1 , et sa matrice génératrice, de n G = In−1 1 .. . 1 avec In−1 la matrice identité de taille n − 1. Communication Numérique Codes en bloc linéaires Définition Exemple du code parité : Le taux d’information est r = taille (n − 1) × n est : n−1 , et sa matrice génératrice, de n G = In−1 1 .. . 1 avec In−1 la matrice identité de taille n − 1. 1 0 0 1 Ex : Pour n = 3, on a un code (4,3,2), G = 0 1 0 1 . de matrice génératrice 0 0 1 1 Par exemple, le mot u = [101] est codé par : c = uG = [1012] ≡ [1010] [2] Communication Numérique Codes en bloc linéaires Définition Code à répétition : Ce code associe à k = 1 bit d’information les mots code : d = 0 → c = 0| 0 {z . . . 0} n d = 1 → c = 1| 1 {z . . . 1} n Communication Numérique Codes en bloc linéaires Définition Code à répétition : Ce code associe à k = 1 bit d’information les mots code : d = 0 → c = 0| 0 {z . . . 0} n d = 1 → c = 1| 1 {z . . . 1} n Le code à répétition est donc un code (n, 1, n). Son taux 1 d’information est r = . Sa distance est n : il peut corriger jusqu’à n n−1 t=E erreurs. 2 Communication Numérique Codes en bloc linéaires Définition Code à répétition : Ce code associe à k = 1 bit d’information les mots code : d = 0 → c = 0| 0 {z . . . 0} n d = 1 → c = 1| 1 {z . . . 1} n Le code à répétition est donc un code (n, 1, n). Son taux 1 d’information est r = . Sa distance est n : il peut corriger jusqu’à n n−1 t=E erreurs. 2 h i Sa matrice génératrice est : G = 1 1 . . . 1 | {z } n Communication Numérique Codes en bloc linéaires Forme systématique d’un code 1 Introduction Définition Position du problème Exemples 2 Généralités sur les codes Canal binaire symétrique sans mémoire Paramètres d’un code 3 Codes en bloc linéaires Définition Forme systématique d’un code Caractérisation d’un mot code Décodage par le syndrôme Code de Hamming 4 Autres codes Codes cycliques Communication Numérique Codes en bloc linéaires Forme systématique d’un code Forme systématique d’un code Un code est entièrement déterminé par sa matrice génératrice G. Les vecteurs-ligne de G sont eux-même des mots-code, et sont supposés linéairement indépendants. Cela revient à imposer que : si d1 6= d2 , alors c1 = d1 G 6= c2 = d2 G : des mots d’information différents ne peuvent pas être identiquement codés. En d’autres termes, la matrice G est de rang k. On montre de plus que les combinaisons linéaires sur les lignes de G ainsi que les permutations sur les colonnes de G laissent inchangées la probabilité d’erreur par mot code : la distance (ou le poids) du code est inchangé. Communication Numérique Codes en bloc linéaires Forme systématique d’un code Forme systématique d’un code D’après ces propriétés, la matrice génératrice G peut s’écrire sous la forme (Pivot de Gauss) : e = Ik |Pk×(n−k) G où Ik est la matrice identité de taille k, et la matrice P est appelée la matrice de parité du code. Lorsque G est sous sa forme systématique, les mots code commencent par k bits d’information et sont complétés par (n − k) bits de redondance : si d = [d1 d2 . . . dk ] alors, c = d G = [d1 d2 . . . dk p1 p2 . . . pn−k ] Communication Numérique Codes en bloc linéaires Forme systématique d’un code Par exemple, le code linéaire (7, 4) génératrice : 1 1 0 0 1 1 G= 0 0 1 0 0 0 défini par sa matrice 0 0 1 0 0 0 0 1 peut se mettre sous la forme systématique : 1 0 0 0 1 1 0 1 0 0 0 1 e= G 0 0 1 0 1 1 0 0 0 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 Communication Numérique Codes en bloc linéaires Forme systématique d’un code 1 0 e= G 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 1 1 1 1 1 0 0 1 1 1 Ainsi, si un bloc c = [c1 c2 c3 c4 ], est codé en d = cG = [c1 c2 c3 c4 p1 p2 p3 ] où, p1 = c1 + c2 + c4 p2 = c1 + c2 + c3 p3 = c2 + c3 + c4 Communication Numérique Codes en bloc linéaires Forme systématique d’un code 1 0 e= G 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 1 1 1 1 1 0 0 1 1 1 Ainsi, si un bloc c = [c1 c2 c3 c4 ], est codé en d = cG = [c1 c2 c3 c4 p1 p2 p3 ] où, p1 = c1 + c2 + c4 p2 = c1 + c2 + c3 p3 = c2 + c3 + c4 Tout se passe comme si, le codage consistait simplement en l’ajout de (n − k) bits de redondance. Communication Numérique Codes en bloc linéaires Forme systématique d’un code Majoration de la distance d’un code : On a vu que la distance d’un code d∗ est aussi égale au poids de ce code w∗ . Une fois la matrice génératrice du code mise sous forme systématique, 1 0 ... 0 .. 0 1 . Pk×(n−k) e G = Ik | Pk×(n−k) = . .. .. . 0 0 ... 0 1 on peut dénombrer au plus (n − k + 1) zéros sur chaque ligne. Ainsi d∗ = w∗ ≤ n − k + 1, et on a la propriété : La distance d∗ d’un code (n, k, d∗ ) est majorée par n − k + 1. n−k Le pouvoir correcteur t d’un tel code vérifie donc t ≤ E . 2 Communication Numérique Codes en bloc linéaires Caractérisation d’un mot code 1 Introduction Définition Position du problème Exemples 2 Généralités sur les codes Canal binaire symétrique sans mémoire Paramètres d’un code 3 Codes en bloc linéaires Définition Forme systématique d’un code Caractérisation d’un mot code Décodage par le syndrôme Code de Hamming 4 Autres codes Codes cycliques Communication Numérique Codes en bloc linéaires Caractérisation d’un mot code Caractérisation d’un mot code Matrice de contrôle de parité : On considère un code linéaire C de matrice génératrice G. On appelle matrice de contrôle de parité une matrice H de dimension (n − k) × n et de rang (n − k) qui vérifie : H GT = 0 Caractérisation d’un mot code : Si c est un bloc, de mot code d = cG, alors, on doit avoir : H dT = H (c G)T = H GT cT = H GT cT = 0 On a ainsi la propriété : le bloc d reçu est un mot code (donc jugé non erroné) si et seulement si H dT = 0 Communication Numérique Codes en bloc linéaires Caractérisation d’un mot code Construction d’une matrice de contrôle de parité : Soit un code linéaire dont la matrice G est mise sous forme systématique G = Ik | Pk×(n−k) Alors, la matrice de contrôle de parité a pour expression : H= (P T )(n−k)×k | In−k Communication Numérique Codes en bloc linéaires Caractérisation d’un mot code Construction d’une matrice de contrôle de parité : Soit un code linéaire dont la matrice G est mise sous forme systématique G = Ik | Pk×(n−k) Alors, la matrice de contrôle de parité a pour expression : H= 1 0 1 1 1 1 1 0 (P T )(n−k)×k | In−k Ex : 1 0 G= 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 1 0 1 1 1 0 0 1 et, H = 1 1 1 0 0 0 1 1 0 1 1 1 0 0 1 1 Communication Numérique Codes en bloc linéaires Décodage par le syndrôme 1 Introduction Définition Position du problème Exemples 2 Généralités sur les codes Canal binaire symétrique sans mémoire Paramètres d’un code 3 Codes en bloc linéaires Définition Forme systématique d’un code Caractérisation d’un mot code Décodage par le syndrôme Code de Hamming 4 Autres codes Codes cycliques Communication Numérique Codes en bloc linéaires Décodage par le syndrôme Décodage par le syndrôme Syndrôme : Soit un code linéaire de matrice de contrôle de parité H, c un mot envoyé, et y = c + b le mot reçu. Alors, on a : Hy T = H(c + b)T = HcT + Hbt = HbT Ainsi, le vecteur s = H y T , ne dépend que du bruit et non pas du mot envoyé. On l’appelle le syndrôme associé à y. Communication Numérique Codes en bloc linéaires Décodage par le syndrôme Décodage par le syndrôme Syndrôme : Soit un code linéaire de matrice de contrôle de parité H, c un mot envoyé, et y = c + b le mot reçu. Alors, on a : Hy T = H(c + b)T = HcT + Hbt = HbT Ainsi, le vecteur s = H y T , ne dépend que du bruit et non pas du mot envoyé. On l’appelle le syndrôme associé à y. Le syndrôme se calcule à partir du mot reçu et de la matrice de contrôle de parité, et ne dépend que du bruit et non pas du mot code émis. A partir de la connaissance de H et de y, on peut donc espérer déterminer le bruit b, car s = Hy T = HbT . Une fois le bruit connu, c se déduit simplement par c = y ⊕ b. Communication Numérique Codes en bloc linéaires Décodage par le syndrôme Décodage par le syndrôme Dans l’exemple précédent, le code est 1-correcteur : il ne peut corriger qu’une seule erreur. Supposons qu’une erreur e se soit effectivement glissée dans la transmission d’un mot c, codé par le mot d = cG, et receptionné selon y = d + e. L’erreur écrit alors e = [0 . . . 0 1 0 . . . 0], le 1 étant à la j ème position. Le syndrôme est s = Hy T = H(y + e)T = HdT + HeT = HeT = Hj , où Hj est la j ème colonne de la matrice de contrôle H. On connaı̂t ainsi la position de l’erreur, et il n’y a plus qu’a corriger le mot reçu. Communication Numérique Codes en bloc linéaires Code de Hamming 1 Introduction Définition Position du problème Exemples 2 Généralités sur les codes Canal binaire symétrique sans mémoire Paramètres d’un code 3 Codes en bloc linéaires Définition Forme systématique d’un code Caractérisation d’un mot code Décodage par le syndrôme Code de Hamming 4 Autres codes Codes cycliques Communication Numérique Codes en bloc linéaires Code de Hamming Les codes de Hamming forment une classe particulière de codes linéaires. Pour un entier m, les paramètres d’un code de Hamming sont de la forme (2m − 1, 2m − m − 1, 3). Par exemple, • (7, 4, 3) pour m = 3 (cf. TP) • (128, 120, 3) pour m = 7 (minitel). Ces codes sont parfaits : pour tout mot reçu, il existe un mot du code à une distance stictement inférieure à d/2. Autrement dit, tout mot reçu peut-être décodé. Communication Numérique Codes en bloc linéaires Code de Hamming Les codes de Hamming forment une classe particulière de codes linéaires. Pour un entier m, les paramètres d’un code de Hamming sont de la forme (2m − 1, 2m − m − 1, 3). Par exemple, • (7, 4, 3) pour m = 3 (cf. TP) • (128, 120, 3) pour m = 7 (minitel). Ces codes sont parfaits : pour tout mot reçu, il existe un mot du code à une distance stictement inférieure à d/2. Autrement dit, tout mot reçu peut-être décodé. Malheureusement si 2, ou plus, erreurs se sont glissées dans le message reçu, ce code propose toujours une correction qui va être elle aussi erronée... Communication Numérique Codes en bloc linéaires Code de Hamming Code de Hamming étendu : Pour palier cet inconvénient, le code de Hamming est souvent étendu : A chaque bloc de 4 bits est ajouté les trois bits de redondance du code de Hamming. Ces 7 bits sont alors complétés par un bit de parité. Ainsi, le décodage se fait suivant : Communication Numérique Codes en bloc linéaires Code de Hamming Code de Hamming étendu : Pour palier cet inconvénient, le code de Hamming est souvent étendu : A chaque bloc de 4 bits est ajouté les trois bits de redondance du code de Hamming. Ces 7 bits sont alors complétés par un bit de parité. Ainsi, le décodage se fait suivant : • S’il n’y a aucune erreur le syndrome est nul. Communication Numérique Codes en bloc linéaires Code de Hamming Code de Hamming étendu : Pour palier cet inconvénient, le code de Hamming est souvent étendu : A chaque bloc de 4 bits est ajouté les trois bits de redondance du code de Hamming. Ces 7 bits sont alors complétés par un bit de parité. Ainsi, le décodage se fait suivant : • S’il n’y a aucune erreur le syndrome est nul. • Si une unique erreur s’est produite sur les sept premiers bits, le syndrome donne la position de l’erreur. L’existence d’un nombre d’erreur impair est confirmée par le huitième bit. Communication Numérique Codes en bloc linéaires Code de Hamming Code de Hamming étendu : Pour palier cet inconvénient, le code de Hamming est souvent étendu : A chaque bloc de 4 bits est ajouté les trois bits de redondance du code de Hamming. Ces 7 bits sont alors complétés par un bit de parité. Ainsi, le décodage se fait suivant : • S’il n’y a aucune erreur le syndrome est nul. • Si une unique erreur s’est produite sur les sept premiers bits, le syndrome donne la position de l’erreur. L’existence d’un nombre d’erreur impair est confirmée par le huitième bit. • Si deux erreurs se sont produites, le syndrome n’est pas nul. Le huitième bit indique une parité exact, signal d’un nombre pair d’erreurs. Une retransmission est nécessaire. Communication Numérique Codes en bloc linéaires Code de Hamming Code de Hamming étendu : Pour palier cet inconvénient, le code de Hamming est souvent étendu : A chaque bloc de 4 bits est ajouté les trois bits de redondance du code de Hamming. Ces 7 bits sont alors complétés par un bit de parité. Ainsi, le décodage se fait suivant : • S’il n’y a aucune erreur le syndrome est nul. • Si une unique erreur s’est produite sur les sept premiers bits, le syndrome donne la position de l’erreur. L’existence d’un nombre d’erreur impair est confirmée par le huitième bit. • Si deux erreurs se sont produites, le syndrome n’est pas nul. Le huitième bit indique une parité exact, signal d’un nombre pair d’erreurs. Une retransmission est nécessaire. • Si une erreur s’est produite sur le huitième bit, l’absence d’erreur indiqué par le syndrome permet de localiser l’erreur et le message est validé. Communication Numérique Autres codes 1 Introduction Définition Position du problème Exemples 2 Généralités sur les codes Canal binaire symétrique sans mémoire Paramètres d’un code 3 Codes en bloc linéaires Définition Forme systématique d’un code Caractérisation d’un mot code Décodage par le syndrôme Code de Hamming 4 Autres codes Codes cycliques Communication Numérique Autres codes Codes cycliques 1 Introduction Définition Position du problème Exemples 2 Généralités sur les codes Canal binaire symétrique sans mémoire Paramètres d’un code 3 Codes en bloc linéaires Définition Forme systématique d’un code Caractérisation d’un mot code Décodage par le syndrôme Code de Hamming 4 Autres codes Codes cycliques Communication Numérique Autres codes Codes cycliques Code cyclique Les codes cycliques forment une sous-classe des codes linéaires. Un code C est dit cyclique si a = [a1 a2 . . . an ] ∈ C ⇐⇒ a0 = [an a1 . . . an−1 ] ∈ C Les codes cycliques sont des codes dont l’algorithme d’encodage est facile à implanter grâce à des registres à décalages. L’algorithme de décodage est quant-à lui plus difficile à mettre en œuvre. L’encodage et le décodage de codes cycliques reposent sur la notion de polynômes sur un corps fini, dont la théorie mathématique dépasse largement l’ambition de ce cours. Communication Numérique Autres codes Codes cycliques Code cyclique Les codes cycliques les plus utilisés à l’heure actuelle sont les codes de Reed-Solomon. Ces codes sont optimums, dans le sens où ils nécessitent un nombre minimum de redondance (n − k) pour obtenir une distance minimale donnée, et donc un nombre maximum d’erreurs qui n−k peuvent être corrigées : t = 2 Pour les modems ADSL, le code utilisé est RS(240,224,8) Communication Numérique Autres codes Codes cycliques Ces codes peuvent-êtres utilisés comme base de codes entrelacés : les CIRC (Cross-Interleaved Reed Solomon Code), utilisés notamment sur les supports d’enregistrement du type CD ou DVD) L’entrelacement consiste à mélanger les blocs afin de “diluer” l’information. Cette procédure permet en particulier de minimiser l’effet d’une bouffée d’erreurs (rayure sur un CD . . .). Communication Numérique Autres codes Codes cycliques Codage avec un code CIRC : L’idée du codage CIRC est de coder avec un premier code C1 , puis d’entrelacer les blocs, et enfin, de coder dans la foulée avec un deuxième code C2 . Décodage d’un code CIRC : Pour décoder, on peut alors s’appuyer sur le double codage : on décode avec C2 , on désentrelace, puis on décode avec C1 . L’apport important de ce code réside dans le traitement itératif du décodage : C1 permet de corriger certaines erreurs, C2 ensuite en corrige d’autres. Le message peut alors à nouveau être décodé par C1 . . . Communication Numérique Autres codes Codes cycliques Codage avec un code CIRC : L’idée du codage CIRC est de coder avec un premier code C1 , puis d’entrelacer les blocs, et enfin, de coder dans la foulée avec un deuxième code C2 . Décodage d’un code CIRC : Pour décoder, on peut alors s’appuyer sur le double codage : on décode avec C2 , on désentrelace, puis on décode avec C1 . L’apport important de ce code réside dans le traitement itératif du décodage : C1 permet de corriger certaines erreurs, C2 ensuite en corrige d’autres. Le message peut alors à nouveau être décodé par C1 . . . Voir aussi à ce sujet les turbo codes . . .