You are on page 1of 5

Contrle d'erreur (CRC)

Janvier 2016
1. Contrle d'erreurs
2. Correction d'erreurs
3. Contrle de parit
4. Contrle de parit crois
5. Le contrle de redondance cyclique
6. Principe
7. Application pratique
8. Polynmes gnrateurs

Contrle d'erreurs
Le codage binaire est trs pratique pour une utilisation dans des appareils lectroniques tels qu'un
ordinateur, dans lesquels l'information peut tre code grce la prsence ou non d'un signal lectrique.
Cependant le signal lectrique peut subir des perturbations (distortion, prsence de bruit), notamment lors
du transport des donnes sur un long trajet. Ainsi, le contrle de la validit des donnes
est ncessaire pour certaines applications (professionelles, bancaires, industrielles, confidentielles,
relatives la scurit, ...).
C'est pourquoi il existe des mcanismes permettant de garantir un certain niveau d'intgrit des donnes,
c'est--dire de fournir au destinataire une assurance que les donnes reues sont bien similaires aux
donnes mises. La protection contre les erreurs peut se faire de deux faons :
soit en fiabilisant le support de transmission, c'est--dire en se basant sur une protection physique.
Une liaison conventionnelle a gnralement un taux d'erreur compris entre 10-5 et 10-7.
soit en mettant en place des mcanismes logiques de dtection et de correction des erreurs.
La plupart des systmes de contrle d'erreur au niveau logique sont bass sur un ajout d'information (on
parle de redondance ) permettant de vrifier la validit des donnes. On appelle somme de contrle
(en anglais checksum) cette information supplmentaire.

Correction d'erreurs
C'est ainsi que des systmes de dtection d'erreur plus perfectionns ont t mis au point, ces codes sont
appels :
codes autocorrecteurs
codes autovrificateurs

Contrle de parit
Le contrle de parit (appel parfois VRC, pour Vertical Redundancy Check ou Vertical Redundancy
Checking) est un des systmes de contrle les plus simples.
Il consiste ajouter un bit supplmentaire (appel bit de parit) un certain nombre de bits de donnes
appel mot de code (gnralement 7 bits, pour former un octet avec le bit de parit) dont la valeur (0 ou 1)
est telle que le nombre total de bits 1 soit pair. Pour tre plus explicite il consiste ajouter un 1 si le
nombre de bits du mot de code est impair, 0 dans le cas contraire.
Prenons l'exemple suivant :

Dans cet exemple, le nombre de bits de donnes 1 est pair, le bit de parit est donc positionn 0. Dans
l'exemple suivant, par contre, les bits de donnes tant en nombre impair, le bit de parit est 1 :

Imaginons dsormais qu'aprs transmission le bit de poids faible (le bit situ droite) de l'octet prcdent
soit victime d'une interfrence :

Le bit de parit ne correspond alors plus la parit de l'octet : une erreur est dtecte.
Toutefois, si deux bits (ou un nombre pair de bits) venaient se modifier simultanment lors du transport
de donnes, aucune erreur ne serait alors dtecte...

Le systme de contrle de parit ne dtectant que les erreurs en nombre impair, il ne permet donc de
dtecter que 50% des erreurs.
Ce systme de dtection d'erreurs possde galement l'inconvnient majeur de ne pas permettre de
corriger les erreurs dtectes (le seul moyen est d'exiger la retransmission de l'octet erron...).

Contrle de parit crois


Le contrle de parit crois (aussi appel contrle de redondance longitudinale ou Longitudinal
Redundancy Check, not LRC) consiste non pas contrler l'intgrit des donnes d'un caractre, mais
contrler l'intgrit des bits de parit d'un bloc de caractres.
Soit HELLO le message transmettre, en utilisant le code ASCII standard. Voici les donnes telles
qu'elles seront transmises avec les codes de contrle de parit crois :

Lettre Code ASCII


(sur 7 bits)

Bit de parit
(LRC)

1001000

1000101

1001100

1001100

1001111

1000010

VRC

Le contrle de redondance cyclique


Le contrle de redondance cyclique (not CRC, ou en anglais Cyclic Redundancy Check) est un moyen
de contrle d'intgrit des donnes puissant et facile mettre en oeuvre. Il reprsente la principale
mthode de dtection d'erreurs utilise dans les tlcommunications.

Principe
Le contrle de redondance cyclique consiste protger des blocs de donnes, appels trames
(frames en anglais). A chaque trame est associ un bloc de donnes, appel code de contrle (parfois
CRC par abus de langage ou FCS pour Frame Check Sequence dans le cas d'un code de 32 bits). Le code
CRC contient des lments redondants vis--vis de la trame, permettant de dtecter les erreurs, mais
aussi de les rparer.

Le principe du CRC consiste traiter les squences binaires comme des polynmes binaires, c'est--dire
des polynmes dont les coefficients correspondent la squence binaire. Ainsi la squence binaire
0110101001 peut tre reprsente
sous la forme polynomiale suivante :
0*X9 + 1*X8 + 1*X7 + 0*X6 + 1*X5 + 0*X4 + 1*X3 + 0*X2 + 0*X1 + 1*X0
soitX8 + X7 + X5 + X3 + X0ou encoreX8 + X7 + X5 + X3 + 1

De cette faon, le bit de poids faible de la squence (le bit le plus droite) reprsente le degr 0 du
polynme (X0 = 1), le 4me bit en partant de la droite reprsente le degr
3 du polynme (X3)... Une squence de n bits constitue donc un polynme de degr maximal n-1. Toutes
les expressions polynomiales sont manipules par la suite avec une arithmtique modulo 2.
Dans ce mcanisme de dtection d'erreur,
un polynme prdfini (appel polynme gnrateur et not G(X)) est connu de l'metteur et du rcepteur.
La dtection d'erreur consiste pour l'metteur effectuer un algorithme sur les bits de la trame afin de
gnrer un CRC, et de transmettre ces deux lments au rcepteur. Il suffit alors au rcepteur d'effectuer
le mme calcul afin de vrifier que le CRC est valide.

Application pratique
Soit M le message correspondant aux bits de la trame envoyer et M(X) le polynme associ. Appelons M'
le message transmis, c'est--dire le message initial auquel aura t concatn le CRC de n bits. Le CRC
est tel que M'(X)/G(X)=0. Le code CRC est ainsi gal au reste de la division polynomiale de M(X) (auquel
on a pralablement concatn n bits nuls correspondant la longueur du CRC) par G(X).
Le plus simple est encore de prendre un exemple : prenons le message M de 16 bits suivant : 1011 0001
0010 1010 (not B1 en hexadcimal). Prenons
G(X) = X3 + 1 (reprsent en binaire par 1001). Etant donn que G(X) est de degr 3, il s'agit d'ajouter 4
bits nuls M : 10110001001010100000. Le CRC est gal au reste de la division de M par G :
10110001001010100000
1001...,..,.,.,.....----...,..,.,.,..... 0100..,..,.,.,..... 0000..,..,.,.,..... ----..,..,.,.,..... 1000.,..,.,.,..... 0000.,..,.,.,..... ----.,..,.,.,..... 1000.,..,.,.,.....
1001,..,.,.,..... ----,..,.,.,..... 1111..,.,.,..... 1001..,.,.,..... ----..,.,.,..... 1100.,.,.,..... 1001.,.,.,..... ----.,.,.,..... 1101,.,.,..... 1001,.,.,..... ---,.,.,..... 1000.,.,..... 0000.,.,..... ----.,.,..... 10001,..... 1001,.,..... ----,.,..... 10000.,..... 1001.,..... ---- 1111,..... 1001,..... ---,..... 1100..... 1001..... ----..... 1100.... 1001.... ----.... 1010... 1001... ----... 0110.. 0000.. ----.. 1100.
1001. ----. 1010 1001 ---- 0011

Pour crer M' il suffit de concatner le CRC ainsi obtenu aux bits de la trame transmettre :
M' = 1011000100101010 + 0011
M' = 10110001001010100011

Ainsi, si le destinataire du message effectue la division de M' par G, il obtiendra un reste nul si la
transmission s'est effectue sans erreur :
10110001001010100011
1001...,..,.,.,...,,----...,..,.,.,...,, 0100..,..,.,.,...,, 0000..,..,.,.,...,, ----..,..,.,.,...,, 1000.,..,.,.,..... 1001.,..,.,.,..... ----.,..,.,.,..... 0010,..,.,.,.....
0000,..,.,.,..... ----,..,.,.,..... 0101..,.,.,..... 0000..,.,.,..... ----..,.,.,..... 1010.,.,.,..... 1001.,.,.,..... ----.,.,.,..... 0110,.,.,..... 0000,.,.,..... ---,.,.,..... 1101.,.,..... 1001.,.,..... ----.,.,..... 1010,.,..... 1001,.,..... ----,.,..... 0111.,..... 0000.,..... ---- 1110,..... 1001,..... ---,..... 1111..... 1001..... ----..... 1100.... 1001.... ----.... 1010... 1001... ----... 0110.. 0000.. ----,, 1101,
1001, ----, 1001 1001 ---0

Polynmes gnrateurs
Les polynmes gnrateurs les plus couramment employs sont :
CRC-12 : X12 + X11 + X3 + X2 + X + 1
CRC-16 : X16 + X15 + X2 + 1
CRC CCITT V41 : X16 + X12 + X5 + 1

(Ce code est notamment utilis dans la procdure HDLC.)


CRC-32 (Ethernet) : = X32 + X26 + X23 + X22 + X16 + X12 +
X11 + X10 + X8 + X7 + X5 + X4 + X2 + X + 1
CRC ARPA : X24 + X23+ X17 + X16 + X15 +
X13 + X11 + X10 + X9 + X8 + X5 + X3 + 1
Prcdent
4
5
6
7
8
9

Ralis sous la direction de Jean-Franois PILLOU,


fondateur de CommentCaMarche.net.
Ce document intitul Contrle d'erreur (CRC) issu de CommentCaMarche (www.commentcamarche.net) est mis disposition
sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixes par
la licence, tant que cette note apparat clairement.

You might also like