La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

S.S.I. 2007 – 10 : Créer des interfaces avec Matlab Page 1 Créer des interfaces avec Matlab. Cours S.S.I. n°10, mai 2007, durée : 1 heure, écrit par Jean-Paul.

Présentations similaires


Présentation au sujet: "S.S.I. 2007 – 10 : Créer des interfaces avec Matlab Page 1 Créer des interfaces avec Matlab. Cours S.S.I. n°10, mai 2007, durée : 1 heure, écrit par Jean-Paul."— Transcription de la présentation:

1 S.S.I – 10 : Créer des interfaces avec Matlab Page 1 Créer des interfaces avec Matlab. Cours S.S.I. n°10, mai 2007, durée : 1 heure, écrit par Jean-Paul Stromboni pour les élèves SI1 Ce que vous devez savoir après cette séance : Savez vous répondre aux questions suivantes ? Que réalise l'instruction Matlab : set(h,'Tag','toto') ? Que réalise get(h,'String') ? Énumérer cinq uicontrolsComment fermer un GUI dans un bouton 'Quit' ? Quel est le GUI créé par h=plot(t,sin(t)); Comment utiliser la structure handles ? Que réalisent les deux lignes : g =findobj(gcf,'String','Tracé') delete(g) Quest ce quun Callback ? Matlab permet de développer des GUI (ou graphic user interfaces) pour présenter les résultats aux utilisateurs. Un GUI est défini par deux fichiers de même nom, une figure et un script Les objets dinterface possèdent des propriétés et des callbacks, et sont accédés par des handlers. Travaux dirigés : créer un GUI pour analyser la compression dun son wave avec un banc de filtres

2 S.S.I – 10 : Créer des interfaces avec Matlab Page 2 Vous pouvez construire avec Matlab des interfaces graphiques programmables Un GUI (Graphic User Interface) est constitué d'objets d'interface (uicontrols) dotés de méthodes et de propriétés programmables dans des scripts. Pour décrire un GUI, Matlab utilise deux fichiers, un fichier figure (dextension fig), qui contient le layout du GUI, ou disposition des objets d'interface, un fichier script (dextension.m), qui contient les comportements de l'interface Par exemple, le GUI two_axes ci-dessous est décrit par les deux fichiers two_axes.m et two_axes.fig :

3 S.S.I – 10 : Créer des interfaces avec Matlab Page 3 Matlab contient un éditeur de GUI GUIDE (pour Graphic User Interface Development Editor) contient les outils pour : 1. disposer les objets d'interface (layout) 2. adapter les valeurs de leurs propriétés 3. programmer les comportements (Callbacks) On exécute GUIDE depuis la fenêtre Matlab : 1.avec la commande : >> guide 2.à l'aide du raccourci dans la barre d'outils La fenêtre GUIDE appliquée au GUI two_axes : (cf. run, uicontrols, menus, edit, propedit, …)

4 S.S.I – 10 : Créer des interfaces avec Matlab Page 4 Tous les objets d'interface sont dotés de propriétés accessibles et modifiables. Voici une liste de propriétés (non exhaustive) : Tag, est le nom de l'objet Style, son type, bouton, texte, panel … Name, Pointer, WindowStyle (figure) String, le texte qui apparaît (text, edit, …) ForegroundColor, … Max, Min, Step (slider) Value Callback, pour coder les comportements ButtonDownFcn, ResizeFcn, CreateFcn … FontSize, FontWeight, FontName, … Linspecteur de propriétés est appelé par GUIDE pour modifier les propriétés des objets d'interface

5 S.S.I – 10 : Créer des interfaces avec Matlab Page 5 Pour atteindre les propriétés des objets d'interface, on utilise des 'handler'. À tout objet d'interface, Matlab peut associer des pointeurs, ou handler, pour laccès aux propriétés. Certains handlers sont définis par défaut : gcf : handler de la figure courante (get current figure) gca : axes courants de tracé (get current axes) gcbf : la figure cliquée (get callback figure) gcbo : l'objet qui appelle (celui sur lequel on a cliqué) Le handler 0 est la fenêtre interpréteur Matlab Le handler 1 est la figure 1, … Voici des instructions qui utilisent un handler : get et set, respectivement pour lire et pour changer les valeurs des propriétés findobj, pour retrouver le handler d'un objet propedit, pour éditer les propriétés d'un objet. delete, pour effacer un objet Exemples de programmation avec les handlers get(0) % qu'obtient-on ? t=0:.1:100; h=plot(t,t.*sin(t),t,t) % noter la valeur de h get(h(1),'Color')) set(h(2),'tag','toto') set(h(2),'ButtonDownFcn', 'close') g=findobj(gcf,'tag','toto') delete(g)% efface quoi ? propedit(h(2)) % définir un uicontrol h=uicontrol('sty','pushbutton','str',… 'terminer','cal','close')

6 S.S.I – 10 : Créer des interfaces avec Matlab Page 6 Comment programmer un GUI (cf. MonPremierGUI.zip) dans la propriété Callback, on place : Soit une instruction : telle grid ou close(gcf) Soit un script Matlab placé dans le path, tel 'script.m' pour le bouton 'Tracé' pour échanger des informations entre les objets dinterface, on utilise Workspace Pour adresser un objet dinterface, on utilise findobj, cf. zone de texte éditable ci-dessous : % script.m appelé par le bouton 'tracer' t=0:.1:10; h=findobj(gcf,'tag','edit1'); f=str2double(get(h,'String')); % 'str'suffit stem(t,t.*sin(2*pi*f*t));

7 S.S.I – 10 : Créer des interfaces avec Matlab Page 7 Une autre façon de programmer un GUI en utilisant le fichier script GUIDE génère automatiquement des méthodes vides pour les callbacks des objets dinterface, il les appelle dans la propriété Callback et leur transmet les deux arguments suivants : 1.hObject, le handler de l'objet appelant 2.Handles, une structure qui contient les handlers de tous les objets d'interface, et permet ainsi l'accès à toutes leurs propriétés. Pour programmer le GUI, il suffit de compléter ces méthodes créées par GUIDE dans le fichier script du GUI, ce qui évite de multiplier les scripts Pour les échanges de variables entre les méthodes du GUI, il y a deux possibilités : Soit on utilise la structure handles : % callback émetteur handles.mydata=x % pour transmettre x guidata(hObject,handles) % sauvegarde % callback récepteur y=handles.mydata % récupérer x dans y Soit on utilise la déclaration global dans toutes les méthodes qui doivent partager une variable global x x=...

8 S.S.I – 10 : Créer des interfaces avec Matlab Page 8 Une autre façon de programmer un GUI en utilisant le fichier script Voici le script MonSecondGUI.m : l'outil f donne la liste des fonctions du script l'éditeur donne des diagnostics sur le script Dock/Undock, flêches en haut à droite

9 S.S.I – 10 : Créer des interfaces avec Matlab Page 9 Voici lexemple du GUI Filtrer: le layout (cf. Filtrer.zip) Voici le spectre de Piano.wav tracé par le GUI Filtrer (lancé en double cliquant sur Filtrer.fig)

10 S.S.I – 10 : Créer des interfaces avec Matlab Page 10 Exemple du GUI Filtrer (suite) : les scripts et instructions %monload.m [name,y,fe]=loadsig('./'); h=findobj(gcf,'tag','fe'); set(h,'string',num2str(fe)) h=findobj(gcf,'tag','slider1'); set(h,'Max',num2str(fe/2)) %montrace.m t=[0:length(y)-1]/fe; plot(t,y) %spectre.m f=[0:R-1]*fe/R-fe/2; sp=fft(y(1:R),R); stem(f,fftshift(abs(sp))) axis([min(f),max(f),0,… max(abs(sp))]) xlabel('fréquence (Hz)') ylabel('signal filtré') grid % monfiltre.m h=findobj(gcf,'tag','edit2') fc=str2num(get(h,'string')) h=findobj(gcf,'tag','edit4') R=str2num(get(h,'string')) K=round(f0*R/fe); f0=K*fe/R; %filtre générateur N = fix(fc*R/fe); % forme la plus arrondie H=[ones(1,N-1),0.9,0.5,0.1,... zeros(1,R-2*N-3),0.1,0.5, ,ones(1,N-2)]; h=fftshift(real(ifft(H))); % réponse impulsionnelle du filtre n=0:R-1; bande= 2*cos(2*pi*[0:R-1]*f0/fe).*h; %tracé réponse harmonique fr=n*fe/R -fe/2; spec=abs(fft(bande)); stem(fr,fftshift(spec)) xlabel('frequence (Hz)'); ylabel('réponse harmonique'); grid on % monspectre.m f=[0:R-1]*fe/R-fe/2; sp=fft(s(1:R),R); stem(f,fftshift(abs(sp))) axis([min(f),max(f),0,… max(abs(sp))]) xlabel('fréquence (Hz)') ylabel('spectre filtré') % bouton 'écouter' wavplay(s,fe,'synch') % monlire.m wavplay(y,fe,'synch') % bouton 'sauver' wavwrite(s,fe,'signal.wav')Y % bouton 'filtrer' S=filter(bande,1,y) %init.m clear all fe=8000 f0=0 R=8192 sigdir='./' %monslider.m h=findobj(gcbo,'tag','slider1'); f0=get(h,'value') h=findobj(gcf,'tag','f0'); set(h,'string',num2str(f0)) monfiltre

11 S.S.I – 10 : Créer des interfaces avec Matlab Page 11 Concevoir un GUI pour compresser un signal avec un banc de filtres. Représenter un croquis de l'interface sur cette page

12 S.S.I – 10 : Créer des interfaces avec Matlab Page 12 Imaginer votre propre GUI pour TD n°8: Préciser ici les scripts nécessaires Concevoir un GUI pour compresser un signal avec un banc de filtres. Préciser les scripts et instructions de ce GUI ici :


Télécharger ppt "S.S.I. 2007 – 10 : Créer des interfaces avec Matlab Page 1 Créer des interfaces avec Matlab. Cours S.S.I. n°10, mai 2007, durée : 1 heure, écrit par Jean-Paul."

Présentations similaires


Annonces Google