Vous êtes sur la page 1sur 52

Chapitre 3 (suite)

LES CODES CORRECTEURS


D’ERREURS

Codage de la parole LCPTS B. BOUDRAA


Introduction
Les codes ECC sont introduits pour essayer de détecter et
corriger des erreurs de transmission, sans refaire de
transmission.

Historiquement, on distingue:

• Codes de Hamming (1945)


• Codes convolutifs (GSM, IS95) (1954)
• Codes BCH (Satellites, graveurs CD & DVD, DD SSD,…)
(1959)
• Turbos codes (1995) par Perrou (4G: UMTS, LTE)
• LDPC
• Codes polaires (5G)
Codage de la parole LCPTS B. BOUDRAA
Codage de la parole LCPTS B. BOUDRAA
Cas systématique
k bits n-k bits

message BR = 1 mot de n bits

n bits
On note : code C(n,k), avec k < n

Efficacité: k/n

Codage de la parole LCPTS B. BOUDRAA


• Pb principal : construire des codes de canal
faciles à décoder et qui détectent et corrigent le
plus d’erreurs possibles tout en allongeant le
moins possible les messages.

• La théorie des corps finis (algèbre élaborée),


initiée par Galois intervient de façon essentielle.

• Deux catégories de codes: les codes en blocs et


les codes continus (convolutifs)
Codage de la parole LCPTS B. BOUDRAA
Les codes en blocs linéaires
Pour former un code C(n,k), L’information utile est découpée en
blocs indépendants de k bits. On décide du nombre r=n-k de bits
de détection et de correction d’erreur. n vaut alors de 2r -1 et k
vaut n-r = 2r -1-r

Exemples:

C(7,4) r=3, n ---> 7, k ---> 4, k/r ( %) ---> 57,1 %


C(15,11) r=4, n---> 15, k=11 k/r ( %) ---> 73,3 %
C(31,26) r=5, n ---> 31, k=26 k/r ( %) ---> 83,8 %

Codage de la parole LCPTS B. BOUDRAA


Les codes en blocs linéaires
• Un code en bloc C(n, k) est linéaire si les (n  k) bits de contrôle dépendent
linéairement des k bits d’information
• Les codes en blocs peuvent être séparables (systématiques), c.-à-d. les bits
de contrôle ou de redondance, r=n-k, sont séparés du message. Sinon on dit
qu’ils sont non séparables (non systématiques).
• Propriété de linéarité: C(n,k) est linéaire lorsque:
- pour c1 ϵ C(n,k)
- pour c2 ϵ C(n,k)
alors c1 + c2 ϵ C(n,k).
On peut aussi représenter cette opération de façon matricielle:
Il existe une matrice G (matrice génératrice), de k lignes et n colonnes à
coefficients dans {0, 1}, telle que:
C(msg) = msg × G (C: mot code).

Codage de la parole LCPTS B. BOUDRAA


Matrice génératrice d’un code linéaire systématique
• Un code linéaire systématique possède une matrice génératrice ayant
une forme caractéristique (facilité d’utilisation), on dit alors que sa
matrice génératrice est sous forme normale (ou normalisée ou
canonique).
• La matrice G sert à générer le mot code C à partir du message d , soit :
C = d.G
• Le code C est systématique si la matrice G est de la forme :
G = [ Ik | P] : séparable
G étant une matrice ( k, n), P matrice de parité ( k , n-k ) et Ik la matrice identité ( k , k )
(d’ordre k).

• Rappel : Une matrice normalisée ou canonique de taille k × n, si ses k


premières colonnes forment une matrice identité k × k.

Codage de la parole LCPTS B. BOUDRAA


Matrice génératrice d’un code linéaire systématique

Théorème :
Deux k×n matrices G1 et G2 engendrent des (n,k)-codes linéaires
équivalents si on peut obtenir G1 à partir G2 par une suite d'opérations à
choisir parmi:
 permutation des lignes ;
 addition de deux lignes ;
 permutation des colonnes.

Ce théorème peut être utilisé pour rendre une matrice génératrice


quelconque sous forme normale ou systématique ou bien pour passer
d’une matrice génératrice à une autre pour un même code linéaire.

Codage de la parole LCPTS B. BOUDRAA


EXEMPLE :

• Considérons C(4,2), un code linéaire de dimension 2, de longueur


4, de matrice génératrice G, telle que:

 1 0 1 1
G   
 0 1 0 1
Ik P
• Un message (d=10) donne alors un mot code: d C
 1 0 1 1
C=(10) * G  (10) *    (1011) 00 0000
 0 1 0 1 01 0101
• De même, on peut vérifier la table ci-contre 10 1011
11 1110
Codage de la parole LCPTS B. BOUDRAA
Quelques définitions

• Distance de Hamming d(x,y) entre deux mots x et y


est le nombre de positions de coordonnées qui
diffèrent entre x et y.
Exemple :
C= {c1= 01110, c2= 10011, c3= 11101 }
– d(c1, c2) = 4
– d(c1, c3) = 3
– d(c2, c3) = 3
• Donc la distance la plus petite dmin entre deux mots
du code est 3

Codage de la parole LCPTS B. BOUDRAA


.
• Le poids de x ,w(x), est le nombre de coordonnées
non nulles dans x.

Les poids des mots c1, c2 et c3 sont respectivement


0, 3, 3 et 4
wmin = dmin

Codage de la parole LCPTS B. BOUDRAA


Capacité de détection et de correction d’erreurs

• Soit un code C(n, k) de distance minimale : d min

Le nombre maximum d’erreurs détectables est d min  1

Le code C est susceptible de corriger t  d min  1 / 2


erreurs.

D’où l’intérêt d’avoir dmin la plus élevée possible


Codage de la parole LCPTS B. BOUDRAA
Matrice de contrôle
• G = [ Ik , P ] matrice génératrice
• Tout code en bloc admet une matrice de test de parité H telle que
G.HT = 0
• On définit la matrice de contrôle de parité H par :
H=[PT,In-k]
• H sert à vérifier si un mot code C a été généré par G. En effet, il
a été démontré qu’un message n’est un mot code du code en
blocs linéaires C(n,k), que si et seulement si :
C. HT =0
• Soit C transmis sur un canal bruité et soit R le mot correspondant
reçu. On a alors:
R= C + E, E étant le vecteur erreur.

Codage de la parole LCPTS B. BOUDRAA


Notion de syndrome
(décodage par syndrome)

• Le syndrome du mot reçu R est le vecteur S


défini par :

S ( R)  R  H T

• Le syndrome est nul si et seulement si R C.

Codage de la parole LCPTS B. BOUDRAA


EXEMPLE : code Hamming (7,4)
• Soit un mot d= 1101 et la matrice génératrice :
1 0 0 0 1 0 1
 
0 1 0 0 1 1 1
G
0 0 1 0 1 1 0
 
0 1 
 0 0 1 0 1

• Le mot de code est :


1 0 0 0 1 0 1
 
0 1 0 0 1 1 1
mc  1101     1101001
0 0 1 0 1 1 0
 
0 0 0 1 0 1 1

Codage de la parole LCPTS B. BOUDRAA


• La matrice vérificatrice de parité H (matrice de
contrôle) :
1 0 0 0 1 0 1
 
0 1 0 0 1 1 1
G  [ I 4 P]  
0 0 1 0 1 1 0
 
0 0 0 1 0 1 1
1 0 1
1 1 1 0 1 0 0 1 1
  
1

0 1 1 1 0 1 0 1 1 0
H  [ P I3 ]  
T
H T  0 
1 1 0 1 0 0 1 1 1
  1 0 0
 
  0 1 0
0 0 1

Codage de la parole LCPTS B. BOUDRAA


• Calcul du syndrome S :
1 0 1
1 1 1
 
1 1 0
S  (1101001) 0 1

1  (000)
1 0 0
 
0 1 0
0 0 1

Codage de la parole LCPTS B. BOUDRAA


Cas d’une erreur

• Si le code reçu est R = E + C alors :


S(R)=(E + C)*HT=E*HT+C*HT=E*HT
Donc le syndrome ne dépend que de l’erreur.

• Chaque ligne de HT (colonne de H) est le syndrome


d'une erreur simple.

• On construit un tableau standard pour corriger les


erreurs.

Codage de la parole LCPTS B. BOUDRAA


EXEMPLE 2
• Soit le code (5 , 2) défini par :
1 1 1 0 0
1 0 1 1 0 On a donc H  1 0 0 1 0
G 
 
0 1 0 0 1
 0 1 1 0 1 

• 5 erreurs détectables ( correspondant à 5


colonnes de H) avec leurs syndromes associés.
• On construit le tableau suivant :

Codage de la parole LCPTS B. BOUDRAA


1 1 0
Erreur Syndrome Bit 1 0 1
 
probable erroné H  1
T
0 0
OOOOO OOO Pas  
0 1 0
d’erreur 0 0 1
1OOOO IIO Bit 1
Emission:
O1OOO IOI Bit 2
Soit d= (10)  C= (10110)
OO1OO IOO Bit 3 Réception
Si R= (10100)  S= (010)
OOO1O OIO Bit 4
La table donne E= (00010)
OOOO1 OOI Bit 5 Correction:
C = R  E = (10100)  (00010) = (10110)

Note: S pour une erreur sur le 4ème bit correspond à la ligne 4 de HT

Codage de la parole LCPTS B. BOUDRAA


Code linéaire sous forme polynomiale
Définitions
Tout vecteur, ou un alphabet (un ensemble de codes ) peut être présenté sous une forme
polynômiale où les opérations sont binaires :

C=[C0, C1, C2, C3, … Cn-1]  C(X) = C0 + C1X + … + Cn-1Xn-1


Exemple: C = [1101] peut être représenté par : C(X) = 1 + X + X3

Les coefficients et chaque puissance de X dans le polynôme représentent un décalage


temporel d'un bit. Par conséquent, la multiplication du polynôme par X peut être
considérée comme un décalage vers la droite.

Somme polynomiale : somme deux à deux de chaque coefficient .


Exemple : <x3+1> + <x4+x2+1> = <x4+x3+x2>  C= [1001] + [10101] =
[11100]

Produit polynomiale : c’est un produit vectoriel


Exemple : <x3+1> . <x+1> = <x4+x3+x+1>  C= [1001] . [11] = [11011]

Division polynomiale
Exemple : <x4+x2+x+1> / <x+1> = <x3+ x2+1>  C= [10111] / [11] = [1101]
Codage de la parole LCPTS B. BOUDRAA
Code linéaire sous forme polynomiale
Définition :
Un code polynômial est un code linéaire systématique dont chacun des mots du
code est un multiple du polynôme générateur (noté G(x)).
(les lignes de la matrice génératrice sont engendrées par le polynôme
générateur)
Le degré du polynôme G(x) définit la longueur du champ de contrôle
d'erreur.

Le mot de code C(X) d'un code linéaire polynomiale (n,k) est obtenu grâce à
son polynôme générateur G(X) associé au mot de données D(X). On a :

C(X) = D(X) . Xn-k + R(x),

R(x) est le reste de la division de D(X).Xn-k par le polynôme générateur G(X)


Donc
R(X) = (D(X) . Xn-k) mod G(X)
Codage de la parole LCPTS B. BOUDRAA
Code linéaire sous forme polynomiale

Formation d’un code polynomial

 Mettre le message à coder sous forme polynomiale D(X)


 Former xn  k  D(x)
 Diviser xn  k  D(x) par G(x) pour avoir le reste R(x) de cette division
 Former C(x)  R(x)  xn  k  D(x)
 Mettre C(x) sous forme binaire

Finalement nous aurons

C(x)  xn  k  D(x) + xn  k  D(x) modulo G(X)

Codage de la parole LCPTS B. BOUDRAA


Code linéaire sous forme polynomiale

Exemple de codage
Avec n  12, k  8 et le polynôme générateur étant G(x)  x4  x3  1 (équivaut
à 11001, forme binaire du polynôme générateur)

Soit D = 10011010 de forme polynomiale  D(x)  x7  x4  x3  x

xn  k  D(x)  x11  x8  x7  x5 (équivaut à 100110100000)

xn  k  D(x)  G(x)  un reste R(x)  x3  x2  x  1 (équivaut à 1111)

C(x)  R(x)  xn  k  D(x)  C(x)   x11  x8  x7  x5  x3  x2  x  1


C(x) équivaut à 100110101111

D(x) décalé à gauche de n  k plus R(x)

Codage de la parole LCPTS B. BOUDRAA


Code linéaire sous forme polynomiale
Décodage polynômiale

 Mettre le message reçu sous forme polynomiale


 Diviser le code reçu C’(X) par G(X) pour obtenir le syndrome S(x) (reste de
cette division)
 Si S(x)  0, le message est correct sinon il est erroné

Décodage du même exemple


n  12, k  8, G(x)  x4  x3  1. Message reçu  100110101111 (celui qu’on a
envoyé précédemment) :

C’(x)  x11  x8  x7  x5  x3  x2  x  1

C’(x)  G(x)  un reste S(x)  0 par la division polynomiale ci-dessous (c’est


normal aucune erreur n’a été introduite dans C(x))
Mettez une erreur dans un seul bit de C(X) et refaite le décodage ….!
Codage de la parole LCPTS B. BOUDRAA
Code linéaire sous forme polynomiale

Exemples de Codes linéaires polynômiaux:

L'avis V41 du CCITT conseille l'utilisation de codes polynômiaux


(de longueurs n = 260, 500, 980 ou 3860 bits) avec le polynôme
générateur :
g(x) = x16 + x12 + x5 + 1.

 Le polynôme CRC-16 (Cyclic redundancy check) est utilisé par


le protocole HDLC :
g(x) = x16 + x15 + x2+ 1.

Le polynôme suivant est utilisé par Ethernet :


g(x) = x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+1.

Codage de la parole LCPTS B. BOUDRAA


Codes binaires cycliques
Les codes cycliques sont une sous-classe spéciale des codes de bloc linéaires
utilisant une forme polynomiale avec une propriété supplémentaire, à savoir :

 Si un mot de code est décalé cycliquement, le résultat est un autre mot de


code.

Un code est dit cyclique si:


Pour un vecteur code V=(v0, v1, v2,….vn-1) de C
V(1) =(vn-1, v0, v1…, vn-2)
est aussi un vecteur code de C.

On peut généraliser:
V(i) =(vn-i, vn-i+1, …,v0, v1…, vn-i-1) est aussi un vecteur code de C.

 Le code Reed Solomon utilisé dans la station spatiale Voyager est un


exemple de code cyclique

Codage de la parole LCPTS B. BOUDRAA


Codes binaires cycliques
On traite les éléments de chaque vecteur code comme les
coefficients 0 ou 1 d’un polynôme de degré (n-1).

Exemple:
V(x)= v0 + v1x + v2x²+ …. +vn-1xn-1

On peut aussi écrire:

V(i) (x) = vn-i + vn-i+1 x + v2 x²+ ….+v0 xi+… +vn-1-i xn-1

On montre que V(i) (x) est le reste d’une division de xiV(i) (x) par
xn +1, c-à-d:

xiV(i) (x) = q(x)(xn +1) + V(i) (x)


Codage de la parole LCPTS B. BOUDRAA
Codes binaires cycliques
Théorème:
Si g(x) est un polynôme de degré (n-k) facteur (diviseur) de xn +1, alors g(x)
génère un code polynomial cyclique V(x) tel que , pour un vecteur data D=(d0, d1,
d2, …, dk-1) on a :
V(x) = D(x) g(x) (multiplication polynomiale)

g(x) est appelé polynôme générateur du code cyclique.

Un code peut aussi être généré sous la forme systématique suivante:

V = (r0, r1, r2, …, r n-k-1 d0, d1, ….d k-1 )


par une division polynomiale, où :
r(x) = r0 + r1 x + r2 x² +….+ r n-k-1 x n-k-1
est le reste de la division de xn-k D(x) par g(x)
xn-k D(x) = q(x)g(x) + r(x)
Le code polynomial est donné par:
V (x) = r(x) + xn-k D(x)
r(x) est un polynôme de vérification de parité pour le message D(x).
Codage de la parole LCPTS B. BOUDRAA
EXEMPLE

Le polynôme générateur d’un code cyclique C(7,4) est g(x)=1+x+x3.


Donner les 16 mots codes de ce C(7,4) dans les cas suivants:
a. en formant les codes polynômes utilisant V(x)= D(x) g(x)
(multiplication polynômiale)
b. en utilisant la forme systématique donnée par :
V = (r0, r1, r2, …, r n-k-1 d0, d1, ….d k-1 ) & V (x) = r(x) + xn-k D(x)
(division polynômiale)

Solution:
a. Soit par exemple D= (1010)=(d0, d1, d2, d3)
D(x)=1+x 2
V(x)= D(x)g(x)=(1+x 2 )(1+x+x3)I = 1+x+x 2+x5
D’où le mot code V=(1 1 1 0 0 1 0)
Il en sera de même pour les autres données (voir tableau)
Codage de la parole LCPTS B. BOUDRAA
b- Dans la forme systématique, les 3 premiers bits correspondent aux
bits de parité et les 4 derniers bits correspondent aux données
Les bits de parité s’obtiennent à partir de:
xn-k D(x)/g(x) = q(x) + r(x)/g(x)

Pour un vecteur message D=(1110), le polynôme message est :


D(x)=1+x+x2
x3 D(x)=x3+x4+x5

la division x3 D(x)/g(x) devient:


(x3+x4+x5) / (1+x+x3) et donne un quotient q(x)= x+x2 et un reste
r(x) = x. D’où : V= (0 1 0 1 1 1 0)
Il en sera de même pour les autres données (voir tableau)

Note: Il s’agit des mêmes codes redistribués

Codage de la parole LCPTS B. BOUDRAA


Mots codes générés par g(x) = 1+x+x3
Message C(7,4) utilisant C(7,4) utilisant
xn-k D(x)/g(x) = q(x) + r(x)/g(x) Et
V(x)=D(x)g(x) V = (r0, r1, r2, …, r n-k-1 d0, d1, …. d k-1 )
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 1 1 0 1 1 0 1 0 0 0 1
0 0 1 0 0 0 1 1 0 1 0 1 1 1 0 0 1 0
0 0 1 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1
0 1 0 0 0 1 1 0 1 0 0 0 1 1 0 1 0 0
0 1 0 1 0 1 1 1 0 0 1 1 1 0 0 1 0 1
0 1 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0
0 1 1 1 0 1 0 0 0 1 1 0 0 1 0 1 1 1
1 0 0 0 1 1 0 1 0 0 0 1 1 0 1 0 0 0
1 0 0 1 1 1 0 0 1 0 1 0 1 1 1 0 0 1
1 0 1 0 1 1 1 0 0 1 0 0 0 1 1 0 1 0
1 0 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1
1 1 0 0 1 0 1 1 1 0 0 1 0 1 1 1 0 0
1 1 0 1 1 0 1 0 0 0
Codage de la parole
1 0 0 0
LCPTS
1 1 0 1 B. BOUDRAA
1 1 1 0 1 0 0 0 1 1 0 0 1 0 1 1 1 0
Codes binaires cycliques linéaire

Un code cyclique est dit linéaire si la somme de 2 codes


quelconques donne un autre code cyclique

Exemple: Exercice: vérifier que le code


000000
C1= 0 1 0 0 0 1 1 100100, 010010, 001001,
C2= 1 1 0 1 0 0 0 110110, 011011, 101101
111111
+
= Est un code cyclique linéaire
1 0 0 1 0 1 1

Codage de la parole LCPTS B. BOUDRAA


Calcul du syndrome, détection et correction d’erreur
Le mot reçu R peut être différent du mot transmis. Le récepteur doit d’abord
calculer le syndrome S(x) du mot reçu, en effectuant la division de R(x) par g(x):

R(x)/g(x) = P(x) + S(x)/g(x)


S(x) est de degré ≤ n-k-1. Si E(x) est l’erreur introduite par le canal, alors:

R(x) = V(x) + E(x)


et
R(x)/g(x) = V(x)/g(x) + E(x)/g(x)
Or
V(x) = D(x)g(x) (D(x) étant le polynôme message).
Donc
E(x) = [P(x)+ D(x)]g(x) + S(x)

c-à-d , le syndrôme de R(x) est le reste de la division de la forme de l’erreur par


le polynôme générateur. S(x) contient donc l’information sur la forme d’erreur .

Codage de la parole LCPTS B. BOUDRAA


Proposition (Matrice de contrôle d’un code systématique):

Soit C un code cyclique de polynôme générateur g(X) = g0 + g1X + ... + gn−k Xn−k
alors (théorème fondamental) une matrice génératrice G de ce code est :

g0 0 … 0
g1 g0 … 0
. g1 … …
gn-k … … 0
0 gn-k … g0
Et une matrice de contrôle H associée
0 0 … g1 à cette matrice génératrice :
… … … .
0 0 … gn-k bn bn-1 … b0 0 … 0
0 bn … b1 b0 … 0
… 0 … …
On doit avoir g(X). h(X) = Xn +1 ≡ 0 … … … .
(dualité) 0 0 … bn bn-1 … b0

Codage de la parole LCPTS B. BOUDRAA


Encodage utilisant un registre à décalage à (n-k) bits
On utilise division xn-k D(x)/g(x) qui peut être effectuée à l’aide d’un registre à décalage
à contre réaction (feedback).
Quotient sériel Feedback avant décalage
Gate
i i i
r0 r1 r2
r0 + r1 r2 +
r0
0
r1
0
r2
0 2
parité V(x)
Message D(x) d’entrée Sortie
1
mot code

Schéma d’un encodeur pour un code cyclique (7,4) généré par g(x)= (1+x+x3)
n=7, k=4, g0=1, g1=1, g2=0, g3=1

Cas du message 0101:


Au début, gate est ouverte et le switch est sur la position 1. Les bits (d0,d1,d2, d3)
sont décalés dans le registre (d3 d’abord) et transmis aussi sur le canal. Lorsque les 4
bits ont été tous décalés vers le registre, celui-ci donne les bits de parité (r0, r1, r2).
gate se met à 0 et le switch en position 2. Les bits du registre sont ensuite décalés
dans le canal. Le mot code (r0, r1, r2, d0, d1, d2, d3) est ainsi généré et transmis.
Codage de la parole LCPTS B. BOUDRAA
Table d’encodage du message (0101)
r0i = d, r1i = r00+d, r2i = r10. d est un bit du message.
Shift déplace les bits d’entrée dans les registres et vers les sorties.
Le mot code pour (0101) sera (0100101).
Input Register Décalage Register
Bit Iputs outputs

d r0i r1i r2i r00 r10 r20


- 0 0 0 0 0 0
1 1 1 0  Shift 1 1 1 0
0 0 1 1  Shift 2 0 1 1
1 1 1 1  Shift 3 1 1 1
0 0 1 1  Shift 4 0 1 0

Exercice : vérifier cette table.

Codage de la parole LCPTS B. BOUDRAA


Gate 2 Feedback avant
décalage

g1 X
g2 X gn-k-1 X

+ S0 + S1 + + Sn-k-1 Gate 1

Syndrome
Vecteur reçu S(x)
R(x)

La division exigée pour calculer le syndrome S(x) est implantée en utilisant le registre
à décalage de la figure.
1. Le registre est d’abord initialisé; Gate 1= OFF & Gate 2 = ON
2. Lorsque R(x) est entièrement décalé dans le registre, le contenu final correspond au
syndrome S(x)
3. Gate 1= 0N & Gate 2 = OFF. S(x) est ensuite décalé vers la sortie.
4. Le circuit est alors prêt pour traiter le vecteur reçu suivant.

Codage de la parole LCPTS B. BOUDRAA


• Quelques algorithmes performants de codage en
blocs sont :

– BCH : Bose, Chaudhuri, Hocquenghem


– Reed-Muller
– Reed-Solomon

Codage de la parole LCPTS B. BOUDRAA


Codes convolutifs
Décodage par l’algorithme de viterbi

 Les codes convolutifs sont les codes les plus utilisés dans les
systèmes de télécommunications fixes et mobiles.

 Théoriquement, ils ont les mêmes caractéristiques que les codes en


blocs sauf pour la valeur de leur dimension et leur longueur.

 Les codes convolutifs ont les mêmes caractéristiques que les


codes en bloc sauf qu’ils s’appliquent sur des séquences infinies de
symboles d’information et génèrent des séquences infinies de
symboles codés.

Codage de la parole LCPTS B. BOUDRAA


Codes convolutifs
• Pour ces codes, chaque bloc de n éléments binaires en sortie dépend
non seulement des k éléments binaires présents en entrée mais aussi
des m blocs de k éléments binaires précédents.

• υ = m+1 s’appelle la longueur de contrainte.

• Le taux de codage est R= k/n, souvent k=1

• Le codage se fait avec des registres à décalage et des ou exclusif.

• Pour l’obtention de bonnes performances il suffit que m soit grand

Codage de la parole LCPTS B. BOUDRAA


L’émission des données dans un codeur convolutif se fait
avec un registre à décalage et des ou exclusifs

Exemple: Codeur convolutif non systématique :


R = 1/2 ; m = 2 ; k = 1 ; n = 2, υ =3

s1 (i) = e(i)+e(i-1)+e(i-2)
xor A chaque pas de temps j :
 On combine les valeurs de l’entrée et de
la mémoire pour calculer les sorties
e(i) e(i-1) e(i- 2)
 Chaque registre à décalage est mis à
jour par la valeur qui figure à son entrée
xor
s2 (i) = e(i)+e(i-2)
Dans cet exemple à un é.b d’entrée
correspond 2 é.b de sortie qui sont
déterminés par S1 et S2
Codage de la parole LCPTS B. BOUDRAA
s1(i)= e(i)+e(i-1)+e(i-2) s2(i)= e(i)+e(i-2)
Soit en transformée en z :
S1(z) = (1+ z−1 + z−2 ) E(z) S2(z) = (1+ z−2 ) E(z)
Equivalent à
S1(D)=(1+D+D²)E(D) et S2(D)= (1+D²) E(D)
D’où les 2 Polynômes générateurs: 1+D+D² & 1+D² , soit (7,5) en octal.
La matrice génératrice d’écrit aussi (1+D+D² 1+D²)
Table de fonctionnement:

ek ek-1 ek-2 s1 s2 Etats futurs


0 0 0 0 0 0 0
1 0 0 1 1 1 0
0 0 1 1 1 0 0
1 0 1 0 0 1 0
0 1 0 1 0 0 1
1 1 0 0 1 1 1
0 1 1 0 1 0 1
1 1 1 1 0 1 1

Codage de la parole LCPTS B. BOUDRAA


Représentation de l’émetteur sous la forme d ’un automate

Automate simplifié
e s s 00
1 2 00
0 0 0 00 11

11
e s1 s2 01 00
01
1 1 1
10
01 10
00 10 10
01
11 11
10
e s s
e s s 1 2
1 2 1 0 0 e s s
0 1 1 1 2
es s 1 0 1
1 2
0 1 0

01 11
e s s
1 2
0 0 1
e s1 s2
Codage de la parole LCPTS 1 1 0 B. BOUDRAA
Treillis de l’algorithme de décodage de Viterbi
ek vaut 0 ek vaut 1
s1 s2
0 0
00 00 00 00
00
11

10 10 11 10 10
10
10

01 01 01 01
01 00
01

01
11 11 11 11
11
10
temps

Codage de la parole LCPTS B. BOUDRAA


Représentation graphique en arbre 00
00 00
00 11
Instant j 00 10
00 01
11 01
10 10
00 11
00 11
01 00
01 00
11 10
10 10
10 01
11 01
11
00 00
11 00
00 11
01 10
Instant j+1 01 01
00 01
10 10
11 11
10 11
10 00
01 00
10 10
11 10
01 01
11 01
11
t=j t = j+1 t = j+2 t = j+3 t = j+4

Codage de la parole LCPTS B. BOUDRAA


 La distance minimale est la plus petite distance entre des chemins partant du
même point et y revenant. En pratique, on considère le point de départ 00

Résumé: Représentations des codes convolutifs


 Représentations numériques :
 Transformée en D ;
 Matrice de transfert ;

 Représentations graphiques :
 Diagramme d’état ;
 Arbre ;
 Treillis.

Codage de la parole LCPTS B. BOUDRAA


Décodage convolutif

 La principale technique de décodage des codes convolutifs est


le décodage de Viterbi
Elle consiste à trouver un chemin particulier (le message
transmis), dans un graphe orienté où on assigne aux branches des
métriques ou valeurs de vraisemblance entre les données reçues et
les données qui auraient pu être transmises.
 L’objectif général du décodeur se résume donc à déterminer
avec la plus grande fiabilité et le minimum d’efforts le chemin
de métrique minimale. Ce chemin est la séquence décodée.
 Exemple: On code et on transmet le message 1001. Donner le code émis. Si le
code reçu est de 11001111, corriger ce code par l’algorithme de Vitterbi

Codage de la parole LCPTS B. BOUDRAA


Entrée e : 1, 0, 0, 1
États : 00 10 01 00 10
Émis : 11,10,11,11 Émis : 11 10 11 11
s1s2 Reçus : 11 00 11 11
Reçus : 11,00,11,11
2 2 0 2 2 1 2 2
00 00
00 00 00 00 00
00 00
11
11 0 11 2 11 0 11 0
11
01 00
01 0
4 11 2 1
10 10 0 10
10 01 10

01 1 1 10 1
11 11 10 10
10
2 3
01 1 01
Couleur du chemin: RNNR
soit 11 10 11 11, correspondant au 01 1 01 1 01 1
code émis
1 2 1 3
1
D’où la donnée reçue corrigée: 1001 11 10 10
11

Codage de la parole LCPTS B. BOUDRAA


Un cas particulièrement intéressant est celui de la transformation d’un code
convolutif non récursif non systématique (NRNSC) de rendement k/(k+1) en un
code récursif systématique (RSC). Prenons l’exemple d’un code NRNSC de
rendement ½. Il est défini par la donnée de ses deux polynômes générateurs
g11(x)= g1(x) et
g12(x)= g2(x), qui forment la matrice :

G [ g (x) g (x)] 1 2 =

La transformation en code RSC correspond à considérer le code défini par la


matrice génératrice suivante :
()
()
=
gx
Ggx
1
12
Exemple 2 : Soit le code convolutif NRNSC de rendement ½, de longueur de
contrainte L=3 et de polynômes générateurs (7,5). Ses polynômes s’écrivent :
g1(x)=1+x+x2 et g2(x)=1+x2. Son codeur possède la structure
suivante :
Codage de la parole LCPTS B. BOUDRAA
Correction des codes convolutionnels
Erreurs de
transmission
Message Codeur de
à coder l’émetteur
Message
reçu

Message Comparaison
Codeur du
reconstitué récepteur
Critère :
réduction de l ’écart
entre le message
reçu et le message
reconstitué
Algorithme de
génération
de message

Codage de la parole LCPTS B. BOUDRAA

Vous aimerez peut-être aussi