Codage 1
Codage 1
Codage 1
Cours de Codage
Rhouma Rhouma
CHAPITRE 1
___
CODAGE DE CANAL
___
Conséquence : Si αi = αj = 0 ⇒ Ck = "0"
Un code linéaire contient le code "0".
Un code de poids fixe ne peut être un code linéaire.
Pour un code linéaire, la distance minimale est le plus petit poids du code, mot de code nul exclus.
min { dij } = min { wk } pour Ck ≠ "0"
Cm = Xm.G
Nous nous intéressons à des codes systématiques, la matrice G est donc de la forme :
G = [ P Ik ]
G étant une matrice ( k ,n ), P une matrice ( k , n-k ) et Ik la matrice identité ( k , k ).
b0 b1 b2
H = [ In-k PT ]
Syndrôme :
A partir de la relation précédente nous pouvons établir la relation servant de base à la détection d'erreur :
Le détecteur va utiliser cette relation. En effet, si le mot de code reçu Ym est entaché d'erreur nous pouvons l'exprimer
sous la forme :
Code reçu = code émis + erreur ⇒ Ym = Cm + Em
En effectuant le contrôle Ym.HT = Cm.HT + Em.HT = Em.HT. S'il n'y a pas eu erreur de transmission Em.HT = 0.
Em.HT est par définition le syndrôme de l'erreur Sm.
Sm = Ym.HT = Em.HT
Théorème :
Supposons deux syndrômes Si = Ei.HT et Sj = Ej.HT.
Si Si = Sj ⇒ ( Ei - Ej ).HT = 0 ⇒ ( Ei - Ej ) est un mot de code.
⇒ deux vecteurs d'erreur qui diffèrent d'un mot de code ont même syndrôme.
Ce théorème montre qu'il peut y avoir ambiguïté dans la détection des erreurs.
Chaque élément de la matrice M est : m j = ∑ ci h ji ce qui est une combinaison linéaire sur une ligne j de tous les
i
éléments des colonnes ⇒ M est une combinaison linéaire des colonnes de la matrice H et cette combinaison
linéaire est nulle.
⇒ les colonnes de H sont linéairement dépendantes.
Le nombre de colonnes intervenant dans la combinaison est égale au nombre de "1" du code Cm ce qui est le
poids de Hamming du mot de code.
La distance de Hamming du code étant le poids minimal de ce code ⇒ La distance minimale de Hamming dmin
d'un code est égale au nombre minimal de colonnes de la matrice H dont la somme est nulle.
Le nombre de colonnes de H linéairement indépendantes est dmin-1 et le rang maximal de cette matrice est n-k
ce qui établi la relation :
dmin ≤ n-k+1
Code étendu :
Pour améliorer la détection des erreurs, on ajoute des bits de parité aux colonnes de H ce qui créé à partir d'un code ( n ,
k ) un code étendu ( n+1 , k ) tel que :
1 1 ← 1 1 → 1
0
↑ ↑
He = cela augmente la distance de Hamming dmin → dmin + 1
0 ← H →
↓ ↓
0
eD = dmin-1
t
t Xi Xj
t
Xj
Xi
t
Dans ce cas, les codes appartenant à l'intersection des sphères ne peuvent être attribués.
Pour éviter toute ambiguïté nous devrons donc respecter la condition :
2.t ≤ dmin-1
t étant un entier, eC le nombre maximum d'erreurs corrigeables sera :
eC = Int [ ½ (dmin-1 ) ]
Le nombre eDNC d'erreurs détectables et non corrigeables est tel que : eDNC + eC = eD. Compte tenu des relations
précédentes nous aurons aussi la relation : eDNC ≥ eC.
exemple :
dmin = 7 ⇒ erreurs détectables eD = 6.
erreurs corrigeables eC = 3.
Erreurs détectables non corrigeables eDNC = 3.
matrice de contrôle :
Elle est de dimensions ( n-k , n ) = ( m , 2m-1 ).
Une colonne est donc constituée de m éléments binaires et nous avons 2m-1 colonnes c'est-à-dire toutes les
combinaisons possibles moins une ( la combinaison "000…" ). Ceci nous permet pour ces codes de construire très
rapidement la matrice de contrôle H et d'en déduire la matrice de génération de code G. La procédure est la suivante :
1. Commencer à remplir la matrice H en utilisant les combinaisons linéaires de m bits faisant apparaître la
matrice In-k.
2. Compléter cette matrice par les combinaisons de m bits non encore utilisées code "0" exclu. Il apparaît dans
cette opération que la solution n'est pas unique mais cela n'a aucune importance.
Exemple d'un code ( 7 ,4 ) :
1 0 0 1 1 0 1
H = 0 1 0 1 0 1 1
0 0 1 0 1 1 1
1424 3 14243
In-k PT
Nous en déduisons G :
1 1 0 1 0 0 0
1 0 1 0 1 0 0
G=
0 1 1 0 0 1 0
1 1 1 0 0 0 1
14243 142
4 434
P Ik
erreurs corrigeables :
Le nombre maximum de colonnes de H linéairement indépendantes est (n-k) = m= dmin.
⇒ eD = Int [ ½ (m-1) ]
m = 3 eD = 1 ; m = 4 eD = 1 ; m = 5 eD = 2 ;……….
CHAPITRE 2
___
CODAGE DE CANAL
CODES CYCLIQUES
___
CODAGE DE CANAL
CODES CYCLIQUES
Les codes cycliques constituent un sous-groupe des codes linéaires qui a pris une très grande
importance dans les applications du fait de la simplicité d'implantation des algorithmes de codage et de
décodage.
1. Ce sont des codes linéaires : la somme de deux mots de code est un mot de code
αi Ci + αj Cj = Ck ∀ αi, αj.
2. Ils sont cycliques : Toute permutation circulaire des bits d'un mot de code est aussi un mot de code.
[ c0 c1 c2 ….cp-1. cp cp+1 ….. cn-2 cn-1 ] est un mot de code ⇒ [ cp cp+1 …..cn-p c0 c1 ….. cp-1 ] est
aussi un mot de code ∀ p.
Rôle de l'opérateur D :
D.Cm(D) = cn-1 Dn + cn-2 Dn-1 + cn-3 Dn-2 + ….. ck Dn-p+1 + ….. c1 D2 + c0 D
En rappelant que, en binaire, ck + ck = 0 ∀ k
⇒ D.Cm(D) = cn-1 Dn + cn-2 Dn-1 + cn-3 Dn-2 + ….. ck Dn-p+1 + ….. c1 D2 + c0 D + cn-1 + cn-1
= cn-1 Dn + cn-1 + cn-2 Dn-1 + cn-3 Dn-2 + ….. ck Dn-p+1 + ….. c1 D2 + c0 D + cn-1
= cn-1 ( Dn + 1 ) + Cm1 (D)
où Cm1 (D) est un mot de code obtenu par décalage des bits de Cm(D) de 1 position
En itérant le procédé nous montrons que :
D2.Cm(D) = ( D cn-1 + cn-2 ) ( Dn + 1 ) + Cm2 (D), Cm2(D) correspondant à un décalage de deux positions.
Dp.Cm(D) = ( Dp-1 cn-1 + Dp-2 cn-2 +…..+ cn-p ) ( Dn + 1 ) + Cmp (D)
= Qp-1(D) ( Dn + 1 ) + Cmp (D), Cmp(D) correspondant à un décalage de p positions et Qp-1(D)
est un polynôme de degré p-1.
Cmp(D) est ainsi le reste de la division de Dp.Cm(D) par ( Dn + 1 ). Cette remarque très importante nous donne le
théorème suivant :
Dp.Cm(D) mod ( Dn + 1 ) = Cmp (D)
Polynôme générateur :
Quel est le problème ?
Le message est constitué de k bits, nous pouvons lui associer un polynôme m(D) de degré (k-1). Au mot de code
correspondant il est associé un polynôme de degré (n –1) : Cm(D). Nos recherchons des codes tels que :
Cm(D) = Am(D).g(D)
Am(D) est un polynôme de degré (k-1) lié à m(D) par une relation que nous ne recherchons pas et g(D) est un
polynôme de degré (n-k) qui lui, est caractéristique du codage et par là même indépendant du message.
Le polynôme générateur de code est un polynôme de degré (n-k) qui factorise tous les mots de codes d'un
même code.
g(D) = Dn-k + gn-k-1 Dn-k-1 + gn-k-2 Dn-k-2 + ….... g1 D + 1
Dans ce polynôme gn-k = 1 et g0 = 1 conditions nécessaires pour que g(D) soit un polynôme de degré (n-k)
( gn-k ≠ 0 est une condition évidente. Pour g0, nous aurions g(D) = D.h(D) et h(D) serait un polynôme générateur
de degré (n-k-1) ce qui impossible ⇒ g0 = 1 )
Unicité de g(D) :
Cette unicité est montrée par l'absurde. Supposons l'existence d'un autre polynôme générateur g(1)(D) :
Cm(D) = Am(D).g(D)
Cm(1)(D) = Am(D).g(1)(D) ⇒ Cm(D) + Cm(1)(D) = Am(D).( g(D) + g(1)(D) )
D'après la propriété de linéarité : Cm(D) + Cm(1)(D) serait aussi un mot de code et donc g(D) + g(1)(D) serait aussi
un polynôme générateur g(2)(D).
g(2)(D) = ( Dn-k + gn-k-1 Dn-k-1 + …....+ g1 D + 1 ) + ( Dn-k + gn-k-1(1) Dn-k-1 + …....+ g1(1) D + 1 )
= ( Dn-k + Dn-k ) + ( gn-k-1 + gn-k-1(1) ) Dn-k-1 + …....+ ( g1 + g1(1) ) D + (1 + 1 ).
= ( gn-k-1 + gn-k-1(1) ) Dn-k-1 + …....+ ( g1 + g1(1) ) D
⇒ g(2)(D) serait un polynôme générateur de degré (n-k-2) qui ne peut générer un mot de
code de degré n ⇒ g(D) est unique.
II.1 Codage :
Le mot de code a la forme :
Cm = [ b0 b1 …..bn-k-1 m0 m1 .....mk-1 ]
Le polynôme associé est :
Cm(D) = b0 + b1D ….. + bn-k-1 D(n-k-1) + m0 D(n-k) + m1 D(n-k+1) + .... + mk-1 D(n-1)
Soit en posant :
b(D) = b0 + b1D ….. + bn-k-1 D(n-k-1) et m(D) = m0 + m1 D1 + .... + mk-1 D(k-1)
Cm(D) = b(D) + D(n-k) m(D) = Am(D).g(D)
En se rappelant que, en binaire, b(D) + b(D) = 0 nous obtenons la relation fondamentale du codage :
⇒ b(D) est le reste de la division de D(n-k) m(D) par le polynôme générateur g(D).
exemple: un code ( 7 ,4 ) = ( n , k )
g(D) = 1+ D + D3 (son obtention sera vue plus loin) et Dn-k =D3
message = [ 1 0 1 1 ] ⇒ m(D) = 1 + D2 + D3 ⇒ Dn-k m(D) = D3 + D5 + D6
D6 + D5 + D3 D3 + D + 1 g(D)
D5 + D4 D3 + D2 + D + 1
D4 + D3 + D2
D3 + D
b(D) 1
Am(D)
g(D).h(D) mod( Dn + 1 ) = 0
Parmi tous les polynômes h(D) possibles, nous choisissons celui de degré minimal d'où :
g(D).h(D) = Dn + 1
Cm(D).h(D) mod( Dn + 1 ) = 0
Remarque: la solution n'a aucune raison d'être unique mais deux polynômes générateurs différents ne génèrent
pas le même code.
Exemple:
En poursuivant avec l'exemple déjà utilisé pour illustrer g(D).
g(D) = 1+ D + D3
h(D) = 1 + D + D2 + D4
message = [ 1 0 1 1 ] ⇒ m(D) = 1 + D2 + D3 ⇒ Cm(D) = 1 + D3 + D5 + D6 ⇒ Cm = [ 1 0 0 1 0 1 1 ]
Vérification : Cm(D).h(D) :
( 1 + D3 + D5 + D6 ).( 1 + D + D2 + D4 ) = 1 + D3 + D5 + D6
+ D + D4 + D6 + D7
+ D2 + D5 + D7 + D8
+ D4 + D7 + D9 + D10 ≡ 0
En utilisant en binaire:
Di + Di = 0
Dn+k + Dk = Dk ( Dn + 1 ) ⇒ Dn+k + Dk = 0 mod( Dn + 1 )
E m = [ 0 0 0 1 0 0 0 ] ⇒ Ym = [ 1 0 0 0 0 1 1 ] ⇒ Ym(D) = 1 + D5 + D6
Ym(D).h(D) = ( 1 + D + D ).( 1 + D + D + D ) = 1 + D + D2 + D4
5 6 2 4
+ D5 + D6 + D7 + D9
+ D6 + D7 + D8 + D10 = 1 + D3 + D4 + D5
= Em(D).h(D) = Sm(D)
Nous n'apporterons pas ici la preuve de ce théorème. Il peut être illustré sur l'exemple déjà utilisé qui entre dans
ce cadre et doit ainsi générer un code de Hamming ( 7 ,4 ).
ce qui avec le message déjà pris en exemple : Xm = [ 1 0 1 1 ] nous fournit le mot de code Cm = [ 1 0 0 1 0 1 1 ]
ce qui est conforme au polynôme Cm(D) = 1 + D3 + D5 + D6 établi avec g(D).
1 0 0 1 0 1 1
H = 0 1 0 1 1 1 0
0 0 1 0 1 1 1
G.HT = 0 exprime le fait que les lignes de H ( colonnes de HT ) sont orthogonales à celles de G. Elles sont
constituées de mots d'un code qui est orthogonal au code généré par G.
Dk h(D-1) est donc un mot de code orthogonal au code généré par g(D), comme ce sont des codes cycliques, il en
sera de même de Dk+j h(D-1). La matrice H* dont les lignes sont des mots de code orthogonaux à tout le code
généré par g(D) peut être construite selon le schéma :
−1
← D .h(D ) →
k
k +1 −1
← D .h(D ) →
H* = .
.
n −1
← D .h(D ) →
Cette matrice ne possède cependant pas la propriété des codes systématiques : ils font intervenir la matrice
identité In-k. Pour retrouver cette propriété, il suffit de refaire des combinaisons linéaires des lignes de H*.
0 0 1 0 1 1 1
puis, pour faire intervenir I3, nous effectuons :
ligne1 ← ligne + ligne3
1 0 0 1 0 1 1
H = 0 1 0 1 1 1 0
0 0 1 0 1 1 1
ce qui est bien identique à la matrice obtenue à partir de G.
Toujours avec n = 2m – 1, k est choisi tel que k ≥ ( n-m.t ) où t est le nombre d'erreurs détectables et corrigeables.
La distance minimale obtenue correspond toujours à dmin ≥ 2t + 1.
Ces codes permettent des longueurs de code très variées et offrent de nombreuses possibilités d'efficacité de code
k/n. Ils ont fait l'objet de nombreuses études et utilisations. Les coefficients des polynômes générateurs sont
tabulés dans de nombreux ouvrages, la longueur des polynômes générateur devenant très grande, ces tables
fournissent les jeux de coefficients en utilisant un format octal par ordre décroissant.
Exemple : code ( 31 ,26 ), t = 1 , coefficients 45 en octal soit 100 101 → g(D) = D5 + D2 + 1
CHAPITRE 3
CODAGE DE CANAL
CODES DE CONVOLUTION
I. PRINCIPE
Les codes de convolution sont des codes binaires qui constituent une alternative aux codes de blocs par
leur simplicité de génération grâce à quelques registres à décalage. Introduits par Elias (1955) ils permettent
de générer en ligne le code sans passer par une bufferisation préalable comme c'est le cas avec les codes
BCH ou RS.
I.1 La convolution :
Le problème du codage se schématise par :
m(t) x(t)
message Encodeur code
m(t) et x(t) sont des signaux discrets dont les échantillons sont binaires. Si l'encodeur est un
système linéaire, x(t) peut être généré par un produit de convolution ⇒ code de convolution.
M
xj = ∑ gi m j-i
i=0
Schéma de principe :
En binaire l'opération de convolution se réalise très simplement par :
Registre de M bascules
g0 g1 g2 g3 gM-1 gM
x(t)
En se rappelant que : gi = 0 ⇒ connexion absente
gi = 1 ⇒ connexion présente
Convolution et polynômes :
L'opération de convolution se représente mathématiquement par le produit polynomial :
x(D) = g(D).m(D)
ce qui est une opération formellement identique à celle de génération d'un code cyclique mais ici, on
ne recherche plus les caractéristiques code de bloc et codage systématique.
I.2 Propriétés :
K=M+1
D'autres possibilités d'entrelacement sont envisageables comme traiter les bits d'entrée par paquets
de k bits et les entrelacer en sortie. C'est ce qui est figuré ci-contre avec k= 2, n = 3 et une longueur de
contrainte K = 2.
Cet exemple pour lequel M= 2 génère deux séquences qui seront entrelacées selon le principe
suivant :
n=2
mi mi-1 mi-2 x(t)
m(t) q-1 q-1
M
x j(1) = ∑ gi(1) m j-i avec gi
(1) (1)
= [g0 g1
(1)
g2
(1)
]=[0 0 1]
i=0
M
x j(2) = ∑ gi(2) m j-i avec gi
(2) (2)
= [g0 g1
(2)
g2
(2)
]=[1 1 1]
i=0
La convolution se calcule sur K bits (ici K = 3) et tous les cas possibles peuvent se représenter dans
un tableau : la table de convolution
(1) (2)
[ mj mj-1 mj-2 ] xj xj
0 0 0 0 0
0 0 1 1 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 0 0
1 1 1 1 1
1 Un "0" d'initialisation [ m1 m0 0 ] = 0 1 0 0 1
2 [ m2 m1 m0 ] = 0 0 1 1 1
3 [ m3 m2 m1 ] = 1 0 0 0 1
4 [ m4 m3 m2 ] = 1 1 0 0 0
5 Un "0" de queue [ 0 m4 m3 ] = 0 1 1 1 0
M
g(m)(D) = ∑ gi(m) Di
i=0
L-1
Nous associons au message le polynôme : m(D) = ∑ mj Dj
j=0
(2) (2) 2 3 4 3 4
x (D) = g (D).m(D) = ( 1 + D + D ).( 1 + D + D ) = 1 + D + D
4 5
+D+D +D
2 5 6
+D +D +D
2 3 6
=1+D+D +D +D
x=[01 01 11 01 00 10 11]
IV REPRESENTATIONS GRAPHIQUES
Il existe trois représentations graphiques équivalentes pour représenter les propriétés structurales
d'un encodeur de convolution. Elles sont d'un grand intérêt pour comprendre le fonctionnement du codeur et
aussi surtout du décodeur.
A un instant présent t = j.Ts, l'état des bascules est défini par les K-1 bits de sortie : [ mj-1……mj-K+1 ]
et nous pouvons atteindre seulement deux états différents liés à la nature du bit mj. Les K bits pris
en compte pour le calcul du code sont : mj mj-1……mj-K+1.
De l'instant t = j.Ts à l'instant t = (j+1).Ts le passage se fait donc par un changement d'état :
de l'état présent [ mj-1……mj-K+1 ] à l'état suivant [ mj……mj-K+2 ] avec seulement deux possibilités
chacune réalisant son codage (sortie).
K-1
Nous pouvons donc systématiquement explorer les 2 états possibles ainsi que les deux transitions
possibles pour chacun d'entre eux. Ceci est directement apparent sur la table de convolution : l'état
ère
présent est constitué des K-1 bits de droite de la 1 colonne de la table (on exclut le bit de gauche
mj) et l'état suivant est défini par les K-1 bits de gauche de cette même colonne (on exclut le bit de
droite mj-K+1).
La sortie, c'est-à-dire le codage réalisé est constitué de l'ensemble des colonnes donnant le résultat
de la convolution.
= 4 états internes. Les états sont repérés par des lettres : a → (00), b → (01), c →
K-1
K=3 ⇒ 2
(10), d → (11). L'état présent est constitué par les deux bits de droite de la combinaison d'entrée active et
l'état suivant sera caractérisé par les deux bits de gauche. La "sortie" correspondant au passage de l'un à
(1) (2)
l'autre est constituée de l'indication des colonnes xj xj .
(1) (1) (1) (2) (2) (2)
[ g0 g1 g2 ]= [ g0 g1 g2 ]=
Etat suivant Combinaisons d'entrée Etat présent
[001] [111]
(1) (2)
[ mj mj-1 mj-2 ] xj xj
a 0 0 0 a 0 0
a 0 0 1 b 1 1
b 0 1 0 c 0 1
b 0 1 1 d 1 0
c 1 0 0 a 0 1
c 1 0 1 b 1 0
d 1 1 0 c 0 0
d 1 1 1 d 1 1
Nous pouvons en déduire les éléments de base du graphe avec pour convention :
0 00 11 01 10
a a b b
a b c d
1 c c d d
01 10 00 11
Conventions usuelles:
l'évolution temporelle est représentée de la gauche vers la droite
chaque nouveau bit entré provoque un déplacement vers le haut s'il s'agit d'un "0" et vers le bas s'il
s'agit d'un "1"
sur chaque branche est porté le résultat de l'encodage (la sortie) conformément à la table de
convolution
Un exemple :
En reprenant le tableau précédent nous pouvons établir l'arbre de la page suivante :
x = [ 0 1 0 1 1 1 0 1 0 0 1 0 1 1 ].
Remarques :
Avec la méthode proposée, on remarquera à un instant donné la périodicité des états possibles
K-1
(colonne de l'arbre) ainsi que celle des sorties possibles. Cette périodicité est de 2 .
Nous n'avons accès à tous les états possibles qu'après évacuation des conditions initiales nulles ce
qui représente M = K-1 instants (ici M = 2)
Pour que le codage soit complet il ne faut pas oublier de placer M zéros de queue.
00
a
00
a
01
c
00
a 01
b
01
c
00
d
00
a 11
a
01
b
10
c
01
c 10
b
00
d
11
d
00
a 00
a
11
a
01
c
01
b 01
b
10
c
00
d
01
0 c 11
a
10
b
10
c
00
d 10
b
11
d
11
d
a 00
a
00
a
01
c
11
a 01
b
01
c
00
d
01
1 b 11
a
01
b
10
c
10
c 10
b
00
d
11
d
01
c 00
a
11
a
01
c
10
b 01
b
10
c
00
d
00
d 11
a
10
b
10
c
11
d 10
b
11
d
11
d
L'inconvénient essentiel de l'arbre du code est que l'arborescence est multipliée par 2 à chaque bit
supplémentaire et la représentation devient vite impossible à réaliser. Les remarques faites sur le nombre
limité d'états possibles va nous permettre de compacter ce graphe en attribuant à chaque instant un noeud à
un état. Par convention la représentation utilise les normes suivantes :
Le passage d'un état à un autre par la prise en compte d'un bit "0" est représenté en trait continu.
Le passage d'un état à un autre par la prise en compte d'un bit "1" est représenté en trait pointillé.
Sur le trait, est indiquée la sortie générée c'est à dire la portion du mot de code correspondante.
Cellule élémentaire:
En utilisant soit l'arbre du code soit les éléments de base constitutifs nous pouvons dessiner une cellule
K-1
élémentaire du treillis reliant l'instant t à l'instant t+1. Cette cellule comporte 2 entrées et sorties.
p(yi/xi) = p si yi ≠ xi
00
a a
11
01
b b
10
01
c c
10
00
11
d d
Phase initiale :
Pendant M = K-1 instants, une partie de l'état des bascules est constitué des "0" d'initialisation. Pendant
tous ces instants, toutes les combinaisons ne sont pas possibles et tous les états ne sont pas accessibles.
Le treillis comporte donc à l'origine M cellules correspondant à cette phase initiale.
00 00
a a
01 01
b
01
00
Phase finale :
A la fin du codage nous sommes amenés à introduire des "0" de queue. De ce fait, seules les transitions
en trait plein deviennent possibles et le treillis se résume à M cellules ne comportant que ces transitions.
00 00
a a
11 11
01
c
10
Avec ce treillis nous vérifions que le message m = [m0 m1 m2 …..mL-1 ] = [ 1 0 0 1 1 ] génère bien
le mot de code :
x = [ 0 1 0 1 1 1 0 1 0 0 1 0 1 1 ].
un arc orienté représente une transition. En trait plein pour celles induites par un "0" et en trait
pointillé pour celles induites par un "1"
00
01
11
01
b
c
10
10
00
11
Avec ce graphe nous vérifions que le message m = [m0 m1 m2 …..mL-1 ] = [ 1 0 0 1 1 ] donne le
mot de code :
V. DECODAGE DE CONVOLUTION
C'est donc une opération de déconvolution qui, en cas d'erreur, doit réaliser l'estimation la plus
probable pour corriger cette erreur.
Rôle du décodeur :
Le décodeur doit faire la meilleure estimation de m qui correspond à la meilleure estimation de x
(convolution = relation linéaire ).
y → x̂ → m̂
Règle de décodage :
Connaissant y, l'estimation x̂ est optimale si la probabilité d'effectuer une erreur de décodage est
minimale. C'est l'expression simplifiée de la règle du maximum de vraisemblance et x̂ correspond à la
valeur qui rend maximale la probabilité conditionnelle p(y/x) soit : x̂ = [ p(y/ x) ]max .
Tous les messages sont équiprobables, et la fonction logarithme est une fonction monotone. Il est
équivalent d'exprimer ce maximum de vraisemblance en optimisant le Ln d'où :
[ ]
N N
p(y/ x) = ∏ p(yi / xi ) ⇒ Ln [ p(y/ x) ] = ∑ Ln p(yi / xi )
i=1 i=1
p(yi/xi) = p si yi ≠ xi
p(yi/xi) = 1-p si yi = xi
Si y et x diffèrent de d bits, d est la distance de Hamming entre les deux codes et pour un mot de
code de N bits :
Il est plausible que p < 1/2 ⇒ d.Ln[ p/(1-p) ] < 0 et comme N.Ln(1-p) est une constante, Ln[
p(y/x) ] est maximum si d est minimum. Dans ce cas le maximum de vraisemblance s'exprime par :
Pour cela, x est bien sûr inconnu mais nous avons à notre connaissance le treillis du code et, à la
réception de y, nous chercherons à minimiser la distance de Hamming entre le code reçu et tous les codes
possibles. Le plus "proche de y" constituera l'estimation la plus vraisemblable.
y=[01 01 01 01 00 10 11]
et recherchons la meilleure estimation grâce au treillis et aussi au fait que nous savons qu'il existe
une phase initiale et une phase finale toutes les deux de longueur M = K-1.
Ici M = 2.
Principe :
En utilisant le treillis nous réalisons les opérations suivantes :
1. nous examinons chaque portion de code reçue puis nous calculons la distance entre cette portion de
code et la sortie du treillis pour toutes les possibilités.
2. Cette distance ajoutée à celle associée au nœud d'origine (état présent) est portée sur le nœud ainsi
atteint (état suivant). Un nœud comportera deux indications puisqu'il y a deux façons de l'atteindre.
3. Pour l'étape suivante, nous ne conservons pour un nœud que la distance minimale ce qui revient à
ne conserver qu'un certain nombre de "trajets" probables : les survivants.
5. Le code le plus probable sera celui qui à la suite de ces opérations correspondra à la distance totale
la plus faible et le message est reconstitué en interprétant la suite des "pleins" et "pointillés"
associés au trajet le plus probable
Phase initiale :
Elle dure M coups et les états ne peuvent être atteints que
Code reçu → 01 1 01
d'une seule façon. Durant cette phase il n'y a donc pour un état 2
a
suivant qu'une seule distance et aucun "trajet" ne sera rejeté. L'état
initial est nécessairement l'état interne "0" soit a dans notre 0
b
exemple.
0
1
c
1
d
Phase centrale :
Code reçu → 01 01 01
Tous les états sont atteignables de deux 1 2 3
a
manières et à chaque étape nous décidons de ne 1
1
2
d 2
01 1 01 2 01
1
0
Survivants 1
0 1
2
2
1
2
étape suivante :
01 1 01 2 01 01
2
2
1
0 1
2
4
0 1 2
1
3
2
1 2
3
3
2
01 01 01 01
1 2
2
1 2
0
2
Survivants
0 1 2
1
2
1 2
3
2 3
étape suivante :
01 1 01 2 01 01 2 00
2
1 4
0 2
2
4
0 1 2 1
3
3
2
1 3
2 1
5
3
01 1 01 2 01 01 2 00 2
1
Survivants 0 2
2
0 2 1
3
3
2
Phase finale :
Nous savons que les M derniers blocs correspondent à la phase finale pendant laquelle seuls les "0"
(trait plein) sont introduits.
01 1 01 2 01 01 2 00 2 10
3
3
1
0 2 2 5
1
0 2 1 3
2 3
01 01 01 01 2 00 2 10
3
3
1
0 2
1
0 1
01 01 01 01 2 00 2 10 11
3 5
3 1
1
0 2
1
0 1
01 01 01 01 00 10 11
1
1
0
0 1
DS
Exercice 1
Soit une source décrite par la variable aléatoire X qui peut prendre 6 valeurs {A, B, C, D, E,
⎧1 2 3 4 5 6⎫
F} avec les probabilités ⎨ , , , , , ⎬
⎩ 21 21 21 21 21 21⎭
1°) Construire un code de Huffman binaire pour X. (le dessin de construction de codes)
2°) Tracer l’arbre du code finale (verticalement).
3°) Donner finalement les codes de chaque symbole de X.
4°) Calculer l’entropie H(X) de ce code.
5°) Calculer la longueur moyenne de ce code.
6°) Calculer l’efficacité de ce code.
7°) Calculer le rapport de compression entre le code de Huffman et le code ASCII (version 8
bits) pour cette exemple.
8°) Refaire le codage en appliquant le code de Fano-Shannon.
9°) Comparer les 2 codes (Huffman et Fano-Shannon) en terme d‘efficacité. En déduire le
code le plus performant des deux pour cet exemple.
Exercice 2
DC
Exercice 1
Soit une source décrite par la variable aléatoire X qui peut prendre 7 valeurs
⎧1 2 3 4 5 6 7⎫
X= {A, B, C, D, E, F, G} avec les probabilités ⎨ , , , , , , ⎬
⎩ 28 28 28 28 28 28 28 ⎭
1°) Construire un code de Huffman binaire pour X. (le dessin de construction de codes)
2°) Tracer l’arbre du code finale (verticalement).
3°) Donner finalement les codes de chaque symbole de X.
4°) Calculer l’entropie H(X) de ce code.
5°) Calculer la longueur moyenne de ce code.
6°) Calculer l’efficacité de ce code.
7°) Calculer le rapport de compression entre le code de Huffman et le code ASCII (version 8
bits) pour cette exemple.
8°) Refaire le codage en appliquant le code de Fano-Shannon.
9°) Comparer les 2 codes (Huffman et Fano-Shannon) en terme d‘efficacité. En déduire le
code le plus performant des deux pour cet exemple.
Exercice 2
1
Exercice 3
1. Vérifier que x 2 + x + 1 divise x 6 + 1
2. Faire la liste des mots du code cyclique de longueur 6 ayant pour polynôme générateur x 2 + x + 1
3. Donner une matrice génératrice G*.
4. Trouver la matrice génératrice sous forme systématique,
5. Déduire une matrice de contrôle H de ce code.
6. Quelle est la distance de Hamming de ce code ?
2
ECOLE NATIONALE D’INGENIEURS DE GABES A.U 2010/2011
Département Communications & Réseaux
DS
Exercice 1
1°) Le codage d'Huffman fournit un code préfixe. Qu'est-ce qu'un code préfixe ? Quels sont
ses propriétés essentielles ?
2°) Une source discrète sans mémoire a comme alphabet { A , F , I , R , U , V , X } auquel
sont associées les probabilités d'occurrence { 25% , 3% , 24% ,21% , 20% ,5% , 2% }.
Calculer son entropie.
3°) Réaliser une arbre de codage d'Huffman associée à cette source ( Règles de codage : 1.
Dans les étapes de constitution de l’arbre, en cas d'égalité des probabilités, on donnera
priorité au nœud le plus récent. 2. Dans la constitution d'un nœud père le code "0" est
attribué au nœud fils le plus probable. ).
4°) Définir et calculer : la longueur moyenne du code et son efficacité.
5°) Quel est le message codé par 11101100010 ?
Exercice 2
Un encodage systématique de canal (n,k) est réalisé avec la matrice de génération de code G:
1 0 1 1 0
G=
0 1 1 0 1
1°) Qu’est-ce que n et k ? Quelles sont leurs valeurs ? Ecrire la matrice P génératrice de ces
bits.
2°) Faire un tableau contenant tous les messages possibles et le mot de code qui leur est
associé.
3°) Etablir la relation générale entre la distance minimale d’un code et le nombre d’erreurs
corrigeables. Quelle est la distance minimale du code généré ? Quel est le nombre d’erreurs
corrigeables ?
1
4°) Définir et calculer la matrice H de contrôle du code. Quelle est son action sur un mot de
code ? Le vérifier sur l’un des mots non nul du code.
5°) Définir le syndrôme d’erreur. Etablir la table des syndrômes pour le code étudié.
6°) En utilisant la table des messages et celle des syndrômes, expliquer l’action du décodeur
dans le cas de réception des quatre mots suivants :
Y1=[0 1 1 0 1]
Y2=[1 0 0 1 0]
Y3=[1 0 1 0 1]
Y4=[0 1 0 1 0]
Exercice 3
Un code de convolution de longueur de contrainte K est généré de la manière suivante :
(1)
(2)
2
ECOLE NATIONALE D’INGENIEURS DE GABES A.U 2009/2010
Département Communications & Réseaux
DS
1°) Rappeler les propriétés d’un code cyclique systématique. Pour un tel code de type
(n,k) préciser le nombre de bits du message, le nombre de bits de contrôle et le nombre de bits
du mot de code généré. En appelant {ci} les bits du mot de code, {mj} les bits du message et
{bm} les bits de contrôle, indiquer clairement sur l’exemple d’un code (6,2) comment sont
générés les bits {ci}à partir des bits {mj} et {bm}. On précisera la place de ces bits dans le mot
de code ainsi que la position des poids faibles et des poids forts. Cette convention sera celle
que vous devrez utiliser dans toute la suite de l’exercice.
4°) Etablir la relation générale entre la distance minimale d’un code et le nombre
d’erreurs corrigeables. Quelle est la distance minimale du code généré ? Vérifier la cohérence
avec les résultats du 3°)
1
l’entrelacement étant effectué dans l’ordre 1,2,3.
1.c Avec la convention [poids faible……poids fort] quel sera le mot de code
généré par cet encodeur pour un message [1011] ?
2.b Tracer l’arbre du code. Quel est le nombre d’états différents intervenant ?
3°) Décodage
3.b On reçoit le mot de code [111 110 110 010 011 101] ([premier bit
transmis………...dernier bit transmis]). Quel était le message émis ? Est-ce le mot de
code qu’on aurait dû réceptionner pour ce message ?
2
ECOLE NATIONALE D’INGENIEURS DE GABES A.U 2010/2011
Département Communications & Réseaux
DS
Exercice 1
Une source discrète sans mémoire comprend huit symboles {xi} i∈[1..8] de probabilités
respectives {0,36 - 0,14 - 0,13 - 0,12 - 0,1 - 0,09 - 0,04 - 0,02}.
1°) Rappeler la définition de la quantité d’information d’un symbole et la calculer pour
les symboles de la source précédente.
2°) Définir l’entropie d’une source. Dans quel cas est-elle maximale ? La calculer ainsi
que la valeur maximale pour la source précédente.
3°) Proposer un codage d’Huffman pour cette source. Définir et calculer l’efficacité de
ce codage.
Exercice 2
Un code cyclique (15,7) a comme polynôme générateur g(x)=1+x4+x6+x7+x8.
1
Exercice 3
(1)
m(t) q-1 x(t)
(2)
2
ECOLE NATIONALE D’INGENIEURS DE GABES A.U 2009/2010
Département Communications & Réseaux
DS
On considère le code de Hamming (n,k) avec n=7 et k=4. La matrice de contrôle de parité
correspondante est :
1 0 0 1 0 1 1
H=0 1 0 1 1 1 0
0 0 1 0 1 1 1
3. Avec la convention [poids faible……poids fort] quel sera le mot de code généré par cet
encodeur pour un message [10101] ? (utiliser le calcul polynomial).
1
4. Etablir la table de vérité de l’encodeur :
. . .
. . .
. . .
5. Quel est le nombre d’états différents intervenant ? Tracer donc la table d’états.
Etat suivant Entrées Etat présent [g1(0) g1(1) g1(2)] [g2(0) g2(1) g2(2)]
. . . . .
. . . . .
. . . . .
9. Avec l’un de ces graphes, vérifier le résultat de l’encodage effectué dans la question 3.
2
Bibliographie