Professional Documents
Culture Documents
http://ow.ly/2xKdB
Chapitre 3
Codage de l'information
3.1. Vocabulaire
Quelle que soit la nature de l'information traite par un ordinateur (image, son, texte, vido), elle
l'est toujours sous la forme d'un ensemble de nombres crits en base 2, par exemple 01001011.
Le terme bit (b minuscule dans les notations) signifie binary digit , c'est--dire 0 ou 1 en
numrotation binaire. Il s'agit de la plus petite unit d'information manipulable par une machine
numrique. Il est possible de reprsenter physiquement cette information binaire par un signal
lectrique ou magntique, qui, au-del d'un certain seuil, correspond la valeur 1.
L'octet (en anglais byte ou B majuscule dans les notations) est une unit d'information compose
de 8 bits. Il permet par exemple de stocker un caractre comme une lettre ou un chiffre.
Une unit d'information compose de 16 bits est gnralement appele mot (en anglais word).
Une unit d'information de 32 bits de longueur est appele mot double (en anglais double word,
d'o l'appellation dword).
Beaucoup d'informaticiens ont appris que 1 kilooctet valait 1024 octets. Or, depuis dcembre
1998, l'organisme international IEC a statu sur la question1. Voici les units standardises :
Un kilooctet (ko) = 1000 octets
Un mgaoctet (Mo) = 106 octets
Un gigaoctet (Go) = 109 octets
Un traoctet (To) = 1012 octets
Un ptaoctet (Po) = 1015 octets
Nous utilisons le systme dcimal (base 10) dans nos activits quotidiennes. Ce systme est bas
sur dix symboles, de 0 9, avec une unit suprieure (dizaine, centaine, etc.) chaque fois que dix
1 http://physics.nist.gov/cuu/Units/binary.html
units sont comptabilises. C'est un systme positionnel, c'est--dire que l'endroit o se trouve le
symbole dfinit sa valeur. Ainsi, le 2 de 523 n'a pas la mme valeur que le 2 de 132. En fait, 523 est
l'abrviation de 5102+2101+3100. On peut selon ce principe imaginer une infinit de systmes
numriques fonds sur des bases diffrentes.
En informatique, outre la base 10, on utilise trs frquemment le systme binaire (base 2) puisque
l'algbre boolenne est la base de l'lectronique numrique. Deux symboles suffisent : 0 et 1.
On utilise aussi trs souvent le systme hexadcimal (base 16) du fait de sa simplicit
d'utilisation et de reprsentation pour les mots machines (il est bien plus simple d'utilisation que le
binaire). Il faut alors six symboles supplmentaires : A (qui reprsente le 10), B (11), C (12), D (13),
E (14) et F (15)
Le tableau ci-dessous montre la reprsentation des nombres de 0 15 dans les bases 10, 2 et 16.
Dcimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Binaire 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
Hexadcimal 0 1 2 3 4 5 6 7 8 9 A B C D E F
27 26 25 24 23 22 21 20
0 1 0 0 1 1 0 1
Exercice 3.1
Donnez la mthode pour passer de la base dcimale la base hexadcimale (dans les deux sens).
Exercice 3.2
Compltez le tableau ci-dessous. L'indice indique la base dans laquelle le nombre est crit.
Bases
2 10 16
10010101102
200210
A1C416
Exercice 3.3
crivez en Python un programme permettant de convertir un nombre d'une base de dpart d vers
une base d'arrive a (d et a compris entre 2 et 16).
Un entier relatif positif ou nul sera reprsent en binaire (base 2) comme un entier naturel,
la seule diffrence que le bit de poids fort (le bit situ l'extrme gauche) reprsente le
signe. Il faut donc s'assurer pour un entier positif ou nul qu'il est zro (0 correspond un
signe positif, 1 un signe ngatif). Ainsi, si on code un entier naturel sur 4 bits, le nombre
le plus grand sera 0111 (c'est--dire 7 en base dcimale).
Sur 8 bits (1 octet), l'intervalle de codage est [128, 127].
Sur 16 bits (2 octets), l'intervalle de codage est [32768, 32767].
Sur 32 bits (4 octets), l'intervalle de codage est [2147483648, 2147483647].
D'une manire gnrale le plus grand entier relatif positif cod sur n bits sera 2n11.
Exemple
On dsire coder la valeur 19 sur 8 bits. Il suffit :
1. d'crire 19 en binaire : 00010011
2. d'crire son complment 1 : 11101100
3. et d'ajouter 1 : 11101101
La reprsentation binaire de 19 sur 8 bits est donc 11101101.
On remarquera qu'en additionnant un nombre et son complment deux on obtient 0. En effet,
00010011 + 11101101 = 00000000 (avec une retenue de 1 qui est limine).
Truc
Pour transformer de tte un nombre binaire en son complment deux, on parcourt le nombre de
droite gauche en laissant inchangs les bits jusqu'au premier 1 (compris), puis on inverse tous les
bits suivants. Prenons comme exemple le nombre 20 : 00010100.
1. On garde la partie droite telle quelle : 00010100
2. On inverse la partie de gauche aprs le premier un : 11101100
3. Et voici 20 : 11101100
Le 4 juin 1996, une fuse Ariane 5 a explos 40 secondes aprs l'allumage. La fuse et son
chargement avaient cot 500 millions de dollars. La commission d'enqute a rendu son rapport au
bout de deux semaines. Il s'agissait d'une erreur de programmation dans le systme inertiel de
rfrence. un moment donn, un nombre cod en virgule flottante sur 64 bits (qui reprsentait la
vitesse horizontale de la fuse par rapport la plate-forme de tir) tait converti en un entier sur 16
bits. Malheureusement, le nombre en question tait plus grand que 32768 (le plus grand entier que
l'on peut coder sur 16 bits) et la conversion a t incorrecte.
Exercice 3.4
1. Codez les entiers relatifs suivants sur 8 bits (16 si ncessaire) : 456, 1, 56, 5642.
2. Que valent en base dix les trois entiers relatifs suivants :
01101100
11101101
1010101010101010 ?
Exercice 3.5
Expliquez ce rve trange (source de l'image : http://xkcd.com/571).
Exemple
Traduisons en binaire, en utilisant la norme IEEE 754, le nombre 6,625.
Codons d'abord la valeur absolue en binaire : 6,62510 = 110,10102
Nous mettons ce nombre sous la forme : 1, partie fractionnaire
110,1010 = 1,10101022 (22 dcale la virgule de 2 chiffres vers la droite)
La partie fractionnaire tendue sur 23 bits est donc 101 0100 0000 0000 0000 0000.
Exposant = 127 + 2 = 12910 = 1000 00012
En hexadcimal : C0 D4 00 00.
Le 25 fvrier 1991, pendant la Guerre du Golfe, une batterie amricaine de missiles Patriot,
Dharan (Arabie Saoudite), a chou dans l'interception d'un missile Scud irakien. Le Scud a frapp
un baraquement de l'arme amricaine et a tu 28 soldats. La commission d'enqute a conclu un
calcul incorrect du temps de parcours, d un problme d'arrondi. Les nombres taient reprsents
en virgule fixe sur 24 bits. Le temps tait compt par l'horloge interne du systme en dixime de
seconde. Malheureusement, 1/10 n'a pas d'criture finie dans le systme binaire : 1/10 = 0,1 (dans le
systme dcimal) = 0,0001100110011001100110011... (dans le systme binaire). L'ordinateur de
bord arrondissait 1/10 24 chiffres, d'o une petite erreur dans le dcompte du temps pour chaque
1/10 de seconde. Au moment de l'attaque, la batterie de missile Patriot tait allume depuis environ
100 heures, ce qui a entran une accumulation des erreurs d'arrondi de 0,34 s. Pendant ce temps, un
missile Scud parcourt environ 500 m, ce qui explique que le Patriot soit pass ct de sa cible.
La norme ASCII permet ainsi toutes sortes de machines de stocker, analyser et communiquer de
l'information textuelle. En particulier, la quasi-totalit des ordinateurs personnels et des stations de
travail utilisent l'encodage ASCII. Le code ASCII de base reprsentait les caractres sur 7 bits (c'est-
-dire 128 caractres possibles, de 0 127).
Les codes 0 31 ne sont pas des caractres. On les appelle caractres de contrle car ils
permettent de faire des actions telles que :
retour la ligne (Carriage return)
bip sonore (Audible bell)
Les codes 65 90 reprsentent les majuscules
Les codes 97 122 reprsentent les minuscules (il suffit de modifier le 6me bit pour passer
de majuscules minuscules, c'est--dire ajouter 32 au code ASCII en base dcimale).
Le code ASCII a t mis au point pour la langue anglaise, il ne contient donc pas de caractres
accentus, ni de caractres spcifiques une langue. Le code ASCII a donc t tendu 8 bits pour
pouvoir coder plus de caractres (on parle d'ailleurs de code ASCII tendu...). Cette norme s'appelle
ISO-8859 et se dcline par exemple en ISO-8859-1 lorsqu'elle tend l'ASCII avec les caractres
accentus d'Europe occidentale, et qui est souvent appele Latin-1 ou Europe occidentale.
Dans le codage UTF-8, chaque point de code est cod sur une
suite d'un quatre octets. Il a t conu pour tre compatible avec
certains logiciels originellement prvus pour traiter des caractres
d'un seul octet.
Toutes ces normes diffrentes et leurs incompatibilits partielles sont la cause des problmes que
l'on rencontre parfois avec les caractres accentus. C'est pour cette raison qu'il vaut mieux, quand
on crit des courriels l'tranger, n'utiliser que des caractres non accentus.
Il est souhaitable d'avoir une certaine distance entre les mots envoys, afin de dtecter s'il y a eu
une erreur de transmission. Par exemple, si l'on a trois messages transmettre de trois bits, il vaut
mieux choisir les codages qui sont distance 2 les uns des autres, par exemple 000, 110 et 101. En
effet, si un seul bit est altr, on recevra un message impossible. Par contre, en utilisant 000, 001 et
010, un bit altr pourrait passer inaperu.
redondance. Elle permet de dtecter les erreurs, mais pas forcment de les corriger. Nous en avons
dj vu un exemple avec le code ISBN-10.
Le principe est d'ajouter aux donnes des lments dpendant de ces dernires et simples
calculer. Cette redondance accompagne les donnes lors d'une transmission ou bien lors du stockage
sur un support quelconque. Plus tard, il est possible de raliser la mme opration sur les donnes et
de comparer le rsultat la somme de contrle originale, et ainsi conclure sur la corruption
potentielle du message.
Bit de parit
Transmettons sept bits auxquels viendra s'ajouter un bit de parit. On peut dfinir le bit de parit
comme tant gal zro si la somme des autres bits est paire et un dans le cas contraire. On parle
de parit paire. Si la somme des bits est impair, c'est qu'il y a eu une erreur de transmission.
Exemple : 1010001 (7 bits) devient 11010001 (8 bits)
Cette approche permet de dtecter les nombres d'erreurs impaires, mais un nombre pair d'erreurs
passera inaperu.
Code ISBN 2 3 5 2 8 8 0 4 1
Pondration 10 9 8 7 6 5 4 3 2
Produit 20 27 40 14 48 40 0 12 2
La somme des produits est 203, dont le reste de la division euclidienne par 11 est 5.
La cl de contrle est donc 11 5 = 6. L'ISBN au complet est : 2-35288-041-6.
La vrification de la cl complte 10 chiffres donne la somme pondre 203 + 6 = 209, qui est
bien un multiple de 11.
La question qui tue : pourquoi est-il indispensable de donner une pondration chaque position ?
1. L'algorithme multiplie par 2 un chiffre sur deux, en commenant par le deuxime depuis la
droite et en se dplaant vers la gauche. Si un chiffre multipli par deux est plus grand que
neuf (comme c'est le cas par exemple pour 8 qui devient 16), alors il faut le ramener un
chiffre entre 1 et 9 en soustrayant 9.
2. La somme de tous les chiffres obtenus est effectue.
3. Le rsultat est divis par 10. Si le reste de la division est gal zro, alors le nombre
original est valide.
Exemple
Code 9 7 2 4 8 7 0 8 6
Multiplication par 2 9 14 2 8 8 14 0 16 6
Chiffres entre 0 et 9 9 5 2 8 8 5 0 7 6 50
Somme
La somme, gale 50, est divise par 10 : le reste est 0, donc le nombre est valide.
Chaque vhicule ferroviaire dispose d'un numro d'identification unique le distinguant de tout
autre vhicule ferroviaire. La numrotation des plaques dimmatriculation des trains a t
uniformise par l'Union internationale des chemins de fer (UIC) : chaque locomotive, chaque
automotrice et chaque voiture de voyageurs est identifie par un numro douze chiffres.
retenue 0 1 2 3 4 5 6 7 8 9 contrle
0 0 9 4 6 8 2 7 1 3 5 0
1 9 4 6 8 2 7 1 3 5 0 9
2 4 6 8 2 7 1 3 5 0 9 8
3 6 8 2 7 1 3 5 0 9 4 7
4 8 2 7 1 3 5 0 9 4 6 6
5 2 7 1 3 5 0 9 4 6 8 5
6 7 1 3 5 0 9 4 6 8 2 4
7 1 3 5 0 9 4 6 8 2 7 3
8 3 5 0 9 4 6 8 2 7 1 2
9 5 0 9 4 6 8 2 7 1 3 1
La retenue aprs l'avant-dernier chiffre est 0. Dans la colonne contrle, on voit que cela
correspond la retenue 0. Le dernier chiffre devrait donc tre un 0 plutt qu'un 5, ce qui signifie que
le numro de CCP est incorrect.
7 6 5 4 3 2 1
D3 D2 D1 C2 D0 C1 C0
Structure d'un code de Hamming 74
Exemples de code de Hamming
un mot de code 74 a un coefficient d'efficacit de 4/7 = 57 %
un mot de code 1511 a un coefficient d'efficacit de 11/15 = 73 %
un mot de code 3126 a un coefficient d'efficacit de 26/31 = 83 %
Retrouver l'erreur dans un mot de Hamming
Si les bits de contrle de parit C2, C1, C0 ont tous la bonne valeur, il n'y a pas d'erreurs ; sinon la
valeur des bits de contrle indique la position de l'erreur entre 1 et 7. Le code de Hamming prsent
ici ne permet de retrouver et corriger qu'une erreur.
Pour savoir quels bits sont vrifis par chacun des bits de contrle de parit, il faut construire le
tableau ci-dessous.
On numrote les lignes de 1 x=2n1 dans la colonne de droite (prenons comme exemple x=7),
puis on convertit chaque nombre en binaire et l'on crit chaque bit dans les colonnes de gauche. On
colorie de la couleur de Ci les nombres de droite s'il y a un 1 dans dans la colonne Ci . Par exemple, 5
sera color en vert et en rouge, car sur la ligne du 5, il y a un 1 dans les colonnes C2 et C0.
C2 C1 C0 dcimal
0 0 1 1
0 1 0 2
0 1 1 3
1 0 0 4
1 0 1 5
1 1 0 6
1 1 1 7
C2 (en vert) colore les bits 4, 5, 6, 7. Ce sont les bits qu'il vrifie.
C1 (en bleu) vrifie les bits 2, 3, 6, 7.
C0 (en rouge) vrifie les bits 1, 3, 5, 7.
On constate que chaque bit de donnes est color d'une manire diffrente. Cela permettra
de retrouver la position d'une erreur.
7 6 5 4 3 2 1
1 0 1 0
C0 vaut 0 pour pouvoir rendre pair 1+1+0 (les bits d'indices 7, 5, 3).
C1 vaut 1 pour pouvoir rendre pair 1+0+0 (les bits d'indices 7, 6, 3).
C2 vaut 0 pour pouvoir rendre pair 1+0+1 (les bits d'indices 7, 6, 5).
7 6 5 4 3 2 1
1 0 1 0 0 1 0
Imaginons que l'on reoive le mot 0010010 (le bit de poids fort a t altr).
C0 a la mauvaise valeur, car 0+1+0+0 est impair, donc il y a une erreur en position 7, 5, 3 ou 1.
C1 a la mauvaise valeur, car 0+0+0+1 est impair, donc il y a une erreur en position 7, 6, 3 ou 2.
C2 a la mauvaise valeur, car 0+0+1+0 est impair, donc il y a une erreur en position 7, 6, 5 ou 4.
crivons le nombre binaire C2C1C0 o Ci vaut 0 si le bit de contrle Ci a la bonne valeur et 1
sinon. On obtient ici 111, ce qui correspond 7 en binaire. Le bit erron est le numro 7.
Que se passe-t-il si c'est un des bits de contrle qui est altr ? Imaginons que l'on ait reu
1010011 (cette fois-ci, c'est le bit de poids faible qui a t altr).
C0 a la mauvaise valeur, car 1+1+0+1 est impair. Il y a une erreur en position 7, 5, 3 ou 1.
C1 a la bonne valeur, car 1+0+0+1 est pair. Il n'y a pas d'erreur en position 7, 6, 3 et 2
C2 a la bonne valeur, car 1+0+1+0 est pair. Il n'y a pas d'erreur en position 7, 6, 5 et 4.
Ici, C2C1C0 vaut 001. Le bit erron est donc le numro 1.
Exercice 3.8
Vous voulez envoyer le mot 1011. Quels bits de contrle devez-vous lui adjoindre et quelle
squence transmettrez-vous alors ?
Exercice 3.9
Y a-t-il une erreur dans le mot suivant (Hamming 74) : 1101101 ?
Exercice 3.10
Soit un mot de Hamming 1511 suivant :
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
1 0 1 1 0 1 1 1 1 0 1 1 0 1 1
Mthode
Au dpart, chaque lettre a une tiquette correspondant sa frquence (ou sa probabilit)
d'apparition. Il y a autant d'arbres ( 1 sommet) que de lettres.
L'algorithme choisit chaque tape les deux arbres d'tiquettes minimales, soit x et y, et les
remplace par l'arbre form de x et y et ayant comme tiquette la somme de l'tiquette de x et de
l'tiquette de y. La figure ci-dessous reprsente les tapes de la construction d'un code de Huffman
pour l'alphabet source {A, B, C, D, E}, avec les frquences F(A)=15, F(B)=7, F(C)=6, F(D)=6 et
F(E)=5.
Le code d'une lettre est alors dtermin en suivant le chemin depuis la racine de l'arbre jusqu' la
feuille associe cette lettre en concatnant successivement un 0 ou un 1 selon que la branche suivie
est gauche ou droite. Ainsi, sur la figure ci-dessus, A=0, B=100, C=101, D=110, E=111.
Par exemple, le mot ABBE serait cod 0100100111. Pour dcoder, on lit simplement la
chane de bits de gauche droite. Le seul dcoupage possible, grce la proprit du prfixe, est 0-
100-100-111.
Ce principe de compression est aussi utilis dans le codage d'image TIFF (Tagged Image Format
File) spcifi par Microsoft Corporation et Aldus Corporation.
Il existe des mthodes qui ne conservent pas exactement le contenu d'une image (mthodes non
conservatives) mais dont la reprsentation visuelle reste correcte. Entre autres, il y a la mthode
JPEG (Join Photographic Experts Group) qui utilise la compression de type Huffman pour coder les
informations d'une image.
Malgr son anciennet, cette mthode est toujours remise au got du jour, et offre des
performances apprciables.
Exercice 3.12
Construisez un codage de Huffman du message ceciestuncodagedehuffman (on a supprim
les espaces et la ponctuation pour simplifier la construction). Il y a plusieurs codages de Huffman
possibles.
Vrifiez la proprit du prfixe.
3.8. QR Codes
Le code QR (ou QR code en anglais) est un code-barres en deux dimensions (ou code matrice)
constitu de modules noirs disposs dans un carr
fond blanc. Ce cours contient un QR code
chaque dbut de chapitre. Le nom QR est
l'acronyme de l'anglais Quick Response, car son
contenu de donnes peut tre dcod rapidement.
Le code QR a t cr par l'entreprise
japonaise Denso-Wave en 1994 pour le suivi des
pices de voiture dans les usines de Toyota.
Les codes QR peuvent mmoriser des adresses
web, du texte, des numros de tlphone, des SMS ou autres types de donnes lisibles par les
smartphones et les tlphones mobiles quips d'une application de lecture (lecteur de code QR ou
QR reader en anglais).
L'avantage du code QR est sa facilit et rapidit d'utilisation et de cration. Pour lire un code QR,
il suffit de lancer l'application de lecture et viser le code dans le mobile. De nombreuses pages Web
offrent ces applications pour mobiles, gnralement sans
frais.
En ce qui concerne l'criture, il y a plusieurs sites web
qui permettent de gnrer librement les codes QR.
Ils peuvent stocker jusqu' 7089 caractres
numriques, 4296 caractres alphanumriques ou 2953
octets. Par rapport au code-barres traditionnel qui ne peut
stocker que de 10 13 caractres, ils ont l'avantage de
pouvoir stocker beaucoup d'informations tout en tant
petits et rapides scanner.
Le code QR est dfini comme un standard ISO
(IEC18004).
On a ajout une
image sur le QR-
Code original, mais
il reste lisible.
Essayez de les
scanner !
Vous constaterez
qu'il faut plus de
temps avec le QR-
Code dgrad.
Ce QR-Code
dessin dans le
sable est tout fait
valide.
Sources
[1] Dumas, Roch, Tannier, Varrette, Thorie des codes : Compression, cryptage, correction, Dunod,
2006
[2] Martin B., Codage, cryptologie et applications, Presses Polytechniques et Universitaires
Romandes (PPUR), 2004
[3] Comment a marche, Reprsentation des nombres entiers et rels ,
<http://www.commentcamarche.net/contents/base/representation.php3>
[4] Wikipdia, International Book Standard Number , <http://fr.wikipedia.org/wiki/ISBN>
[5] Wikipdia, Classification UIC des voitures de chemin de fer
<https://fr.wikipedia.org/wiki/Classification_UIC_des_voitures_de_chemin_de_fer>
[6] Duvallet Claude, Les codes correcteurs et les codes dtecteurs d'erreurs ,
<http://litis.univ-lehavre.fr/~duvallet/enseignements/Cours/LPRODA2I/UF9/LPRODA2I-TD2-UF9.pdf>
[7] Wikipdia, Codage de Huffman , <http://fr.wikipedia.org/wiki/Codage_de_Huffman>