You are on page 1of 10

L'algorithme de Viterbi

• Modélisation d'une transmission numérique


• Codage de canal
• Codage convolutif
• Algorithme de Viterbi
• Étude de la généricité de l'algorithme de Viterbi

Modélisation d'une transmission numérique


Dans les systèmes de transmission de données, la probabilité d'erreur est fonction du rapport
signal à bruit Eb/N0 du canal à l'entrée du récepteur. L'évolution des télécommunications
s'accompagne d'une demande toujours plus grande de la qualité de transmission. Il faut pour
cela diminuer le taux d'erreur et par conséquent accroître le rapport signal à bruit.
L'augmentation de la puissance du signal d'émission et/ou la diminution du facteur de bruit du
canal sont des solutions envisageables. Elles engendrent cependant des problèmes de coût ou
de technologie. L'autre solution est basée sur l'utilisation des codes correcteurs qui permettent
d'augmenter les performances de transmission tout en conservant le meilleurs compromis
possible entre la bande passante occupée et la puissance émise.

Un système de transmission numérique peut être schématisé de la façon suivante :

Figure 1: Communication numérique


Trois opérations sont à effectuer à l'émission.

• Le codage de source permet de minimiser la quantité d'information nécessaire pour la


transmission du message. La compression de données est un exemple de codage de
source.
• Le codage de canal sert à lutter contre les perturbations apportées par le support de la
transmission en remplaçant le message à transmettre par un message moins
vulnérable, en codant ce message par un code convolutif par exemple. L'algorithme de
Viterbi est une technique utilisée pour le décodage de ces codes.
• La modulation permet d'adapter les caractéristiques du signal à celles d'un canal. Les
modulations les plus couramment utilisées sont de type modulation de fréquence ou
modulation de phase.

Le canal définit le support de transmission. Son imperfection provoque l'apparition d'erreurs


sur le message transmis. Par exemple pour les communications par satellite le canal est
modélisé par un processus gaussien caractérisé par sa densité spectrale de bruit N0.

À la réception les opérations inverses sont à effectuer avant de fournir le message au


destinataire.

Codage de canal
Le principe de base du codage de canal consiste à remplacer le message à transmettre par un
message plus long qui contient de la redondance. Sans redondance, chaque donnée du
message est indispensable à la compréhension du message entier. Toute erreur dans une partie
du message est donc susceptible de changer la signification du message. L'objectif de la
redondance est de faire en sorte que les erreurs ne compromettent pas la compréhension
globale du message.

Du fait de l'adjonction d'une redondance, le message effectivement transmis est plus long. Un
code se caractérise par son rendement R. Si le codeur génère N bits à partir de K bits
d'information, le rendement R vaut K/N.

Les données générées par le codeur sont appelées des symboles. Lors du décodage, les
symboles reçus peuvent être des bits ou des mots binaires. Dans le premier cas, le système est
dit à décision dure, dans le second à décision douce. Un système à décision douce présente de
meilleures performances qu'un système à décision dure, mais au détriment d'une complexité
plus grande du décodeur de Viterbi.

Il y a deux grandes familles de code.

• le codage en bloc. Le message décomposé en blocs de K bits, est remplacé par un


bloc de N bits comprenant directement les K bits d'information et N-K bits de
redondance calculés à partir des bits d'information, le codage d'un bloc se faisant
indépendamment des précédents.

le codage convolutif. À K bits d'information, le codeur associe N bits codés, mais


contrairement au cas précédent. le codage d'un bloc de K bits dépend non seulement
de ce bloc mais également des blocs précédents.

Les codes convolutifs permettent une correction grossière en atteignant des taux d'erreurs de
10-6. Par contre les codes en blocs permettent une correction plus fine en atteignant pour
certaines applications des taux d'erreurs de 10-9. Ces deux codes sont souvent associés pour
obtenir de très bons taux d'erreurs. Le code en bloc constitue un complément idéal au code
convolutif dans les transmissions par satellite par exemple.

Codage convolutif
Chaque bloc de N éléments binaires transmis (aussi appelés symboles) dépend non seulement
du bloc de K éléments présents à son entrée mais aussi des m blocs précédents.

Le codeur est constitué de m registres à décalage de K éléments binaires. Une logique


combinatoire constituée de N générateurs linéaires de fonctions algébriques génère les blocs
de N éléments binaires fournis par le codeur.

figure ici

La longueur du registre à décalage (m+1) définit la longueur de contrainte. Ce paramètre


correspond au degré de mémoire introduit sur les bits de données. Plus ce paramètre est grand,
plus le code est puissant, mais plus le décodeur est complexe. La logique combinatoire est
caractérisée par ses polynômes générateurs qui explicitent les positions du registre à décalage
prises en compte dans le calcul des symboles. Les principaux codes utilisés sont de la forme
R=1/N (K=1). Ce type de code présente un rendement assez faible. Des codes de rendement
plus important en sont dérivés; ces codes sont dits poinçonnés car ils sont obtenus en
supprimant certains symboles générés par le code 1/N. La loi de dépoinçonnage se synthétise
par une matrice de dépoinçonnage.

Par exemple le code de rendement 3/4 est obtenu comme suit: soient A et B, les deux
symboles générés à partir d'une donnée D par un code standard R=1/2 et la matrice de
dépoinçonnage suivante:

A:110
B:101
"0" signifiant que le symbole n'est pas pris en compte.

Pour trois bits consécutifs "Dn, Dn+1, Dn+2", le codeur standard génère six symboles dont
seulement quatre sont transmis ( An, Bn, An+1, Bn+2).

Le pouvoir de correction d'un code convolutif est défini par son gain de codage par rapport à
un système non codé. Il dépend à la fois du type de canal de transmission et du type de
modulation utilisée. La figure suivante donne une courbe de gain de codage type:
Algorithme de Viterbi
Pour expliquer l'algorithme nous allons prendre un exemple simple:

• longueur de contrainte, K=3


• rendement : r = 1/N = 1/2
• polynômes générateurs : A = 7, B=5

Figure 4: Codeur convolutif, K =3

Il existe trois méthodes principales pour représenter les code convolutifs : diagramme en
arbre, en treillis et diagramme d'états.
La représentation en treillis est la plus utilisée car elle tient compte du temps et du fait que le
fonctionnement du codeur est périodique, c'est à dire que quelque soit l'état initial du codeur,
le motif se répète après m+1 décalages.

Figure 5: Treillis, K =3
Chaque noeud représente un état des bits In/In-1 et chaque arc une transition entre un état et
un autre. Une flèche pointillée correspond à In+1='0' et une flèche pleine à In+1='1'. Les deux
nombres entre parenthèses sont les symboles (AB) associés à l'état du registre. Une suite de
branches passant par les différents noeuds du treillis définit un chemin. Dans le treillis pour
aller d'un noeud de départ à un noeud d'arrivée, il existe une infinité de chemins mais une
séquence S(i) ne décrit qu'un seul chemin C(i). Si la séquence reçue S'(i) est perturbée et
contient quelques erreurs le chemin C'(i) sera différent du chemin attendu C(i). Ce chemin
C'(i) sera d'autant plus proche du chemin C(i) que le nombre d'erreurs sera faible.

L'algorithme de Viterbi est une méthode qui permet d'estimer la séquence émise en mesurant
l'écart du chemin associé aux symboles reçus par rapport à chaque chemin possible. Le
chemin ayant le plus faible écart sera considéré comme le plus représentatif de la séquence
émise réellement et permettra de la reconstituer.

Décodage de Viterbi
Le décodage de Viterbi se décompose en trois opérations.

• Le calcul des métriques de branches consiste à calculer à la réception de n symboles


(pour un rendement de 1/n) un nombre représentant la vraisemblance des symboles
reçus par rapport aux 2n symboles possibles. Ces 2n nombres sont les Métriques de
Branches. La vraisemblance s'exprime en général par le calcul de la distance de
Hamming (nombres de bits différents bit à bit). En reprenant l'exemple précédent
(K=3, r=1/2) avec des symboles exprimés sur 3 bits en décision douce: les symboles
reçus A=6 et B=3, les 4 Métriques de Branches s'exprime par la formule suivante:

soit

La métrique la plus faible est MB10, ce qui signifie que le couple de symboles (10) est
le plus probable. Cela correspond à l'intuition car A représentant un '1' correct et B un
'0' bruité.

• Le calcul des métriques de chemin. Cette opération permet de calculer quel état du
registre à décalage (quel noeud) est le plus probable. Pour chacun des 2k-1 noeuds du
treillis, une nouvelle métrique Métrique de Chemin est calculée en tenant compte des
métriques de chemin du cycle précédent et des métriques de branches courantes. Cela
représente les probabilités cumulées pour chaque noeud de faire partie de la séquence
émise.

En effet, à chaque noeud arrive deux branches venant de deux noeuds antécédents. En
reprenant le treillis plus avant, le noeud (01) à T=3 possède deux antécédents: (10) par
la branche a et (11) par la branche b. A chacune de ces branches correspond une
métrique de branche MB(a) et MB(b) et à chacun des noeuds correspond deux
métriques de chemin MC10 et MC11 calculées à T=2. On supposera que toutes les
métriques de chemin sont mises à 0, à T=0. La métrique de chemin MC01 aura pour
valeur la plus petite des deux valeurs suivantes:
MC11(T=2) + MB(a) et MC11(T=2) + MB(b)
Avant de sélectionner cette métrique la plus faible, il nous faut faire l'addition des
métriques de chemin et des métriques de branche puis la comparaison des deux
métriques. D'où le nom d'ACS ( Addition Comparaison et Sélection) pour ce bloc.
La décision prise lors du choix entre les deux branches est conservées dans une mémoire.
Cette décision se réduit à un bit appelé survivant. Ce survivant servira à reconstituer la
séquence émise.
• La remonté des survivants. Cette opération consiste à effectuer la sortie des bits
décodés en "remontant" la mémoire des survivants par une méthode de chaînage
arrière. Cette remonté permet, en partant d'un noeud de référence, de retrouver tous
les survivants ayant abouti à ce noeud, et ainsi de reconstituer la séquence émise. Ce
troisième processus peut se dérouler en parallèle avec les deux premiers.

Une perturbation provoque un écart du chemin estimé par rapport au chemin réel. Si l'on
décode le bit correspondant aux symboles entrés au même cycle, il sera erroné. Il est donc
nécessaire d'attendre que l'influence du bruit sur les métriques de chemin soit atténuée, ce qui
est possible car le bruit n'est pas corrélé. En d'autres termes, il faut attendre que tous les
chemins aboutissant aux noeuds traités à un instant donné aient convergé vers le chemin
correct. En théorie le délai d'attente est infinie. En pratique, il est tronqué à une valeur appelée
Longueur de Troncature (LT) qui dépend du rendement du code et du type de canal. Ainsi,
à l'instant T=n est décodée la donnée correspondant aux symboles entrés à T=n-LT.

Paramètre de l'algorithme de Viterbi


Caractéristiques fixées

Le code convolutif

Un des codes convolutifs décrit précédemment est devenu un standard:

• longueur de contrainte : 7
• rendement : 1/2
• polynômes générateurs : A = 133(1011011); B=171(1111001)

Les rendements poinçonnés les plus utilisés ( 2/3, 3/4, 5/6, 7/8 ) sont dérivés du rendement
1/2.

Fréquence de fonctionnement

Le débit à traiter est un paramètre fondamental car il fixe en grande partie l'architecture du
décodeur de Viterbi et dépendra de l'application. Des applications couvrent différentes
gammes de débit:

• faible débit en dessous de 2 Mbits/sec


• moyen débit environ 10 Mbits/sec
• haut débit au dessus de 10 Mbits/sec

La technologie

Les technologies actuelles de 0.5 micron voir 0.25 micron nous permettent sans problème de
faire fonctionner un circuit à des fréquences de l'ordre de 100 Mhz.

Paramètres à évaluer
Champ des symboles d'entrée

La quantification des symboles en entrée du Viterbi (e bits) si elle est trop importante fait
augmenter la complexité du Viterbi. Des résultats satisfaisants sont obtenus avec des
symboles de 4 bits en entrée. Lorsque l'on passe à 3 bits on perd environ 0,5 dB (simulation
sur un canal gaussien et rendement 1/2).

Champs des métriques de branche

Le champ des métriques de branche est fonction de celui des symboles en entrée mais on peut
le réduire par compression. Cela est intéressant pour certain cas, car permet de limiter la taille
des ACS et de conserver de bonnes performances. On essaie de rester pour des échantillons
d'entrée sur 4 bits à des métriques de branches sur 4 bits. Pour cela suivant le canal on pourra
générer une ROM optimale.

Champs des métriques de chemin

Directement lié au champ des métriques de branches, le champ des métriques de chemin peut
être réduit durant le calcul dans les ACS sans altérer les performances. Par exemple, pour b=4
bits (champ des MB), si l'on passe de c= 6 à 5 bits (champ des MC), on perd 0.2 dB en
rendement 1/2.

Renormalisation et choix du noeud de départ

Plusieurs possibilités pour effectuer la renormalisation:

• renormaliser lorsque les métriques dépasse un seuil fixe, en soustrayant ce seuil


• renormaliser à chaque calcul des métriques de branche, en soustrayant la métrique
minimale
• d'autres méthodes sont envisageables

Suivant la fréquence de fonctionnement désirée il est possible ou non d'implémenter le calcul


de la métrique minimale (64 comparaisons entre 2 nombres). Sinon on impose un noeud
optimal de départ.

Longueur de troncature

Sa longueur dépend de la façon dont on choisit le noeud de départ (optimal ou non), et elle
devra aussi être augmentée pour les codes poinçonnés. Là aussi les valeurs adoptées
dépendent des performances recherchées. Il pourra être utile de rendre programmable ce
paramètre, par exemple plusieurs valeurs de longueur de troncature pour des rendements
différents.

Architecture du bloc ACS

Ce bloc, qui constitue la majeure partie du décodeur, demande une étude optimale de son
architecture. Dans un premier temps en fonction de la fréquence de fonctionnement une mise
en parallèle des processeurs élémentaires ACS sera nécessaire pour implémenter les calculs.
Les traitements séries sont possibles pour de faible fréquences et par la suite 16 ou 32 ACS
double en parallèle permettent de traiter les fréquences plus élevées.

Ensuite suivant le nombre d'ACS choisi il faut les placer de manière optimale pour limiter la
longueur des fils d'interconnexions.

Choix de la technique de remontée des survivants

Plusieurs techniques sont possibles suivant la fréquence de fonctionnement désirée:

• Register Exchange, échange de registres, qui nécessite de nombreux échanges de


données entre les registres et ne peut donc s'appliquer que pour des fréquences peu
élevées et nécessite une surface d'implémentation importante dès que la fréquence
augmente.
• Trace-Back, chaînage arrière, son intérêt est sa faible complexité de par l'utilisation
d'une RAM. Mais le nombre de lectures écritures séquentielles important limite, là
encore, la fréquence de fonctionnement à des fréquences intermédiaires de l'ordre de
20Mhz.
• Combinaison des deux méthodes précédentes, ce mode permet de traiter de fréquences
plus importantes tout en limitant la surface.

Généricité de l'algorithme de Viterbi

You might also like