Вы находитесь на странице: 1из 29

Codage, détection et correction d’erreurs

Objectifs :

1. Introduire les concepts liés au codage de l’information


2. Présenter les principales techniques de détection et de
correction d’erreur

Sébastien JEAN
Pourquoi le codage ?
• Coder, c’est exprimer des concepts d’un « monde » d’une manière
appropriée à un autre : échange d’information

– Exemple :

• Exprimer le nombre entier 3 de manière à ce qu’il soit manipulable par un


ordinateur bâti autour d’une architecture 32 bits Intel

• Même lorsque les deux « mondes » sont équivalents, le transport


d’information peut parfois imposer une modification des données pour :

– Eviter le gaspillage : Compression


– Préserver la sécurité : Cryptographie
– Préserver le contenu : Détection / Correction d’erreurs

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 2


Définitions préliminaires 1/4
• Un alphabet est un ensemble fini non vide de symboles

– Exemple : A = {0,1} (alphabet binaire)

• Un mot est une suite finie de symboles construite à partir d’un alphabet donné

– Exemple : u = 01000100010100101001

• La longueur du mot u, notée | u |, est le nombre de symboles le constituant

– Exemple : u = 01000100010100101001, |u| = 20

• Le mot vide est le mot de longueur nulle, il est noté ε

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 3


Définitions préliminaires 2/4
• La concaténation de deux mots u et v est l’opération, notée . , consistant à mettre
les symboles de u et v bout à bout.

– Associativité : (u.v).w = u.(v.w) = u.v.w


– Elément neutre : u.ε = ε.u = u
– Longueurs : |u.v| = |u|+|v|

• On dit qu’un mot u est préfixe d’un mot v ssi ∃ un mot w tel que v = u.w

– Exemple : 01 est préfixe de 010

• On dit qu’un mot u est suffixe d’un mot v ssi ∃ un mot w tel que v = w.u

– Exemple : 10 est suffixe de 010

• Remarques :

– Le mot vide est préfixe et suffixe de tous les mots


– Un mot est préfixe et suffixe de lui même

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 4


Définitions préliminaires 3/4
Soit un alphabet A constitué de p symboles

• AN est l’ensemble des mots de longueur N (N≥0) pouvant être construits sur A

– A0 = {ε} (Attention ! {ε} ≠ { } !!!)


– A1 = A
– Nombre d’éléments de AN = Card(AN) = pN

• A+ est l’ensemble des mots de longueur ≥1 pouvant être construits sur A

– ε ∉ A+
– A+ = A1 ∪ A2 ∪ A3 ∪ … ∪ AN ∪ …

• A* est l’ensemble des mots de longueur ≥0 pouvant être construits sur A

– ε ∈ A*
– A* = A+ ∪ {ε}
– Toute partie de A* est appelée langage
© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 5
Définitions préliminaires 4/4
• Exemples :

Soit A = {0,1}

– A0 = {ε}

– A1 = A = {0,1}

– A2 = {00,01,10,11}

– A3 = {000,001,010,011,100,101,110,111}

– A4 = {0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,
1011, 1100,1101,1110,1111}

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 6


Représentation arborescente des langages
Représentation arborescente d’un ensemble de mots construits sur un alphabet

ici A = {0,1}

0 1

00 01 10 11

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 7


Codes, codage, décodabilité 1/4
• Un codage des mots sur un alphabet source S en des mots d’un alphabet
cible A est une application c : S* → A* (associant à des mots construits
sur S des mots construits sur A) telle que :

– c(ε) = ε
– c(u.v) = c(u).c(v)

• Le langage contenant les mots de A* associés aux symboles de S est


appelé code

• Coder un mot u, c’est trouver le mot v = c(u) associé par un codage c.

• Décoder un mot v, c’est retrouver son antécédent u par le codage c.

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 8


Codes, codage, décodabilité 2/4
• Exemple :

– S = {ga, bu, zo, meu}, alphabet (Shadock) source à 4 symboles

– A = {0,1}, alphabet (binaire) cible à 2 symboles

– Codage c (une possibilité) :

• c(ga) =0
• c(bu) =1
• c(meu) = 01
• c(zo) = 10

c(ga.bu.zo.meu) = 0.1.10.01 = 011001

– Langage (code) associé à c : {0,1,01,10}

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 9


Codes, codage, décodabilité 3/4
• Décoder = retrouver l’antécédent d’un mot

• Si le décodage est ambigu, il peut exister plusieurs antécédents

• c(ga) =0
• c(bu) =1
• c(meu) = 01
• c(zo) = 10

Quelle est la devise Shadock qui codée via c donne la suite 010110 ?
• ga bu ga bu bu ga « S’il n’y a pas de solution, c’est qu’il n’y a pas de problème »
• ga bu zo meu « En essayant continuellement, on finit par réussir. Donc, plus ça rate, plus on
a de chance que ça marche »
• meu meu zo « Il vaut mieux pomper même s’il ne se passe rien que risquer qu’il arrive
quelque chose de pire en ne pompant pas »
• ga bu ga bu zo « Pourquoi faire simple quand on peut faire compliqué ? »
• meu meu bu ga « Quand on ne sait pas où l’on va, il faut y aller !! … et le plus vite possible. »
• …

• Un « bon » code ne s’envisage que si aucun décodage n’est ambigü

– Code décodable de manière unique

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 10


Codes, codage, décodabilité 4/4
• Un code ne contenant que des mots de même longueur est appelé code de
longueur fixe

– Exemple : {00, 01, 10, 11}

• Un code contenant des mots de longueurs différentes est appelé code de


longueur variable

– Exemple : {0, 1, 00, 11}

• Un code préfixe est un code pour lequel aucun mot n’est préfixe d’un autre

– Exemples :

• c = {0, 10, 110} est préfixe


• c = {0, 01, 10} n’est pas préfixe (car 0 est préfixe de 01)

– Remarque : dans l’arbre associé, les mots du code sont des feuilles

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 11


Codage optimal
• Pourquoi un codage est-il meilleur qu’un autre ?

– parce qu’il produit en moyenne des mots moins longs qu’un autre

C1

blabla
C2

– Un codage optimal est un codage meilleur que tous les autres

• Un codage de longueur fixe optimal (minimal) est celui où la longueur des mots
est la plus petite permettant d’associer un mot à chaque symbole

– Si on a une source à 5 symboles, il faut au minimum une longueur de 3

• Pour les codages de longueurs variables, l’optimalité dépend de la distribution de


fréquences (probabilité de voir apparaître chaque symbole) et il existe des
méthodes pour construire des codages optimaux (Huffman)

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 12


Modèle de transmission de l’information 1/2

Source Information transmise canal Information reçue Données

Email Email
Blah blah blah Blah blah blah

Codage Décodage

• Les données peuvent être altérées durant leur transmission


– Il faut pouvoir détecter les erreurs, ou (mieux) les corriger

• Canal = estimation mathématique (probabiliste) des conditions réelles de


stockage ou de transmission.

• A la réception de données, trois cas possibles :

– Les informations sont indécodables Erreur !


– Les informations sont décodables mais incohérentes Erreur !
– Les informations sont décodables et cohérentes Erreur ?

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 13


Modèle de transmission de l’information 2/2
• Codage / décodage

Source Information transmise canal Information reçue Données

Email Email
Blah blah blah Blah blah blah

Codage Décodage

Codage de Codage de Décodage de Décodage de


source canal source canal

Altération
possible des
données
Adaptation, Détection
Optimisation d’erreur
d’espace

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 14


Canal binaire symétrique sans mémoire
• Canal dans lequel chaque bit est transmis indépendamment des autres, et a une
probabilité p d’être modifié lors de la transmission

1-p
0 0
p p

1 1
1-p

• Soient r bits choisis parmi les N bits reçus. La probabilité pour que ces r bits soient
erronés et que les autres aient été bien transmis est :

p (1− p)
r N −r

• La probabilité pour qu’il y ait exactement r bits erronés est :

C p (1− p)
r N −r N!
CN =
r r

N
Avec r!( N − r )!
© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 15
Détection d’erreur : techniques
• Remarque :

– Dans la suite, on s’intéresse uniquement à la transmission d’information


binaire, les codages sont alors des codages binaires

– On appellera message, l’ensemble des bits constituant l’information à


transmettre

• Si l’on veut pouvoir détecter des erreurs, le codage de canal induit toujours un
ajout d’information

• Il existe deux principales manières de rajouter cette information :

– On rajoute à la fin du message un ensemble de bits dédiés au contrôle


d’erreur

• CheckSum (somme de contrôle), CRC (Code de Redondance Cyclique), …

– On découpe le message en blocs et on calcule un ensemble de bits de


contrôle pour chacun des blocs

• On parle de codages par blocs


• Parité, …

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 16


CheckSum
• Somme de contrôle de s bits (en général 1) calculée en additionnant
les valeurs de blocs de b bits (en général 8) modulo 2s

• Exemple : Checksum sur 1 octet

– Message à transmettre : 011010100101010101010010

01101010 01010101 01010010 = 106 + 85 + 82 = 273

273 modulo 256 = 17

– Message transmis : 01101010 01010101 01010010 00010001

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 17


CRC 1/3
• On considère une suite de n+1 bits comme un polynome de degré n où
les coefficients ne peuvent prendre que les valeurs 0 ou 1.

– Exemple : 1001011 = x6 + x3 + x + 1

• L’addition et la soustraction de tels polynomes sont de simples Ou-Exclusifs

101101 = x5 + x3 + x2 + x0
+ 1011 = x3 + x+ x0
100110 = x5 + x2 + x

101101 = x5 + x3 + x2 + x0
- 1011 = - x3 -x - x0
100110 = x5 + x2 + x

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 18


CRC 2/3
• On choisit un polynôme générateur noté G(x) de degré d

– CRC-12 = x12 + x11 + x3 + x2 + x1 + 1


– CRC-16 = x16 + x15 + x2 + 1
– CRC-CCITT = x16 + x12 + x5 + 1
– CRC Eth. = x32 + x26 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + + x2 + x

• On ajoute au message M à transmettre un bloc B0 de d bits à 0

• On effectue la division de M.B0 par G(x), On obtient un reste R de d bits

– L’opération de division est la division classique avec l’addition et la soustraction précédentes

• On transmet M’ = M.R

• Si à l’arrivée on vérifie M’(x)/G(x) = 0, alors on considère qu’il n’y pas eu d’erreur.

• Un CRC de d bits permet de détecter :

– Avec une probabilité de 1 la présence de paquets d’erreurs de longueur < d


– Avec une probabilité de (1 - 1/2d-1) la présence de paquets d’erreurs de longueur d
– Avec une probabilité de (1 - 1/2d)la présence de paquets d’erreurs de longueur > d

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 19


CRC 3/3
• Exemple : CRC sur 4 bits 11010110110000 10011 = G(x)
10011 1100001010
10011
– M = 1101011011 10011
00001
– G(x) = x4 + x + 1 00000
00010
00000
– CRC = 1110 00101
00000
01011
– Message transmis : 00000
10110
10011
1101011011 1110 01010
00000
10100
10011
01110
00000
1110

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 20


Codages par blocs 1/2
• Principe du codage

1. On découpe le message (résultat du codage de source) en blocs de k bits


2. Chacun des blocs est codé séparément en un bloc de n bits
3. Les blocs de n bits sont ré-assemblés pour constituer le message transmis

• Principe du décodage

1. On découpe le message reçu en blocs de n bits


2. Pour chacun des blocs on cherche le mot du code (codage de canal) le plus
proche et on extrait le bloc de k bits d’information associé

k est le nombre de bits d’information


n-k est le nombre de bits de redondance
k/n est le taux d’information (ou rendement du codage)

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 21


Codages par blocs 2/2
• Exemple : le bit de parité

• Principe :

– On choisit une convention : parité paire ou impaire


– A chaque bloc de k bits on ajoute un bit tel que le nombre de 1 dans le bloc de k+1 bits
respecte la convention de parité.

• Exemple :

– Soit le message 01011110. On choisit k = 4 et une parité paire


– Les deux blocs de 4 bits à coder sont donc 0101 et 1110
– Les deux blocs de 5 bits à transmettre sont donc 01010 et 11101
– Le message transmis est alors 0101011101

• Propriétés :

Le codage de parité permet de détecter un nombre impair d’erreurs


Le codage de parité ne permet pas de corriger les erreurs détectées

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 22


Détection et correction d’erreurs 1/6
• Définition :

La distance de Hamming entre deux mots binaires u et v, notée d(u,v), est


égale au nombre de bits qui diffèrent dans ces deux mots.

• Exemple :

– Soit u = 010111 et v = 110101


– d(u,v) = 2

• Définition :

La distance d’un mot u à un code C est égale à la plus petite distance de


Hamming entre ce mot et les mots du code C

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 23


Détection et correction d’erreurs 2/6
• Définition :

L’addition binaire, notée ⊕ est équivalente à l’opération logique Ou-Exclusif

0 ⊕ 0 = 0, 0 ⊕ 1 = 1, 1 ⊕ 0 = 1, 1 ⊕ 1 = 0

• Propriétés :

Associativité : (u ⊕ v) ⊕ w = u ⊕ (v ⊕ w) = u ⊕ v ⊕ w
Commutativité : u⊕v =v⊕u
Elément neutre : u⊕0 =u
Opposé : -u tel que u ⊕ -u = 0 , -u = u

• L’addition de deux mots binaires est le mot résultant de l’addition bit-à-bit

– 10100 ⊕ 01 = 10101

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 24


Détection et correction d’erreurs 3/6
• Définition :

Le poids d’un mot u, noté wt(u), est le nombre de bits de u non nuls

wt(u) = d(u,0)

• Propriétés :

wt (u ⊕ v) = d(u,v)
d (u ⊕ w, v ⊕ w) = d(u,v)

• On dit qu’il y a erreur de transmission si le mot v reçu est différent du


mot u envoyé.

– C’est-à-dire qu’il existe un mot e non nul tel que v ⊕ e = u


– wt(e) = t représente alors le nombre d’erreurs
– Si u est un mot du code C, v est à une distance inférieure ou égale à t de C

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 25


Détection et correction d’erreurs 4/6
• Définition :

La distance minimale d d’un code C est donnée par :

d = min d (u , v) = min wt (u ⊕ v)
u ,v∈C u , v∈C
u ≠v u ≠v

• Code détecteur :

Un code C de longueur fixe n détecte v comme étant une erreur si v ∉ C.

C est dit t-détecteur s’il détecte les mots comportant de 1 à t erreurs, c’est-à-
dire les mots situés à une distance non nulle inférieure ou égale à t de C

Pour qu’un code C de distance minimale d soit t-détecteur,


il suffit que d > t

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 26


Détection et correction d’erreurs 5/6
• Soit C un code de longueur n, u un mot de C et e un mot de poids t tel que v = u ⊕ e
n’appartient pas à C.

C corrige v (en u) si :

– Il n’existe pas de mot de C dont la distance à v soit strictement inférieure à t


(i.e. v a été détecté comme une erreur)
– u est le seul mot de C à distance t de v

• C est t-correcteur s’il corrige tous les mots ayant subi de 1 à t erreurs

Pour qu’un code C de distance minimale d soit t-correcteur,


il suffit que d > 2t

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 27


Détection et correction d’erreurs 6/6
• Exemple :

• Soit le codage C suivant :

C(a) = 00000
C(b) = 01010
C(c) = 10011
C(d) = 10110
C(e) = 11111

• sa distance minimale est 2 (00000 et 01010)

• C est 1-détecteur puisque d = 2 >1

• C est 0-correcteur puisque d = 2 > 1

• C n’est pas 1-correcteur puisque d = 2 < 3

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 28


FIN !

© S.JEAN, avril 2005, v1.3 Codage, détection d’erreurs 29

Вам также может понравиться