Ce TP vise à se familiariser avec les notions de codage de canal convolutif et de décodage Viterbi. Durant ce TP, il est demandé de tracer la courbe de taux d'erreur d'une transmission sur canal gaussien avec et sans codage convolutif (...)
[...] On obient alors la sortie suivante : { Tableau 1 : Etats du codeur Figure 2 : Codeur convolutif utilisé pour encoder la séquence { Pour obtenir ce résultat on utilise le code Matlab suivant : clear all; close all; sequence_entree=[ % ajout de zéros au début et à la fin de la séquence sequence_entree_avec_zero=[zeros(1,K-1) sequence_entree zeros(1,K-1)]; % remplissage des registres registre(1,1)=sequence_entree_avec_zero(1); registre(1,2)=0; registre(1,3)=0; for i=2:length(sequence_entree_avec_zero) registre(i,1)=sequence_entree_avec_zero(i); registre(i,2)=registre(i-1,1); registre(i,3)=registre(i-1,2); end % codage de la séquence sortie=[]; for i=2:length(sequence_entree_avec_zero) % sortie v1 v1=[v1 mod(registre(i,1)+registre(i,2),2)]; sortie=[sortie mod(registre(i,1)+registre(i,2),2)]; % sortie v2 v2=[v2 mod(registre(i,1)+registre(i,3),2)]; sortie=[sortie mod(registre(i,1)+registre(i,3),2)]; end sortie Décodeur de Viterbi 1 Détermination du schéma en treillis On considère le schéma en treillis précédent et une séquence reçue bruitée : 0.8 0.5 sachant qu'un ‘0' est transmis par un - 1.0 et un ‘1' par un + Le codeur peut avoir 4 états, S0, S1, S2 et S3 correspondant respectivement aux valeurs en sorties et 11. A l'instant les registres du codeur sont vides, donc l'état d'origine du codeur est S0. On affecte alors au nœud S0 une métrique nulle et aux autres nœuds une métrique égale à 100 et dite infinie. [...]
[...] On obtient alors comme résultat { 1}. Si l'on compare ce résultat à la séquence bruitée on constate alors la présence d'une seule erreur, erreur qui a été rectifiée par le décodeur Viterbi Conclusion La structure des changements d'état du codeur convolutif a permis de détecter et rectifier l'erreur apportée par le canal de transmission très facilement. [...]
[...] Ainsi en retenant les minimums et en partant de la fin du tableau 2 on obtient la séquence suivante : { 3 Vérification des calculs métriques L'exécution du script viterbi.m donne des métriques identiques à celles calculées manuellement Résultat du script viterbi.m : viterbi([7 0.8 0.5 Métriques accumullées à l`étape 1 : metrique_acc = Métriques accumullées à l`étape 2 : metrique_acc = Métriques accumullées à l`étape 3 : metrique_acc = Métriques accumullées à l`étape 4 : metrique_acc = Métriques accumullées à l`étape 5 : metrique_acc = ans = Vérification de la séquence émise La séquence obtenue dans la question précédente (out) vaut { sans les zéros ajoutés à la séquence émise pour vider le codeur. On passe cette séquence (plus des zéros pour vider le codeur) dans le premier encodeur de la première partie. [...]
[...] Ceci permet de vider les registres du codeur. Dans un second temps, nous allons établir une matrice dont les colonnes contiendront les états successifs des différents registres du codeur. Enfin les différents états du codeur connu, nous pourrons générer la séquence codée ainsi que les réponses impulsionnelles du codeur. Pour se faire on utilise le code Matlab suivant : clear all; close all; sequence_entree=[ % ajout de zéros au début et à la fin de la séquence sequence_entree_avec_zero=[zeros(1,K-1) sequence_entree zeros(1,K-1)]; % remplissage des registres registre(1,1)=sequence_entree_avec_zero(1); registre(1,2)=0; registre(1,3)=0; for i=2:length(sequence_entree_avec_zero) registre(i,1)=sequence_entree_avec_zero(i); registre(i,2)=registre(i-1,1); registre(i,3)=registre(i-1,2); end % codage de la séquence sortie=[]; for i=2:length(sequence_entree_avec_zero) % sortie v1 v1=[v1 mod(registre(i,1)+registre(i,2)+registre(i,3),2)]; sortie=[sortie mod(registre(i,1)+registre(i,2)+registre(i,3),2)]; % sortie v2 v2=[v2 mod(registre(i,1)+registre(i,3),2)]; sortie=[sortie mod(registre(i,1)+registre(i,3),2)]; end On vérifie le bon fonctionnement du codeur convolutif en encodant la séquence donnée en exemple dans le TP ( 0). [...]
[...] 28, rue Notre Dame des Champs 75006 Paris A3 Radiotélécommunications 2003-2004 Travaux Pratiques Télécom/Radiomobiles Codage de canal convolutif Par : Gilles Baillou Bhupinder Rawat Sommaire : 1. Introduction Objectifs du TP de Codage de canal convolutif Partie Théorique Code convolutif Programmation de l'encodage Encodage de la séquence { 6 Décodeur de Viterbi Détermination du schéma en treillis Evaluation de la séquence initiale Vérification des calculs métriques Vérification de la séquence émise Conclusion Analyse du fichier Matlab test.m Fonctionnement Performances 12 Liste des tableaux et figures: Tableau 1 : Etats du codeur 6 Tableau 2 : Constitution du treillis 9 Tableau 3 : Métriques des branches 10 Figure 1 : Codeur convolutif 4 Figure 2 : Codeur convolutif utilisé pour encoder la séquence { 6 Figure 3 : Schéma en treillis 8 Figure 4 : Courbe de performance obtenue à partir du script test.m 12 Introduction 1 Objectifs du TP de Codage de canal convolutif Ce TP vise à se familiariser avec les notions de codage de canal convolutif et de décodage Viterbi. [...]
Source aux normes APA
Pour votre bibliographieLecture en ligne
avec notre liseuse dédiée !Contenu vérifié
par notre comité de lecture