Exercices Codages Source
Exercices Codages Source
Exercice 3.5.1
Soit p la probabilité d’un événement, tracer la valeur de la quantité d’information relative à
l’événement en fonction de p pour 0 ≤ p ≤ 1.
Exercice 3.5.2
Une source émet aléatoirement un symbole parmi quatre symboles possibles. Ces quatre sym-
boles ont des probabilités d’occurrence telles que p0 = 0.4, p1 = 0.3, p2 = 0.2 et p3 = 0.1 et sont
statistiquement indépendants.
1. Calculer l’information associée à l’émission de chacun de ces 4 symboles.
2. Calculer l’entropie de la source.
Exercice 3.5.3
Considérons une source sans mémoire (les symboles émis sont statistiquement indépendants)
dont l’alphabet est constitué par K symboles équiprobables.
1. Quelle est le meilleur codage possible pour une telle source, à longueur fixe ou variable ?
Pourquoi ?
2. Quelle condition doit satisfaire K pour que l’efficacité du codage soit maximale ?
Exercice 3.5.4
Considérez les 4 codes listés dans la table suivante :
Exercice 3.5.5
Considérez des lettres d’un alphabet ayant les probabilités d’apparition telles que :
Lettre a i l m n o p y
Probabilité 0.1 0.1 0.2 0.1 0.1 0.2 0.1 0.1
Exercice 3.5.6
Une source discrète sans mémoire a un alphabet de 7 symboles dont les probabilités d’apparition
sont décrites dans la table suivante :
Symbole s0 s1 s2 s3 s4 s5 s6
Probabilité 1/4 1/4 1/8 1/8 1/8 1/16 1/16
Exercice 3.5.7
Considérez une source discrète sans mémoire avec un alphabet {s0 , s1 , s2 } dont les probabilités
d’apparition sont respectivement {0.7, 0.15,0.15} . Appliquez le codage d’Huffman à cette source
et montrez que la longueur moyenne du code est 1.3 bits/symbole.
Exercice 3.5.8
En considérant la figure 3.1, donnez les codes associés aux symboles A, B, C, D, E, F, G.
Exercice 3.5.10
Considérez la séquence binaire suivante
011100011100011100011100
Utilisez l’algorithme de Lempel-Ziv pour encoder cette séquence.
Exercice 3.5.11
Une source sans mémoire a un alphabet A tel que
Q(−5) = Q(−3) = −4
Q(−1) = Q(0) = Q(1) = 0
Q(3) = Q(5) = 4
trouver l’entropie de la source quantifiée.
3. Proposer un codage optimal de cette source quantifiée.
Exercice 3.5.12
Une source sans mémoire émet des symboles a1 , a2 , a3 , a4 avec des probabilités correspon-
dantes p1 = p2 = 0.3365 et p3 = p4 = 0.1635.
1. Trouver l’entropie de la source.
2. Trouver un code de Huffman pour cette source.
3. Calculer la longueur moyenne du code obtenu.
4. Calculer le rendement du code obtenu.
Exercice 3.5.13
Une source sans mémoire a un alphabet de 5 symboles S1 , S2 , S3 , S4 et S5 . Ces cinq symboles
sont équiprobables. Evaluez le rendement d’un code binaire de longueur constante dans les trois cas
suivants :
1. On code chaque symbole.
2. On code des paires de symboles.
3. On code des successions de trois symboles.
Exercice 3.5.15
Le schéma de la Figure 1 montre un schéma d’automate de Markov. Cet automate produit un
symbole toutes les T s., ce symbole peut être s0 ou s1 . On lit le schéma de la Figure 3.2 de la manière
suivante ; si s0 a été produit à l’instant k.T , la probabilité d’obtenir un nouveau s0 à l’instant (k +
1).T est 1/4, alors que la probabilité d’obtenir s1 à (k + 1).T est alors 3/4. (De tels automates
sont utilisés pour modéliser la production de parole.). On observera qu’une tel automate produit des
données qui sont dépendantes dans le temps. En supposant que l’on code des séquences de deux
symboles consécutifs :
1. Calculer l’entropie de la source constituée par l’automate.
2. Proposer un codage de Huffman des séquences de deux symboles.
3. Calculer l’efficacité du code ainsi créé.
1|4 3|4
3|4
s0 s1
1|4
F IG . 3.2 – Automate de Markov
Exercice 3.5.16
On considère une source S1 sans mémoire délivrant des symboles {s0 , s1 , s2 , s3 } avec des pro-
babilités respectives 1/4, 1/2, 1/16, 3/16. D’autre part on considère une source S2 sans mémoire
délivrant des symboles {t0 , t1 , t2 , t3 } avec des probabilités respectives 1/8, 1/32, 1/64, 53/64.
On considère ensuite une source S3 qui délivre aléatoirement soit un symbole de S1 , soit un symbole
de S2 à chaque coup d’horloge ; la probabilité que S1 soit choisie est de 3/4.
1. Calculer l’entropie de chacune des trois sources S1 , S2 et S3 .
2. Proposer un codage de Huffman des séquences de symboles pour chacune des trois sources.
3. Calculer l’efficacité des trois codes ainsi créés.
Exercice 3.5.17
Soit une source S1 sans mémoire délivrant des symboles {s0 , s1 , s2 , s3 , s4 } avec des pro-
babilités respectives 1/16, 1/16, 1/8, 1/4, 1/2. Sans faire appel à un graphe de type Huffman,
proposer un code à décodage instantané qui ait une efficacité de 100%. Justifier vos choix et expli-
quez bien pourquoi l’efficacité est de 100%.
010110111011110111110111111
On considère que 0 est le premier mot code et que 1 est le second mot code. On considère d’autre
part que les mots code sont numérotés à partir de 1.
1. Calculer la séquence codée par l’algorithme de Lempel-Ziv.
2. Calculer le taux de compression obtenu.
3. Vérifiez que la séquence obtenue est bien juste en procédant au décodage de la séquence.
Lorsque p → 0, l’information devient infinie, elle devient nulle lorsque l’événement devient certain,
i.e. lorsque p = 1. L’allure de la quantité d’information associée à l’événement E en fonction de sa
probabilité d’apparition p est donnée à la figure 3.3.
5
Information (bits)
0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
p
Symbole s0 s1 s2 s3
Probabilité 0.4 0.3 0.2 0.1
Information 1.3219 bits 1.7370 bits 2.3219 bits 3.3219 bits
H = −p0 log2 (p0 ) − p1 log2 (p1 ) − p2 log2 (p2 ) − p3 log2 (p3 ) = 1.8464 (bits)
On voit que les codes I et IV sont des codes instantanés car aucun mot code n’est préfixe du
suivant. Sur l’arbre de décision, cela se traduit par des mots code qui ne sont pas situés sur une
même ligne.
Les codes II et III ne sont pas instantanés.
2) Si l’on applique l’inégalité de Kraft-McMillan, on obtient :
l1 = 2−1 + 2−2 + 2−3 + 2−4 + 2−4 = 0.5 + 0.25 + 0.125 + 0.0625 + 0.0625 = 1
l2 = 2−1 + 2−2 + 2−3 + 2−4 + 2−4 = 0.5 + 0.25 + 0.125 + 0.0625 + 0.0625 = 1
l3 = 2−1 + 2−2 + 2−3 + 2−3 + 2−3 = 0.5 + 0.25 + 0.125 + 0.125 + 0.125 = 1.125
l2 = 2−2 + 2−2 + 2−2 + 2−3 + 2−3 = 0.25 + 0.25 + 0.25 + 0.125 + 0.125 = 1
L’inégalité de Kraft-McMillan appliqué au code III prouve qu’il n’est pas instantané. L’inégalité de
Kraft ne détecte pas le fait que le code II n’est pas instantané. Or le code II a la même structure
que le code I. Rien d’anormal ici. L’inégalité de Kraft porte sur la structure du code mais pas sur la
façon de le réaliser.
On sait que le code de Huffman est optimal du point de vue de la longueur moyenne (pour des
symboles indépendants). Bien sûr, ce code n’est pas unique dès que plusieurs symboles ont même
probabilité, toutefois les différentes solutions mènent à la même longueur moyenne.
Imaginons maintenant que l’on ait à coder une suite d’un grand nombre de symboles, par
exemple 100000. Si l’on utilise le code du cas 1) on sait que l’on obtiendra exactement une sé-
quence codée de 300000 bits. Dans le cas 2), on obtiendra un nombre de bits plus grand ou moins
grand que 300000, cela dépendra de la répartition des symboles dans la séquence particulière, on
sait que la longueur de la séquence codée oscillera autour de 300000. Il est donc évident que dans le
cas 1) la variance du code est nulle, alors que dans le cas 2), elle est non nulle. Dans la pratique on
préférera prendre la solution avec variance minimale, c’est-à-dire la première solution. Calculons
0.6
(0)
0.4 0.4
(1)
0.4 0.4 (0)
0.2 0.2
(1)
0.2 0.2 (0)
(1)
0.2 0.2 0.2 (0)
L 0.2
Y 0.1
(1)
(1)
0.2 (0)
0.1 (0)
A 0.1
0.2
0.1 (1)
I 0.1
(1)
L=01
O=010
0.1 A=110
0.1 (0)
M I=111
M=100
N=101
0.1 P=0010
N 0.1 Y=0011
(1)
(0)
P 0.1
Y 0.1
(1)
0.7
0.6
Probabilité d avoir une longueur de séquence
0.5
0.4
0.3
0.2
0.1
0
1 1.5 2 2.5 3 3.5 4 4.5 5
Nombre de bits pour 100000 symboles codés avec le code 2) x 10
5
F IG . 3.8 – Figure associée à la solution de l’exercice 3.5.5 -cas 2, probabilité d’obtenir une séquence
de longueur donnée pour 100000 symboles codés)
1/2
(0)
1/4 1/4
S0 1/4 (0)
1/2
(1)
1/4 1/4
S1 1/4 (1)
1/4
(0)
1/8
S2 1/8 (0)
1/4
(1)
1/8
S3 1/8 (1)
S0=10
S1=11
1/8 (0)
S4 1/8 S2=010
S3=011
1/8 S4=000
(1) S5=0010
S6=0011
S5 1/16 (0)
S6 1/16 (1)
K GI
H = 0.7 × (− log2 (0.7)) + 0.15 × (− log2 (0.15)) + 0.15 × (− log2 (0.15)) = 1.1813 bits
A = 1
B = 011
C = 010
D = 001
E = 0001
F = 00001
G = 00000
Ajoutons maintenant en préambule les deux premiers mots codes 0 et 1 et indexons les mots du
dictionnaire.
Chaque mot code va être maintenant divisé en deux parties, d’une part un préfixe qui est un mot
code et un bit d’innovation. Ceci permet une indexation des mots code à partir des précédents. On
note donc le préfixe sous la forme du numéro de mot code.
Pour coder en binaire, il reste donc à vérifier le nombre de bits à transmettre. Les mots code pré-
fixe utilisés sont entre 0 et 8, ils nécessitent 4 bits de codage. Il faut donc cinq bits avec le bit
d’innovation.
Codage 1−1 2−1 1−0 3−1 2−0 5−1 4−0 8−1 7−0
Codage f in. 0001 − 1 0010 − 1 0001 − 0 0011 − 1 0010 − 0 0101 − 1 0100 − 0 1000 − 1 0111 − 0
000110010100010001110010001011010001000101110
H = 4.3219×0.05+3.3219×0.1+3.3219×0.1+2.7370×0.15+4.3219×0.05+2×0.25+1.7370×0.3
c’est à dire
H = 2.5282 bits
Ceci veut dire qu’en moyenne, un codage optimum de la source (s’il existe) devrait être
effectué avec 2.5282 bits par symbole.
2. La quantification de la source consiste à agréger des symboles. En sortie de la source quanti-
fiée on n’a plus que 3 symboles maintenant. Convenons d’appeler
T 1 , T2 , T3
ces 3 symboles de niveaux respectifs −4, 0 et +4. On voit que l’apparition du symbole T1 est
liée à l’apparition de S1 ou de S2 à la source avant quantification.
T 1 = S1 ∪ S2
Or la source primaire étant sans mémoire, tous les Si sont indépendants. La probabilité d’une
union d’événements est donc la somme des probabilités des événements. Par conséquent
p(T1 ) = p(S1 ) + p(S2 ) = 0.15
On trouverait de même
p(T2 ) = p(S3 ) + p(S4 ) + p(S5 ) = 0.3
et
p(T3 ) = p(S6 ) + p(S7 ) = 0.55
(Au passage on vérifie que p(T1 ) + p(T2 ) + p(T3 ) = 1.) L’information (en bits) liée à l’ap-
parition de ces 3 symboles est donc
I(T1 ) = −log2 (0.15) = 2.7370, I(T2 ) = −log2 (0.3) = 1.7370, I(T3 ) = −log2 (0.55) = 0.8625
L’entropie de la source quantifiée est donc
$
des mots de 2 bits avec une probabilité 0.3 (symbole T2 ) et des mots de 2 bits aussi avec une
probabilité 0.15 (symbole T1 ), on voit donc au passage que la longueur moyenne du code
obtenu serait
2. Un codage de Huffman possible pour cette source est donnée à la Fig. 3.13.
$
3. On utilise donc des symboles à 1 bit avec une probabilité 0.3365 (a1 ), des symboles à 2 bits
avec une probabilité 0.3365 (a2 ), des symboles à 3 bits avec une probabilité 0.1635 (a3 ), des
symboles à 3 bits avec une probabilité 0.3365 (a2 ). La longueur moyenne s’écrit donc
2. Si l’on regroupe les symboles par paires, il y a 52 = 25 symboles possibles dont la probabilité
est 0.22 = 0.04. Pour coder ces 25 symboles il faut donc 5 bit par symbole. Cela revient à
dire que l’on utilise 2.5 bits par demi-symbole c’est-à dire pour chaque symbole de la source
dont l’entropie vaut 2.3219 bits. L’efficacité du code est donc
Ef f. = 2.3219/2.5 = 92.88%
3. Si l’on regroupe les symboles par triplets, il y a 53 = 125 symboles possibles dont la pro-
babilité est 0.23 = 0.008. Pour coder ces 125 symboles il faut donc 7 bit par symbole. Cela
revient à dire que l’on utilise 7/3 = 2.333 bits par tiers de symbole c’est-à dire pour chaque
symbole de la source dont l’entropie vaut 2.3219 bits. L’efficacité du code est donc
Ef f. = 2.3219/2.333 = 99.51%
2. Le code de rendement 100% serait un code qui code chaque symbole avec le même nombre
de bits que l’information apportée par chaque symbole. On pourrait le trouver avec un code de
Huffman, toutefois dans un cas aussi simple on peut trouver facilement un tel code instantané.
Par exemple codons S1 → 0, (1 seul bit), puis S2 → 10 (2 bits), puis S3 → 110 (3 bits) et
S4 → 111 (3 bits). Ce code a une efficacité de 100%, de plus, il est instantané car aucun des
mots codes n’est préfixe des autres.
1 1 3 3
H= × (−log2 ( )) + × (−log2 ( )) = 0.8113 [bits]
4 4 4 4
(On rappelle la signification de l’entropie ; c’est le débit moyen d’information. Si on était
capable de coder avec une efficacité de 100 %, cela voudrait dire que 10000 symboles consé-
cutifs générés par l’automate pourraient être codés avec 8113 bits). Si l’on codait symbole par
symbole, c’est-à-dire S0 avec 0 et S1 avec 1, on utiliserait un bit par symbole et l’efficacité
du code serait de 81.13 %.
2. Si l’on code deux symboles consécutifs au lieu d’un, il faut considérer les quatre paires pos-
sibles de symboles [S0 , S0 ], [S0, S1 ], [S1 , S0 ] et [S1 , S1 ]. Ces quatre paires de symboles
ont des probabilités respectives 14 × 14 = 1/16, 14 × 34 = 3/16, 34 × 14 = 3/16, 34 × 34 = 9/16.
On trouvera à la figure 2 le codage de Huffman associé.
$ $
3. On remarque que le nombre moyen de bits pour coder deux symboles est
9 3 3 1 27
1× +2× +3× +3× = bits
16 16 16 16 16
Pour coder un seul symbole on utilise donc la moitié de ces bits, soit 12.5/16 = 0.8438.
L’efficacité est donc de 0.8113/0.8438 = 96.15%.
H(S2) = 18 × (−log2 ( 18 )) + 1
32
1
× (−log2 ( 32 )) + 1
64
1
× (−log2 ( 64 )) + 53
64 × (−log2 ( 53
64 ))
= 0.8503 bits
1.7028/1.75 = 97.3 %
0.8503/1.2188 = 69.77 %
96 53 48 36 12 8 2 1 619
1. + 2. + 3. + 4. + 5. + 6. + 7. + 7. = = 2.4180 bits
256 256 256 256 256 256 256 256 256
L’efficacité du codage de S3 est donc
2.3010/2.4180 = 95.16 %
3/16
(0) (1)
S3 1/4
1/16
S2
(1)
Codage de S2
53/64
t3 (0)
t3 --> 0
1/8 (0) t0 --> 10
t0 t1 --> 110
11/64
(1) t2 --> 111
1/32
(0) (1)
t1
3/64
1/64
t2
(1)
Codage de S3 (0)
01|011|0111|01111|011111|0111111|
0011|0111|1001|1011|1101|1111
2. La séquence codée compte 24 bits contre 27 pour la séquence originale. Le taux de compres-
sion est donc de 3/27 = 11.11%.
3. On suppose que le décodeur connaît la longueur des mots, en l’occurence 4. Le décodeur
identifie le mot-codé 0011 comme étant formé de 001 − 1, c’est-à dire de l’adresse du premier
mot code et du bit d’innovation 1. Le premier mot du dictionnaire étant 0, on décode donc 01
comme étant le troisième mot du dictionnaire. Le mot-codé suivant est 011 − 1, c’est-à-dire
pointant vers le troisième code et suivi du bit d’innovation 1, on décode alors 011 comme
étant le quatrième mot-code. Le mot-code suivant étant 100 − 1, soit le pointeur du quatrième
mot-code suivi du bit d’innovation 1, on décode 0111 comme étant le cinquième mot-code,
etc.