L’interface graphique

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 démodulateur Le démodulateur est conçu sous le même principe de fenêtres interactives accessibles et modifiables. Le principe de démodulation peut être atteint par le menu Modem / Démodulation de la barre de tâches et permet de voir la technique que nous avons utilisée, voir les effets du filtre sur la démodulation, et les effets de la modification de la rapidité de modulation. Les calculs effectués sous Matlab sont exactement les mêmes en programmation DSP avec des résolutions sur 15 bits (-32768 à 32767). Ceci permet de comprendre encore mieux la façon dont les programmes vont réagir.
 
 
 
 

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

Passons brièvement à l'environnement MATLAB qui, comme chacun le sait, est un logiciel utilisé dans de nombreuses sociétés et universités pour le calcul mathématique, le développement d'algorithmes, les simulations et représentations graphiques, et le développement d'applications à l'aide de créations d'interfaces graphiques.
 
 

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 :

Tout est fait pour simplifier leur conception et Matlab dispose même d'un outil d'aide à la création d'interfaces graphiques (GUIDE). Nous avons décidé de ne pas utiliser cet outil pour notre projet, pour pouvoir garder une certaine maîtrise sur chacun des programmes. Ceux-ci nous paraissaient alors plus clairs et toute modification était alors plus simple. L'inconvénient du système que nous avons choisi est qu'il devient difficile pour quelqu'un qui ne connaît pas nos programmes de les modifier.
 
  Ce qui suit représente les commandes essentielles pour créer la plupart des menus et boutons: Figure :

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 :
 
 

Remarque: En cas d'utilisation de Matlab sur le serveur IUTPCSRV1, il n'est pas possible d'utiliser plusieurs PATH. C'est pour cela que nous avons rassemblé tous les fichiers dans un seul emplacement.
 
 

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.