Impl´ementation et ´etude d’un turbo-code
Sujet propos´e par Jean-Pierre Tillich
Distribu´e le 12 novembre 2010
1 Quelques mots sur le sujet
Le but de ce projet est de r´ealiser et de comprendre comment fonctionne un code correcteur d’erreurs
tr`es proche des codes correcteurs qui sont standardis´es actuellement, c’est `a dire un turbo-code. Comme
cela sera vu dans le cours 8, les codes convolutifs agissent comme d’excellents codes r´educteurs de bruit
sur le canal, mais souffrent du fait que si l’on veut r´ealiser le d´ecodage au maximum de vraisemblance
avec l’algorithme de Viterbi, la m´emoire du code doit rester petite : typiquement des m´emoires de l’ordre
de 3 7 sont usuelles, et de l’ordre de 10 15 tr`es exceptionnellement utilis´ees. Le fait que la probabilit´e
d’erreur par bit apr`es d´ecodage reste ´elev´ee, typiquement de l’ordre de 103104font que l’on est
oblig´e d’utiliser d’autres moyens de codage. Jusqu’au d´ebut des ann´ees 1990, la solution la plus r´epandue
consistait `a concat´ener un code convolutif avec un code de Reed-Solomon (voir cours 7). Berrou et
Glavieux ont propos´e en 1993 une solution `a la fois de faible complexit´e et beaucoup plus performante
en termes de probabilit´e d’erreur apr`es d´ecodage : les turbo-codes. Cette solution consiste `a combiner de
mani`ere astucieuse deux codes convolutifs de mani`ere `a obtenir des codes :
(i) dont la distance minimale n’est plus born´ee par une constante quand la longueur augmente,
(ii) qui peuvent ˆetre d´ecod´es en d´ecodant les deux codes convolutifs de base, et en combinant de mani`ere
ad´equate le r´esultat des deux d´ecodages au moyen d’une proc´edure it´erative.
Avec un choix convenable des codes convolutifs, les performances peuvent ˆetre excellentes.
Dans ce projet, il s’agira essentiellement d’effectuer la programmation d’un turbo-code et de r´epondre
`a un certain nombre de questions d’approfondissement (ou de compr´ehension) donn´ees ici.
2 Une description d’un certain type de code convolutif
Par souci de simplification, nous allons nous int´eresser qu’`a des turbo-codes construits en utilisant
des codeurs convolutifs de type (2,1) (il est `a signaler que cela concerne bon nombre de turbo-codes
utilis´es en pratique, comme par exemple les turbo-codes mis en oeuvre dans la 3G).
efinition 1 (Codeur convolutif de type (2,1) de m´emoire m)1. Un codeur convolutif de type
(2,1) de m´emoire mest caract´eris´e par la donn´ee de trois mots binaires de longueur m+ 1,
a1= (a1
0, . . . , a1
m),a2= (a2
0, . . . , a2
m)et b= (b0, . . . , bm).
2. Il associe `a une s´equence d’information d’une taille arbitraire K:u= (u1, . . . , uK)∈ {0,1}Kdeux
s´equences x1= (x1
1, . . . , x1
K)∈ {0,1}Ket x2= (x2
1, . . . , x2
K)∈ {0,1}K.
3. Celles-ci sont obtenues en calculant Kvecteurs d’“´etat” auxiliaires s1= (s1,1, . . . , s1,m),...,sK=
(sK,1, . . . , sK,m)appartenant `a {0,1}mvia les formules (on effectue les sommes et les produits dans
1
le corps `a deux ´el´ements)
s0= 0 . . . 0
| {z }
m
si= (bmui+
m1
X
j=0
bjsi1,mj, si1,1, . . . , si1,m1)pour i1.
En d’autres termes siest obtenu au moyen de si1et de uien d´ecalant les coordonn´ees de si1
vers la droite, et en prenant pour premi`ere coordonn´ee une certaine combinaison lin´eaire fixe des
coordonn´ees de si1et de ui.
4. Les s´equences x1et x2sont alors obtenues par les formules
x1
i=a1
mui+
m1
X
j=0
a1
jsi1,mj
x2
i=a2
mui+
m1
X
j=0
a2
jsi1,mj
Il sera commode d’introduire la fonction
e:{0,1}×{0,1}m→ {0,1}m
(u, s1, . . . , sm)7→ (bmu+
m1
X
j=0
bjsmj, s1, . . . , sm1)
En d’autres termes
si=e(ui,si1).
Un tel codeur peut ˆetre r´ealis´e tr`es simplement en prenant un registre `a d´ecalage de taille mstockant les
coordonn´ees de siau temps i. Dans le cas des turbo-codes nous serons plus particuli`erement ineress´e
par des codeurs syst´ematiques et r´ecursifs. Ils sont d´efinis par :
efinition 2 (Codeur convolutif de type (2,1) syst´ematique) Un tel codeur correspond au choix
a1= (0,...,0,1), c’est `a dire a1
i= 0 pour i∈ {0, . . . , m 1}et a1
m= 1. En d’autres termes, la s´equence
d’entr´ee use retrouve copi´ee int´egralement dans la s´equence de sortie x1:x1
i=uipour tout istrictement
positif. On appelle dans ce cas la suite x2la redondance du codeur.
Par la suite on fera toujours l’hypoth`ese que bm= 1. Pour expliciter l’algorithme de d´ecodage des
turbo-codes, il sera int´eressant de consid´erer les fonctions suivantes d´efinies pour un codeur convolutif
syst´ematique de type (2,1) de m´emoire m:
u:{0,1}m× {0,1}m→ {0,1,∞}
r:{0,1}m× {0,1}m→ {0,1,∞}
u(s, s0) est d´efini comme ´egal `a l’infini si et seulement il n’existe pas de valeur de x∈ {0,1}telle que
e(x, s) = s0et est ´egale `a l’unique valeur de xtelle que e(x, s) = s0sinon. r(s,s0) est infini si et seulement
si u(s,s0) est infini. Dans le cas contraire on a
r(s,s0) = a2
mu(s,s0) +
m1
X
j=0
a2
jsmj
(avec s= (s1, . . . , sm)).
efinition 3 (Codeur convolutif de type (2,1) ecursif) Un codeur de type (2,1) est dit r´ecursif
si au moins un des bipour idans {0, . . . , m 1}est non nul.
2
Question 1 Consid´erer une s´equence d’information ude taille arbitraire ne comportant qu’un seul 1.
Que peut-on dire des poids des sorties x1et x2dans le cas d’un codeur non r´ecursif et dans le cas d’un
code ecursif ?
3 Un turbo-code
Voyons maintenant plus pr´ecis´ement ce qu’est un turbo-code. Dans la litt´erature existent de nom-
breuses variantes du scema de base de Berrou et Glavieux. Ce que nous appelons turbo-code dans cette
section porte g´en´eralement dans la litt´erature le nom de turbo-code parall`ele. Cela correspond au
scema de codage suivant.
efinition 4 Le turbo-code de longueur d’information kassoci´e `a deux codages convolutifs syst´ematiques
u(u, r1(u)) et u(u, r2(u)) 1et `a une permutation πde {1,2, . . . , k}est l’ensemble des mots de la
forme
(u, r1(u), r2(uπ),
o`u u= (ui)1ild´esigne un mot binaire de longueur ket uπd´esigne le vecteur (uπ(i))1ik.
En d’autres termes le codage consiste `a prendre la sortie d’un premier code convolutif (que l’on
suppose syst´ematique), puis `a faire rentrer la mˆeme s´equence d’entr´ee permut´ee par πdans un deuxi`eme
codeur convolutif syst´ematique, mais `a ne rajouter que la sortie du deuxi`eme code correspondant `a la
redondance.
Question 2 Pouvez-vous donner une borne sur la distance minimale d’un turbo-code utilisant deux
codeurs de type (2,1) non r´ecursifs de m´emoire m?
4 D´ecodage du turbo-code
Si l’on sait d´ecoder un code convolutif au maximum de vraisemblance avec une complexit´e r´eduite,
pour peu que la m´emoire du codeur convolutif soit petite, il n’en va pas de mˆeme d’un turbo-code : en effet,
on ne sait pas d´ecoder de tels codes au maximum de vraisemblance avec une complexit´e raisonnable, et
ce mˆeme si la m´emoire des deux codes convolutifs constituants est petite. Cependant, on peut les d´ecoder
de mani`ere sous-optimale avec un algorithme de d´ecodage it´eratif. Une it´eration consiste principalement
`a d´ecoder avec l’algorithme de Viterbi chaque code convolutif s´epar´ement, puis `a donner le r´esultat
de ce d´ecodage `a l’autre code convolutif pour l’it´eration suivante. Nous allons maintenant donner cet
algorithme de d´ecodage pour le canal binaire sym´etrique. En substance, chaque d´ecodage de type Viterbi
consiste `a appliquer un algorithme dont les entr´ees et sorties correspondent `a la description donn´ee dans
l’algorithme 3.
L’algorithme it´eratif consiste ici alors `a effectuer l’algorithme 2
Avec la description d’un code convolutif vue pr´ec´edemment, la description pr´ecise de l’algorithme
SOVA devient
Question 3 A la premi`ere it´eration, voyez-vous un lien entre les quantit´es f[i][b]et certaines quantit´es
calcul´ees par l’algorithme de Viterbi ?
Question 4 Impl´ementer cet algorithme pour plusieurs choix de codes convolutifs de type (2,1), plu-
sieurs valeurs de permutation et des valeurs de kcomprises entre 500 et 10000. Evaluer les performances
pour des valeurs de probabilit´e d’erreur sur le canal binaire sym´etrique variant entre p= 0.05 et p= 0.15.
Voyez-vous une diff´erence entre utiliser des codeurs r´ecursifs et non r´ecursifs ? Pouvez-vous donner une
explication de ce ph´enom`ene ?
1. Ici ri(u) d´esigne la redondance correspondant `a l’entr´ee upour le i-`eme codeur convolutif.
3
Algorithme 1 Squelette du d´ecodage de type Viterbi (ou SOVA dans la litt´erature pour Soft Output
Viterbi Algorithm) SOVA(u,e,r)
INPUT :
1. ula s´equence d’information re¸cue par le canal,
2. e= (e[i][b])1ik
0b1
une information de fiabilit´e pour chaque bit d’information, pour chaque bit
ion dispose de deux quantit´es, e[i][0] et e[i][1], si la deuxi`eme quantit´e est plus grande que la
premi`ere c’est une indication qu’il est plus vraisemblable que uisoit ´egal `a 0, sinon c’est la valeur
de 1 qui est plus vraisemblable.
3. rla redondance telle qu’elle a ´et´e re¸cue par le canal
OUTPUT :
e0une nouvelle information de fiabilit´e pour chaque bit d’information.
Algorithme 2 Algorithme de d´ecodage it´eratif du turbo-code
INPUT: -u= (u1, . . . , uk) la s´equence d’information re¸cue,
-r1la redondance re¸cue pour le premier code convolutif,
-r2le redondance re¸cue pour le second code convolutif.
-πune permutation de {1, . . . , k}.
OUTPUT: ˆ
u= (ˆu1,...,ˆuk) la s´equence d’information d´ecod´ee
{Initialisation (on met `a z´ero toutes les entr´ees de e1et e2)}
e10
e20
{It´erations. Le nombre d’it´erations Nest compris entre 5 et 20 environ en pratique.}
for t= 1 to Ndo
e2SOVA(u,e1
π1,r1)
e1SOVA(uπ,e2
π,r2)
{Etape finale (on note δa=bla fonction de Kronecker)}
for i= 1 to kdo
if δui=1 +e1[π1(i)][0] + e2[i][0] δui=0 +e1[π1(i)][1] + e2[i][1] then
ˆui0
else
ˆui1
4
Algorithme 3 Squelette du d´ecodage de type Viterbi (ou SOVA dans la litt´erature pour Soft Output
Viterbi Algorithm) SOVA(u,e,r)
INPUT :
1. u= (u1, . . . , uk) la s´equence d’information re¸cue par le canal,
2. e= (e[i][b])1ik
0b1
une information de fiabilit´e pour chaque bit d’information, pour chaque bit
ion dispose de deux quantit´es, e[i][0] et e[i][1], si la deuxi`eme quantit´e est plus grande que la
premi`ere c’est une indication qu’il est plus vraisemblable que uisoit ´egal `a 0, sinon c’est la valeur
de 1 qui est plus vraisemblable.
3. r= (r1, . . . , rk) la redondance re¸cue par le canal
OUTPUT :
e0une nouvelle information de fiabilit´e pour chaque bit d’information.
{Initialisation de deux tableaux bidimensionnels, mest la m´emoire du codeur convolutif.}
for i= 0 to k1do
for a= 0 to 2m1do
f[i][a]← ∞
b[i][a]← ∞
f[0][0] 0
for a= 0 to 2m1do
b[k][a]0
{Calcul des valeurs finales des tableaux bet f(noter que l’on voit ici un mot binaire de longueur m
comme un nombre entier dans {0,1,...,2m1})}
for i= 1 to k1do
for b= 0 to 2m1do
f[i][b]min0a2m1:u(a,b)6=f[i1][a] + e[i][u(a, b)] + δui=1u(a,b)+δri=1r(a,b)
b[ki][b]min0a2m1:u(b,a)6=b[ki+ 1][a] + e[ki+ 1][u(b, a)] + δuki+1=1u(b,a)+
δrki+1=1r(b,a)
{Calcul du tableau de fiabilit´e e0}
for i= 1 to kdo
e0[i][0] = min0a,b2m1:u(a,b)=0 f[i1][a] + b[i][b] + δri=1r(a,b)
e0[i][1] = min0a,b2m1:u(a,b)=1 f[i1][a] + b[i][b] + δri=1r(a,b)
return e0
5
1 / 6 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !