Codes convolutionnels et algorithme de viterbi

Codeurs convolutionnels 

Les techniques de codage de contrôle d’erreur jouent un grand rôle dans les systèmes de communications numériques. Les codes convolutionnels ou convolutifs constituent une grande famille de codes correcteurs d’erreurs.

Le principe du codage convolutionnel consiste en l’association du bit d’entrée à transmettre à plusieurs bits précédemment transmis par une opération logique (généralement des OU exclusifs), de façon à retrouver sa valeur en cas d’incident de transmission. Ainsi, cette façon d’introduire de la redondance dans l’information à transmettre donne au code sa capacité à détecter et à corriger les erreurs.

Représentation en arbre

Une façon pratique de décrire la relation entre les séquences d’entrée et de sortie d’un codeur est la représentation en arbre. Chaque branche représente une des possibilités de W bits d’entrée. De chaque nœud de l’arbre émergent 2w branches. Chaque branche contient une étiquette représentant les S symboles codés de sortie correspondants aux W bits d’entrée du codeur . Un bit d’entrée ‘0’ correspond à la branche du haut et un bit d’entrée ‘l’ correspond à la branche du bas. Donc, une séquence donnée de bits d’information passe par un chemin unique dans l’arbre. Les symboles, ou mots de code, lus au long de ce chemin forment la séquence correspondante de sortie du codeur. Si on prend pour conditions l’état de départ ’00’ et la séquence d’entrée 1101 alors, la séquence de sortie sera 11 10 10 00 .

Représentation en diagramme d’état 

Le codeur est une machine linéaire à états finis qui peut être facilement décrite par son diagramme d’état.  Les nœuds ou les états représentent le contenu du registre à décalage. Les branches, qui forment les transitions entre les états, indiquent la valeur du bit d’entrée. Si la branche est une ligne continue, elle indique que le bit d’entrée est un ‘0’. Si elle est une ligne pointillée, elle indique que le bit d’entrée est un ‘1 ‘. Le mot de deux bits qui étiquette la branche de transition représente les deux symboles codés correspondants de sortie du codeur.

Représentation en diagramme de treillis 

La réplication infinie du diagramme d’état résulte en une structure appelée le treillis. C’est une version indexée par le temps du diagramme d’état. Chaque nœud correspond à un des 2m états, à un temps donné. Chaque branche parmi les 2 w branches par état correspond à une transition entre deux états. Elle est associée aux W bits d’entrée et S symboles correspondants de sortie du codeur. N’importe quelle séquence de mots de code correspond à un chemin unique constitué de branches successives dans le diagramme de treillis.

Performances des codes convolutionnels 

Les performances d’un code se mesurent principalement par la probabilité d’erreur. Cette dernière dépend de la distance libre, dfree· C’est la distance de Hamming minimale entre toutes les paires de mots de code. La distance de Hamming entre deux mots de code est définie comme le nombre de positions dans les quels ils diffèrent. Dans cette section, nous faisons un survol des formules de calcul de la probabilité d’erreur par bit pour un système utilisant un canal binaire symétrique avec et sans codage. Le lecteur désirant savoir plus sur le calcul de ces formules est prié de se référer aux ouvrages suivants : [2], [ 4-6].

Le canal binaire symétrique, BSC (« Binary Symmetric Channel »), est un canal dont l’entrée est binaire et dont la sortie est aussi binaire ou quantifiée sur deux niveaux. On l’appelle aussi un canal à décision dure. La probabilité de transition dans un tel canal est p.  Ce modèle de canal est souvent utilisé pour mieux illustrer les performances d’erreur.

Quantification du signal reçu 

Théoriquement, un décodeur de Viterbi idéal travaille avec une précision infinie. Dans les systèmes pratiques, on quantifie les symboles reçus sur un bit de précision ou plus pour réduire la complexité du décodeur, sans parler des circuits qui le devancent. Si les symboles reçus sont quantifiés sur un bit (deux niveaux, exemple < OV = 1 et > OV = 0), le résultat est appelé décision dure. Si les symboles reçus sont quantifiés sur plus d’un bit, le résultat est appelé décision douce. La décision dure introduit une dégradation de 2.2 dB par rapport aux systèmes non quantifiés dans lesquels le décodeur opère directement avec le signal reçu [15]. La décision douce sur trois bits (huit niveaux) n’introduit qu’une légère perte de 0.2 dB par rapport à ces même systèmes non quantifiés [5]. Une quantification sur plus de huit niveaux n’apporte qu’une légère amélioration au prix d’une augmentation de complexité non justifiable [5].

Codes catastrophiques 

Un code est appelé catastrophique si dans une séquence de bits codés, un nombre fini de symboles en erreur engendre une séquence de bits décodés en erreur qui est arbitrairement longue. En générale, la condition nécessaire et suffisante pour qu’un code de taux R = W /S soit catastrophique est qu’au moins un chemin dans son diagramme d’état forme une boucle fermée avec un poids nul. Massey et Sain [2] ont trouvé une condition nécessaire pour tester si un code de taux 1/S est catastrophique. Il en résulte que les polynômes générateurs doivent avoir un facteur commun pour qu’une telle situation se produise.

Table des matières

CHAPITRE 1 INTRODUCTION
1.1 Objectifs
1.2 Contributions
1.3 Contenu du rapport
CHAPITRE 2 CODES CONVOLUTIONNELS ET ALGORITHME DE VITERBI
2.1 Codeurs convolutionnels
2.1.1 Représentation en arbre
2.1.2 Représentation en diagramme d’état
2.1.3 Représentation en diagramme de treillis
2.2 Performances des codes convolutionnels
2.3 Quantification du signal reçu
2.4 Codes catastrophiques
2.5 L’algorithme de Viterbi
2.6 Implémentation du décodeur de Viterbi
2.6.1 Unité de calcul des métriques de branche BMU
2.6.2 Unité du Add-Compare-Select ACSU
2.6.3 Unité de la gestion de la mémoire des chemins survivants SMMU
2.7 Conclusion
CHAPITRE 3 ARCHITECTURE PROPOSÉE
3.1 Choix de la technique radix -4
3 .1.1 Forme générale du radix -4
3.2 Module de calcul des métriques de branche BMU
3.2.1 Taux de 1/S
3.2.2 Taux de 2/S
3.3 Module de l’Addition-Comparaison-Sélection ACSU
3.3.1 Module ACS à quatre chemins
3.3 .2 Paire d’addition-comparaison
3.3.3 Arithmétique modulo pour le calcul des métriques des chemins
3.3.4 Comparaison modifiée
3.3.5 Gain en vitesse
3.3.6 Flexibilité du module des ACS
3.4 Unité du Trace Back TBU
3 .4.1 Organisation de la mémoire
3.4.2 Flux des RAM de la mémoire du TB
3.4.3 Principe de décodage
3.5 Unité LIFO
3.6 Diagramme bloc général du décodeur de Viterbi
3. 7 Conclusion
CHAPITRE 4 IMPLÉMENTATION, TESTS ET RÉSULTATS
4.1 Architecture du FPGA de Xillinx
4.1.1 VIRTEX-II de Xillinx
4.2 Cycles de design
4.3 Modularité et hiérarchie du code VHDL
4.4 Optimisation du design
4.4.1 Unité BMU et TBU
4.4.2 Unité ACSU
4.4.3 Unité LIFO
4.4.4 Décodeur entier
4.4.4.1 Amélioration de la vitesse du décodeur
4.5 Test et résultat
4.5.1 Environnement de test
4.5.2 Procédures de test
4.5.3 Résultats de la simulation du code VHDL
4.5.4 Test du design sur circuit FPGA
4.5.5 Résultats du test du design sur circuit FPGA
4.6 Comparaison avec un modèle existant
4.7 Conclusion
CHAPITRE 5 CONCLUSION

Cours gratuitTélécharger le document complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *