Présentation
Afin de simplifier l’utilisation de notre Modem, nous nous devions de réaliser une interface conviviale, regroupant les fonctions principales à son utilisation. Nous aurions mal vu un modem dont le déclenchement aurait été fait par commandes DOS.
De plus, il fallait que nous puissions tester le système
de la façon la plus réaliste, créer des tables de
valeurs pour les coefficients du filtre, et pour le générateur
de sinusoïde.
MATLAB regroupe toutes les commandes nécessaires à la réalisation de fenêtres graphiques et des calculs mathématiques que nous voulions réaliser grâce à un langage dédié à l’informatique technique et aux calculs.
Tout au long de l’année, MATLAB nous a aidé
dans notre projet : Dans un premier temps, toute l’étude théorique
à été faite à partir de tests et de simulations
et dans un deuxième temps, nous avons conçu et mis en place
des fenêtres interactives. C’est cette série de tests ainsi
que la création de la fenêtre qui vont être décrits
dans ce chapitre, en commençant par l’une de nos premières
réalisations, le générateur de sinusoïdes. Mais
commençons tout d'abord par les possibilités offertes à
un utilisateur de pouvoir suivre toutes les étapes de la conception
d'un modulateur et d'un démodulateur.
![]() |
Le modulateur
En accédant au menu Modem / Création
d'une sinusoïde, vous pouvez comprendre la technique de création
d'une sinusoïde par le principe de lecture d'un tableau préalablement
calculé avec les valeurs d'une sinusoïde uniformément
répartie entre 0 et 2p . Ce même
menu permet au fil des fenêtres animées qui circulent de modifier
le tableau de valeurs de la sinusoïde, puis de convertir les valeurs
soit en Q15 soit dans tout autre valeur de conversion, par la technique
de fenêtres interactives modifiables par l'utilisateur.
Le guide
Nous avons conçu un guide dont les étapes permettent de suivre toute la préparation du modulateur et du démodulateur, toujours avec le principe de fenêtres interactives où l'utilisateur peut modifier les variables.
La dernière étape du GUIDE consiste à
programmer les DSP et calculer le taux d'erreur binaire de la ligne.
Une option du guide a été rajoutée pour rendre le modem plus ludique: elle offre la possibilité de taper du texte qui va être converti en séquence binaire puis transmis sur la ligne.
Présentation générale de MATLAB
Attardons-nous un peu plus sur les fonctions les plus utiles, en particulier sur celles dont nous avons eu besoin pour réaliser soit des fichiers de valeurs soit des graphiques, ou bien des calculs de filtre.
Rappelons simplement que MATLAB utilise un langage interprété dont la mnémonique se rapproche de celle du langage C. Les programmes MATLAB sont enregistrés en nomfichier.m et leur exécution se fait en tapant simplement nomfichier .
Enfin, il faut tout de même préciser que
l'aide de MATLAB HELP nomfonction est extrêmement précise
et explicite sur toutes les fonctions du logiciel. Le tutorial TOUR
vient s'ajouter à cette aide avec des exemples et des démonstrations
graphiques et animées.
Déplacement dans l'arborescence et commande DOS
:
Le langage peut utiliser les commandes DOS, soit directement
avec le nom de la commande :
>> cd ('chemin')
>> edit nomfichier.m
soit, pour le lancement d'exécutables par :
>> dos ('nomfichier.exe');
>> dos('c:\dsp\programmes\dskplasm.exe
-l envoi.asm &');
dans cet exemple, le & permet d'effectuer l'exécution
en arrière-plan.
Manipulation de fichiers :
Il peut être intéressant d'avoir à
créer des fichiers (quelque en soit l'extension) pour récupérer
le résultat d'un calcul. Ces fichiers sont tout d'abord ouverts
grâce à la fonction FOPEN, qui permet d'allouer dynamiquement
un numéro FID au fichier. Les fichiers sont ouverts en mode écriture
(w) ou lecture (r) utilisant le mode texte (t) ou non.
FID = fopen ('tableau.asm','wt'); %ouverture d'un fic txt
%en écriture.
fprintf(FID,'sinetablesize\t.set\t%d',valeur);
fprintf(FID,'\n\ntabsin\t.word\t');
%
tablesin .word
close(FID);
Fprintf et Fscanf permettent soit d'écrire soit de lire dans les fichiers.
Fread et Fwrite permettent de lire et d'écrire
en mode binaire.
Calculs mathématiques :
Matlab se comporte comme une calculatrice et prend en compte les fonctions sin, cos, erfc,…
Suivant les applications, on peut charger les toolbox
appropriées pour ajouter des fonctions. Nous avons utilisé
essentiellement Signal.tbx qui comprend plus de 150 fonctions pour la création
de filtres, pour les représentations spectrales, les convolutions
de signaux. Par exemple :
>> coef = fir1 (79,1200*2/fe);
permet de calculer les coefficients d'un filtre FIR d'ordre
80 (79+1) et de fréquence de coupure 1200Hz.
>> sf = filter2(coef,s(pas));
permet d'appliquer le filtre calculé sur un signal
s.
Création des interfaces graphiques avec MATLAB
:
Un des avantages de Matlab est de pouvoir créer des interfaces :
Permet de créer une nouvelle fenêtre avec
différents paramètres (Color, Position,…).
a = figure('Color',[0.7 0.8 0.99], ...
'Position',[[0
0 644 442]]);
Remarque: Pour connaître tous les paramètres d'une fenêtre, d'un bouton, ou de tout autre élément de l'interface, il suffit de lancer le programme gérant l'interface et de taper
get (n°ID de l'interface)
Remarque: Toutes les couleurs sont données par un groupe de 3 chiffres de 0 à 1 dans l'ordre
[rouge vert bleu], utilisant ainsi le même
principe que les couleurs des pages HTML.
Uimenu :
Permet de créer des menus déroulants sur la barre d’outils.
La même commande est utilisée pour les items
du menu déroulant.
rmenu = uimenu('Label','modem');
uimenu('Parent',rmenu, ...
'Label','Path',...
'callback',['choixdir;']);
Uicontrol :
Permet de créer tout type de bouton, zone de
couleur, zone de texte ou d'édition de texte. Le type est donné
par la commande Style.
uicontrol( ...
'Style','frame', ...
'Units','normalized', ...
'Position',fenpos, ...
'BackgroundColor',[0.50
0.55 0.95]);
Callback :
Est un des paramètres de uicontrol. Il permet
d'exécuter une série de commandes ou d'ouvrir un autre fichier.
Au cas où Callback doit exécuter plusieurs commandes, celles-ci
doivent alors être placées entre crochets, être séparées
par des virgules et se terminer par des points virgules pour marquer la
fin de chaque commande. Les commandes peuvent être aussi bien DOS
que MATLAB.
'Callback',['reset(ann1);','reset(ann);',...
'delete(imiut);','reset(rep4);','delete(imgtr);',...
'reset(path);','reset(init1);','init;']);
Remarque: Pour assurer une certaine lisibilité
des programmes, la continuité d'une ligne se fait par "…",et
la reprise se fait à la ligne suivante.
Imread et Image :
Grâce à la Toolbox image.tbx, on peut insérer
des images aux formats .bmp .jpg et d'autres, dans les fenêtres.
La commande imread permet de lire l'image, et image permet
de l'afficher.
gtr=imread ('gtr.bmp','bmp');
imgtr=axes('Position',[0.1 0.25 0.25 0.25]);image(gtr);
axis image;
axis off;
Remarque: Les images sont affichées comme des
graphiques avec des axes en abscisse et en ordonnée. Pour supprimer
ces axes, il suffit de rajouter la commande Axis off.
Organigramme des fichiers MATLAB
![]() |
Description des programmes sous Matlab
Fenêtre principale de l'interface
(Fichiers fenetre.m)
La première fenêtre est celle qui sert de base à toute l'interface. C'est sur cette fenêtre que nous définissons la couleur du fond, le menu déroulant, la zone de tâches à droite, la taille et la position de la fenêtre.
Par le menu déroulant, on peut accéder à n'importe quelle partie de l'interface, aussi bien les programmes de test qui nous ont servis tout au long du projet, que les programmes propres à la mise en œuvre des DSP.
Pour simplifier toute manipulation de l'utilisateur, nous
avons créé un guide qui vous conduit pas à pas jusqu'à
la transmission d'une séquence binaire sur la ligne (suivez le
guide…).
Générateur de sinusoïde à fréquence réglable
(Fichiers Fensin.m, Fentablesin.m, qconv.m, et conversion.m)
Comme nous l'avons décrit dans la partie Principes généraux pour la conception d'un Modem FSK, le générateur de sinusoïde a été fait à partir d'une table de valeurs dont la lecture s'effectue par pas, dont la longueur détermine la fréquence.
Il nous suffisait donc, pour ce générateur,
de créer une table de 195 valeurs (195 : valeur calculée
dans le chapitre précédent). Cette table devait ensuite être
accessible et insérée en tant que fichier de valeurs dans
le programme du DSP.
MATLAB a calculé les valeurs par une simple répétition
de l'équation:
for i=0:(194) %création de la table
psi(i+1)=(2*pi.*i)./valeur;
end
L'utilisateur peut lui même créer sa propre
table avec un nombre de valeurs choisi, et la conversion Qx adaptée
à son système de DSP.
Les 100 premières valeurs du tableau au format
Q15 ressemblent à:
tabsin .word 1055,2110,3162,4211,5256
.word 6295,7328,8353,9369,10376
.word 11372,12356,13327,14285,15228
.word 16154,17064,17957,18830,19685
.word 20518,21331,22121,22888,23632
.word 24351,25045,25712,26353,26967
.word 27553,28110,28638,29136,29604
.word 30041,30447,30821,31164,31474
.word 31751,31996,32207,32384,32529
.word 32639,32715,32758,32766,32741
.word 32681,32588,32461,32300,32105
.word 31877,31617,31323,30997,30638
.word 30248,29826,29374,28891,28377
.word 27835,27263,26664,26036,25382
.word 24701,23994,23263,22508,21729
.word 20927,20104,19260,18396,17513
.word 16612,15693,14758,13808,12843
.word 11866,10875,9874,8862,7841
.word 6812,5776,4734,3687,2636
.word 1583,527,-528,-1584,-2637
Simulation de la création de la sinusoïde
(Fichiers simulation.m)
Pour des raisons de compréhension de notre générateur de fréquences aléatoires, nous devions réaliser un programme simple qui nous permette de visualiser la forme des signaux obtenus à la sortie du générateur.
Le programme consiste donc à une lecture dans la
table précédemment créée, par pas de 13 et
21, pour générer des fréquences de respectivement
1300 et 2100 Hz. (voir chapitre Principes généraux pour
la conception d'un Modem FSK pour les calculs de pas).
La simulation nous a permis d'obtenir le graph suivant:
![]() |
Simulation de la norme V23
(Fichiers sinanim.m)
Ce fichier est un test que nous avons voulu réaliser sur les animations par MATLAB. Il permet de visualiser une séquence binaire transmise en FSK.
Le principe de l'animation permet d'afficher plusieurs
images les unes à la suite des autres. Dans notre projet, nous avons
voulu afficher 4 bits modulés par images avec une série de
10 images. Le résultat peut s'apparenter à la visualisation
d'une modulation FSK sur une ligne.
Mesure du retard à la démodulation
(Fichiers mesurek.m)
Ce programme permet de tracer la courbe du retard optimum
à la démodulation. Il répond simplement à l'équation:
d = abs ((cos (2*pi*1300*k*1/fe))-(cos (2*pi*2100*k*1/fe)));
avec k variant de 0 à 12, et fe fréquence
d'échantillonnage.
Simulation et calcul des éléments de la démodulation
(Fichiers fendemod.m et demod.m)
Ce programme, qui est un des plus complexes des programmes MATLAB de notre projet, part d'une séquence binaire de 5 Bits saisie par l'utilisateur. Cette séquence est modulée en FSK, puis au niveau du démodulateur, est démodulée de la même façon que le fait le programme DSP du démodulateur. Ce même programme crée les coefficients du filtre FIR d'ordre 80 et les insèrent dans un fichier accessible par le DSP. Grâce à ce programme, toutes les étapes de la démodulation sont visibles et modifiables, puisque la visualisation graphique affiche tous les signaux à la sortie de chacune des étapes.
La fenêtre de visualisation ressemble à :
![]() |
Programmation des DSP
(Fichiers program.m)
Ce programme est une des dernières fenêtres
de l'interface MODEM. Il permet de lancer les commandes DOS qui vont compiler
et charger les programmes du modulateur (TX) et du démodulateur
(RX) dans les DSP.
Calcul de la probabilité d'erreur
(Fichiers prob.m)
Connaissant la séquence transmise par le modulateur
(celle-ci est stockée dans un fichier), on peut la comparer à
celle reçue par le démodulateur. C'est ce que nous avons
fait pour calculer le taux d'erreur binaire (TEB) de notre canal de transmission.
Celui-ci n'est que la valeur du rapport Bits avec erreur / Bits transmis.
for n=10:longfich
if sequretour(n)~=sequence(n)
erreur = erreur+1;
end
end
Pe = erreur/longfich;
Pe = num2str (Pe);
Remarque : la conversion de la valeur de Pe Numérique
-> String était utile dans ce cas-là, pour permettre un affichage
dans une zone de texte de la fenêtre.
Pour une meilleur compréhension lors de l'utilisation du Modem, nous avons voulu afficher, avec le TEB, quelques bits de la séquence transmise et reçue. Par comparaison visuelle, on peut se rendre compte des erreurs.
Ce calcul de probabilité d'erreur nous a amenés
à songer à un développement de notre projet. En effet,
si nous étions capables déjà en cours d'année
de calculer ce taux d'erreur, il nous serait possible de calculer ce taux
sur un canal perturbé par un bruit blanc provenant d'une source
externe, ou bien de voir les différences de caractéristiques
entre les câbles utilisés pour la transmission. Cette étude
sera faite dans un des chapitres suivants.
![]() |
Nous avons prévu une extension de cette fenêtre
qui fait l'affichage du texte reçu si du texte a été
transmis.
Mise à jour des emplacements de fichiers
(Fichiers choixdir.m)
Nous avons pensé que notre Modem pourrait être
utilisé par différentes personnes et surtout installé
sur différents ordinateurs. Pour faciliter cette "portabilité",
nous rappelons sur la toute première fenêtre de l'interface
que l'utilisateur doit régler le path pour indiquer l'emplacement
de ses fichiers.
2 emplacements sont à spécifier :
Ce fichier de mise à jour des Path est accessible
soit par la première fenêtre en cliquant sur le texte à
droite, soit de n'importe quelle fenêtre par le menu Modem.
Conversion d'un texte en une séquence binaire
(Fichiers fentxt.m, traitext.m, lectfic.exe et ficretour.exe)
Pour rendre notre modem plus attrayant, et pour sortir un petit peu du contexte ' transmission du signal ', nous avons conçu 2 programmes en langage C qui permettent de convertir un texte en une séquence binaire. Au niveau de la démodulation, la conversion est faite dans l'autre sens avec une retranscription des bits en caractères.
On peut alors observer les erreurs de transmission sur
les erreurs de caractères.
Remarque: Ce texte, à cause des limites
de la zone d'édition de Matlab, est limité à une centaine
de caractères.
![]() |
Création du fichier init.asm
(Fichiers typefic.m, init.m, et ficinit.m)
Un fichier d'initialisation est transmis au DSP émetteur.
Ce fichier contient les valeurs de la séquence binaire Fichier,
la longueur du fichier transmis iLongFich, et la rapidité
de modulation iTime. Suivant le choix de l'utilisateur, ce fichier
contiendra soit une série binaire de 1000 bits aléatoirement
calculés, soit la trame binaire correspondant au texte.