SIMULINK
les codes convolutifs pour lesquels il n'y pas de mots codes indépendants, mais
où une fenêtre glissante de largeur M se déplace sur les symboles d'information
par pas de K pour générer à .... 7) Ecrire la fonction hamdecode.m qui retourne le
mot d'information corrigé à partir du mot-code reçu et de la matrice de contrôle.
Part of the document
Codage de Canal Travaux Pratiques INTRODUCTION L'objectif de ce TP est la mise en ?uvre des codeurs de canal pour simuler
leur capacité de correction et en cerner les limites. Pour cela nous
utiliserons le logiciel MATLAB avec le 'Communication Toolbox' et l'outil
de simulation intégré SIMULINK. Nous allons étudier les deux grandes familles de codeurs de canal :
- les codes blocs pour lesquels des blocs de K symboles d'information sont
protégés indépendamment les uns des autres par M symboles d'informations
pour former des mots codes de N symboles.
- les codes convolutifs pour lesquels il n'y pas de mots codes
indépendants, mais où une fenêtre glissante de largeur M se déplace sur les
symboles d'information par pas de K pour générer à chaque étape N symboles
dépendant des M symboles visibles dans la fenêtre.
Préliminaire
Créez un répertoire de travail dans C:\temp.
Copiez dans ce répertoire tous les fichiers contenus dans tc-nt\TP-TIF
Lancez MATLAB et dans la fenêtre de commande faites :
cd c:\tmp\votrerepertoire Taux d'erreur La probabilité d'erreur sur une ligne (notée p) est le résultat d'une
observation statistique. Elle donne la probabilité pour qu'un symbole soit
erroné. Elle peut être estimée en calculant sur un intervalle de temps
suffisamment grand le rapport entre le nombre de symboles erronés et le
nombre de symboles transmis.
A partir de là, sous l'hypothèse que les symboles sont indépendants, la
probabilité d'avoir n symboles consécutifs corrects est donnée par : [pic] (1) et la probabilité d'avoir r erreurs sur n bits est donnée par : [pic] (2) ( 1) Ecrire la fonction pnr.m qui renvoie Pn,r selon l'équation (2). Ecrire
la fonction perr.m qui renvoie en fonction de p,n et r, la probabilité
d'avoir r erreurs ou plus notée Pn,r+. La fonction nchoosek permet de
calculer le cardinal [pic]. ( 2) Pour p=1/10, r=3 et pour n variant de 7 à 255, tracez les courbes
donnant Pn, Pn,r et Pn,r+ en fonction de n. Commenter. Même chose, pour
p=1/10, n=16 en faisant varier r.
Codes Blocs
1 Codes blocs MATLAB propose deux fonctions encode et decode permettant d'implanter des
codeurs/décodeurs de canal basés sur une matrice de contrôle ou sur un
polynôme générateur, avec en particulier les codeurs de Hamming et les
codeurs BCH. Ces fonctions permettent également de faire du codage
convolutif, ce que nous verrons plus loin. 2 Codes linéaire Nous avons vu en cours que les codes linéaires (dont celui de Hamming) sont
définis par une matrice de contrôle H (en anglais parity check matrix). Si
v est un mot-code alors : [pic] (3) Cette opération appliquée sur le mot-code reçu v' permet de calculer le
correcteur (ou syndrome) et de détecter les erreurs si : [pic] (4)
Pour l'opération de codage, on peut utiliser la matrice génératrice G qui
est liée à la matrice de contrôle H par les relation suivante : [pic] (5) où G et H peuvent s'écrire sous leur forme canonique : [pic] et [pic] (6) On obtient alors le mot-code v en fonction des caractères d'information i
par la relation suivante : [pic] (7) MATLAB donne la fonction gen2par qui permet de passer de G à H. 3 Codage de Hamming Le codeur de Hamming permet de corriger une erreur parmi N. Le nombre de
caractère de contrôle M est lié au nombre de caractère d'information K par
la relation suivante : [pic] (8) MATLAB gère automatiquement les codeur de Hamming dans le cas où 2M = N+1.
Les fonctions proposées par MATLAB sont hammgen, htruthtb. ( 3) En utilisant la fonction hammgen, tracer la courbe donnant le taux
d'émission en fonction du nombre de symboles d'information pour un codeur
de Hamming. Qu'en concluez vous ? ( 4) Quelles sont les matrices génératrice et de contrôle données par
MATLAB pour un codeur de Hamming (7,4) ? Commentez la forme de la matrice
H.
Sachant que : [pic] (9) Quelles sont les conséquences pour le décodage. En déduire l'intérêt de la
table retournée par la fonction htruthtb. Comment va t-on utiliser cette
table ? ( 5) Calculez en utilisant G le mot-code associé aux symboles i=[1 0 1 0]. ( 6) Ecrire la fonction hamcode.m qui retourne un mot-code à partir d'un
bloc d'information et de la matrice de contrôle H. On remarque que les
fonctions rem et mod permettent de faire l'opération modulo.
Vérifiez que votre fonction donne le même résultat que la fonction encode
de MATLAB. ( 7) Ecrire la fonction hamdecode.m qui retourne le mot d'information
corrigé à partir du mot-code reçu et de la matrice de contrôle. On pourra
utiliser les fonctions htruthtb, bi2de, fliplr ...
Vérifiez votre fonction ainsi que la fonction MATLAB decode.
4 Codage BCH Les codes cycliques sont des codes linéaires particuliers tels que toute
permutation circulaire sur les symboles d'un mot-code donne encore un mot-
code. Ils sont définis par un polynôme générateur.
Les codes BCH sont un cas particulier des codes cycliques.
MATLAB donne les fonctions suivantes pour travailler avec les codes
cycliques : cyclpoly, cyclgen et bchpoly pour les codes BCH. Les fonctions
encode et decode sont toujours utilisables. ( 8) En utilisant la fonction bchpoly, en déduire la courbe donnant le taux
d'émission en fonction du nombre de symboles d'information pour un codeur
BCH capable de corriger 3 erreurs. Comparez avec celle obtenue avec
Hamming, Qu'en concluez vous ? Pour corriger une erreur, le code de Hamming est il plus intéressant que le
code BCH ? En utilisant les fonctions bchpoly et cyclgen donnez la matrice
de contrôle associé à un code BCH (7,4,1) et comparez la à celle donnée par
hammgen. ( 9) En utilisant les fonctions déjà vues précédemment en particulier
encode, decode et les fonctions randint, randbit, gfpretty , regrouper dans
un fichier de commande MATLAB bchtest.m les instructions permettant de
réaliser ce qui suit :
Récupérer le polynôme générateur BCH permettant de corriger 3 erreurs sur
N=15 bits.
Générer une séquence binaire aléatoire de symboles d'informations.
Donner le mot-code associé.
Ajouter 3 erreurs aléatoires
Décoder le mot erroné.
Extraire les symboles d'informations et comparer avec les symboles
transmis. 5 Simulations Nous allons maintenant simuler l'envoi d'un nombre important de symboles
sur une ligne bruitée afin d'étudier les probabilités d'erreur et leurs
évolutions en fonction de la qualité du canal.
Ces simulations seront faites en utilisant SIMULINK qui est un programme
additionnel à MATLAB pour la simulation de systèmes dynamiques. Il permet,
par exemple, de simuler complètement le fonctionnement interne d'un modem
et d'étudier le comportement de chacun de ses blocs.
Le contrôle et la modélisation des systèmes sont facilités ; les fonctions
de transfert sont écrites sous formes de blocs et les liaisons sont
réalisées par des arcs orientés. Les différents types de signaux peuvent
être générés et visualisés à l'aide d'instruments virtuels.
Un modèle SIMULINK construit à l'aide d'un assemblage de blocs élémentaires
peut être encapsulé. Il peut alors enrichir la bibliothèque disponible sous
SIMULINK. Le système modélisé sous SIMULINK peut recevoir des données de
l'espace de travail de MATLAB ou y envoyer des données de sortie. L'échange
de données entre SIMULINK et l'espace de travail de MATLAB peut se faire
par des variables communes ou par des fichiers .mat.
Des informations complémentaires sont données en Annexe.
1 Codeur de Hamming Dans la fenêtre de commande MATLAB :
- taper blocvar, ce qui lance le fichier de commande blocvar.m contenant un
certain nombre de variables utiles pour la simulation.
- taper simulham, cette commande ouvre le modèle SIMULINK suivant : [pic]
( 10) Identifiez les différents blocs et regardez leurs paramètres en
double clickant dessus.
Lancez la simulation par simulation/start.
Observez les fenêtres qui s'ouvrent. Au bout de quelques secondes arrêter
la simulation par simulation/stop. ( 11) Paramétrer le taux d'erreur du canal pour qu'il soit juste égal à la
capacité de correction du codeur de Hamming implanté. Lancer la simulation.
Transmettez 1000 symboles. Donnez le nombre d'erreurs non-corrigées, le
taux d'erreur après correction. Pourquoi toutes les erreurs n'ont elles pas
été corrigées ? ( 12) Divisez par deux le taux d'erreur du canal et recommencez
l'opération. Conclusion.
2 Codeur BCH Fermez toutes les fenêtres SIMULINK de la précédente simulation.
- retaper blocvar pour réinitialiser les variables si vous les avez
modifiées.
- taper simulbch cette commande ouvre le modèle SIMULINK suivant : [pic] Ce modèle a un fonctionnement lègèrement différent du précédent,
puisqu'ici, à la fois au niveau du codeur et du canal, on raisonne par
blocs (vecteur). On aurait pu faire de même avec Hamming. ( 13) Identifiez les différents blocs et regardez leurs paramètres en
double clickant dessus.
Lancez la simulation par simulation/start.
Observez les fenêtres qui s'ouvrent. Au bout de quelques secondes arrêter
la simulation par simulation/stop. ( 14) En utilisant dans la fenêtre de commande MATLAB les bonnes fonctions,
donner le polynôme générateur associé à ce codeur. ( 15) Le taux d'erreur du canal est ici donné par un vecteur indiquant la
probabilité d'avoir 1, 2, 3 ... erreurs par mot-code. A quoi est initialisé
ce taux d'erreur ? Lancer la simulation, après transmission d'environ 500
bits, quel est le nombre d'erreurs non corrigées ? Après avoir mis à 0,9 la
probabilité d'avoir trois erreurs, relancer la simulatio