Beruflich Dokumente
Kultur Dokumente
1 Théorie de l’information 1
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Quantité d’information et entropie d’une source . . . . . . . . . . . . . . . . . . . . . . 1
1.3 Information mutuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3.1 Entropie conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3.2 Information mutuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Théorème de Shannon pour le codage de source . . . . . . . . . . . . . . . . . . . . . . 4
1.4.1 Codage de source sans perte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4.2 Codage de source avec perte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5 Théorème de Shannon pour le codage de canal . . . . . . . . . . . . . . . . . . . . . . . 6
2 Le codage de source 9
2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2 Caractéristiques des codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.1 Le théorème de Mac Millan . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.2 Le théorème de Kraft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3 Construction des codes instantanés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 Construction des codes optimaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4.1 Quelques conditions nécessaires sur les longueurs optimales . . . . . . . . . . . 12
2.4.2 Les longueurs optimales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4.3 L’algorithme de Huffman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.5 TD 1 : Codage de source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
iv TABLE DES MATI ÈRES
A Corrigé du TD 1 61
B Corrigé du TD 2 65
C Corrigé du TD 3 71
D Corrigé du TD 4 73
Bibliographie 81
vi Table des matières
Table des figures
et g2 = 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Chapitre 1
Théorie de l’information
1.1 Introduction
Dans ce chapitre, nous donnons un bref aperçu sur la théorie de l’information dans le but de l’appli-
quer au codage canal (correction des erreurs de transmission) et au codage de source (compression). Pour
cela, on commence par mesurer la quantité d’information qu’apporte l’observation d’une source aléatoire
(Entropie de la source). Ensuite, on détermine l’information qu’apporte l’observation d’une source sur
une autre (Information mutuelle). Après cela, nous établissons le théorème de Shannon pour le codage
de source qui donne la borne inférieure du taux de compression. Enfin, on établit le deuxième théorème
de Shannon qui donne la borne supérieure du taux de codage canal qu’on ne doit pas dépasser si l’on
veut garantir une probabilité d’erreur binaire arbitrairement faible.
Il s’agit de caractériser la quantité d’information moyenne apportée par l’observation d’une source
aléatoire. On commence par considérer le cas d’une source discrète X . La source X est modélisée
une variable aléatoire (v.a.) discrète ayant comme alphabet A =f x1 ; x2 ; ; xM g : On note pi =
P ( = )
X xi : La quantité d’information apportée par la réalisation de X = xi est donnée par
( = ) = log( 1 )
Q X xi
pi
: (1.1)
On vérifie que la quantité d’information apportée par la réalisation de l’événement X = xi est inverse-
ment proportionnelle à sa probabilité de réalisation pi : En outre, si on considère deux sources X et Y
Q ( =X xi ; Y = ) = log( ( = 1 = ) ) = log( ( = )1 ( = ) )
yj
P X xi ; Y yj P X xi P Y yj
= ( = )+ ( = ) Q X xi Q Y yj : (1.2)
L’entropie d’une source est la quantité d’information moyenne apportée par l’observation de la source :
H X( )=
X
M
pi log 1 : (1.3)
pi
i=1
L’entropie d’une source est grande lorsque son observation apporte beaucoup d’information, on peut
donc dire que l’entropie donne l’incertitude sur la source. Cette dernière définition peut être étendue au
cas de sources à valeurs réelles :
Z
( )= ( ) log 1
H X
()x
pX x
pX x
dx: (1.4)
H X ( ) = log 1 + (1
p 2
p
p ) log 1 2
1
p
; (1.5)
où p = P ( = ).
X x1
La figure 1.1 montre l’évolution de H X ( ) en fonction de p . On constate que l’entropie est nulle pour
p = 1 et = 0 c’est à dire lorsque la source est déterministe. L’entropie est maximale pour = 1 2
p p =
0 ( ) log ( )
H X 2 M : (1.6)
L’entropie est bien sûr nulle lorsque la source est déterministe et elle est maximale valant log ( )
2 M
Dans certaines applications, on ne peut observer qu’un traitement de X noté Y . On définit l’entropie
conditionnelle comme étant l’incertitude moyenne qui reste sur X après observation de Y :
Z Z
( )= () ( ) log 1
H X=Y
y
pY y
x
pX= Y x=y
pX= Y (x=y ) dxdy: (1.7)
1.3 Information mutuelle 3
(
I X; Y )= ( )
H X H (
X= Y ) : (1.8)
( ) =
Z
( ) log 1 Z
()
Z
( ) log 1
I X; Y
x
pX x
() pX x
dx
y
pY y
x
pX= Y x=y
pX= Y ( )
x=y
dxdy(1.9)
=
Z
( ) log 1 Z Z
( ) log 1
x;y
pX;Y x; y
() pX x
dx
x;y x
pX;Y x; y
pX=Y ( )
x=y
dxdy
=
Z
( ) log ( ) pX;Y x; y
x;y
pX;Y x; y
() () pX x pY y
dx:
( ) =
Z
( ) log 1( )
Z Z
( ) log PY ()
y
I X; Y
x
pX x
pX x
dx
y x
pX;Y x; y
pX;Y ( )
x; y
dxdy (1.10)
= H X ( )+ ( ) ( )
H Y H X; Y ;
où
Z Z
( )= ( ) log 1
H X; Y
y x
pX;Y x; y
pX;Y ( x; y ) dxdy:
4 Théorie de l’information
On constate donc que l’incertitude sur X plus l’incertitude sur Y est supérieure à l’incertitude sur (X; Y ),
la différence est égale à l’information mutuelle. La figure 1.2 montre une illustration graphique de l’in-
formation mutuelle.
Si X et Y sont indépendants alors (
H X= Y )= ( )H X ; on en déduit que I (X; Y ) = 0 c’est à dire que
la connaissance de Y n’apporte aucune information sur X ce qui était prévisible du moment que X et Y
sont indépendants.
Si X = ( ) alors
f Y X=Y est une variable aléatoire déterministe donc H (X= Y )=0 et I (X; Y ) = H (X ):
On en déduit que H (X; Y ) = ( ). Si
H Y f est bijective, alors H (Y =X ) = 0 d’où ( ) = (
H Y I X; Y )=
H X ( )
En général, on montre que
0 ( I X; Y ) ( ).
H X (1.11)
(
I X; Y ) = 0 sssi X et Y sont indépendants et I (X; Y ) = H (X ) sssi X = ( ).
f Y
Le codage de source ou encore compression a pour but de réduire le nombre de bits utilisés pour
représenter une source binaire. Cette technique de codage porte aussi le nom de codage entropique car
elle utilise des statistiques de la source ou plus précisemment la probabilité d’occurrence de ces différents
symboles. Nous nous intéressons dans cette section à établir une borne inférieure du taux de compression.
On considère une source U de cardinal M , habituellement chaque symbole Ui de cette source doit
être représenté sur ( ) bits. Le codeur source consiste à associer à chaque symbole de la source
log2 M
Ui une étiquette Ei formée de n bits. Le taux de codage de source est défini comme étant le rapport du
nombre de bits des étiquettes Ei par celui des mots de source Ui :
Rs = n
( )
log2 M
: (1.12)
1.4 Théorème de Shannon pour le codage de source 5
H ( )= (
E I E; E ) ( I U; V ) : (1.13)
Or d’après (1.6),
H ( ) log (2 ) =
E 2
n
n: (1.14)
On en déduit que
Rs ( ( ))
I U; V
log2 M
: (1.15)
A présent, nous allons établir la borne inférieure du taux de compression en distinguant les cas où le
codeur et le décodeur de source introduisent ou pas de pertes.
Du moment que le codeur et le décodeur de source n’introduisent pas de perte U = V et (1.15) donne
H ( )
U
Rs
log2 M ( ) : (1.16)
Ainsi l’entropie de la source apparaı̂t comme la borne inférieure du taux de compression. Plus la source
présente des symboles très probables plus son entropie est faible et plus on pourra la comprimer. Le cas
limite est celui d’une source déterministe dont l’entropie est nulle, dans ce cas on peut faire tendre le taux
de compression vers zéro. L’autre cas limite est celui d’une source uniforme dont l’entropie est égale à
log ( ) donc le taux de compression est égal à 1 c’est à dire qu’on ne peut pas la comprimer.
2 M
6 Théorie de l’information
D = log 1( ) k E U V k 2
: (1.17)
2 M
Rs ( )R D ; (1.18)
où
( ) = min log( ( )) log 1( ) k
R D
p(V =U )
I U; V
= E U V k
2
D :
2 M 2 M
Ce dernier résultat porte le nom de premier théorème de Shannon ou encore théorème de Shannon pour
le codage de source. La fonction R(D ) porte le nom de fonction taux distorsion, elle apparaı̂t comme la
borne inférieure du taux de compression. Pour un niveau de distorsion D0 donné, on ne peut comprimer
la source au delà de la limite de Shannon R(D0 ): Si D tend vers zéro alors V tend vers U et R(D ) tend
H (U )
vers log2 (M )
, on retrouve donc le résultat (1.16). Lorsque D augmente, V et U deviennent de plus en
plus indépendants et ( ) tend vers zéro ce qui fait qu’on peut bien comprimer la source du moment
R D
qu’on s’autorise beaucoup de distorsions. Une illustration graphique du théorème de Shannon pour le
codage de source est donnée dans la figure 1.4. La zone en dessous de R D ( ) est interdite. On montre
que le premier théorème de Shannon reste valable même si les étiquettes Ei possèdent des longueurs
variables. Dans ce cas, le taux de compression est le rapport de la longueur (en nombre de bits) moyenne
des étiquettes par la longueur des mots de source
PM
Rs = log ( ) ( )
i=1
pi li
R D : (1.19)
2 M
où pi = ( = ) = ( = ) et
p E Ei p U Ui li est la longueur en nombre de bits de Ei :
1.5 Théorème de Shannon pour le codage de canal
Le codage canal est une opération qu’on effectue après le codage de source. Il consiste à coder
la source en rajoutant de la redondance afin de pouvoir détecter et corriger les éventuelles erreurs de
1.5 Théorème de Shannon pour le codage de canal 7
l > n . On associe donc à tout mot de source formé de n bits un mot de code formé de l bits. Lorsqu’on
construit un codeur canal, on essaye d’espacer les mots de codes dans le but de détecter et corriger les
éventuelles erreurs de transmission. On définit le rendement d’un code correcteur d’erreurs ou encore
taux de codage canal par le rapport du nombre de bits des mots d’information par celui des mots de
codes :
Rc = n
l
: (1.20)
Rc donne le pourcentage de bits d’information dans les bits émis. Plus Rc est faible plus il y a de la
redondance ce qui fait qu’on arrive à bien corriger les éventuelles erreurs de transmission. Cependant,
plus Rc est faible plus le débit utile diminue. Nous nous proposons donc de maximiser Rc afin de garantir
le débit utile le plus élevé tout en garantissant une transmission aussi fiable que l’on désire. Tel qu’illustré
dans la figure 1.5, on appelle E les mots d’information, X la sortie du codeur canal, Y la sortie du
b la sortie du décodeur canal.
canal et E
I ( X; Y ) I E; Eb : (1.21)
Etant donné qu’on désire avoir une probabilité d’erreur arbitrairement faible, on déduit que
8 Théorie de l’information
I E; E b ' ( )=
H E n: (1.22)
Rc ( I X; Y
l
) : (1.23)
A présent, on cherche à maximiser le membre de droite de l’équation (1.23) pour un canal fixé, p(Y =X )
fixé, et pour une puissance de transmission limitée à P :
Rc ( )C P ; (1.24)
Ce résultat porte le nom de théorème de Shannon pour le codage canal ou encore deuxième théorème
de Shannon. La capacité du canal apparaı̂t comme une borne supérieure du taux de codage canal. Pour
une puissance de transmission P0 , on ne peut coder l’information avec un taux supérieur à C (P0 ) si l’on
veut garantir une probabilité d’erreur arbitrairement faible. Si P tends vers zéro, X tend vers zéros donc
X et Y sont de plus en plus indépendants d’où C P ( ) tend vers 0 c’est à dire qu’on doit transmettre
beaucoup de redondance ce qui était prévisible du moment que la puissance de transmission est faible.
Lorsque P augmente ( ) augmente pour converger vers la capacité du canal (1)
C P C : La figure 1.6
montre une illustration graphique du théorème de Shannon pour le codage de canal. On observe que la
zone graphique au dessus de la courbe C (P ) n’est pas autorisée.
Le codage de source
2.1 Introduction
Le codage de source a pour but de réduire le nombre de bits utilisés pour représenter une source. Pour
cela, on opère en deux étapes. D’abord, on commence par décorréler la source grâce à des transformées
telles que la TKL (Transformée de Karhunen-Loeve), la TCD (Transformée en Cosinus Discrète), la
TF (Transformée de Fourrier) et la transformée en ondelettes. On peut aussi décorréler la source en
utilisant des techniques de prédiction linéaire ou encore en exploitant sa corrélation spatiale ou tempo-
relle (exemples : corrélation des bits adjacents dans une image, corrélation d’une séquence temporelle
d’images). Une fois on a rendu la source sans mémoire, on utilise des techniques de codage de source en-
tropiques. Ces techniques consistent à exploiter la connaissance des statistiques de la source (probabilité
d’occurrence de ses différents symboles). Nous allons nous consacrer dans ce chapitre au codage entro-
pique sans perte. Pour cela, nous commençons par donner les caractéristiques que doit vérifier un codeur
entropique afin de faciliter le décodage. Ensuite, on donne une technique permettant de construire un
codeur entropique instantané dont le décodage n’entraı̂ne pas de retard. Enfin, on décrit l’algorithme de
Huffman qui permet de construire un codeur entropique optimal c’est à dire dont le taux de compression
est le plus proche que possible de la limite de Shannon (1.16).
Tel qu’on l’a expliqué dans le précédent chapitre, le codeur source consiste à associer à chaque
symbole de la source Ui une étiquette Ei de sorte que le taux de compression soit minimal. Etant donné
que les étiquettes peuvent avoir des longueurs variables, on peut avoir une ambiguı̈té lors du décodage
si la concaténation de certaines étiquettes peut être interprétée de différentes façons. Par exemple, si on
utilise les quatre étiquettes suivantes E = f =0
E1 ; E2 = 10 ; E3 = 100; E4 = 101g, on voit que la
10 Le codage de source
8 8 8 8
p; k; il ; jm ; Ei1 Ei
k = Ej1 Ej p ) = p k et Ein = Ej n 8 = 1
n ; ; p: (2.1)
C’est cette classe de codes qu’on doit utiliser. Utiliser un code u.d. peut entraı̂ner un retard lors du
décodage du moment qu’on doit attendre la réception de plusieurs étiquettes avant de décider. Ceci
augmente aussi la complexité du décodeur. Pour cela, on opte pour une sous classe des codes u.d. à
savoir les codes instantanés.
Propriété : Un code est instantané s’il vérifie la condition du préfixe : aucune étiquette ne doit être le
début d’une autre. Un code instantané n’entraı̂ne pas de retards lors du décodage du moment qu’aucune
étiquette n’est le début d’une autre.
Exemple :
-E =f =0 E1 ; E2 = 10 ; E3 = 100 ; E4 = 100g est ambigu.
-E = f = 10
E1 ; E2 = 00 ; E3 = 11 ; E4 = 110g est u.d.
-E =f =0 E1 ; E2 = 10 ; E3 = 110 ; E4 = 111g est instantané.
Ce théorème donne une condition nécessaire que doivent vérifier les longueurs li des étiquettes Ei
On peut utiliser la méthode des intervalles pour construire des codes instantanés. On note Eij le j -ème
bit de l’étiquette Ei :
Ei = 1
Ei Ei
2
E
i
i:
l
(2.2)
2.3 Construction des codes instantanés 11
Ei = 1
Ei 2 + 2 +
1 2
Ei
2
E
i
l i2 i:l
(2.3)
Les réels associés aux étiquettes qui commencent par Ei appartiennent à l’intervalle débutant par Ei et
se terminant à
+1
X
Ei + 2 = j
Ei +2 l i: (2.4)
j =l i +1
Ainsi, un codeur est instantané sssi les intervalles suivants ne se recouvrent pas :
Ii =[ Ei Ei + 2 i[ 8 = 1
l
i ; ; M: (2.5)
La construction d’un codeur instantané n’est possible que si les longueur li vérifient le théorème de Kraft.
Ensuite, il suffit de suivre les étapes suivantes :
1) On place d’abord E1 =0 :
2) i=1.
3) On construit le i-ème intervalle : Ii (2.5).
4) On déduit Ei+1 = Ei +2 l i.
5) i = i + 1 puis revenir à 3) tant que i < M .
Bien évidemment, on déduit facilement les étiquettes Ei à partir des Ei puisqu’on connaı̂t les li :
La figure 2.1 montre une application de la méthode des intervalles pour les longueurs suivantes l =
PM
f1 2 3 3g
; ; ; : Ces longueurs vérifient bien le théorème de Kraft : 2 i = 1. Suite à l’utilisation de la
i=1
l
Pour passer d’une étiquette à la suivante, il suffit de rajouter 1 en dernière position puis de compléter
éventuellement par des zéros afin d’avoir la bonne longueur.
Exercice : Construire un code instantané ayant pour longueur l = f1; 3; 5; 5; 5; 6; 7; 7; 7g :
On cherche à construire un codeur source optimal c’est à dire dont les étiquettes possèdent des
longueurs minimisant le taux de compression :
PM
Rs = log ( ) i=1
pi li
: (2.6)
2 M
où pi = ( = ) = ( = ) et
p E Ei p U Ui li est la longueur en nombre de bits de Ei :
Bien évidemment, il faut que le codeur soit instantané pour faciliter le décodage. Ainsi, les li doivent
aussi vérifier le théorème de Kraft :
X
M
2 i 1
l
: (2.7)
i=1
Puisqu’on s’intéresse à la construction de codeurs entropiques sans pertes, la borne inférieure du taux de
compression est donnée par
PM
PM log
= log ( ) log (( ) ) =
1
i=1
pi li H U i=1
pi 2 p i
Rs
2 M 2 M log ( ) 2 M
: (2.8)
Pour minimiser le taux de compression, il suffit d’associer aux symboles de source les plus probables les
plus courtes étiquettes.
Proposition 2.1 : A l’optimum, le codeur vérifie la propriété suivante : si pi < pj alors li lj .
Preuve : On démontre ce résultat par l’absurde. Si pi < pj et li < lj alors il suffit d’intervertir les
étiquettes associées aux symboles i et j de la source pour trouver un taux de compression inférieur :
pi lj + pj li < pi li + pj lj ;
car
(
pi lj li )+ ( pj li lj )=( pi pj )( lj li ) 0
< :
PM
Proposition 2.2 : A l’optimum, i=1
2 i = 1.
l
PM
Preuve : On démontre ce résultat par l’absurde. Si i=1
2 li < 1 alors P 2 M
i=1
i
l
1 2 lmax
où
lmax = max f g =
i
li limax : Donc
X
2 i +2
l (lmax 1)
1 :
6
i=imax
2.4 Construction des codes optimaux 13
On peut donc réduire lmax de 1 pour obtenir un taux de compression plus faible tout en vérifiant le
PM
théorème de Kraft ainsi le jeux de longueurs initial n’est pas optimal et i=1
2 i =1
l
:
D’après (2.8), si pi est l’inverse d’une puissance de 2; on pourra atteindre la limite de Shannon en
prenant li = log 2
1
p i . On déduit ensuite les étiquettes grâce à la méthode des intervalles.
Exemple : On considère une source de cardinal 4 ayant pour distribution de probabilité p =f =1 2
p
1 = ;
Lorsque pi n’est pas l’inverse d’une puissance de 2; on peut songer à choisir li comme étant l’entier
l m
immédiatement supérieur à log 2 p
1
i :l i = log 2
1
pi : Le jeux de longueurs qu’on trouve peut ne
pas être l’optimal.
Exemple : On considère une source de cardinal 5 ayant pour distribution de probabilité p=l f = 1 m
p
1 4 = ;
Shannon vaut log ( ) = 2 2855 log (5). On constate que le jeux de longueurs n’est pas optimal.
H= 2 M : = 2
En effet, le meilleur choix est = f2 2 2 3 3g dont le taux de compression est le plus proche de la
l ; ; ; ;
( ) H U ( ) + 1
H U
log ( ) 2 M
Rs <
log ( ) log ( )
2 M 2 M
(2.9)
Preuve : L’inégalité de gauche est bien sûr celle du théorème de Shannon pour le codage de source.
l m
L’inégalité de droite provient du fait que li = log 2
1
pi donne un taux de compression qui vérifie
bien le théorème de Shannon. Or
log 1 li < log
1+1 ;
2 2
pi pi
d’où
( ) ( ) 1
log ( ) log ( ) + log ( )
H U H U
Rs < :
2 M 2 M 2 M
14 Le codage de source
L’algorithme de Huffman a été inventé en 1952, il permet la construction d’un codeur source optimal
et instantané. Il est basé sur la réduction de Huffman qui permet de passer d’un problème P d’ordre M
dont les probabilités sont classées par ordre décroissant : p1 p2 pM au problème P 0 d’ordre
M 1 suivant
p1
0 = p1 ; p2
0 = p2 ; ; pM
0 = pM
0
2 ; pM = pM 1 + pM : (2.10)
2 1
Proposition 2.5 : Les étiquettes E0 sont optimales pour le problème P 0 , Les étiquettes E suivantes
Ei = 0 8 = 1
Ei ; i M 2 ; EM 1 =[ 0 EM 1 0] et EM =[ 0EM 1 1]
sont optimales pour le problème P:
Preuve : Nous allons rechercher une relation entre les taux de compression des problèmes P et P0 :
X
M
X2
M
Rs log ( ) = = 0 0 +p +
2 M pi li pi li M 1 lM 1 pM lM
i=1 i=1
X2
M
= 0 0 + l0
pi li +1 ( pM 1 + pM )
M 1
i=1
X2
M
= 0 0 + l0
pi li +1 0 pM
M 1 1
i=1
= Rs
0 log ( 1) + 0
2 M pM 1:
2) Faire plusieurs réductions de Huffman jusqu’au problème d’ordre 2. Après chaque réduction, il faut
classer de nouveau les probabilités par ordre décroissant.
3) Quand on arrive au problème d’ordre 2, on attribue par exemple les étiquettes 0 et 1 respectivement au
symbole le plus probable et au symbole le moins probable. Ensuite, on déduit les étiquettes du problème
d’ordre 3 grâce à la proposition 2.5 et ainsi de suite jusqu’à aboutir au problème initial : si 0
E est
M 1
l’étiquette du symbole de probabilité p0M 1
= pM 1 + pM alors EM 1 = 0 E
M 1
0 et EM = 0 E
M 1
1
sont respectivement les étiquettes des symboles de probabilité pM 1 et pM : Dans les deux cas, le bit
rajouté est en dernière position. Les étiquettes des symboles qui n’ont pas été scindés restent bien sûr les
mêmes.
2.4 Construction des codes optimaux 15
p2 =1 4
= ; p3 =02
: ; p4 = 0 15
: ; p5= 0 15g En utilisant l’algorithme de Huffman (voir la figure 2.2),
: :
on obtient les étiquettes suivantes E= f10 01 11 000 001g On vérifie aisément que ce codeur est
; ; ; ; :
Exercice I :
Pour enregistrer efficacement les patients d’un hôpital, on envisage deux solutions pour sauvegarder leurs
groupes sanguins. Pour cela, l’hôpital dispose des statistiques illustrées dans le tableau ci-dessous.
Exercice II :
( = ) = 0 3 ( = ) = 0 2 ( = ) = 0 2 ( = ) = 0 2 et ( = ) = 0 1.
P S A1 : ; P S A2 : ; P S A3 : ; P S A4 : P S A5 :
Construire un code instantané ayant la distribution de longueurs suivantes f =1, =2, =3, =3, =4g
l1 l2 l3 l4 l5
du code c’est le nombre d’éléments d’information par mot de code. Une grande classe des codes utilisés
dans les systèmes de transmission est binaire, dans ce cas l’ensemble A est noté A2 = f0 1g. Un
;
code correcteur ou détecteur d’erreurs consiste donc à associer à des mots d’information, formés de k
éléments de l’ensemble A, des mots de codes formés de n éléments de A. Cette application est bien sûr
bijective, ce qui fait que le nombre de mots de codes est inférieur au cardinal de An . n k est le nombre
d’éléments de redondance rajoutés par le code. Le rapport k=n porte le nom de rendement du code, il est
souvent noté Rc . Il donne le pourcentage de bits d’information dans les bits émis. La figure 3.1 montre
le principe du codage correcteur ou détecteur d’erreurs.
Lorsqu’on construit un code correcteur ou détecteur d’erreurs, on cherche à espacer les mots de codes
ceci permet d’augmenter la capacité de correction et de détection d’erreurs. On montrera un peu plus loin
que cette capacité est liée à la distance minimale du code :
( ) = x y2minet x6 y f (x y)g
d C
; C =
d ; ; (3.1)
où
X
n
d (x y) =
; d ( xi ; yi ) ; (3.2)
i=1
xi et yi sont respectivement le i-ème élément de x et y. Dans le cas binaire, la distance utilisée est la
distance de Hamming définie par :
18 Les codes en bloc linéaires
dH ( xi ; yi )= X OR (
xi ; yi )=:
< 1 si xi 6= yi
: (3.3)
0 si xi = yi
Exemple : On considère un codeur binaire dont les mots de codes sont composés de n = 4 bits. On donne
a b ab a + b
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0
On note g l’application permettant de définir les mots de code, m est le mot d’information et c est le mot
de code associé :
A
k
! A
n
(3.4)
m ! c = g(m)
3.3 La matrice génératrice 19
Nous allons nous consacrer dans ce chapitre à l’étude des codes binaires.
Soit e = (e1 ; e2 ; ; ek ) une base de Ak2 . Le mot d’information peut donc s’écrire
X
k
m= mi e: i (3.5)
i=1
X
k
c = g(m) = mi g (e ) i : (3.6)
i=1
On exprime ensuite g (ei ) dans une base e0 = (e01 ; e02 ; ; e0n ) de An2 :
X
n
g (e ) =
i gij e0 :j
(3.7)
j =1
On en déduit
X
n
c = g(m) = cj e0 ;
j
(3.8)
j =1
où
X
k
cj = mi gij :
i=1
Sous forme matricielle, le mot de code c = (c1 ; c2 ; ; cn ) associé au mot d’information m = ( m1 ; m2 ; ; mk )
est donné par
c = mG; (3.9)
où G est une matrice k n; G(i; j ) = gij . G est une matrice génératrice du code, elle est donnée par
2 3 2 3
6
g (e ) 1
7 6
g11 g12 g1n
7
6
6 (e ) 7
7
6
6 7
7
G= =
g 2 g21 g22 g2n
6 7 6 7: (3.10)
6 .. 7 6 .. .. .. .. 7
6 . 7 6 . . . . 7
4 5 4 5
g (e ) k gk 1 gk 2 gkn
D’après (3.6), les lignes de G sont des mots de codes qui constituent une base de l’ensemble des mots
de code C . On en déduit que rang (G) = k . Il est à noter que G n’est pas unique puisqu’elle dépend du
20 Les codes en bloc linéaires
choix des bases e et e0 . En effet, permuter deux vecteurs de la base e (resp. e0 ), entraı̂ne la permutation
de deux lignes (resp. deux colonnes) de G. De même, si on remplace el par une combinaison linéaire
de el et ej , ceci aura comme conséquence de remplacer la l-ème ligne de G par la combinaison linéaire
des l-ème et j -ème lignes. Il est à noter enfin que remplacer e0l par une combinaison linéaire de e0l et e0j
n’aura pas comme conséquence de remplacer la l-ème colonne de G par la combinaison linéaire des
colonnes correspondantes.
Exemple : code de parité C (2; 3); e1 = 10 ; e2 = 01; e01 = 100; e02 = 010 et e03 = 001:
2 3 2 3
(e ) = e0 + e0 1 0 1
G =4 5=4
g 1 1 3
5:
g (e ) = e0 + e0
2 2 3 0 1 1
La figure 3.2 montre le schéma principe de ce codeur à base de portes XOR.
En faisant des permutations dans les bases e et e0 ainsi que des combinaisons linéaires dans la base e, on
peut toujours mettre G sous forme systématique
G = [I P] =) c = [m mP] ;
k (3.11)
y 2 C , yc T
= 0 8c 2 ? ; C : (3.12)
Or c = mH, donc
y 2 C , yH T
=0 : (3.13)
cH? = 0; 8c 2C , GH = 0 T
;
On en déduit que
H= P I T
n k :
H= P I T
n k :
Le canal de transmission est modélisé par un Canal Binaire Symétrique (CBS). Le mot reçu r suite à
la transmission de c est alors donné par
r = c + e; (3.15)
où e(i) = 1 s’il y a eu une erreur de transmission en i -ème position de c. Le CBS est représenté dans la
figure 3.3 où p est la probabilité d’erreur.
La détection d’erreur se fait en calculant le syndrome s obtenu grâce à la matrice de contrôle de parité :
s = rH T
= (c + e) H = eH T T
: (3.16)
22 Les codes en bloc linéaires
Le syndrome est donc une ligne à n k composantes. Si s = 0 alors r 2 C et le décodeur canal décide
c= r où bc est le mot de code estimé par le décodeur.
qu’il n’y a pas eu d’erreur de transmission : b
Remarque : Si le syndrome est nul ceci ne veut pas dire qu’il n’y a pas eu des erreurs de transmission car
il existe des erreurs indétectables : s = 0 , e 2 C.
c
b = arg min f (r c)g
dH ; : (3.17)
c
2 3
1 0 0 0 1 1
6 7
G = 64 0 1 0 1 0 1 7:
5
0 0 1 1 1 0
On en déduit
2 3
0 1 1 1 0 0
6 7
H =4 1 0 1 0 1 0
6 7:
5
1 1 0 0 0 1
3.5 Principe de la détection et de la correction d’erreurs 23
s e
000 000000
001 000001
010 000010
100 000100
110 001000
101 010000
011 100000
111 001001
TAB . 3.2 – Tableau de décodage.
Il y a 2
= 8 configurations possibles du syndrome. On a dressé dans le tableau 3.2 les erreurs de
n k
poids minimales permettant de générer les divers syndrome s = eH . On peut bien sûr trouver plusieurs
T
Proposition : Un code C (k; n) de distance minimale d(C ) peut détecter d(C ) 1 erreurs et en corriger
E
d(C )
2
1
où E (x) est la partie entière de x.
Preuve : Soit ci le mot de code émis et soit cj son plus proche voisin, alors on a
(
dH ci ; cj )= ( )
d C :
( )=
d C (
dH ci ; cj ) (
dH ci ; r )+ (
dH cj ; r : ) (3.18)
Ainsi toutes les erreurs pourront être détectées si dH (cj ; r ) 1 c’est à dire si dH (ci ; r ) d(C ) 1:
Supposant maintenant que d(C ) = 2 +1t : Si le nombre d’erreurs est inférieur à t alors dH (ci ; r ) t;
(
dH cj ; r ) ( ) d C (
dH ci ; r ) +1
t :
Ainsi ci est le plus proche voisin de r et l’erreur de transmission est corrigée. Dans le cas où d C ( )=
2 +2
t ; on montre de la même façon qu’on peut corriger t erreurs. S’il y a eu t + 1 erreurs, le mot reçu se
24 Les codes en bloc linéaires
trouve au milieu de deux mots de codes et la décision est faite de façon arbitraire. On ne peut pas donc
considérer que les erreurs de transmission ont été corrigées.
Nous avons vu dans la section 3.5.2 que le décodage des codes en bloc peut se faire en recherchant
le mot de code le plus proche du mot reçu. La capacité de correction et de détection d’erreurs d’un code
en bloc est liée à sa distance minimale, il est donc important de la déterminer. Le calcul de d C ( ) n’est
pas simple à faire en général sauf si le nombre de mots de codes est suffisamment petit. Etant donné la
linéarité du codeur, il suffit de prendre le mot de code non nul de poids minimal :
( ) = x2 min
d C
et x6 0
C
f (x 0)g
=
d ; : (3.19)
Si le nombre de mots de codes devient très grand, on peut utiliser la matrice de contrôle de parité pour
calculer d(C ).
contrôle de parité.
Preuve : On sait que d(C ) est le poids minimal des mots de codes non nuls. En tenant compte du fait que
cH T
= 0 pour le mot de code de poids minimal. On en déduit que la somme de ( ) colonnes de H est
d C
égale à zéro. Ceci montre que le nombre minimal de colonnes linéairement dépendantes est inférieur à
( ). S’il y a moins de ( ) colonnes dépendantes de H ceci implique qu’on a un mot de code de poids
d C d C
inférieur strictement à ( ) ce qui est bien sûr absurde. Ainsi, ( ) est le plus petit nombre de colonnes
d C d C
linéairement dépendantes de H.
Si le calcul de ( ) à partir de H s’avère aussi difficile, on peut se contenter de déterminer une borne
d C
H= P I T
n k ;
( )
d C n k +1 : (3.20)
3.6 Exemple de codes en bloc linéaires 25
où
X
k
ck +1 = mi :
i=1
Ainsi, le mot de code non nul de poids minimal est 110 0 d’où d(C ) = 2. Le code de parité ne permet
de corriger aucune erreur mais seulement à détecter les erreurs de poids impair. La matrice génératrice
de ce code est donc donnée par
2 3
6
1 7
G=6 . 7
6I .. 7 : k (3.22)
4 5
1
On en déduit que
H = [1 1] :
c = [m1 ; m1 ; ]
; m1 : (3.23)
Ainsi
G = [1 1] : (3.24)
On en déduit que
26 Les codes en bloc linéaires
2 3
6
1 7
H=6 . 7
6 .. I2 7 : M
4 5
1
La distance minimale est égale à 2M + 1. Le pouvoir de détection vaut 2 M et le pouvoir de correction
vaut M .
Pour un code de Hamming, les colonnes de la matrice H sont composées de toutes les combinaisons
possibles de n k bits sauf la combinaison toute à zéro. Ainsi le nombre de colonnes de H, n, est égal
à 2n k
1. Si on pose = m n k , alors
n =2 m
1 et =
k n m = 2m m 1: (3.25)
Proposition : La distance minimale d’un code de Hamming est égale à 3 quelque soit k et n.
Preuve : d(C) est le plus petit nombre de colonnes linéairement dépendantes de H. Les colonnes de H
d’un code de Hamming sont toutes différentes donc ( ) 2
d C > : Les colonnes de H étant composées de
toutes les combinaison possibles de n k bits sauf la combinaison nulle, on en déduit que la somme de
deux colonnes de H est égale à une autre colonne d’où d(C ) = 3.
Un code de Hamming permet donc de corriger une erreur et d’en détecter deux. Le décodage est très
simple à faire car le syndrome est égal à une colonne de H. Le décodeur décide alors que l’erreur s’est
produite en la position de la colonne de H trouvée :
0 1
B
H(:; 1) C T
X
n
s = rH T
= eH = ( ) B
T
B
@
e1 en
..
.
C
C
A
= ei H(:; j )
T
= H(: ); j0
T
;
H(:; n)
j =1
T
j0 étant le numéro de la colonne trouvée. Ainsi, le décodeur estime que l’erreur s’est produite sur le bit
numéro j0 .
Exemple : m = 3 donc k = 4 et = 7n
2 3
1 1 1 0 1 0 0
6 7
H=4 1 1 0 1 0 1 0
6 7:
5
1 0 1 1 0 0 1
On en déduit
3.7 Performances des codes en bloc linéaires 27
2 3
1 0 0 0 1 1 1
6 7
6 0 1 0 0 1 1 0 7
6 7
G=6 7 :
6 0 0 1 0 1 0 1 7
4 5
0 0 0 1 0 1 1
Si le récepteur reçoit r = (1001011) alors s = (111) et le récepteur décide que l’erreur est en première
c = (0001011)
position : b :
Les colonnes de la matrice génératrice d’un code à longueur maximale sont composées de toutes les
combinaisons possibles de k bits sauf la combinaison nulle. Ceci implique que n = 2m 1 avec = . k m
et k =2 m
m 1. La matrice génératrice du code à longueur maximale est la matrice de contrôle de
parité du code de Hamming.
Il s’agit de déterminer la probabilité d’erreur binaire après décodage canal. Le canal de transmission
est modélisé par un Canal Binaire Symétrique (CBS) de probabilité d’erreur p. p est la probabilité d’er-
reur binaire avant décodage canal. Pour un système de transmission utilisant une modulation MDA-2
(Modulation à Déplacement d’Amplitude à 2 états) et en présence d’un canal gaussien, on a
r !
p = Q
2 E
; (3.26)
N0
où E est l’énergie moyenne des bits émis et N0 est la variance du bruit.
Si lors de la transmission se produisent moins de t = E d(C )
2
1
erreurs, elles sont corrigées. Sinon, le
décodeur va rajouter au maximum t erreurs en tentant de corriger. On en déduit une borne supérieure de
la probabilité d’erreur binaire après décodage :
Peb
X
n
i + t
Cn p
i i
(1 p )
n i
: (3.27)
n
i=t+1
Peb 2 +1 t
n
Cn
t+1
p
t+1
: (3.28)
Ainsi cette dernière expression donne le comportement asymptotique ( à fort RSB) de la probabilité
d’erreur binaire après décodage canal. Lorsqu’on compare les performances de systèmes de transmission
avec et sans codage canal, on doit le faire pour une même énergie moyenne dépensée par bit d’informa-
tion utile souvent notée Eb . Or pour transmettre k bits d’information, le système avec codage canal émet
n bits d’où
Eb = nE
k
= E
Rc
: (3.29)
Ainsi la redondance transmise entraı̂ne une perte de 10 log ( ). Par exemple, pour un codeur en bloc
10 Rc
r !
p = Q
2Eb Rc
: (3.30)
N0
La figure 3.4 compare les performances d’un système de transmission sans codage canal à celui utilisant
un code de Hamming pour m = 3; 4 et 5: Les performances du système avec codage ont été tracée grâce
à (3.27) et (3.30). Ces différents codes possèdent la même capacité de correction puisque ( )=3
d C
quelque soit m: Cependant, ils possèdent des rendements différents. En effet, pour m = 3, = 4 7,
Rc =
pour m = 4, Rc = 11 15 et pour
= m = 5, Rc = 26 31. Quand
= m augmente le rendement du code
augmente ce qui veut dire qu’on transmet moins de redondance d’où une moindre perte en dB. Ceci est
vérifié dans la figure 3.4 où les performances du code de Hamming s’améliorent quand m augmente. A
faible RSB, on constate que le gain apporté par le codage est inférieur à la perte due à la redondance
transmise ainsi la probabilité d’erreur du schéma avec codage est supérieure à celle du schéma sans
codage. Cependant à fort RSB, on constate que le codage canal permet de réduire la probabilité d’erreur
binaire.
3.8 TD 2 : Les codes en bloc linéaires 29
0
10
Sans codage
Code de Hamming : m=2
−1
Code de Hamming : m=3
10 Code de Hamming : m=4
−2
10
−3
10
eb
−4
10
P
−5
10
−6
10
−7
10
−8
10
0 1 2 3 4 5 6 7 8 9 10
Eb/N0 (dB)
F IG . 3.4 – Comparaison des performances d’un système de transmission sans codage canal à celui utili-
sant un code de Hamming pour m=3, 4 et 5.
Exercice I :
On considère le code en bloc binaire linéaire qui aux bits informations (u0 ; u1 ; u2 ; u3 ) associe le mot de
code suivant (u0 ; u1 ; u2 ; u3 ; v0 ; v1 ; v2 ) où
8
>
>
<
v0 = u0 + + u2 u3
>
v1 = u0 + + u1 u2 :
>
:
v2 = u1 + + u2 u3
7. Pour chacun des mots reçus suivants r = (0110001), r = (1011000) et r = (1011111), dire si le mot
reçu est erroné ou non, quel est le mot de code et le mot information les plus vraisemblables. Justifier
vos réponses.
Exercice II :
Exercice III :
On considère un code en bloc linéaire C dont la matrice génératrice est donnée par
0 1
1 1 0 0 1 1
B C
G=B
@ 0 1 1 1 1 0 C;
A
0 1 1 0 0 1
exprimée dans les bases canoniques de Ak2 et An2 où A2 = f0 1g
;
Exercice IV :
On modifie le code de Hamming C (k; n) en ajoutant à chaque mot de code un élément binaire de parité.
Les mots de code du code de Hamming modifié C0 sont alors donnés par
c0 = (c c n+1 ) ;
X
n
cn+1 = ci :
i=1
4.1 Définition
C’est la classe la plus utilisée des codes en bloc linéaires grâce à la simplicité de sa mise en oeuvre
qui nécessite uniquement des portes XOR et des registres à décalage.
Un code en bloc linéaire (
C k; n ) est dit cyclique si les mots de codes sont stables par permutation
circulaire à gauche :
Pour les codes cycliques, on préfère utiliser une représentation polynômiale des mots de codes. Le po-
lynôme associé à c est alors donné par
( )= +
c x c1 c2 x + + cn x
n 1
: (4.2)
On en déduit que
x
1
( )= ( )+
c x c1 x c1 x
1
+ n
c1 x
1
; (4.3)
x
1
( ) = ( ) modulo (1 + )
c x c1 x x
n
: (4.4)
De même, on a
x
i
( ) = ( ) modulo (1 + )
c x ci x x
n
; (4.5)
34 Les codes cycliques
où ci (x) est le polynôme obtenu en permutant i fois à gauche le mot de code c.
Considérons à présent un polynôme g (x) de degré n k et diviseur de xn + 1 :
( )= +
g x g1 g2 x + + gn k +1 x
n k
: (4.6)
x
n
+1= ( ) ( ) h x g x : (4.7)
ci x( )= x
i
( )+ ( ) ( ) ( )
c x qi x h x g x : (4.8)
Ainsi, si c(x) est un multiple de g (x) alors ci (x) est aussi un multiple de g (x) :
ci x( )= ( ) ( ) mi x g x ; (4.9)
de parité dont on rappelle que les lignes sont des mots de codes formant une base de C :
0 1
B
()
g x
C
B C
B () C
=
xg x
B C: (4.10)
G
B .. C
B . C
@ A
x
k 1
()
g x
Les lignes de G sont bien sûr des mots de codes car multiple de g (x) et elles sont indépendantes car le
degré du polynôme xi g (x) croit avec i.
Exemple : C (7; 4)
( ) est de degré
g x n k = 3 et il divise + 1 :
x
7
1+ x
7
= (1 + + )(1 + + )(1 + ).
x x
3
x
2
x
3
x
0 1
1 1 0 1 0 0 0
B C
B
B 0 1 1 0 1 0 0 C
C
G1 = B C;
B
@ 0 0 1 1 0 1 0 C
A
0 0 0 1 1 0 1
0 1
1 0 1 1 0 0 0
B C
B
B 0 1 0 1 1 0 0 C
C
G2 = B C:
B
@ 0 0 1 0 1 1 0 C
A
0 0 0 1 0 1 1
Contrairement aux codes en bloc, on place le mot d’information en dernière position. Le polynôme
associé au mot de code est alors donné par :
( )= ( )+c x ( )= ( ) ( )
v x x
n k
m x (4.11)
k x g x ;
peut être réalisée grâce à des registres à décalage et des portes XOR.
Exemple : C (7; 4), g (x) = 1 + x + x3 et m(x) = 1 + x2 + x3 :
Le calcul du reste de la division euclidienne de x3 m(x) par g (x) vaut un, d’où c(x) = 1 + x3 + x5 + x6 :
On rappelle que pour les codes en bloc linéaires, la détection et la correction d’erreurs est basée sur le
calcul du syndrome. Pour les codes cycliques, on détermine d’abord la version polynômiale du syndrome
( ). Puis on suit la même procédure que celle de décodage des codes en bloc. Pour les codes cycliques,
s x
( )= ( ) ( )+ ( ) r x q x g x (4.12)
s x :
Exemple : (7 4) ( ) = 1 + + et ( ) = 1 + +
C ; ; g x x x
3
m x x
2
Le mot de code sous forme systématique 3
x :
Pour conclure cette section, on donne le principe du décodeur de MEGGIT qui permet de localiser une
erreur de poids un : e(x) = xj où 0 j n 1 : On a
36 Les codes cycliques
( )= ( ) ( )+ ( )
r x m x g x e x :
e x ( )= ( )+ ( ) ( )
s x g x f x :
D’où
i
x s x ( )= x
i+j
+ () () g x f x :
Ainsi, si i + j = n alors le reste de la division euclidienne de xi s(x) par g (x) est égal à 1 ce qui permet
de localiser la position de l’erreur.
Exemple : si on reprend l’exemple précédent, on constate que le reste de la division euclidienne de x3 s(x)
par g (x) vaut 1 donc e(x) = xn 3
= 4
x :
Les codes de Bose, CHaudhuri et Hocquenghem (BCH) sont la famille la plus importante des codes
cycliques. Pour tous entiers m et t, on peut construire un code BCH de paramètres : n = 2m 1 2
;k
m
1 mt et d(C ) 2t + 1: Le calcul du polynôme générateur d’un code BCH nécessite d’introduire des
notions d’algèbre sur les corps de Galois. Nous n’allons pas aborder le calcul du polynôme générateur,
on donne juste quelques exemples de codes cycliques :
- n = 7, k = 4, = 1 et ( ) = 1 + +
t g x x x :
3
-n = 15, = 11 , = 1 et ( ) = 1 + +
k ; t g x x
3
x
4
g1 x ( )=1+ + + + + + x
5
x x
6
x
7
x
9
x
11
;
( )=1+ + + + +
g2 x x
2
x
4
x
5
x
6
x
10
+ x
11
:
L’intérêt de ce code c’est qu’il peut corriger 3 erreurs tout en ayant un rendement élevé. On l’utilise
souvent avec l’ajout d’un bit de parité ce qui donne un rendement égal à 1/2.
4.4 Exemples de codes cycliques 37
Les codes de Reed Solomon sont des codes à éléments non binaires. Ils sont constitués d’éléments
q aires où q =2 m
: Chaque élément du code peut donc être représenté par un -uplet binaire. Les
m
donc de corriger t éléments q aires . En nombre d’éléments binaires, son pouvoir de correction est
inférieur à mt. En effet, prenant l’exemple d’un code de Reed Solomon de paramètres C (15; 11) dont le
pouvoir de correction est t = 2 éléments quaternaires : Ce code ne pourra corriger 8 éléments binaires
que s’ils sont sur deux éléments quaternaires successifs. Les codes de Reed Solomon sont bien adaptés
à la correction d’erreurs par paquets (burst). La détermination du polynôme générateur de ce code fait
aussi appel à des notions d’algèbre sur les corps de Galois.
38 Les codes cycliques
Exercice I :
1. Donner un polynôme générateur du code cyclique C (7; 3). On donne
x
7
+ 1 = (1 + )(1 + + )(1 + + )
x x x
3
x
2
x
3
:
5.1 Principe
Pour les codes convolutifs, chaque mot de code, composé de n bits, dépend non seulement du mot
d’information à l’entrée du récepteur mais aussi des m mots d’informations précédents. Les codes convo-
lutifs introduisent donc un effet de mémoire d’ordre m . m s’appelle mémoire du codeur et m + 1 est
la longueur de contrainte du code. Le principe du codeur convolutif est illustré dans la figure 5.1. Il est
constitué d’un registre à décalage à (m + 1)k étages mémorisant les m + 1 derniers mots d’informations
et de n portes XOR qui calculent les n bits des mots de codes à partir de certains étages du registre à
décalage. Un codeur convolutif est donc défini par la donnée de :
- Le nombre de bits qui rentrent à chaque fois dans le registre : k:
- La mémoire m:
- Le nombre de bits des mots de codes : n:
- Les connexions entre les portes XOR et les différents étages du registre.
Le qualificatif convolutif provient du fait que la sortie du codeur est le produit de convolution entre la
séquence binaire à coder et la réponse du codeur définie par ses séquences génératrices. Elles sont au
nombre de n et sont définies comme suit
g i
= i
g0 ; ; g
i
(m+1)k 1
; (5.1)
où
8
< 1 si la -ème porte XOR est connectée au -ème étage du registre
=:
i j
i
gj :
0 sinon
Ainsi le l-ème mot de code en sortie du codeur vl est la convolution de l’entrée ul avec les séquences
génératrices :
(m+1)k 1
X
vl
i
= i
gj ul j; (5.2)
j =0
m = 3. Son entrée est composée de mots d’information composés d’un seul bit = 1 et les mots k
de codes en sortie sont composés de =2 bits. Pour ce codeur les deux séquences génératrices valent
n
(m+1)k 1
X
g
i
( )=
D
i
gj D :
j
(5.3)
j =0
Pour l’exemple de la figure 5.2, les polynômes générateurs sont : g1 (D ) = 1+D +D 2 et g2 (D ) = 1+D 2 .
Exemple : = 1 3, = 1, = 3, = 3, = (1 0 1 1) = 13 en octal, = (1 1 0 1) = 15
Rc = k n m g
1
; ; ; g
2
; ; ;
et = (1 0 1 0) = 12. La conversion en octal se fait donc de droite vers la gauche et le bit le moins
g
3
; ; ;
significatif est à droite. Pour cet exemple, les polynômes générateurs sont : ( ) = 1 + + , g
1
D D
2
D
3
g ( ) = 1 + + et ( ) = 1 + .
2
D D D
3
g
3
D D
2
Les représentations les plus utilisées sont le diagramme d’état, l’arbre et le treillis. Tel que nous
l’avions souligné dans l’introduction, la sortie d’un codeur convolutif dépend non seulement de l’entrée
courante mais aussi des m précédentes entrées qu’on appelle état du codeur convolutif. Ainsi, l’état d’un
5.2 Représentation des codes convolutifs 41
codeur convolutif peut prendre 2mk valeurs. En général, le registre à décalage est initialisé à zéro ce qui
fait que l’état de départ est l’état tout à zéro. Ensuite, lors du codage des différents mots d’information,
l’état du codeur va évoluer au cours du temps. Les différents diagrammes permettant l’étude du fonction-
nement d’un codeur convolutif diffèrent au niveau de la représentation de l’évolution des états au cours
du temps. Nous allons les décrire pour l’exemple de la figure 5.2.
Pour l’exemple de la figure 5.2, nous avons 4 états possibles : a = 00, = 01, = 10 et = 11.
b c d
Le diagramme en arbre associé est illustré dans la figure 5.3. Dans ce diagramme, le temps s’écoule
de la gauche vers la droite. Etant donné que l’entrée du codeur est constituée d’un seul bit (k = 1),
de chaque état partent deux branches. Lorsque l’entrée est égale à 0 (resp. 1) la branche est montante
(resp. descendante). Le mot de code obtenu est noté entre parenthèses au niveau de l’état suivant. Ce
diagramme est surtout utilisé lors du décodage par l’algorithme de Fano.
Le diagramme d’état est une représentation du fonctionnement du codeur convolutif ne faisant pas
apparaı̂tre l’évolution du temps. Le diagramme d’état du codeur convolutif de la figure 5.2 est illustré
dans la figure 5.4. Lorsque le bit d’information à l’entrée du codeur est égal à 1 (resp. 0) la flèche
de transition est en trait fort (resp. trait pointillé). Cette représentation est utilisée pour déterminer la
fonction de transfert du codeur (voir la section 5.4.1). La fonction de transfert permet de déduire les
performances théoriques des codes convolutifs.
42 Les codes convolutifs
Dans ce diagramme, on représente les différents états du codeur, la façon avec laquelle ils évoluent
au cours du temps et les mots de codes obtenus. Le diagramme en treillis du codeur de la figure 5.2
est illustré dans la figure 5.5. De même que le diagramme d’état, le trait de transition est en trait fort
(resp. trait pointillé) lors que le bit d’information est égal à 1 (resp. 0). Ce diagramme est utilisé par
l’algorithme de Viterbi pour le décodage des codes convolutifs.
Contrairement aux codes en blocs, il faut considérer l’ensemble des mots reçus pour estimer les mots
de codes émis et en déduire les mots d’information correspondants. En effet, tous les mots de codes
dépendent non seulement du mot d’information correspondant mais aussi des m mots d’informations
précédents. Donc, le mot reçu ne suffit pas pour décoder le mot d’information émis.
Nous allons maintenant présenter le critère de Maximum de Vraisemblance (MV) utilisé lors du
décodage. On appelle u la séquence de N mots d’informations à émettre
u = (u1 u N ) ; (5.4)
v = (v1 v N ) ; (5.5)
y = v + b;
où b = (b11 b12 bN n ) sont des réalisations d’un Bruit Blanc Additif et Gaussien (BBAG) de variance
N0 .
Ayant reçu y le décodeur cherche la séquence émise v
b qui maximise la probabilité de décision correcte
Pdc :
Z
Pdc = (vb = v) =
P P (vb = v = Y = y) P (Y = y) dy; (5.6)
Cette probabilité de décision correcte est une moyenne sur toutes les réalisations possibles de Y . Or
P (Y = y) 0, vb maximisant Pdc est donc obtenu en maximisant la probabilité à postériorie suivante :
(v Y = y) =
P (Y = y v) (v)
= p
P =
p (Y = y) :
(Y = y v) =
Y
N
Y
n
i=1 j =1
N0 2 N0
:
On constate donc que le critère de MV consiste tout simplement à rechercher le mot de code le plus
proche de y au sens de la distance euclidienne :
8 9
<XN
X
n =
vb = arg min (yij vij );
2
: (5.10)
v :
i=1 j =1
5.3 Décodage : Algorithme de Viterbi 45
La métrique qu’on vient d’établir est valable dans le cas d’un décodeur à entrée souple (“Soft decision
decoding”). L’appellation entrée souple veut dire qu’on n’effectue pas de prise de décision sur le mot reçu
à l’entrée du décodeur canal. On peut aussi utiliser un décodeur à entrée dure (“Hard decision decoding”)
c’est à dire en effectuant une prise de décision sur les composantes du mot reçu. Bien évidemment, le
décodage souple donne de meilleures performances puisqu’il vaut mieux ne pas prendre de décision sur
les mots reçu proches du seuil de décision. En effet, la prise de décision entraı̂ne une perte d’information
sur la fiabilité des mots reçus.
Nous allons à présent montrer que la distance de Hamming dH (nombre de bits différents) est celle
qu’on doit utiliser lors du décodage à entrée dure. Dans ce cas, l’ensemble canal et prise de décision peut
être modélisé par un Canal Binaire Symétrique (CBS) de probabilité d’erreur p: On appelle r la sortie du
comparateur à seuil. Le probabilité d’observer r sachant que v a été émis vaut
dH (r;v)
P (R = r v ) =
=
d
p
H (r v) (1
;
p) Nn H (r v) =
d ;
1
p
p
(1 p ) Nn
: (5.11)
La recherche de la séquence de mots de codes la plus proche de la séquence reçue est très com-
plexe car le nombre de séquences possibles est très élevé. L’algorithme de Viterbi permet d’effectuer le
décodage avec une complexité raisonnable. Il consiste à rechercher dans le treillis la suite d’états la plus
vraisemblable c’est à dire dont les mots de codes associés sont les plus proches de la séquence reçue.
Nous montrons dans les figure 5.6 à 5.9 les différentes étapes de l’algorithme de Viterbi à entrée dure
pour une séquence reçue r = 11001111. Initialement, le décodeur part du même état duquel est parti le
codeur c’est à dire de l’état . L’état est le plus vraisemblable à = 0 sa métrique est initialisée à
a a t ;
zéro (voir la figure 5.6) alors que les métriques des autres états sont initialisés à +1. La métrique d’un
état donne la distance entre le chemin du treillis arrivant en cet état et la séquence reçue. Cette métrique
est appelée métrique cumulée, elle est notée en dessous de chaque état. L’algorithme calcule ensuite la
distance séparant les mots de codes obtenus lors des deux transitions (vers a et c) et le mot reçu. Ces
métriques sont appelées métriques de branche, elles sont notées au-dessus des traits de transition. Elles
permettent de mettre à jour les métriques cumulées. L’algorithme de décodage se poursuit ainsi dans la
figure 5.7. A partir de la figure 5.8, on constate que dans chaque état convergent deux chemins, de ces
deux chemins on garde celui qui est le plus proche c’est à dire dont la métrique cumulée est la plus petite.
46 Les codes convolutifs
Ce chemin est appelé chemin survivant. L’algorithme de décodage se poursuit ainsi jusqu’à la fin de la
séquence (figure 5.9). A ce niveau, on observe que la séquence de mots de codes 11101111 se trouvant à
une distance de Hamming égale à 1 est la plus proche r. La séquence de bits d’informations décodée est
donc 1001. Ainsi, l’algorithme de Viterbi nécessite de mémoriser les chemins survivants depuis t = 0.
En observant le déroulement de cet algorithme, on constate que les chemins survivant à l’instant t pro-
viennent très souvent d’un même état au niveau t 6( + 1) du trellis. Tel qu’illustré dans la figure
m
5.10, il suffit de mémoriser les chemins sur une fenêtre temporelle de taille 6( + 1).
m
5.3 Décodage : Algorithme de Viterbi 47
L’erreur la plus probable que peut commettre le décodeur qu’on vient de décrire se produit lorsqu’il
décide que la séquence binaire codée est fan g alors que celle émise est fbn g et que ces deux séquences
sont les deux séquences les plus proches dans le treillis. La distance libre est la plus petite distance
entre deux séquences codées du trellis qui divergent puis convergent. Elle est souvent notée d
f (free
distance). Les codes convolutifs étant linéaires, df est aussi le poids minimal des chemins qui divergent
puis convergent avec le chemin nul (la succession d’états nuls). La détermination des performances des
codes convolutifs se fait en déterminant le poids de tous les chemins du treillis. On note a
d le nombre
de chemins distants de d df du chemin nul. Pour évaluer la probabilité d’erreur binaire, on doit aussi
déterminer le nombre cd de bits d’information égaux à 1 sur ces chemins, c’est à dire le nombre de bits
décodés faux. ad et cd sont appelées spectre de distances (distance spectra). Elles peuvent être déduites
de la fonction de transfert du codeur convolutif.
La fonction de transfert du codeur convolutif est obtenue à partir du diagramme d’état en scindant
l’état nul a en deux états ae et as où les indices e et s font référence respectivement à l’état d’entrée
j i
et de sortie. Ensuite, on porte sur chaque branche D N où i le poids de Hamming du k uplet à mettre
en entrée du codeur pour parcourir la branche considérée et j est le poids du mot de code associé. Les
quantités D et N sont des variables formelles. La figure 5.11 montre le diagramme d’état obtenu en
scindant l’état a en deux états ae et as pour le codeur de la figure 5.2. La fonction de transfert du codeur
est définie par
(
T D; N )= as
ae
: (5.13)
8
>
>
> c = 2
D N ae + N b
>
>
< b = D c + D d
:
>
>
>
>
d = DN c + DN d
>
:
as = D b
2
On en déduit
50 Les codes convolutifs
5
(
T D; N ) = 1 2 D N
DN
(5.14)
X1 +
= 2 k
D
k +5
N
k +1
:
k =0
On montre que les exposants de D sont égaux aux poids des différents chemins alors que l’exposant de
N donne le poids de la séquence de mots d’informations associée. Le coefficient multiplicatif 2k donne
le nombre de chemins se trouvant à la distance spécifiée par l’exposant de D . Pour le codeur étudié,
on constate donc qu’il y a 2 chemins de poids + 5 et qu’ils correspondent à une séquence de mots
k
k
+1
X
(
T D; N )= ad D N
d cd: (5.15)
d=d f
Il est à noter enfin que dans le cas de codeurs convolutifs à grand nombre d’états, la méthode qu’on
vient d’utiliser devient trop complexe et on utilise plutôt des algorithmes pour déterminer les distances
spectrales.
Le choix des connexions se fait en maximisant la distance libre du codeur. Les tableaux 5.1 et 5.2 donnent
les distances libres des meilleurs codeurs convolutifs de rendement Rc = 1 2 et
= Rc = 1 3.
=
On dit qu’un premier événement d’erreur s’est produit, si à un niveau donné du treillis le chemin
correct n’est pas un survivant. Etant donné la linéarité du codeur, on peut étudier les performances du
5.4 Performances théoriques des codes convolutifs 51
1 2
m g g df ree
2 5 7 5
3 15 17 6
4 23 35 7
5 53 75 8
6 133 171 10
7 247 371 10
8 561 753 12
9 1167 1545 12
1 2 3
m g g g df ree
2 5 7 7 8
3 13 15 17 10
4 25 33 37 12
5 47 53 75 13
6 133 145 175 15
7 225 331 367 16
8 557 663 711 18
9 1117 1365 1633 20
décodeur en supposant que le chemin correct est le chemin nul. Un événement d’erreur se produit s’il
existe un chemin incorrecte plus proche de la séquence reçue que le chemin nul. Pour un décodeur à
entrée dure, un chemin distant de d du chemin correct est sélectionné si plus de d=2 erreurs se produisent
lors de la transmission. La probabilité qu’un tel chemin soit sélectionné vaut
8
< Pd i i
(1 ) d i
si d est impair
=:
C p p
i=(d+1)=2 d
Pd P ; (5.16)
1
C
2 d
d=2
p
d=2
(1 p ) +
d=2 d
i=d=2+1
C
i
d
p
i
(1 )
p
d i
si d est pair
p étant la probabilité d’erreur binaire à l’entrée du décodeur canal. Pour un système de transmission
utilisant une MDA-2 sur un canal gaussien, on a
r !
p = Q
2Eb Rc
: (5.17)
N0
Pour un système de transmission utilisant une MDA-2 sur un canal gaussien, la probabilité qu’un chemin
distant de d du chemin optimal soit sélectionné lors d’un décodage à entrée souple vaut [1]
r !
Pd = Q
2 Eb Rc d
: (5.18)
N0
Pour déterminer la probabilité d’occurrence p(E ) d’un premier événement d’erreur, il faut comptabiliser
les événements d’erreur dûs aux différents chemins. Soit Ed une v.a. modélisant les événements d’erreur
dû à un chemin distant de d du chemin optimal. La probabilité d’avoir un événement d’erreur à un niveau
donné du treillis vaut
!
[
P E ( )= P Ed : (5.19)
d
On ne peut pas déterminer l’expression exacte de P (E ) car les événements Ed ne sont pas indépendants.
S
En utilisant le fait que p(A B ) ( )+ ( )
P A P B ; on peut majorer P (E ) comme suit
+1
X
( )
p E ad pd : (5.20)
d=d f
Cette majoration porte le nom de borne de l’union. On montre que
pd 2 [ (1
d
p p )]d=2
: (5.21)
On en déduit une borne supérieure de p(E ) exprimée à l’aide de la fonction de transfert du codeur
p
p E ( ) (2 T p (1 ) 1)
p ; : (5.22)
5.4 Performances théoriques des codes convolutifs 53
On veut déterminer l’expression analytique de la probabilité d’erreur binaire sur les éléments binaires
d’information en sortie du décodeur canal. Etant donné que cd donne le poids des mots d’information
des chemins incorrects, on déduit que
1 1
X +
peb k
ad cd pd : (5.23)
d=d f
Le coefficient 1=k est dû au fait que si le poids du mot d’information d’un chemin incorrecte vaut 1 alors
il y a un seul bit erroné sur k . En utilisant (5.21), on déduit que
p
peb 1 @T (2 p (1 ) )
p ;N
: (5.24)
k @N
N =1
La figure 5.14 montre les performances théoriques du codeur convolutif de mémoire m = 2, de ren-
dement Rc = 1 2 et de polynômes générateurs
= g1 = 5 et g2 = 7. On constate qu’à faible RSB, les
performances du codeur convolutif sont moins bonnes que celles d’un système de transmission sans co-
dage canal. Ceci est dû à la perte engendrée par la redondance émise. A fort RSB, le système avec codage
offre de meilleures performances que le système sans codage. Le décodage à entrée souple offre 2 dB de
gain par rapport au décodage à entrée dure. Enfin, à très faible RSB, on constate que la probabilité d’er-
reur théorique du décodage à entrée dure dépasse 1 ceci est dû au fait que les performances théoriques
donnent une borne supérieure de la probabilité d’erreur binaire. Si on superpose les courbes théoriques à
des résultats de simulations, on pourra constater qu’ils ne convergent qu’à fort RSB c’est à dire lorsque
la borne de l’union est fine.
54 Les codes convolutifs
1
10
Sans codage
Codage convolutif et décodage dure
0
Codage convolutif et décodage souple
10
−1
10
−2
10
eb
−3
10
P
−4
10
−5
10
−6
10
−7
10
0 1 2 3 4 5 6 7
Eb/N0 (dB)
Exercice I :
Soit le codeur convolutif illustré dans la figure ci-dessous. Un seul bit rentre dans le codeur afin de
calculer le mot de code correspondant.
1) Donner la contrainte K , le rendement Rc et le nombre d’états de ce codeur.
2) Exprimer les séquences génératrices en octal (le bit à gauche étant le bit de moins significatif).
3) Représenter le diagramme d’état de ce codeur.
4) Représenter le diagramme d’état scindé de ce codeur puis déduire sa fonction de transfert et sa distance
libre.
5) Donner une borne supérieure de la probabilité d’erreur par élément binaire à la sortie du décodeur de
Viterbi à entrée dure et souple.
6) Représenter le diagramme en treillis de ce codeur.
7) Effectuer le décodage par l’algorithme de Viterbi de la séquence r = (111; 001; 100; 011; 011) : On de-
mande de représenter le treillis au fur et à mesure de l’avancement du temps. On indiquera les métriques
de branche, les métriques cumulées et les survivants des états en cours. Déterminer la séquence codée et
la séquence d’information les plus vraisemblables.
N.B. : Dans le cas où deux chemins qui convergent possèdent la même métrique cumulée, le chemin
5.5 TD 4 : Les codes convolutifs 55
Il s’agit d’établir la métrique optimale pour une transmission sur un canal binaire symétrique. La séquence
binaire reçue correspondant à une séquence binaire codée émise de longueur N est notée comme suit
r = r0 r1 r N 1:
dH (r;c)
P (r c) = (
= f p; N ) 1 p
p
;
où f (p; N ) est une fonction qui dépend uniquement de p et de N (et donc ne dépend pas de r et de c).
3) On suppose que p est inférieur ou égal à 1/2. Pour effectuer un décodage au maximum de vraisem-
blance de la séquence codée émise, le récepteur doit déterminer la séquence hypothétique qui explique
le mieux la réception de la séquence r. En d’autres termes, il doit trouver la séquence hypothétique c qui
maximise la probabilité conditionnelle P (r c). En utilisant le résultat du 2) et le fait que 0 1 2,
= p =
B. Codes convolutifs
C. Algorithme de Viterbi
On suppose que le code convolutif précédent a été retenu dans un système de transmission communiquant
à travers un canal binaire symétrique. On fait l’hypothèse d’un décodage au maximum de vraisemblance
(et donc utilisant la métrique de Hamming) par le récepteur.
1) En supposant que l’émetteur désire transmettre la séquence d’information 011(0) (le zéro entre pa-
renthèses est utilisé par l’émetteur pour remettre l’état du codeur de nouveau à 0), déterminer la séquence
binaire codée de longueur 8.
2) Transmise sur un canal binaire symétrique, la séquence binaire codée du 1) subit la séquence d’erreurs
binaires e = 11000000.
a) Déterminer la séquence binaire reçue r.
b) Effectuer le décodage par l’algorithme de Viterbi de la séquence r: On demande de représenter le
treillis au fur et à mesure de l’avancement du temps. On indiquera les métriques de branche, les métriques
cumulées et les survivants des états en cours.
N.B. : Dans le cas où deux chemins qui convergent possèdent la même métrique cumulée, le chemin
survivant sera choisi de façon arbitraire.
c) En utilisant le résultat du 2)b), donner la séquence codée et la séquence d’information décodées les plus
vraisemblables. En déduire le nombre d’erreurs résiduelles (non corrigées ou rajoutées par le décodeur)
touchant ces deux séquences.
58 Les codes convolutifs
On considère le code convolutif, à entrées et sorties binaires, illustré dans la figure ci-dessus.
1) Quels sont le rendement Rc , la mémoire m, la longueur de contrainte K et le nombre d’états du
diagramme en treillis de ce code ?
2) Représenter 3 sections du diagramme en treillis de ce code. On supposera, dans toute la suite, que
1 2
le codeur part de l’état tout à zéro. On utilisera l’étiquetage binaire c c
k k
des branches du treillis pour
préciser les sorties du codeur. On représentera une branche du treillis correspondant à l’entrée 0 (respec-
tivement, 1) par un trait en pointillés (respectivement, fort).
3) On supposera également qu’une séquence de 0, de plus courte longueur, garantissant le retour systématique
du codeur à l’état tout à zéro, est rajoutée au préalable, avant codage, à la fin de la séquence binaire d’in-
formation.
a) Déterminer la séquence binaire codée correspondant à la séquence binaire d’information d0 d1 = 11.
b) Représenter, en utilisant une autre couleur, le chemin correspondant à cette séquence codée sur le
diagramme en treillis du 2).
4) On désire transmettre la séquence binaire codée obtenue en 3) sur un canal gaussien, en utilisant une
modulation MDP2, dont les états sont 1 et 1. On supposera dans toute la suite que le modulateur utilise
la convention d’association
0 ! 1
1 ! 1
entre éléments binaires de la séquence d’information et éléments bipolaires de la séquence modulée.
Déterminer la séquence binaire effectivement émise sur le canal gaussien.
5) On supposera également que le canal gaussien rajoute la séquence de bruit additif -0.5, +0.5, -1.5,
+1.5, 0.0, +1.0 Déterminer la séquence réelle reçue avant toute prise éventuelle de décisions au niveau
5.5 TD 4 : Les codes convolutifs 59
du récepteur.
6) On suppose dans un premier temps que le décodeur utilise l’algorithme de Viterbi pour effectuer un
décodage au maximum de vraisemblance, en se servant des décisions fermes de la séquence reçue en 4)
(hard-decision decoding).
a) Déterminer la séquence binaire, en sortie de l’organe de décision, alimentant l’entrée du décodeur.
b) Préciser la métrique optimale pour effectuer, en toute simplicité, le décodage.
c) Représenter, sur autant de niveaux du diagramme en treillis du code qu’il le faudra, toutes les étapes
de l’algorithme de Viterbi, en précisant les métriques de branches, les métriques cumulées et les chemins
survivants en les différents états. En déduire, pour un décodage avec décisions fermes, la séquence binaire
décodée la plus vraisemblable et la séquence d’information correspondante.
d) Préciser le nombre d’erreurs éventuellement commises par le décodeur au niveau de la séquence codée
et de la séquence d’information.
7) On suppose dans un second temps que le décodeur désire utiliser l’algorithme de Viterbi pour effectuer
un décodage au maximum de vraisemblance plus élaboré, utilisant des décisions souples de la séquence
reçue en 4) (soft-decision decoding).
a) Préciser la métrique optimale, pour effectuer en toute simplicité, le décodage.
b) Représenter 3 sections du diagramme en treillis du code avec un étiquetage bipolaire des branches,
compatible avec la nouvelle métrique optimale, en remplacement de l’étiquetage binaire utilisé en 2). On
utilisera pour cela la convention de conversion binaire-bipolaire du 4).
c) Représenter, sur la nouvelle version du diagramme en treillis du code, toutes les étapes de l’algorithme
de Viterbi, en précisant les nouvelles métriques de branches, les nouvelles métriques cumulées et les
survivants des états. En déduire, pour un décodage avec décisions souples, la séquence binaire décodée
la plus vraisemblable.
d) Préciser le nombre d’erreurs éventuellement commises par le décodeur au niveau de la séquence codée
et de la séquence d’information. Conclure en comparant avec le 6) d).