IV Exemples de codes utilisés dans des matériels 256
Code du minitel Faible taux d erreur, mais paquets longs : Code de Hamming + detection paquets Source = suite de paquets de 15 octets = 120 bits Correction d 1 erreur : Code Hamming(127,120,3) : 7 bits + 1 bit parité pour les 7 bits contrôle = 1 octet Détection de paquets: 1octet avec que des 0 Si erreur détectée : ARQ Total : 17 octets, rendement = 15/17 = 88% 257
Codes réseaux informatiques CRC : cyclic redundancy check avec r bits de redondance Polynome générateur g= Σ i g i.x i de degré r sur F 2 Source: x=k bits! m(x) polynome de degré k-1 Exemple: m=01101 m(x) = x+x 2 +x 4 Codage: c = m.x r - (m.x r mod g) = m.x r + (m.x r mod g) On a c multiple de g Redondance r bits (g r = 1) 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 258
CRC standards CRC-8 : x 8 +x 2 +x+1 CRC-10 : x 10 +x 9 + x 5 +x 4 x+1 CRC-12 : x 12 +x 11 + x 3 +x 2 +1 CRC-16 : x 16 +x 15 + x 2 +1 CRC-CCITT : x 16 +x 12 + x 5 +1 CRC-32 : x 32 +x 26 +x 23 +x 22 +x 16 +x 12 +x 11 +x 10 + x 8 +x 7 +x 5 +x 4 + x 2 +x+1 259
Disques RAID Redundant Array of Independent (or inexpensive) Disks Grappe de N disques RAID 0 : disk stripping: accélérer le débit. RAID 1 : mirroring : tolère la défaillace de n-1 éléments G grappes de N disques chacune : RAID 0+1 versus RAID 1+0=RAID 10 260
Disques RAID Redundant Array of Independent (or inexpensive) Disks RAID 2 : n 3 code de Hamming: tolère 2 effacements ou 1 erreur de donnée RAID 5 : Block-level striping with distributed parity : tolère 1 défaillance RAID 6 : Block-level striping with double distributed parity 261
PAR-2 : Stockage pour systèmes P2P Stockage d'un fichier de 2km octets, soit k fichiers de m mots de 16 bits codé par n = k+r fichiers, répartis et dupliqués dans le système P2P Code: linéaire canonique G = [I R ] Ajout de r fichiers de redondance les fichiers de redondance contiennent aussi les hash des n fichiers Décodage: demande du téléchargement de tous les exemplaires possibles arrêt dès qu'on a obtenu k exemplaires corrects (vérification hash) décodage pour reconstruire les k fichiers source 262
Correction des effacements d un code linéaire Théorème: un code linéaire (n,k) sur V systématique de distance d permet de corriger (d-1) effacements Preuve constructive: Codage [x 1,,x k ]. G (k,n) = [c 1,, c i,, c j,,c n ] (sous forme systématique: toute sous-matrice kxk est inversible) i j = [c 1,,? i,,? j,,c n ] Canal avec effacements [x 1,,x k ] = G -1 (k,k). [c 1,,? i,,? j,,c n ] (avec k colonnes non effacées) Décodage avec correction Correction : résolution d un système linéaire 264
Table d entrelacement : principe simple Entrelacement avec profondeur p (exemple p=3) Message à coder: a b c d e f g Après codage (n=5): a 1 a 2 a 3 a 4 a 5 b 1 b 2 b 3 b 4 b 5 c 1 c 2 c 3 c 4 c 5 d 1 d 2 d 3 d 4 d 5 e 1 e 2 e 3 e 4 e 5 f 1 f 2 Table entrelacement à profondeur 3 : (table p x n remplie à la volée) a 1 a 2 a 3 a 4 a 5 b 1 b 2 b 3 b 4 b 5 c 1 c 2 c 3 c 4 c 5 Après entrelacement (écriture de la table par colonne): a 1 b 1 c 1 a 2 b 2 c 2 a 3 b 3 c 3 a 4 b 4 c 4 a 5 b 5 c 5 d 1 e 1 f 1 d 2 e 2 f 2 d 3 e 3 f 3 d 4 e 4 Comme 2 symboles d un même mot de code sont distants de p positions: Propriété: si le code initial corrige des rafales de longueur l, l entrelacement à profondeur p corrige des rafales de longueur L: L = p.l Exemple: Un code de Hamming entrelacé à profondeur 10 corrige des rafales de longueur 10. 269
Table d entrelacement à retard ρ$ Entrelacement dans une table à n lignes et nr colonnes Exemple n= 5, ρ = 2. Message à coder: a b c d e f g Après codage (n=5): a 1 a 2 a 3 a 4 a 5 b 1 b 2 b 3 b 4 b 5 c 1 c 2 c 3 c 4 c 5 d 1 d 2 d 3 d 4 d 5 e 1 e 2 e 3 e 4 e 5 f 1 f 2 Table n x (ρ.n) remplie à la volée (ici n=5, ρ=2) a 1 b 1 c 1 d 1 e 1 f 1 g 1 h 1 i 1 j 1 a 2 b 2 c 2 d 2 e 2 f 2 g 2 h 2 a 3 b 3 c 3 d 3 e 3 f 3 a 4 b 4 c 4 d 4 a 5 b 5 Initialisation [ajout de r.n.(n-1)/2 symboles vides] m 1 n 1 o 1 p 1 q 1 r 1 s 1 t 1 u 1 v 1 k 2 l 2 m 2 n 2 o 2 p 2 q 2 r 2 s 2 t 2 i 3 j 3 k 3 l 3 m 3 n 3 o 3 p 3 q 3 r 3 g 4 h 4 i 4 j 4 k 4 l 4 m 4 n 4 p 4 p 4 e 5 f 5 g 5 h 5 i 5 j 5 k 5 l 5 m 5 n 5 En régime de croisière Après entrelacement (écriture de la table par colonne): a 1 - - - - b 1 - - - - c 1 a 2 - - - d 1 b 2 - - - e 1 c 2 a 3 - - f 1 d 2 b 3 - - g 1 e 2 c 3 a 4 - h 1 f 2 d 3 b 4 - i 1 g 2 e 3 c 4 a 5 j 1 h 2 f 3 d 4 b 5 Comme 2 symboles d un même mot de code sont distants de ρ.n+1 positions: Propriété: si le code initial corrige des rafales de longueur l, l entrelacement à retard ρ corrige des rafales de longueur L: L = (ρ.n+1).l Exemple: Un code de Hamming binaire (15,11) entrelacé à retard 4 corrige des rafales de longueur 61 bits. (avec une table de taille 15 x (15.4) = 900 bits) 270
Algorithme entrelacement: Lire le mot suivant (n symboles) et placer ses bits dans la table à partir de la colonne courante Transmettre la colonne courante sur le canal ++colonne courante modulo (ρ.n) Table d entrelacement Entrelacer(a 1 a 2 a 3 ) Entrelacer(b 1 b 2 b 3 ) Entrelacer(c 1 c 2 c 3 ) a 1 - - - - - - - a 2 - - - - - - - a 3 - a 1 b 1 - - - - - - a 2 b 2 - - - - - - a 3 b 3 a 1 b 1 c 1 - - - - - a 2 b 2 c 2 - c 3 - - - a 3 b 3 canal «a 1 - - canal «b 1 - - canal «c 1 a 2 - Entrelacer(d 1 d 2 d 3 ) Entrelacer(e 1 e 2 e 3 ) Entrelacer(f 1 f 2 f 3 ) Entrelacer(g 1 g 2 g 3 ) a 1 b 1 c 1 d 1 - - a 1 b 1 c 1 d 1 e 1 - a 1 b 1 c 1 d 1 e 1 f 1 g 1 b 1 c 1 d 1 e 1 f 1 - - a 2 b 2 c 2 d 2 e 2 - a 2 b 2 c 2 d 2 e 2 f 2 a 2 b 2 c 2 d 2 e 2 f 2 g 2 b 2 c 2 d 2 c 3 d 3 - - a 3 b 3 canal «d 1 b 2 - c 3 d 3 e 3 - a 3 b 3 c 3 d 3 e 3 f 3 a 3 b 3 c 3 d 3 e 3 f 3 g 3 b 3 canal «e 1 c 2 a 3 canal «f 1 d 2 b 3 canal «g 1 e 2 c 3 Entrelacer(h 1 h 2 h 3 ) Entrelacer(i 1 i 2 i 3 ) Entrelacer(j 1 j 2 j 3 ) Entrelacer(k 1 k 2 k 3 ) g 1 h 1 c 1 d 1 e 1 f 1 g 1 h 1 i 1 d 1 e 1 f 1 g 1 h 1 i 1 j 1 e 1 f 1 g 1 h 1 i 1 j 1 k 1 f 1 e 2 f 2 g 2 h 2 c 2 d 2 e 2 f 2 g 2 h 2 i 2 d 2 e 2 f 2 g 2 h 2 i 2 j 2 k 2 f 2 g 2 h 2 i 2 j 2 c 3 d 3 e 3 f 3 g 3 h 3 i 3 d 3 e 3 f 3 g 3 h 3 i 3 j 3 e 3 f 3 g 3 h 3 i 3 j 3 k 3 f 3 g 3 h 3 canal «h 1 f 2 d 3 canal «i 1 g 2 e 3 canal «j 1 h 2 f 3 canal «k 1 i 2 g 3 271
Désentrelacement Algorithme décentrelacement: Recevoir une colonne et la placer dans la table en colonne courante Construire le mot et le décoder ++colonne courante modulo (ρ.n) canal» d 1 b 2 - canal» a 1 - - canal» b 1 - - canal» c 1 a 2 - a 1 - - - - - a 1 b 1 - - - - a 1 b 1 c 1 - - - - - - - - - - - - - - - - - a 2 - - - - - - - - - - - - - - - - - - - - - Décoder (- - - ) Décoder (- - - ) Décoder (- - - ) canal» e 1 c 2 a 3 canal» f 1 d 2 b 3 canal» g 1 e 2 c 3 a 1 b 1 c 1 d 1 - - a 1 b 1 c 1 d 1 e 1 - a 1 b 1 c 1 d 1 e 1 f 1 g 1 b 1 c 1 d 1 e 1 f 1 - - a 2 b 2 - - - - a 2 b 2 c 2 - - - a 2 b 2 c 2 d 2 e 2 - a 2 b 2 c 2 d 2 - - - - - - Décoder (- - - ) - - - - a 3 - - - - - a 3 b 3 c 3 - - - a 3 b 3 Décoder (a 1 a 2 a 3 ) Décoder (b 1 b 2 b 3 ) Décoder (c 1 c 2 c 3 ) canal» h 1 f 2 d 3 canal» i 1 g 2 e 3 canal» j 1 h 2 f 3 canal» k 1 i 2 g 3 g 1 h 1 c 1 d 1 e 1 f 1 g 1 h 1 i 1 d 1 e 1 f 1 g 1 h 1 i 1 j 1 e 1 f 1 g 1 h 1 i 1 j 1 k 1 f 1 e 2 f 2 g 2 h 2 c 2 d 2 e 2 f 2 g 2 h 2 i 2 d 2 e 2 f 2 g 2 h 2 i 2 j 2 k 2 f 2 g 2 h 2 i 2 j 2 c 3 d 3 e 3 f 3 g 3 h 3 i 3 d 3 e 3 f 3 g 3 h 3 i 3 j 3 e 3 f 3 g 3 h 3 i 3 j 3 k 3 f 3 g 3 h 3 Décoder (d 1 d 2 d 3 ) Décoder (e 1 e 2 e 3 ) Décoder (f 1 f 2 f 3 ) Décoder (g 1 g 2 g 3 ) 272
Effacements 263
Code raccourci Exemple Reed-Solomon Def 4 : code raccourci : soit s V et 1 i n fixés: C = raccourci(c,i,s) ={c 1 c i-1 c i+1 c n tq c 1 c i-1 s c i+1 c n C} Remarque: on a d d Exemple de construction de code raccourci Matrice génératrice sous forme canonique mots de code qui ont ρ 0 aux ρ première positions Suppression des ρ premières lignes et colonnes Code (n-ρ, k-ρ, d) Application: code (100,68) dans GF(256) raccourci de Reed-Solomon Matrice initiale RS(255, 223) sous forme canonique Suppression des 155 premières lignes et colonnes 1 1 1 0 0 1 0 0 1 n=255 1 R 68 x32 R 223 x32 n=100 k = 223 k = 68 265
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 F 2 (6-correcteur) Autres données: code convolutif 266
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 267
Entrelacement Rafales d'erreurs 268
Code CIRC Cross Interleaved Reed-Solomon code Code de Reed-Solomon entrelacé croisé 273
CDROM / DVDROM (1/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 274
275
276
Code CIRC (32,24) Codage C1(28, 24) : ajout de 4 octets de parité puis entrelacement avec retard 4 C2(32,28) : ajout de 4 octets de parité Décodage CIRC : Lecture bloc de 32 octets Décodage par C2 : récupération de 28 octets corrige 0 ou 1 erreur. Si 2 erreurs (ou plus), les 28 octets sont effacés Désentrelacement des mots de 28 octets Décodage par C1(28,24) : corrige jusqu à 4 effacements. 277
Code CIRC / CD Audio Fréquence echantillonage = 44.1 khz 44100 * 2 (stéréo) * 16 = 1 411 200 bits pour 1 seconde audio Une rayure de 1 mm modifie environ 3300 bits sur la piste Bitstream source structuré en trames de 6 échantillons stéréo : Bloc : 1 trame = 6*16*2=192 bits = 24 octets source Codage C1(28, 24) : ajout de 4 octets de parité puis entrelacement avec retard 4 C2(32,28) : ajout de 4 octets de parité : corrige rafale de 3840 bits 1 octet supplémentaire C&D «Control&Display» => 33 octets (informations pour affichage durée, etc) Ecriture sur le disque: codage EFM (Eight-toFourteen Modulation) 1 trame de 192 bits = 33 * (14 + 3 [bits liason]) +27 [bits synchro]=588 bits Au final: 588*44100/6 = 4 321 800 bits «gravés» pour 1 second audio NB un 2 ème entrelacement corrige une rafale de 12288 bits par interpolation 278