Vous êtes sur la page 1sur 9

Chapitre 2 Codage et Protection contre les erreurs

3.1 Codage et représentation de l’information textuelle :


Un code est caractérisé par sa longueur, qui n’est autre que le nombre de bits représentant chaque caractère.
Les codes les plus fréquents en téléinformatique ont des longueurs de 5, 6 ou 7 ou 8 bits permerttant de coder
respectivement 32, 64, 128 ou 256 caractères différents.

Code CCITT (comité consultatif international télégraphique et téléphonique-) Ce code, encore appelé code
Baudot est utilisé pour la transmission sur le réseau télégraphique (TELEX). C’est un code à 5 bits qui ne
permet donc que 32 combinaisons
Code DCB (décimal code binaire) ce code à 6 bits a été très utilisé pour la transmission avec des terminaux
asynchrones. Il esiste aussi une variante à 4 bits.
Code CCITT n°5 à 7 bits, appelé aussi code ASCII (American Standard Code for Information Interchange)
ou encore alphabet international n°5 est très utilisé et permet de coder 128 caractères
Code EBCDIC ce code (Extended Binary Coded Decimal Interchange Code) à 8 bits et très utilisé du fait
que chaque caractère est représenté par un octet.

La transmission de données entre machines distantes s’effectue en général en série par bit et la communication
entre équipements informatiques donne lieu à l’échange de messages qui comportent un nombre variables de
bits. Les messages qui constituent la partie utile de l’information sont complétés par des informations de contrôle
et de supervision telles que l’adresse du destinataire et une séquence de contrôle d’erreurs.
Entete (header) + texte (text) + terminaison (trailer).

3.2- Problématique:
Nous avons vu dans le chapitre précédent que les lignes de transmission n’étaient pas parfaites et que des erreurs
pouvaient être introduites sur les symboles d’une suite binaire. Les origines de ces erreurs peuvent être recensées
et dépendent :
- du nombre de répéteur
- du support de transmission
- du débit, du type de codage, modulation ...
Ce taux varie de 10 -7 à 10 -9 .

L’objet de cette partie est de décrire les méthodes couramment utilisées pour protéger les informations émises
des erreurs de transmission. La stratégie d’utilisation du codeur et du décodeur dépend de l’ensemble du système
de transmission de données.
- Cette stratégie d’utilisation est une simple détection lorsque les symboles sont restitués au collecteur avec une
alarme dès que le décodeur détecte une erreur. Cette erreur peut faire l’objet d’une correction d’erreurs mais
deux cas apparaissent :
- Le décodeur corrige automatiquement certaines erreurs Correction d’erreur directe.
- Le décodeur ne peut que détecter les erreurs et il est donc nécessaire de retransmettre une partie des données
pour réaliser la correction. Cette stratégie est une correction par retransmission ARQ.

3.3- Méthodes simples de détection et de corrections des erreurs :


a) vérification par répétition :

consiste à faire suivre le message d’une réplique du message d’origine, à la réception. Le récepteur compare
les deux copies, il est accepté que s’il y ‘a identité. Dans le cas contraire, il est demandé à l’émetteur de
retransmettre le message.
On peut améliorer cette méthode on procédant à la correction, on envoyant un nombre impaire de copies au
récepteur, le récepteur détermine le nombre majoritaire de copies identiques et les considère comme étant le
message d’origine ou au pire des cas renvoie une copie à l’émetteur pour vérification.

b) le mode Echoplex :

Ce mode permet dans le cas d’un mécanisme de transmission le plus élémentaire d’échanger des informations
entre deux machines informatiques avec un taux d’erreur nul. Lors d’une communication, les caractères transmis
d’une machine vers une autre sont retransmis à l’arrivée vers la machine émettrice. De ce fait, si une erreur
se produit dans la transmission ou la retransmission le caractère en erreur est automatiquement détecté et
retransmis. Le mécanisme des échanges est montré par la figure ci-dessous
3.4- Méthodes de corrections des erreurs par retransmission : concepts de base
Consiste à renvoyer à chaque réception d’un message de données M, un message court appelé « ACK » qui est
positif si le message ne comporte pas d’erreurs et négatifs sinon dans ce cas l’émetteur ré-émet le message.

Inconvénients:
Cas où l’ACK est perdu : dans ce cas on implémente un temporisateur qui s’enclenche dés que le message est
envoyé, si après « t » secondes l’ACK n’a pas été reçu, on conclue que le message a été perdu ou que l’ACK a
été perdu. On procède au renvoi du message.

Problématique: difficulté d’estimer le temps de transfert.

3.5 La détection d’erreur par vérification de la parité par caractère


Dans ce mode de fonctionnement, les caractères transmis sont automatiquement codés avec un bit de contrôle
relevant d’une parité paire ou impaire.
Dans le cas d’une parité paire, ce bit est positionné à 0 si le nombre d’éléments binaires positionnés au niveau 1
dans le mot est paire et il est positionné à 1 si ce nombre est impaire.

Exemple: En utilisant un code 7 bits du CCITT (code n° 5), on peut utiliser le 8 ième bit comme bit de parité.
Suite binaire sur 7 bits Parité paire parité impaire
A 1000001 01000001 11000001
E 1010001 11010001 01010001
V 0110101 00110101 10110101
Cette solution permet de détecter une erreur simple sur chacun des mots transmis, mais dès que ce nombre est
excédé il est impossible de détecter des erreurs avec certitude.
Cette méthode ajoute 1 bit tous les 7 bits transmis. Le rendement de la transmission est donc de:
R = 7 = 87%
8
Exemple:
Sans erreur Avec 1 erreur Avec 2 erreurs Avec 3 erreurs
On veut transmettre A 1000001 1000001 1000001 1000001
Calcul du bit de parité 01000001 01000001 01000001 01000001
Transmission 01000001 01000001 01000001 01000001
Réception 01000001 01010001 01010000 01001111
Suppression du bit de 1000001 1010001 1010000 1001111
parité
Calcul le bit de parité 01000001 11000001 01010000 11001111
Les nombres sont égaux OK Erreur OK Erreur

Une amélioration à ce système peut être apportée en transmettant tous les n mots un mot de contrôle sur les n
précédents : Contrôle de parité vertical.
A 1000001 01000001
B 1000010 01000010
C 1000011 11000011
D 1000100 01000100
E 1000101 11000101
F 1000110 11000110
G 1000111 01000111
H 1001000 01001000
Contrôle 0001000 10001000

Fonctionnement de cette méthode :

On transmet le n+1 mot du bloc


01000001 01000010 11000011 01000100 11000101 11000110 01000111 01001000 10001000
A la réception on supprime tous les tests de parité
1000001 1000010 1000011 1000100 1000101 1000110 1000111 1001000
et on les recalcule.
01000001 01000010 11000011 01000100 11000101 11000110 01000111 01001000 10001000
Si les mots reçus sont en tout point identique à ceux recalculés il n’y a pas d’erreur sinon il y a erreur.

Cette méthode ajoute 1 bit tous les 7 bits transmis et 8 bits tous les 8 mots transmis. Le rendement de la
transmission est donc de :
R = 7*8 = 77 %
(7+ 1) * 8+ 8
Remarque: dans le cas d’une détection avec parité PAIRE le LRC de l’octet de contrôle du bloc (le VRC)
vérifie à la fois l’octet VRC et Les différents LRC.
Dans le cas d’une parité IMPAIRE il n’y a pas de correspondance.

3.6. Définitions générales

Opérations :
somme modulo 2 0+0=0 0+1=1 1+0=1 1+1=0
multiplication 0.0=0 0.1=0 1.0=0 1.1=1

Définition 1: On appelle un code noté C(n,k) telle que n est la taille du code et k est la taille de l’information,
un ensemble de mots distincts construits sur l’ensemble {0,1}.
Exemple : un code C(4,2) : 0010 1000 0111 1110

Définition 2: On appelle

- Poids de Hamming : Le poids de Hamming d’un vecteur représente le nombre de 1 qu’il contient.
- Distance de Hamming : C’est le nombre de bits en lesquels 2 mots d’un code diffèrent (on peut dire aussi
que c’est le nombre de bits de leur somme modulo 2).
- Distance de Hamming minimal d’un code: C’est la plus petite distance de Hamming entre deux mots d’un
même code. Dmin = min{distance de Hamming entre u et v / u , v ∈ code}.

Exemple:
Les mots 01010101 et 00001111 ont une distance de 4 entre eux : somme = 0 1011010 nombre de 1=4 .
La distance de Hamming minimale du précédents code C(4,2) est égale à 2.

Théorème : Soit un code C(n,k) tel que sa distance de hamming minimale est égale à Dmin :
Si Dmin = 2d + 1 , alors la détection est d’ordre ≤ 2d et la correction est d’ordre ≤ d.

Si Dmin = 2d , alors la détection est d’ordre ≤ 2d – 1 et la correction est d’ordre ≤ d – 1.

Considérons le code suivant {0→0000 ; 1→1111}, k = 1, n = 4. Ce code possède 3 bits de contrôles.


On a Dmin= 4. Donc, détection d’ordre ≤ 3 et correction d’ordre ≤ 1.
Efficacité d’un code: L’efficacité d’un code est d’autant meilleure que les mots du code sont plus distincts
les uns des autres. Elle dépend de la distance minimale de Hamming entre les différents mots de codes. On
considère toujours des codes de distance minimale de 2 ou plus.

nombre de messages reconnus faux


e=
L’efficacité du code est nombre de messages faux .

Définition 3 : Soit X le bloc émis et X’ le bloc reçu. On appelle vecteur d’erreur E = X ⊕ X ' . Si E = 0, pas
d’erreur. Si E ≠ 0, il y a une erreur, localisé sur les bits 1 de E.

Définition 4 : Soit p la probabilité d’avoir une erreur sur 1 bit. La probabilité qu’il n’y ait pas d’erreur est donc
1 – p (toujours pour 1 bit). La probabilité de bien recevoir n bits est donc
(1 − p )n et la probabilité pour qu’il y
1 − (1 − p ) .
n
ait au moins une erreur est

3.7 Codes linéaires systématiques

Définition : On appelle un code linéaire C(n,k) un code linéaire systématique un code tel que les (n-k) nits de
contrôle sont obtenues par combinaison linéaire des k bits d’info utile.
Formellement:
X = (x1 * x n ) le mot de code à générer
Soit

Soit U=(u1, .. ,uk) est le vecteur d’information utile.

Soit A le vecteur de contrôle A= (a1,..an-k). alors ai= α1i u1+ α2i u1+..+ αki uk.

X=(u1,.....,uk,,a1,..,an-k)

Ces combinaisons linéaires peuvent être formulées par un produit matricielle : X =U G


La matrice G est une matrice de dimension (k, n), de la forme (Ik, P ) avec P de dimension (k,r) avec r=n-k

α11 α12 α1k


α21 α22 α2k
P

αr1 αr2 αrk

1) Codage. 

Soit la matrice génératrice d’un code G de dimension k × n vérifie

Le calcul du mode de code X est effectuée par : U × G = X .


Le sous-produit matriciel. U A calcule les bits de contrôle.

1 0 0 0 1 1
 
G = 0 1 0 1 0 1
0 0 1 1 1 0
Considérons le code (n = 6, k = 3) défini par la matrice.  .
Considérons un bloc de données U décrivant toutes les entrées possibles :

0 0 0 0 0 0 0 0 0
   
0 0 1 0 0 1 1 1 0
U = X =
* * * * * * * * *
   
1 1 1  . On calcule 1 1 1 0 0 0
  .
2) Décodage.

Soit Y le vecteur du mot de code reçu.

La vérification de l’intégrité de Y ( si X=Y) se fait par le calcul du syndrome S :

Le vecteur syndrome du vecteur Y est S(Y)=Y × H, tel que H est une matrice de dimension (n, n-k).
H est appelée matrice de décodage et est définie par :
P
H= In-k
On a S(Y)=0, (vecteur nul) si Y appartient au code. En revanche, si on introduit une erreur, Y = X +E
avec E le vecteur d’erreur, alors S(Y)= S(E) car S(X)=0.
Localisation d’erreur. Si S(Y)=0, alors il n’y a pas d’erreur et Y=X.

Si le code est correcteur Dmin ≥ 3


Il y a au moins une erreur, si S(Y)≠0,

On peut localiser une erreur simple en recherchant la ligne identique à S(Y) dans la matrice H. La position
de l’erreur dans Y correspond au rang de la ligne trouvée. On peut ensuite la corriger.

0 1 1
 
1 0 1
1 1 0
HT =  
1 0 0
0 1 0
 
0 0 1
Poursuivons notre exemple avec la matrice   et Y = (0 0 1 1 1 0)..
On vérifie : S(Y)=(0,0,0) . Supposons qu’une erreur se produise sur le second bit, on reçoit

S(Y)=(0 1 1 1 1 0). On calcule alors le syndrome S(Y)=(1,0,1) qui correspond à la deuxième ligne de
H ; l’erreur est localisée et peut être corrigé.

Circuit de codage et de décodage d’un code linéaire:

Circuit de correction d’un code linéaire:


2.5 Codes polynomiaux
Ces codes, font appel à une représentation du message par un polynôme. La formule générale d'un message
binaire est un polynôme de la forme :

P(x) = an xn + an-1 xn-1 + ... + a1 x + a0 x0

Les coefficients an ne peuvent prendre que les valeurs 0 ou 1 en binaire et les xn sont les puissances successives
de 2. Si nous divisons ce polynôme par un autre polynôme binaire, le reste de la division constitue le caractère de
contrôle.

Exemple: Soit à transmettre le message 1011011. le polynôme correspondant à la forme: P(x)= x6+x4+ x3+ x +1
Si le polynôme diviseur est égal à : G(x) = x4+ x + 1
Ce qui donne en binaire : 10011
Il faut donc diviser 1011011 par 10011.

Formellement:

Supposons un code C(n, k) n: Taille du code et k : taille de l’info utile.


Soit Z(x) le polynôme représentant l’information utile à envoyer , Z est de degré (k-1) puisque l’information
comporte k bits : ak-1 xk-1 + ... + a1 x + a0 x0

a- Codage:

Soit G(x) le polynôme générateur du code C (n,k) de degré r tel que r = (n-k) +1
Il faut multiplier Z(x) par xr r = (n-k) pour créer un décalage à gauche de r bits.

Exemple: soit Z(x) 1011011 on multiplie par x4 et on obtient : 10110110000

On divise le produit par le polynôme générateur G(x) qui d’ordre r

On obtient: Z(x) xr = Q(x) G(x) + A(x) où:

• Q(x) : polynôme quotient


• A(x) : reste de la division de degré: r-1.

Donc on obtient le mot de code à envoyer comme suit: Y(x) = Z(x) xr +A(x) = Q(x) G(x)

Y(x) désigne un polynôme de degré (n-1).

La division est exécutée de plusieurs manières :

Méthode manuelle:

- Nous ajoutons à sa droite, autant de 0 que le diviseur comporte de bit moins un (ici 5-1 =4) ce qui donne
10110110000.
- Puis nous exécutons la division par soustractions successives (soustractions grâce au OU-exclusif) :

10110110000
-10011
0010111
-10011
0010000
-10011
0001100

- la dernière ligne de la division donnera le reste donc le CRC (champs vérification); c'est lui qui sera ajouté au
message que l'on va transmettre. Y(x) 1011011 1100
b-Décodage

A la réception, un calcul semblable s'effectue sur le mot reçu, mais il faut, ici, que le reste soit nul. Dans le
cas contraire, c'est qu'une erreur est survenue en cours de route.
Pour procéder à la vérification nous effectuons comme suit :

ÿ(x) = y(x) + E(x) avec E(x) le polynôme erreur.

On Calcule le syndrome : S(x)= ÿ(x) Mod( G(x)) = (Y(x) +E(x)) Mod( G(x)) = 0 + E(x) Mod( G(x))

Aucune erreur n’est détectée si le syndrome S(x) =0 sinon elle est détectée si S(x) <> 0

Pour qu’une erreur puisse être détectée : E(x) <> 0 il faut que G(x) ne divise pas E(x).

Exemple:

a) sans erreur b) avec erreur


10110111100 10110101100
-10011 -10011
0010111 0010110
-10011 -10011
0010011 0010111
-10011 -10011
0000000 0010000
10011
00011

Si le reste est différent de 0 , le transfert s'est mal effectué.

Circuit logique d’un codeur polynomial:


Les principaux polynômes diviseurs sont :
LRCC-8 : x8+1
LRCC-16 : x16+1
CRC 12 : x12 + x11 + x3+ x2 + x + 1
CRC 16 Forward : x16+x15+x2+1
CRC 16 Backward : x16+ x14+x + 1
CRC CITT Forward : x16+ x12+ x5 + 1
CRC CITT Backward : x16 + x11 + x4 +1

Le CRC-12 est appliqué aux systèmes à mots de 6 bits.


Le CRC-CITT est le standard européen, pour système à mots de 8 ou 16 bits; il procure des détections
d'erreurs au-delà de 12 bits de message avec une fiabilité de 99%.

C- Propriétés des codes polynomiaux

ÿ(x) = y(x) + E(x)

- Toute erreur simple est détectée si G(x) comporte plus d’un coefficient non nul

- Les erreurs doubles sont toutes détectées si G(x) ne divise pas xu+1 où u appartient à {1, n-1} n taille
du code

- L’erreur sur un message comportant un nombre impair d’erreur est toujours détectée si le polynome
générateur G est divisible par (x+1)

- Un code polynomial détecte toutes les salves (suite d’erreurs) de longueur inférieure ou égale à « r »
avec r degré de G.

2.5 Codes de hamming :

Un code de hamming est un code tel que sa distance minimale est égale au moins à 3. Ce code peut corriger au
moins une erreur.

Dmin =3 corrige une erreur et détecte deux erreurs.

Principe :

00 010 Dmin =3 supposons une erreur simple ou double, elle est tout le temps détectée.
01 111
10 101
11 000
Une erreur simple peut être corrigée: 00 110 distance de Hamming (ÿ, y) minimale) c’est le mot de code 1 qui
est le vrai, car le plus proche en termes de distance par rapport au mot reçu.

2.6. Exemple de Protocole de liaison : Protocole HDLC


HDLC (High Level Data Link) est un protocole de liaison base sur l’élément binaire. Parmi ses caractéristiques :

1. Il permet une exploitation en Duplex de la liaison.


2. Les messages appelés trames, peuvent contenir à la fois des données et les informations de service, telles que
les accusés de réception.
3. Plusieurs trames peuvent être émises en séquence sans qu’un accusé de réception soit envoyé pour chacune
d’elles.
4. Toutes les trames, mêmes celles ne contenant pas de données utiles, sont protégées des erreurs de
transmission par un FCS (frame Check sequence).
5. Toutes les trames possèdent un format unique avec seul type de délimiteur de début et de fin de trame
appelé « fanion »
6. Il assure la transmission de suites binaires et non de caractères ; le transfert s’effectue sans aucune
interprétation de son contenu.

Structure d’une trame HDLC :

Fanion Adresse Commande Information Vérification Fanion


1 octet 1 octet 1 octet N bits 2 octets 1 octet

Fanion : Délimiteur de trame ayant la configuration suivante 0111110

Une trame valide comprend donc un minimum de 32 bits entre fanions. Les autres champs sont localisés
à leurs positions par rapport aux fanions. Pour éviter la simulation d’un fanion dans la trame, on utilise la
technique « d’insertion de zéro à l’émission, qui insère un zéro après 5 un consécutifs ; ces zéros seront
supprimés à la réception.
Le champ commande le type de trame, trois trames sont définies :

- Format d’information : Les trames de type I sont utilisées pour les transfert de données. Chaque trame
de type I est identifiée par un numéro de séquence NS.

0 NS P NR

- Format de supervision : Les trames de type S sont utilisées pour accuser réception.

1 0 S S P NR

- Format non numéroté : Les trames de type U sont utilisées pour la gestion de la liaison (établissement et
rupture logiques de la liaison etc)

1 1 M M P M M M

NS : est un compteur d’émission sur 3 bits, il indique le numéro (Modulo 8) de la trame de type I à envoyer
prochainement.
NR : est un compteur de réception sur 3 bits, il indique le numéro (Modulo 8) de la prochaine trame de type I à
recevoir.
P : est mis à un pour inviter le récepteur à accuser réception des trames de type I envoyées.
SS : permettent de coder quatre types d’accusés de reception :

RR : (Receive Ready) accuse de la bonne réception jusqu’à la trame numéroté NR-1, et informe son vis-
à-vis qu’il est prêt à recevoir pour sa part des trames de type I.
REJ: (Reject) demande à retransmettre toutes les trames envoyées à partir du numéro NR. Les autres ont
été correctement reçues.
RNR : (Receive not Ready) accuse de la bonne réception jusqu’à la trame numéroté NR-1, et demande
l’arrêt momentané de l’envoi de trames de type I. L’envoi de ces trames pourra reprendre lorsqu’il
signifiera son état avec RR.
SREJ: (Selective reject) demande à retransmettre seulement la trame portant le numéro NR. Les autres
ont été correctement reçues.

Le champ Information Ce champ est présent seulement dans les trames de type I et certaines trames de type U.
Le champs vérification contient le reste de la division ( 2 octets) champs (A, C, I) par le polynôme générateur
de degré 16 : X 16 + X12 + X5 +1.