Vous êtes sur la page 1sur 18

I-Introduction :

La théorie des communications s’intéresse aux moyens de transmettre une


information depuis la source jusqu’à un utilisateur à travers un canal. La nature de la source
peut être très variée. Il peut s’agir par exemple d’une voix, d’un signal électromagnétique
ou d’une séquence de symboles binaires. Le canal peut être une ligne téléphonique, une
liaison radio, un support magnétique ou optique. La transmission peut se faire dans
l’espace ou dans le temps. Le codeur représente l’ensemble des opérations effectuées sur
la sortie de la source avant la transmission. Ces opérations peuvent être par exemple la
modulation, la compression, le brouillage, l’ajout de redondance pour combattre les effets
du bruit, ou encore l’adaptation à des contraintes de spectre. Elles ont pour but de rendre
la sortie de la source compatible avec le canal. Enfin le décodeur doit être capable, à partir
de la sortie du canal, de restituer de façon acceptable l’information fournie par la source.

1
II- Généralités
Vers la fin des années 30, Claude Shannon démontra qu’à l’aide de "contacteurs"
(interrupteurs) fermés pour vrai et ouverts pour faux il était possible d’effectuer des
opérations logiques en associant le nombre 1 pour vrai et 0 pour faux.
Ce codage de l’information à deux états est nommé base binaire. C’est grâce à ce
codage que fonctionnent les ordinateurs. Il consiste à utiliser deux états électriques
différents pour différencier les deux états, le 0 et le 1, et ainsi coder les informations.
Nous allons tout d’abord faire une brève introduction sur le codage et ses
applications puis nous nous intéresseront aux différents codes présents de nos jours sur
nos ordinateurs comme les codes détecteurs d’erreurs et les codes correcteurs.

La communication nécessite la compréhension entre les deux entités communicantes.


L’émetteur envoie de l’information au récepteur qui doit savoir l’interpréter pour la
comprendre. Le codage de l’information est la première étape de toute communication.
Ainsi pour comprendre les 0 et les 1 de nos machines, il a bien fallu un codage et décodage
pour que l’information arrive jusqu’à nos écrans de manière compréhensible, l’information
a été traduite.
Il existe plusieurs types de codage et nous autant que débutants ce qui nous
intéresse c’est le codage de source et le codage de canal.

 Le codage de source :

Le codage de source ou compression des données sert à fournir une représentation


efficace des données (un taux de compression important) tout en préservant l’information
essentielle qu’elles portent. Il est employé pour le stockage ou la transmission de ces
données (on appelle données le résultat de la numérisation de signaux comme ceux de
parole ou d’images ou plus généralement les données disponibles sur un fichier
d’ordinateur). Le codage de source est d’autre part connecté à d’autres applications
techniques telles que la classification d’images, la reconnaissance vocale, etc.

2
La compression a pour objectif de réduire la quantité d’informations nécessaires pour
représenter des signaux numériques. On cite deux types de compression :

- Sans pertes (Zip, Rar , etc ).

- Avec pertes (MP3, JPEG, etc).

Exemple : code ASCII : 7 bits dans chaque octet utilisé.

 Le principe du codage de source:

 Contraintes relatives á la compression :

Contrainte coté récepteur : Signaux lus et décomprimés rapidement => Streaming


vidéo/audio.

Contrainte coté émetteur : Volume de données impossibles á conserver => Acquisition


satellite.

Contrainte Bilatérale : Compressés Et décompressés rapidement => Téléphonie.

Pour un codage sans perte ou cherchera à maximiser le taux de compression et à minimiser


la complexité de mise en œuvre et le retard introduit. Pour les codages avec perte on
cherchera aussi à maximiser le taux de compression et à réduire la complexité mais aussi à
avoir le moins de perte possible.

Cette « perte » sera appréciée de façon objective par des mesures de distorsion ou de
rapport signal sur bruit. Pour des signaux audio ou vidéo on évaluera la qualité subjective
des données reconstituées et on calculera des grandeurs objectives tenant compte de nos
capacités de perception (RSB perceptuel).

3
 Le Codage de Huffman:
David Huffman a proposé en 1952 une méthode statistique qui permet d'attribuer
un mot de code binaire aux différents symboles à compresser (pixels ou caractères par
exemple). La longueur de chaque mot de code n'est pas identique pour tous les symboles:
les symboles les plus fréquents (qui apparaissent le plus souvent) sont codés avec de petits
mots de code, tandis que les symboles les plus rares reçoivent de plus longs codes binaires.
On parle de codage à longueur variable (en anglais VLC pour variable code length)
préfixé pour désigner ce type de codage car aucun code n'est le préfixe d'un autre.
Ainsi, la suite finale de mots codés à longueurs variables sera en moyenne plus petite
qu'avec un codage de taille constante.

Le codeur de Huffman crée un arbre ordonné à partir de tous


les symboles et de leur fréquence d'apparition. Les branches sont construites
récursivement en partant des symboles les moins fréquents.

La construction de l'arbre se fait en ordonnant dans un premier temps les symboles par
fréquence d'apparition. Successivement les deux symboles de plus faible fréquence
d'apparition sont retirés de la liste et rattachés à un nœud dont le poids vaut la somme des
fréquences des deux symboles. Le symbole de plus faible poids est affecté à la branche 1,
l'autre à la branche 0 et ainsi de suite en considérant chaque nœud formé comme un
nouveau symbole, jusqu'à obtenir un seul nœud parent appelé racine.
Le code de chaque symbole correspond à la suite des codes le long du chemin allant de ce
caractère à la racine. Ainsi, plus le symbole est "profond" dans l'arbre, plus le mot de code
sera long.

Soit la phrase suivante : "COMME_CHARMANT_E". Voici les fréquences d'apparitions des


lettres :

4
Voici l'arbre correspondant :

Les codes correspondants à chaque caractère sont tels que les codes des
caractères les plus fréquents sont courts et ceux correspondant aux symboles
les moins fréquents sont longs :

Les compressions basées sur ce type de codage donnent de bons


taux de compressions, en particulier pour les images monochromes (les fax
par exemple).

5
 Le codage de canal :

Dans un système réel, le message reçu par le destinataire peut différer de celui qui a
été émis par la source en raison de perturbations. On parle de canal bruyant.

Le codage de canal vise à introduire de la redondance dans le message −→ compensé


l’érosion de l’information due au canal.

 Le principe du codage de canal:


– Chaque suite de bits (trame) à transmettre est augmentée par une autre suite de bit dite
de redondance ou de contrôle.

– Pour chaque suite de k bits transmis, on ajoute r bits. On dit alors que l’on utilise un code
C(n; k) avec n = k+r.

– À la réception, on effectue l’opération inverse et les bits ajoutés permettent d’effectuer


des contrôles à l’arrivée. Il existe deux catégories de code :

– Les codes détecteurs d’erreurs.

– Les codes correcteurs d’erreurs.

6
1-Codage de Hamming (Un code détecteur et correcteur
d’erreurs) :
1-Principe du code Hamming :
Le code de Hamming est utilisé dans les transmissions de données car il permet de
détecter et de corriger une erreur survenue dans un bloc transmis.

Son principe est de fixer un entier k et coder chaque bloc de m = 2k - k - 1 bits de données
par un bloc de n = 2k - 1 bits en ajoutant donc k bits, dits de correction, a certaines
positions au bloc de m bits. Le tableau suivant indique les nombres de bits de correction, de
données pour différentes valeurs de k.

Dans la suite de l’étude, on retient k=3.

Position des k bits de correction : les k bits de correction sont places dans le bloc envoyé
aux positions d’indice une puissance de 2 en comptant à partir de la gauche. Ainsi, en
notant k1 k2 k3 les bits de correction et m1m2 m3 m4 les bits de données, le bloc envoyé
est : A = k1 k2 m1 k3 m2 m3 m4.

Calcul des k bits de correction : les k bits de correction sont calcules en utilisant une matrice
de parité H, représentée ci-dessous pour k=3.

Remarque : La colonne i de la matrice représente en binaire la valeur de i.

Les k bits de correction sont tels qu’en considérant le vecteur

7
On obtient ainsi 3 équations scalaires que doivent vérifier les k bits de correction :

Remarque : les opérations d’addition sont faites à modulo 2. Par exemple : 1+0=1 ; 1+1=0 ;
1+1+1=1 ; etc.

Le bloc A parfaitement déterminé est alors envoyé.

2-exemple :
On veut transmettre le message 1011001.On insère donc les bits de contrôle aux
positions des puissances de 2 comme indiqué sur le schéma.

On considère les bits de données égaux à 1 et la représentation en base deux de leurs


indices. On les additionne comme suit :

Le code de Hamming ajouté est donc ce résultat : 1001.


Le code transmis est le suivant :

Le receveur reçoit le message et passe à la vérification :


Il considère les bits de données et de contrôle qui sont égaux à 1 et calcule leur
représentation en base 2.

La somme de contrôle est égale à 0 ) il n’y a pas eu d’erreur de transmission, le message est
valide. Maintenant voyons ce qu’il se passe si le message est corrompu.
Changeons le bit No 11 en 0 comme ceci :

8
On refait le même calcul que précédemment en ajoutant les indices des bits à 1.

Le contrôle d’erreur n’est plus égal à 0 !) il y a eu une erreur.


Hamming nous donne même l’endroit où se situe l’erreur 1011 = 11. L’erreur se situe au bit
No 11. Par contre si le message comporte 2 erreurs, Hamming détectera qu’il y a eu un
problème mais ne pourra le corriger ; il ne pourra détecter les erreurs sur plus de 2 bits de
transmission (Valade seulement pour cet exemple, c’est à dire avec cette longueur de
message).

2-Codage CRC (Un code détecteur d’erreurs) :


1-Principe du code CRC (Cyclic Redondant Coding):
L’idée du CRC est de transmettre, conjointement aux données que l’on désire envoyer,
une valeur calculée par l’émetteur à partir des données à transmettre et basée sur la
division polynômes binaires. Ensuite, l’émetteur envoie les données et le CRC calculé.

A la réception, les données sont lues et le récepteur effectue le même calcul de son côté
avec le même algorithme. Si le résultat est identique à celui qui a été transmis, alors on est
sûr à plus de 99.9% (dépend des algorithmes employés) que les données sont correctes et
donc que le message n’a pas été altéré. Sinon, il y a eu une ou plusieurs erreurs lors de la
transmission.

Le principe du CRC consiste à traiter les séquences binaires comme des polynômes binaires,
c’est-à-dire des polynômes dont les coefficients correspondent à la séquence binaire. Ainsi
la séquence binaire 0110101001 peut être représentée sous la forme polynomiale suivante :

0*X9 + 1*X8 + 1*X7 + 0*X6 + 1*X5 + 0*4 + 1*X3 + 0*X2 + 0*X1 + 1* X0

Soit :

X8 + X7 + X5 + X3 + X0

Ou encore :

X8 + X7 + X5 + X3 + 1

9
De cette façon, le bit de poids faible de la séquence représente le degré 0 du polynôme, le
4ème bit en partant de la droite représente le degré 3 du polynôme (X3) et ainsi de suite.
Une séquence de n bits constitue donc un polynôme de degré maximal n-1. Toutes les
expressions polynomiales sont manipulées par la suite avec un arithmétique modulo 2.

Dans ce mécanisme de détection d’erreur, un polynôme prédéfini (appelé polynôme


générateur et noté G(X)) est connu de l’émetteur et du récepteur. La détection d’erreur
consiste pour l’émetteur à effectuer un algorithme sur les bits de la trame afin de générer
un CRC, et de transmettre ces deux éléments au récepteur. Il suffit alors au récepteur
d’effectuer le même calcul afin de vérifier que le CRC est valide. Le contrôle d’erreur CRC
est très précis, si un seul bit est incorrect, la valeur du CRC sera invalide.

2-exemple :
On veut émettre le message 1011101001, on utilise pour cela un contrôle CRC avec le
polynôme : X4 + X1 + X0.
On prend donc le message auquel on rajoute 4 zéros en queue car le polynôme générateur
est de puissance 4.
L’émetteur divise alors cette séquence de bits par le polynôme CRC à savoir X4+X1+X0 qui
correspond au nombre binaire 10010. Il trouve le reste 0110 qu’il met en queue du
message à transmettre.
L’émetteur transmet donc la séquence 10111010010110 au récepteur. Ce dernier prend la
séquence reçue et effectue la division avec le même polynôme générateur.
Il trouve un reste égal à 0) il n’y a pas eu d’erreur.

10
On reprend le même déroulement sauf qu’ici le récepteur reçoit une trame erronée, le
dernier nombre est changé.

Le récepteur fait la division et se rend compte que le reste n’est pas nul) le contrôle CRC a
découvert qu’il y a eu erreur de transmission.

On remarque que le taux de détection avec un contrôle CRC sur 16 bits est quasi-parfait
quelque soit la longueur de l’erreur , il y a très peu de chance qu’il ne découvre pas la ou les
erreurs possibles.
Taux de détection des erreurs avec un CRC sur 16 bits

11
III-Simulation :
Programme du code de Hamming- Langage C :

Programme du code de Hamming pour 4bits :

12
Le résultat est le suivant:

Le message est : 1101

13
Programme du code de Hamming- Maple:

14
Programme du code CRC- Langage C :

15
16
Le résultat est :

Comparaison :
Pour les codes détecteurs d’erreur Le récepteur vérifie à l’aide du même
procédé de calcul que le message reçu est bien le message envoyé grâce à ces
redondances. Et pour les codes correcteurs, après détection d’une erreur, la
redondance est suffisante pour permettre de retrouver le message initial. Aussi
On voit bien que les codes correcteurs sont peu connus mais très utilisés, car la
fiabilité des transmissions et du stockage est une nécessité.

17
IV-Conclusion :

Pour conclure, lorsqu’on parle de codage de source et de


codage de canal, on pense naturellement au nom de SHANNON,
qui a donné les limites fondamentales pour ces deux problèmes ;
on pense aussi au fait que les deux domaines sont, depuis des
décennies, bien distincts : deux communautés différentes, avec
chacune ses propres méthodes, problématiques, conférences et
revues.

18