Vous êtes sur la page 1sur 26

Codage entropique longueur variable

Olivier RIOUL ENST/COMELEC

rioul@comelec.enst.fr

1 Description dun systme de codage longueur variable


On se donne une source discrte (donnes, chier, . . . ) dont chaque symbole x prend une parmi M valeurs possibles {x 1 , x 2 , . . . , x M }. On appelle cela une source M -aire X . La statistique de cette source est caractrise par une distribution de probabilit p(x), quon suppose connue (ou estime) sous la forme {p 1 , p 2 , . . . , p M }, o p i est la probabilit doccurrence du symbole x i . Le schma de codage est illustr par la gure suivante : Code - C

Source X

- Codeur

- Dcodeur

- X

Le codeur code chaque symbole de source x i par un mot de code c i . Le code est, par dnition, lensemble des mots de codes C = {c 1 , . . . , c M }. Un code longueur variable (VLC : Variable-Length Code) est tel que les diffrents mots de code nont pas ncessairement la mme longueur, en bits. On note l i la longueur en bits du mot de code c i . La distribution des longueurs du code est donc {l 1 , l 2 , . . . , l M }. Voici un exemple de code VLC pour M = 4 : xi 0 1 2 3 pi 1/2 1/4 1/8 1/8 li 1 2 3 3 ci 0 10 110 111

Le dcodeur reconstruit les symboles de source partir de la squence binaire des mots de codes. Le taux de codage (coding rate) R est le nombre moyen de bits cods par symbole de source, cest dire
M

R=
i =1

pi li .

On peut interprter, si on veut, R comme une moyenne de la longueur L dun mot de code (selon la loi de probabilit de X ) : R = E (L). Pour lexemple ci-dessus, on a R= 1 2 3 3 + + + = 1.75 bits/symbole. 2 4 8 8

Quoi quil en soit, un code est donc dautant plus efcace en compression que R est petit. Trouver le meilleur code, optimiser le systme, cest donc dterminer le (ou les) code(s) qui rendent R minimal pour une source donne, et donc pour une distribution de probabilit {p 1 , p 2 , . . . , p M } xe. Noter que les performances des codes ne dpendent que des distributions de longueurs.

2 Codes uniquement dcodables


Le but du codage de source sans pertes est de comprimer les donnes de telle faon que lon puisse reconstruire parfaitement (sans pertes, sans erreur) la source au destinaaire. Pour cela, il faut que le dcodage ait lieu sans ambigut, cest dire quune squence code donne doit tre interprtable de faon unique comme une succession (concatnation) de mots de codes dtermins. Un code permettant un tel dcodage (sans ambigut) est quali duniquement dcodable (u.d.). Formellement, cela signie que si on a deux squences de mots de code concatns identiques : c1 c2 ck = c1 c2 cl o les c i et c j appartiennent au code C , alors les mots de code sont un un identiques : k = l et c i = c i , i = 1, . . . , k. Voici quatre exemples de codes : lesquels sont u.d. ? xi 0 1 2 3 code 1 0 0 1 1 code 2 0 10 100 101 code 3 10 00 11 110 code 4 0 10 110 111

Le premier code est trs performant (R = 1 !) mais videmment inutilisable, car ambigu : pour tre u.d., le code doit tre inversible , cest dire que les mots de code doivent tre distincts. Ceci montre quil y a forcment une limite infrieure sur le taux R : dans cet exemple, la valeur R = 1 nest pas atteignable. 2

Le deuxime code est bien inversible mais pas u.d. : par exemple, la squence code C = 101010 . . . peut se dcoder X = 130 . . . ou X = 301 . . .. Un tel code est donc galement inutilisable. Le troisime code est plus intressant : malgr les apparences, il est u.d. ! En effet, on peut imaginer un dcodeur qui examine la parit du nombre de zros qui suit la premire squence 11 ; ce nest quaprs avoir re-lu un 1 quil peut correctement dcouper la squence code et fournir les symboles de source. Cet exemple montre que certains codes u.d. peuvent ncessiter une implantation complexe du dcodeur, qui doit lire la squence code binaire sufsamment loin lavance pour dcoder un symbole de source.

3 Codes instantans et condition du prxe


Le quatrime code donn ci-dessus est, par contre, trs simple dcoder ; De tels codes sont appels codes instantans, car le dcodeur na besoin de lire que les l i premiers bits dune squence code pour pouvoir linterprter instantanment et de manire unique comme tant le mot de code c i , reprsentant le symbole x i . Un code instantan est caractris par la condition du prxe : Aucun mot de code nest le prxe dun autre mot de code (cest dire aucun c i ne dbute un c j , j = i ). Preuve: Il est facile de dmontrer que la condition du prxe caractrise bien un code instantan : cette condition est dabord clairement sufsante, sinon un c i dbuterait un autre c j et il y aurait ambigut lorsque le dcodeur lit c i , de sorte quil ne pourrait pas conclure instantanment. Rciproquement, avec la condition du prxe le dcodage est clairement instantan, car ds quun mot de code c i est lu, il peut tre dcod sans ambigut. Un code instantan est aussi appel code prxe (prex code) dans la littrature. Pour rsumer le vocabulaire vu jusquici on a les ensembles embots suivants : {codes VLC} {codes inversibles} {codes u.d.} {codes instantans}.

4 Ingalit de Kraft-McMillan
Pour trouver le meilleur code pour une source donne, il faut minimiser le taux R sous la contrainte que le code soit u.d. An de raliser cette optimisation, on caractrise dabord le fait quun code soit u.d. sur la distribution des longueurs : [McMillan, 1956] Tout code u.d. vrie lingalit :
M i =1

2l i

appele ingalit de Kraft-McMillan. Preuve: Pour un code u.d., toute squence de l bits peut se dcomposer dau plus une faon comme concatnation de mots de codes c i 1 c i 2 c i k o l i 1 + l i 2 + + l i k = l . Cela vient directement de la dnition dun code u.d. Le nombre total Nl (k) de concatnations possibles de k mots de codes donnant une squence code de longueur totale l bits ne peut donc pas dpasser le nombre total de squences de l bits, qui est 2l . (Sinon, il y aurait forcment ambigut.) On a donc lingalit : Nl (k) 2l . Mais par ailleurs, si on dveloppe la puissance kime (produit de k facteurs identiques)
M

(
i =1

x l i )k =
i 1 ,i 2 ,...,i k

x l i 1 +l i 2 ++l i k

et si on regroupe les termes de mme puissance l = l i 1 + l i 2 + + l i k on trouve prcisment Nl (k) puissances x l pour chaque l . Ainsi :
M

(
i =1

x l i )k =
l

Nl (k)x l

La somme au second membre va de l = kl min l = kl max o l min et l max dsignent les longueurs minimale et maximale dun mot de code. On conclut facilement en faisant x = 1/2 et k : on voit par exemple que
M i =1

2l i

k(l max l min ) + 1 1

quand k .

5 Algorithme de Kraft
Pour linstant lingalit de Kraft-McMillan nest quune condition ncessaire pour quun code soit u.d. Mais il y a une rciproque : [Kraft, 1949] Si lingalit de Kraft-McMillan est vrie, alors il existe un code u.d., et mme instantan, qui admette {l 1 , l 2 , . . . , l M } comme distribution de longueurs. Voici une preuve dont lintrt est de fournir un algorithme simple qui fournit un code instantan {c 1 , . . . , c M } partir dune distribution {l 1 , l 2 , . . . , l M } de longueurs vriant lingalit de Kraft-McMillan. (Il y a dautres preuves classiques, quon trouve dans la littrature, qui utilisent la notion darbre binaire.) Preuve: On se donne une distribution de longueurs l 1 l 2 . . . l M vriant lingalit de Kraft-McMillan1 . A chaque mot de code c i ( trouver) on associe le
1 On peut toujours se ramener un tel ordre croissant, quitte permuter les symboles dans

lalphabet de la source.

nombre c i = 0, c i [0, 1[ dont les dcimales de lcriture en base 2 est forme des bits de c i . On note I i lintervalle I i = [c i ; c i + 2l i [. Par exemple, c i = 010 donne c i = 0, 010 = 1 . et I i = [0, 010; 0, 011[= [ 1 ; 3 [ est 4 4 8 lensemble des nombres de [0; 1[ dont les dcimales en base 2 commencent par ci . Clairement, c i dtermine lintervalle I i , et rciproquement : il suft de tronquer le dveloppement binaire de la limite gauche de lintervalle (de longueur 1 L i ) log2 L i bits pour retrouver c i . On peut alors traduire le fait quun code soit instantan sur les intervalles : Aucun c i ne dbute un c j si et seulement si c j I i . Autrement dit le code est instantan si et seulement si les I i sont des intervalles disjoints. Lingalit de Kraft-McMillan revient prcisment dire que la somme des longueurs des I i est 1. Sils sont disjoints, on peut donc les mettre bout--bout en restant dans le segment [0, 1[. On en dduit facilement un algorithme de construction du code instantan : On met bout--bout les intervalles I i , classs par longueurs dcroissantes (l i croissantes) dans le segment [0, 1[ en partant de la gauche :

I1 0.0 0.10

I2

I3 0.110

0.111

On commence donc par c 1 = 0.0 . . . 0, et on pose c i +1 = extrmit droite de I i chaque tape. Cela revient, pour chaque tape, calculer c i + 1 (addition binaire) puis complter avec des zros si ncessaire pour obtenir c i +1 de longueur l i +1 l i . Les intervalles sont disjoints, le code est donc instantan. Un exemple vaut mieux quun grand discours : li 1 2 3 5 5 5 6 6 code 0 10 110 11100 11101 11110 111110 111111

Noter quavec cet algorithme on dtecte automatiquement si si les l i ne vrient pas lingalit de Kraft-McMillan : on dpasse alors lextrmit droite du segment [0, 1[, et on ne peut plus continuer. Par exemple : 5

li 1 2 3 4 5 5 6

code 0 10 110 1110 11110 11111 Erreur

1 1 1 1 1 1 1 + + + + + + >1 2 4 8 16 32 32 64 Une consquence importante de la caractrisation par lingalit de KraftMcMillan est que tout code u.d. peut tre remplac par un code instantan de mme distribution de longueurs et donc de mme taux. On peut donc limiter la recherche du meilleur code lensemble des codes instantans. Cest un soulagement : du coup, on pourra toujours choisir un code optimal pour lequel le dcodage est instantan, donc trs simple implanter.

6 Recherche du code Optimal


Daprs ce qui prcde, pour trouver le meilleur code pour une source donne, il suft de minimiser le taux R sur la distribution de longueurs uniquement, avec la contrainte donne par lingalit de Kraft-McMillan : min{R =
i

pi li |
i

2l i

1}

On reconnait un problme classique qui se rsout par la mthode des multiplicateurs de Lagrange. Appliquons (brutalement) la mthode du Lagrangien ; celui-ci scrit L=
i

pi li
i

2l i

o est le multiplicateur de Lagrange. On doit annuler les drives L = p i 2l i = 0 l i o est toujours constant (indpendant de i ). Par consquent, loptimum est atteint lorsque les p i et 2l i sont proportionnels, pour une contrainte sature l i = 1. La constante de proportionnalit vaut forcment = 1 ; on trouve i2 donc que R est minimis lorsque l i = log2 6 1 , pi

auquel cas on dcouvre avec stupfaction que le taux minimal est lentropie de la source : M 1 p i log2 H= pi i =1 Seulement voil, ctait trop beau : ce quon vient de faire est faux, puisque ce rsultat ne donne pas, en gnral, des longueurs l i entires ! Il fallait tenir compte de cette contrainte supplmentaire, et la mthode du Lagrangien tait donc inadapte.

7 Codes de Fano-Shannon
On peut quand mme exploiter ce quon vient de faire ; dabord, lentropie est atteinte dans le cas exceptionnel o les p i sont des puissances ngatives de 1 2 (car alors l i = log2 p i est bien entier). Par exemple, le code pi 1/2 1/4 1/8 1/8 li 1 2 3 3 ci 0 10 110 111

est optimalement optimal , puisquici R = H . En gnral, un code, mme optimal, natteint pas lentropie cause de la contrainte supplmentaire des longueurs entires ; son taux est forcment plus grand. Cela montre que le taux dun code u.d. est toujours limit infrieurement par lentropie : R H .

On comprend maintenant pourquoi la technique du codage sans pertes est aussi appele codage entropique : on cherche sapprocher lentropie qui reprsente une borne infrieure sur le taux. Sans chercher optimiser rigoureusement, peut-on trouver des codes dont les taux ne soient pas trop loigns de lentropie ? Il faut pour cela obtenir les longueurs entires ; une faon de faire est de prendre2 l i = log2 1 pi

On vrie immdiatement quavec ce choix, lingalit de Kraft-McMillan est vrie (puisque quon a pris soin darrondir vers le haut, de sorte que 2l i p i ). On obtient la famille des codes de Fano-Shannon (1948) (qui vrient bien lingalit de Kraft-McMillan) et pour lesquels on trouve H
2 x dsigne le plus petit entier

H + 1.
x x + 1.

x. On a x

Preuve: Il suft de prouver la deuxime ingalit : R=


i

p i log2

1 pi

p i log2
i

1 +1 = H + pi

p i = H + 1.
i

do lencadrement annonc. On est donc au pire un bit prs de lentropie. On verra ci-dessous quon ne peut pas amliorer cette distance lentropie pour des codes scalaires . En fait, on a prsent ici ces codes de Fano-Shannon que par souci pdagogique ; leur intrt est surtout historique, depuis que Huffman a propos un algorithme pour trouver les codes VLC optimaux, qui fait lobjet de la section suivante.

8 Codes de Huffman
Comme on sen doute par leur dnition, on constate en pratique que les codes de Fano-Shannon sont rarement optimaux. An de trouver les meilleurs codes il faut se rsoudre rsoudre (sic) compltement le problme de la minimisation de R, en tenant compte du fait que les longueurs l i doivent tre entires. Une rsolution complte du problme de recherche du meilleur code est donne par algorithme itratif sur M appel algorithme de Huffman (1952). On obtient alors un code de Huffman dont le taux R est minimal pour une source donne (par les p i ). Comprendre cet algorithme demande un peu de travail. Dabord quelques prliminaires.

8.1 Prliminaires
Considrons un code VLC optimal pour une source de distribution de probabilit3 p 1 p 2 p M . Que peut-on en dire a priori sur ce code ? Dabord, on aura ncessairement un ordre croissant de longueurs : l1 l2 lM

Preuve: En effet, si ce nest pas le cas, disons p i > p j et l i > l j , on a p i l i + p j l j > p i l j + p j l i et on trouverait un meilleur code en changeant c i et c j . Ainsi les symboles de source les plus probables doivent tre cods par les mots de code les plus courts ; cest intuitivement vident, ce principe est connu depuis Morse4 . Autre chose intuitivement vidente (dj utilise ci-dessus) :
3 On peut toujours se ramener un tel ordre dcroissant, quitte permuter les symboles dans

lalphabet de la source. 4 Le code Morse, vous connaissez ? : la lettre la plus courante (le e ) est code par le mot le plus court ( )).

Lingalit de Kraft McMillan est ncessairement une galit pour un code optimal. Preuve: Sinon, on aurait 2l i < 1.
i

Mais cette somme est un multiple entier de 2l M car l M est la plus grande longueur. On a donc K 2l M < 1, K < 2l M , donc K 2l M 1 puisque K est entier. Autrement dit 2l i 1 2l M .
i

En consquence, si on remplace l M par l M 1, lingalit de Kraft-McMillan reste satisfaite. Ainsi on trouverait de cette faon un code u.d. meilleur. On dduit du raisonnement de la question prcdente qu loptimum, K est un entier pair, donc l M 1 = l M . Avec lalgorithme de Kraft ci-dessus, on saperoit donc quon peut toujours se ramener au cas o les deux mots de codes c M 1 et c M ne diffrent que par le dernier bit.

8.2 Rduction de Huffman


Le principe de cette rduction est le suivant : On considre une source M -aire de distribution de probabilit (par ordre dcroissant) p1 p2 pM .

La rduction de Huffman consiste considrer la source (M 1)-aire, dite rduite , de distribution de probabilit p 1 , p 2 , , p M 2 , p M 1 = p M 1 + p M . Autrement dit, on combine les deux symboles les moins probables. Noter quaprs cette opration, la dernire probabilit p M 1 nest plus forcment sa place dans lordre dcroissant. Notons C M = {c 1 , . . . , c M 1 , c M } le code optimal cherch ( lordre M ). Daprs ci-dessus, on peut supposer que c M 1 et c M ne diffrent que par le dernier bit ; crivons donc c M 1 = [c M 1 0] et c M = [c M 1 1]. En termes de longueurs cela donne l M = l M 1 = l M 1 + 1. En comparant les taux de codage de la source initiale et de la source rduite aprs rduction de Huffman, on peut montrer que : Le code C M 1 = {c 1 , . . . , c M 2 , c M 1 } est optimal pour la source rduite. 9

Preuve: En effet, son taux est


M 2

R M 1 =
i =1 M 2

p i l i + p M 1 l M 1 p i l i + (p M 1 + p M )(l {M 1 ou M } 1)

=
i =1

= R M (p M 1 + p M ) o R M est le taux du code optimal C M . Le terme p M 1 + p M est constant (on optimise pour une source donne !), donc R M 1 est bien minimal puisque R M lest. La rduction de Huffman permet ainsi de rduire la recherche du code optimal lordre M celle lordre M 1. En continuant ainsi, par rductions de Huffman successives, on arrive M = 2 ; mais pour M = 2, le code {0,1} est (trivialement) optimal (pour toute source binaire). Attention tout de mme : pour appliquer les rductions de Huffman successives, il faut prendre soin de rordonner chaque tape les probabilits aprs chaque rduction de Huffman, car chaque rduction ncessite de connaitre les deux symboles les moins probables.

8.3 Remonter le tout


Il reste remonter litration pour construire de proche en proche des codes optimaux de plus en plus grands. Il suft, chaque tape, de construire le code optimal {c 1 , . . . , c M 1 , c M } partir de {c 1 , . . . , c M 2 , c M 1 }. Cest facile, car daprs ci-dessus, on doit simplement poser : c M 1 = [c M 1 0] et c M = [c M 1 1]. Bien entendu, chaque tape, il faut prendre en compte les rarrangements des probabilits qui ont t faits lors de la descente par rductions successives.

8.4 Exemple
Descente. La colonne de gauche donne la distribution de probabilit initiale (M = 8). Chaque rduction cre une nouvelle colonne droite (aprs rarrangement par ordre dcroissant) : 0.25 0.25 0.2 0.14 0.1 0.04 0.01 0.01 0.25 0.25 0.2 0.14 0.1 0.04 0.02 0.25 0.25 0.2 0.14 0.1 0.06 0.25 0.25 0.2 0.16 0.14 0.3 0.25 0.25 0.2 0.45 0.3 0.25 0.55 0.45

10

Remonte. De la droite vers la gauche, on construit de proche en proche le code optimal en tenant compte des permutations faites (on peut utiliser le mme tableau si on le fait la main) : 01 10 11 001 0000 00010 000110 000111 01 10 11 001 0000 00010 00011 01 10 11 001 0000 0001 01 10 11 000 001 00 01 10 11 1 00 01 0 1

Le taux de codage obtenu est R = 2, 54 bits, comparer avec lentropie H = 2.51231997733309 . . .. On est prs d1% de lentropie, ce qui arrive souvent lorsque la source nest pas trop dissymtrique. Noter quon pourrait tout aussi bien travailler sur les longueurs des mots de code plutot que sur ces mots de code eux-mmes, et terminer par lalgorithme de Kraft qui donne le code : 00 01 10 110 1110 11110 111110 111111 2 2 2 3 4 5 6 6 2 2 2 3 4 5 5 2 2 2 3 4 4 2 2 2 3 3 2 2 2 2 1 2 2 1 1

Bien sr on obtient un autre code, et pourrait dailleurs trouver dautres variantes (par exemple en changeant c M 1 et c M certaines tapes (ou toutes), en changeant 0 et 1 sur une ou plusieurs colonne(s) de la liste des mots de code obtenus. . . , ou encore en permutant des mots de code de mme longueur). Par contre, dans cet exemple, il se trouve que la distribution optimale des longueurs est unique. Ce nest pas toujours le cas ; ds quil y a deux ex-aequo dans une tape de r-arrangement des probabilits, il vient un certain arbitraire dans lordre des probabilits dans la phase descendante, qui peut conduire a plusieurs possibilits pour la distribution de longueurs optimale obtenue la n. Exercice : le vrier sur des exemples. . .

9 Ncessit dun codage vectoriel


On a vu que le taux de codage dun code de Fano-Shannon, et donc a fortiori du meilleur code (de Huffman) vrie lingalit H R H + 1. Mais peuton amliorer cet encadrement ? Autrement dit, peut-on trouver une famille de 11

codes pour lesquels, quelque soit la distribution de probabilit de la source, le taux ne sloigne pas de lentropie plus quune quantit < 1 ? La rponse est non, comme le montre lexemple suivant dun source binaire (M = 2) : xi 1 0 pi 1 li 1 1 ci 1 0

Ce code (qui consiste ne pas coder du tout) est optimal : on ne peut videmment pas faire mieux (pas de longueur nulle pour une code u.d. !) : R = 1. Mais lentropie vaut5 H = H2 () = log2 1 1 + (1 ) log2 0 1 quand 0.

Ainsi il y a des sources pour lesquelles le taux optimal R approche H + 1 daussi prs quon veut. Cet exemple dune source binaire dentropie faible est caractristique : on ne peut pas en gnral bien coder (en fait on ne peut pas comprimer du tout) ce type de source cause de la limitation impose ds le dpart dans notre prsentation des codes VLC : savoir quon code la source symbole par symbole (cest du codage scalaire ). Il est donc ncessaire, dans de pareils cas, de passer en codage vectoriel, cest dire de prendre en compte, lors du codage, plusieurs symboles successifs en meme temps. En tout tat de cause, une telle approche prend en compte les corrlations ventuelles des symboles de source l o le codage scalaire est impuissant le faire ; le codage vectoriel doit donc conduire une performance amliore. Pour prendre en compte plusieurs symboles successifs en mme temps, on peut tout simplement coder la source par blocs de n symboles. Cest du codage vectoriel (en dimension n). Cela revient remplacer la source initiale par une super-source dont les symboles sont des vecteurs de n symboles successifs de la source initiale. Cette super-source sappelle extension dordre n de la source initiale6 .

10 Thorme de Shannon
Examinons de plus prs lintrt de coder vectoriellement (disons en dimension n) une source X donne. Appliquons donc un code VLC optimal (de Huffman) lextension dordre n de la source. En fait, un code de Fano-Shannon fait laffaire pour ce qui nous occupe ici. Daprs ci-dessus, on a lencadrement : Hn Rn Hn + 1

5 Quand est trs petit (devant 1), on dit que la source X est dissymtrique. H () est la fonction 2

dentropie binaire, faible pour une source dissymtrique. 6 Le cas scalaire est naturellement un cas particulier du cas vectoriel : il suft de poser n = 1.

12

o R n et Hn sont respectivement le taux de codage et lentropie de la source tendue lordre n. Ces deux quantits sexpriment en bits cods par symbole de source ; or un symbole de source est ici un super-symbole , cest dire un vecteur de n symboles de source initiale X . Par consquent, on revient aux mmes units (bits cods par symbole de source X ) en divisant par n ; le taux de codage, exprim en bits par symbole de source X , vaut Rn R= n alors que lentropie H = Hn n

reprsente lentropie dordre n de la source (en bits par symbole de source X ). Lencadrement ci-dessus devient : H R H+ 1 . n

On voit bien que la situation du cas scalaire (n = 1) sest amliore, cause de la 1 prsence du n : plus on monte en dimension, plus on sapproche de lentropie. On sapproche plus de lentropie, mais de quelle entropie ? Pour le savoir, valuons H dans le cas simple dune source sans mmoire , cest dire une source X dont les symboles sont indpendants dans le temps (et identiquement distribus : suite i.i.d. ). Lentropie dune source sans mmoire lordre n est indpendante de n, et vaut H =H =
M

p i log2
i =1

1 . pi

Preuve: Soit X = (X 1 , X 2 , . . . , X n ) un vecteur de source, et p(x 1 , . . . , x n ) la probabilit asoocie. Alors par dnition H = 1 1 p(x 1 , . . . , x n ) log2 n x1 ,...,xn p(x 1 , . . . , x n )

Par commodit on peut introduire une esprance : H = 1 1 E log2 n p(X 1 , . . . , X n )

Or la source est sans mmoire : ses symboles sont indpendants, ce qui scrit : p(x 1 , . . . , x n ) = p(x 1 ) p(x n ) 13

de sorte que
n 1 1 E log2 n p(X k ) k=1

H = = = =

1 1 n E log2 n k=1 p(X k ) 1 n H n k=1

nH n = H. Do le rsultat. Ainsi, pour une source sans mmoire, en prenant une dimension n assez 1 grande, lencadrement H R H + n montre quon sapproche aussi prs de lentropie que lon veut. La situation est encore meilleure dans le cas dun source avec mmoire ; En effet dans le cas gnral on montre que : Pour une source quelconque, lentropie H dordre n vrie lingalit : H H

Preuve: Considrons la diffrence H H , interprte comme la diffrence de lentropie avec et sans mmoire. Avec les mmes notations que ci-dessous,
n 1 1 1 1 E log2 E log2 n p(X 1 , . . . , X n ) n p(X k ) k=1

H H = =

1 p(X 1 ) p(X n ) E log2 n p(X 1 , . . . , X n )

Or une ingalit de concavit bien connue7 afrme que la moyenne de logarithmes est au logarithme de la moyenne : H H 1 p(X 1 ) p(X n ) log2 E n p(X 1 , . . . , X n )
x 1 qui donne

7 Mais on peut ne pas la connatre : utiliser alors la place lingalit log(x)

le mme rsultat.

14

En explicitant lesprance au second membre, il vient E p(x 1 ) p(x n ) p(X 1 ) p(X n ) = p(x 1 , . . . , x n ) p(X 1 , . . . , X n ) p(x 1 , . . . , x n ) x 1 ,...,x n =
x 1 ,...,x n n

p(x 1 ) p(x n ) p(x k )


k=1 x k n

= =
k=1

= 1, do le rsultat : H H 1 log2 1 = 0. n

En fait, sous des hypothses assez faibles (source stationnaire), on montre que lentropie dordre n dcrot, lorsque n , vers une valeur limite appele entropie (dordre ) de la source. Ainsi, en prsence de mmoire , en particulier lorsque les symboles de X sont corrls en temps, lentropie de source dcroit lorsque n augmente. A la limite, lencadrement sur le taux montre quon sapproche daussi prs quon veut de lentropie (dordre inni) : il suft de coder en trs grande dimension. On vient de dmontrer le Thorme de Shannon (1948).8 Par codage vectoriel en dimension susemment leve, le taux de codage peut tre rendu arbitrairement proche de lentropie de la source. Lentropie apparait donc non seulement comme une limite infrieure sur le taux de codage mais aussi comme une limite thoriquement atteignable . Lorsque la source est avec mmoire on a H < H ; on en conclut que le codage vectoriel permet de rduire le taux en prenant en compte les corrlations des symboles de source. Ceci dit, lintrt du codage vectoriel ne se limite pas la prise en compte des corrlations des symboles de source, puisquon a vu que mme pour une source sans mmoire, au augmente les performances (en sapprochant de H ) lorsque n 1 crot (grce au terme n ). Ainsi le codage vectoriel permet de rduire le taux mme pour une source sans mmoire. Le thorme de Shannon semble ( premire vue) clore dnitivement la question du codage sans pertes en proposant de raliser un codage vectoriel en
8 Cest le premier thorme de Shannon pour le codage de source sans pertes ; il existe

dautres thormes de Shannon pour le codage de source avec pertes, le codage de canal, et le codage de source et de canal combins.

15

grande dimension pour toute source. Du point de vue des performances, cest optimal : on sapproche daussi prs quon veut de lentropie, et de tout faon on ne peut pas decendre en dessous. Cependant il y a un hic : Pour coder une source M -aire en dimension n, il faut appliquer un code VLC la source tendue pour laquelle on a M n symboles possibles. Le code doit donc tre de taille M n , qui augmente exponentiellement avec n. Par exemple, si on veut garantir un taux sapprochant de lentropie moins dun centime de bit pour une source binaire, il faut un code de taille 2100 = 1267650600228229401496703205376 Inutile de dire que cest prohibitif : il faudrait stocker la table du code au codeur et au dcodeur, ou transmettre cette table du codeur au dcodeur, ce qui ncessite un overhead (donnes annexes) qui prend une part non ngligeable du dbit global. En rsum, le codage vectoriel en grande dimension est dun grand intrt. . . thorique. Mais en pratique, pour des questions de complexit et de mmoire, on est amen imaginer dautres solutions pour prendre en compte des symboles de source successifs. Une de ces solutions est le codage par plages, objet de la section qui suit.

11 Codage par plages dune source binaire


Revenons, pour xer les ides, la source binaire dissymtrique (dentropie faible, petit) : xi 1 0 pi 1

Un codage vectoriel dune telle source est possible, mais conduit, comme on la vu, une taille de code extrmement grande. En pratique, on peut utiliser alors des techniques de codage par plage (RLC : Run-Length Coding) pour amliorer les performances sans trop monter en complexit. Nous allons tenter de comprendre lide sur la source binaire dissymtrique donne en exemple.

11.1 Source quivalente des plages


Tout dabord, la source X est transforme en une autre source L dont les symboles sont des entiers l 0 reprsentant les longueurs des plages successives de zros (entre deux occurences de 1 ) de la source initiale X . Par exemple, la ralisation dune squence de symboles x de la source X : 0001010000000110000010001 . . . 16

est reprsente par la squence les longueurs l : 3, 1, 7, 0, 5, 3, . . . . Ainsi une plage de longueur l correspond la squence binaire de source X = 00 01 de (l + 1) bits. La distribution de probabilit p(l ) de L est donc donne par9 p(l ) = (1 )l . En les mettant bout bout ces squences de (l + 1) bits, on peut clairement reconstruire la squence des symboles de source initiale x 0 , x 1 , . . . partir de la reprsentation en longueurs de plages : l 1 , l 2 , . . .. Ainsi la source est plages est quivalente la source binaire initiale. Lentropie de L vaut : H (L) = H2 ()

Preuve: On peut le vrier pniblement par le calcul en dveloppant H (L) = 1 l 0 p(l ) log2 p(l ) (Exercice : le faire !). On peut aussi procder comme suit : Puisququivalentes, les deux sources X et L ont mme entropie, condition bien sr que ces entropies soient exprimes dans la mme unit, par exemple en bits par bit de source X Lentropie de X vaut H2 (). Or le nombre moyen de bits de source par plage est10 E (L + 1) =
l 0

(l + 1)(1 )l =

On en dduit immdiatement, sans calcul, la formule donnant lentropie de L, en bits par plage.

11.2 Le codage des plages


Le principe du codage par plages est videmment de coder la source quivalente des plages de faon tenir compte des squences de zros conscutifs. Mais comme le nombre des valeurs possibles des longueurs L = l est inni, on ne peut pas appliquer directement un codage VLC (par exemple par lalgorithme de Huffman) sur la source L. Pour rsoudre ce problme, on procdera ici en dcoupant en tranches les valeurs des longueurs de plage, et on codera chaque tranche laide dun code
9 On suppose ici que les bits de source X sont indpendants ( source sans mmoire ). On vriera quon a bien + p(l ) = 1. l =0 10 Rappelons la formule x l xl = . (1 x)2 l 0

17

de Huffman de taille N . Cest compliqu dcrire en dtail, mais le principe est simple. Voici le dtail : On code tout dabord les N 1 premires valeurs des longueurs de plage : l = 0, 1, . . . , N 2 ainsi que lvnement L N 1, laide de lalgorithme de Huffman. Le code de Huffman obtenu est not H 1 ; il possde donc N mots de code. Le mot de code associ lvnement L N 1 est not Pf1 et servira de prxe au codage des longueurs N 1. On code galement la deuxime tranche, constitue des N 1 valeurs suivantes des longueurs de plage : l = N 1, N , . . . , 2N 3 ainsi que lvnement L 2N 2, en mettant en oeuvre lalgorithme de Huffman11 . Le code de Huffman obtenu est not H 2 , il est aussi de taille N . Le mot de code associ lvnement L 2N 2 est not Pf2 et servira de prxe au codage des longueurs 2N 2. On procde de mme pour toutes les tranches suivantes. On obtient donc une suite de codes de Huffman de taille N : H 1 , H 2 , H 3 , . . ., et une suite de prxes Pf1 , Pf2 , Pf3 , . . . correspondants. Finalement la source L est code comme suit : Si L = l appartient la kime tranche, il est cod par c l = Pf1 Pf2 . . . Pfk1 c l o c l est le mot de code du code H k correspondant L = l . Par exemple, si N = 4, L = 6, Pf1 = Pf2 = 10, H 3 = {0, 10, 110, 111} o le mot de code correspondant L = 6 est c 6 = 110, alors L = 6 sera cod par c 6 = 1010110. Tout a t fait pour permettre de raliser un algorithme naturel de dcodage instantan pour retrouver la source L partir de sa reprsentation code : le dcodeur recherche dabord les prxes ventuels Pf1 Pf2 . . . Pfk1 au dbut de la squence dcoder, ce qui lui permet de reprer la tranche k ; puis il dcode un mot de code du code de Huffman H k . En fait on a la simplication suivante : Les codes de Huffman H 1 , H 2 , . . . sont toujours identiques, ainsi donc que les prxes Pf1 = Pf2 = Pf3 = . . ..
11 A partir de la deuxime tranche, lalgorithme de Huffman est mis en oeuvre bien que la nor-

malisation i p i = 1 des probabilits nest pas satisfaite, ce qui ne pose aucun problme (lalgorithme nutilise pas cette normalisation de toute faon).

18

Preuve: Les probabilits en entre de lalgorithme de Huffman qui fournit H k sont, au facteur multiplicatif (1 )(N 1)(k1) prs, les mmes que pour le code H 1 ; et ce facteur naffecte pas le rsultat de lalgorithme.

11.3 Performances et exemples


Grce la simplication ci-dessus on peut dterminer une formule simple pour le taux de codage : Le taux de codage global du systme complet (en bits cods par bit de source) vaut R H R= 1 (1 )N 1 o R H est le taux de codage de chaque code de Huffman H 1 , H 2 , . . .. Preuve: Le taux de codage global du systme complet est le nombre moyen de bits cods par bit de source, cest dire :
+

R=
l =0

p(l )|c l |

o |c l | dsigne la longueur (en bits) du mot de code c l (reprsentation code de la longueur L = l ). Pour calculer R, il faut tenir compte des longueurs des prxes ventuels. Exprimons dabord R en bits par plage ; on a, en dcoupant en tranches (avec des codes de Huffman et des prxes identiques pour chaque tranche) : R = p(0)|c 0 | + + p(N 2)|c N 2 | + Prob{L + = R H + (1 )N 1 R H + (1 )2(N 1) R H + Ici on a tenu compte du facteur mulitplicatif (1 )N 1 pour les probabilits dune tranche la suivante. On a donc R= = do la formule. Evidemment ce rsultat dpend du choix de la longueur N des tranches. On peut dailleurs vrier le rsultat dans le cas extrme o N ; le code de Huffman donne alors un taux sapprochant de lentropie daprs le thorme de Shannon (appliqu la source quivalente des longueurs) : R H H (L) = 19 H2 () RH 1 (1 )N 1 R H 1 (1 )N 1 bits/plage bits/bit N 1}|Pf1 | 2N 2}|Pf1 |

+ p(N 1)|c 0 | + + p(2N 3)|c N 2 | + Prob{L

Puisque (1 )N 1 0, on aboutit R H2 () = H La limite est lentropie de la source X , et donc la mthode de codage par plages expose ici est asymptotiquement optimale. En pratique on dtermine la longueur N des tranches par un compromis entre taille du code de Huffman (elle ne doit pas tre trop grande) et valeur du taux R donne par lexpression ci-dessus. Donnons un exemple prcis pour = 0.1 et N = 4. On applique lalgorithme de Huffman pour dterminer le taux R H : (1 )3 = 0.729 = 0.1 (1 ) = 0.09 (1 )2 = 0.081 0.729 0.171 0.1 0.729 0.271 1 2 longueurs : 3 3 1 2 2 1 1

do R H = 1.442 et R = 0.5321 . . . bits/bit obtenu par codage de Huffman des plages. On peut comparer ce rsultat un codage vectoriel en dimension n = 2 (pour une mme taille de code de Huffman) : (1 )2 = 0.81 (1 ) = 0.09 (1 ) = 0.09 2 = 0.01 0.81 0.1 0.09 0.81 0.19 1 2 longueurs : 3 3 1 2 2 1 1

ce qui donne R = 1.29 = 0.645 bits/bit. Pour une mme complexit, le codage par 2 plages se rvle meilleur que le codage vectoriel. Ce serait encore plus agrant pour de plus grandes valeurs de N (Exercice : le faire !).

12 Codage arithmtique
Dautres systmes de codage de source sans pertes ont t proposs pour prendre en compte les dpendances temporelles (dun symbole lautre) de la source (avec mmoire). Ces sytmes de codage permettent de coder une source quelconque sans connaitre a priori ses statistiques (cest ce quon appelle du codage universel ), mais sont plus complexes mettre en oeuvre. Les plus connus sont les systmes de codage de Lempel-Ziv (1976) et de codage arithmtique (1982). Dans cette section, on va prsenter les ides principales du codage arithmtique, qui est une des techniques de compression sans pertes les plus rcentes, et probablement la plus importante dans les applications et les normes actuelles. Le codage arithmtique est une extension itrative dune technique de codage connue depuis les annes 50, appele codage dElias (ou de Shannon-FanoElias). Cette dernire technique a t simplement introduite comme moyen de 20

construction dun code VLC scalaire , o on code chaque symbole de source lun aprs lautre. Dcrivons dabord le codage dElias :

12.1 Codes dElias


La distribution de probabilit des symboles de source vrie la relation :
M

p i = 1.
i =1

On peut donc construire une partition (un dcoupage ) du segment [0, 1[ (de longueur 1) en intervalles contigus12 I 1 , . . . , I M , o chaque I i est de longueur p i . Dans la suite, chaque point du segment [0, 1[ est un nombre qui sera reprsent par son dveloppement binaire (en base 2), par exemple : 0.110100100 . . .. I1 0 I2 I3 I4 IM
-

Lide est de coder un symbole de source x i par un point quelconque du segment de lintervalle correspondant I i : ci I i . On utilise ici la mme notation que lors de la description de lalgorithme de Kraft ci-dessus : le mot de code c i correspondant au symbole x i sera tel que c i = 0, c i [0, 1[ : les dcimales de lcriture en base 2 de c i est forme des bits de c i . Noter que mme en supposant c i dtermin dans I i , il reste une indtermination sur c i : ses premiers bits sont dtermins par le dveloppement de c i en base deux, mais sa longueur l i , cest dire le nombre de bits de prcision (aprs la virgule) quon choisit pour le nombre c i , reste choisir. An de pouvoir dcoder, il est ncessaire que la prcision sur c i soit suf samment grande pour caractriser dans quel intervalle I i il se trouve. Or, si c i est connu avec une prcision de l i bits, il peut prendre nimporte quelle valeur dans lintervalle [c i ; c i + 2l i [ puisque cet intervalle est lensemble des nombres dont les l i premires dcimales en base 2 coincident avec c i . Il est donc ncessaire de choisir la prcision l i de sorte que [c i ; c i + 2l i [ I i .
12 On choisira ces intervalles semi-ouverts (ferm gauche, ouvert droite) ; ainsi la dnition prcise est : i 1 i

Ii =
j =1

pi ;
j =1

pi .

21

Ainsi on pourra toujours dterminer un nombre c i I i convenable, pourvu que I i contienne un intervalle du type [n2l i , (n + 1)2l i [, o n est entier (auquel cas n = c i en base 2). Il est facile de voir que ce sera toujours possible si 2 2l i l (I i ) = p i .

On ne peut pas, en gnral, choisir un l i plus petit car I i pourrait tre alors cheval sur deux intervalles conscutifs du type [(n 1)2l i , n2l i [ et [n2l i , (n + 1)2l i [ :

MAUVAIS
(n1)2l i n2l i (n+1)2l i

Ii

(n1)2l i

n2l i

(n+1)2l i

BON On pourra donc prendre pour l i le plus petit entier vriant lingalit cidessus, cest dire13 : 1 l i = log2 +1 pi Remarquons que, daprs lanalyse faite ci-dessus pour lalgorithme de Kraft, on obtient un code instantan, car les intervalles [c i ; c i +2l i [ sont tous disjoints. De plus, par un calcul analogue au cas des codes de Fano-Shannon trait ci-dessus, on en dduit lencadrement sur le taux de codage : H R H + 2.

Cet encadrement est moins bon que celui quon avait obtenu pour les codes de Fano-Shannon, ce qui explique pourquoi le codage dElias est rapidement tomb dans loubli ; il na t r-exhum qu la lumire de la technique itrative du codage arithmtique, quon va maintenant dcire.

12.2 Itrations du codage arithmtique


Lide du codage arithmtique est ditrer la procdure dElias au fur et mesure du temps, an coder plusieurs symboles de source successifs. On prendra ainsi en compte les corrlations ventuelles des symboles de la source (avec mmoire).
13 x dsigne le plus petit entier

x.

22

Commencons par le codage de deux symboles conscutifs14 (x 1 , x 2 ). La distribution de probabilit conjointe de ce vecteur scrit : p(x 1 , x 2 ) = p(x 1 )p(x 2 |x 1 ) o p(x 2 |x 1 ) est la probabilit conditionnelle de x 2 sachant x 1 . On commence par appliquer la procdure dElias pour le symbole x 1 ; on obtient une reprsentation code dans un intervalle I 1 de longueur p(x 1 ). Pour tenir compte de x 2 , on considre non pas les probabilits p(x 2 ), mais les probabilits conditionnelles p(x 2 |x 1 ) qui vrient la relation : p(x 2 |x 1 ) = 1.
x2

On recommence alors la procdure dElias, non plus sur le segment [0, 1[, mais sur lintervalle I 1 quon re-partitionne en intervalles I 2 plus ns, de longueurs proportionnelles aux p(x 2 |x 1 ) :

I1 0
!! !! !! !! !! ! PP PP

1
PP P PP PP P

I2

P P -

Puisque l (I 1 ) = p(x 1 ), ces nouveaux intervalles I 2 sont en fait de longueur l (I 2 ) = p(x 1 )p(x 2 |x 1 ) = p(x 1 , x 2 ). Arriv jusque l, rien nempche de continuer et de coder le symbole suivant x 3 , en re-dcoupant lintervalle I 2 en sous-intervalles I 3 de longueurs proportionnelles p(x 3 |x 1 , x 2 ). Ces intervalles seront en fait de longueur p(x 1 , x 2 )p(x 3 |x 1 , x 2 ) = p(x 1 , x 2 , x 3 ) et ainsi de suite. Aprs n itrations de lalgorithme dElias on obtient un intervalle de longueur p(x 1 , x 2 , . . . , x n ) = p(x 1 )p(x 2 |x 1 )p(x 3 |x 1 , x 2 ) p(x n |x 1 , . . . , x n1 ) qui prend bien en compte la dpendance temporelle des symboles de source.
14 A partir de maintenant les indices dsignent le temps : x , x , . . . sont les symboles de source 1 2

observs aux instants t = 1, 2, . . ..

23

12.3 Points techniques et performances


Le rsultat du codage est donc forme des dcimales du nombre c I n , avec une prcision sufsante pour quil appartienne un intervalle I n unique. Ainsi, en thorie, il suft de disposer dune implantation dune arithmtique prcision innie (ou sufsamment grande). Ceci explique le terme codage arithmtique . Le dcodage procde dans le mme sens que le codage : on regarde dabord dans quel intervalle I 1 se trouve c, on en dduit x 1 , puis on regarde lintrieur de I 1 dans quel intervalle I 2 se trouve c, on en dduit x 2 , et ainsi de suite. On dcode ainsi au l de leau x 1 , x 2 , . . .. En pratique, il est hors de question de demander une implantation dune artihmtique prcision innie. Cest la raison pour laquelle il est ncessaire de procder des remises lchelle subtiles chaque fois que la prcisionmachine va tre atteinte, de faon viter les problmes dunderow. Ces remises lchelle sont re-parcourues lors du dcodage. Je passe ici sous silence les nombreux dtails dimplantation qui sont trs techniques. Il est facile dvaluer les performances de ce codage : Le mot de code dElias au bout de n tapes aura une longueur (longueur de prcision de c) : l = log2 1 +1 p(x 1 , x 2 , . . . , x n )

et le taux de codage R n , en bits par vecteur (x 1 , . . . , x n ), vrie donc lencadrement : Hn R n Hn + 2, do, en se ramenant des bits par symbole de source : H R H+ 2 n

o H est lentropie dordre n de la source. On retrouve une situation dj rencontre lors de lanalyse du codage vectoriel en dimension n, qui fournit le thorme de Shannon : le taux de codage sapproche daussi prs quon veut de lentropie. Le codage arithmtique est donc optimal dans le cas gnral des sources avec mmoire.

12.4 Adaptativit et universalit


Lintrt du codage artihmtique nest pas tant de fournir un algorithme de codage optimal mais il permet surtout un codage adaptatif : plutt que de supposer connu une fois pour toutes la distribution de probabilit conjointe de la source p(x 1 , . . . , x n ) (par modlisation et/ou estimation sur toute la source), il est possible destimer au fur et mesure les probabilits conditionnelles p(x n |x 1 , . . . , x n1 ) 24

dont on a besoin pour ltape n. Ceci permet une plus grande exibilit pour coder nimporte quel type de source, en sadaptant des variations ventuelles de statistiques. Bien entendu, cette estimation est dabord grossire ; elle safne au fur et mesure du codage des donnes x 1 , x 2 , . . .. On peut mme aller plus loin : plutt que de transmettre en donnes annexes (overhead) ces estimations de probabilit du codeur au dcodeur (qui en a galement besoin), on peut envisager de rpeter au dcodage (indpendamment du codeur) lestimation voulue sur les donnes au fur et mesure de leur dcodage. On obtient alors un algorithme de dcodage universel qui est capable de coder (et de dcoder sans information supplmentaire) tout type de source sans connaissance a priori de ses statistiques.

Rfrences
[1] Robert Mc Eliece, The Theory of Information and Coding, Addison Wesley, 1977. [2] Thomas Cover, Joy Thomas, Elements of Information Theory, J. Wiley & sons, 1991. [3] Allan Gersho, Robert Gray, Vector Quantization and Signal Compression, Kluwer Academic, 1992. [4] Nicolas Moreau, Techniques de Compression des Signaux, Masson CNETENST, 1994.

25

Cadre priv } sans modications


Par le tlchargement ou la consultation de ce document, lutilisateur accepte la licence dutilisation qui y est attache, telle que dtaille dans les dispositions suivantes, et sengage la respecter intgralement. La licence confre lutilisateur un droit dusage sur le document consult ou tlcharg, totalement ou en partie, dans les conditions dnies ci-aprs, et lexclusion de toute utilisation commerciale. Le droit dusage dni par la licence est limit un usage dans un cadre exclusivement priv. Ce droit comprend : le droit de reproduire le document pour stockage aux ns de reprsentation sur un terminal informatique unique, le droit de reproduire le document en un exemplaire, pour copie de sauvegarde ou impression papier. Aucune modication du document dans son contenu, sa forme ou sa prsentation, ni aucune redistribution en tout ou partie, sous quelque forme et support que ce soit et notamment par mise en rseau, ne sont autorises. Les mentions relatives la source du document et/ou son auteur doivent tre conserves dans leur intgralit. Le droit dusage dni par la licence est personnel, non exclusif et non transmissible. Tout autre usage que ceux prvus par la licence est soumis autorisation pralable et expresse de lauteur : sitepedago@enst.fr