Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
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.
Le codage de source :
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 :
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.
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.
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 :
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.
– 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.
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.
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.
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.
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.
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.
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 :
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.
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 :
12
Le résultat est le suivant:
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 :
18