IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques Discussion :

Intégrer des programmes dans une interface graphique avec GUIDE


Sujet :

Interfaces Graphiques

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Intégrer des programmes dans une interface graphique avec GUIDE
    Salut à tous, je m'inscris ici en desespoir !
    Je vous expose ma situation.

    Je travaille sur un projet d'accoustique avec mon ami.
    Le but est de recueillir avec un micro des signaux dans une salle, et ensuite analyser les signaux ainsi recueillis (analyse frequentielle, temporelle, spectrogramme etc.)

    Je precise que je suis absolument débutant et completement novice avec matlab, c'est la premiere fois que je touche à ce truc ! Ca a l'air mégaperformant mais c'est pas si facile d'acces !

    Mon collegue de travail a pondu un programme qui permette d'ouvrir un fichier son/signal et d'effectuer les differentes analyses dessus.

    Son programme marche et je suis chargé, à l'aide de GUIDE dans matlab de creer une interface interactive pour exploiter le programme avec :

    un pushbutton qui permette de selectionner le fichier a ouvrir
    un pushbutton qui effectue l'analyse frequentielle et qui affiche le resultat dans une zone graphique
    un pushbutton qui effectue l'analyse temporelle etc.
    un pushbutton qui effectue le spectrogramme etc.
    un pushbutton qui permette a chaque fois de sauvegarder l'image/graphe obtenu dans la zone graphique.

    Question :
    est-ce faisable ?
    comment ?
    j'ai deja fait un fichier .FIG avec mes pushbuttons etc mais mon probleme c'est comment relier ca au programme de mon ami, je vous mets le code ci apres:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    % ouverture de fichier
    [file,D]=uigetfile('*AICH1*','Selection fichier');   %permet de sélectionner le fichier AICH1 dans une fenêtre séparée
    fud=fopen(file,'r','b');    %ouvre le fichier file et autorise la lecture
        s = fread(fud,'double');    %lit le fichier que représente fud et le met dans s
        fclose(fud);                %referme le fichier
     
    s = s - mean(s);            %réajuster la mesure en cas d'amplitude non centrée en zéro
     
    % calcul fréq échantillonnage
    filename = file;
    filename = filename(14:18);
    T = str2double(filename)/1000;     %transforme le string en num
    fsd = length(s)/T;  %fréquence d'échantillonnage
    nfsd = fsd/2;    %fréquence de Nyquist
     
    % filtrage
    % [b,a]=butter(8,20/nfsd,'high');     %calcul des paramètres de filtrage. (degré du filtre,fréquence de coupure/f Nyquist, passe bas, haut)
    % sf=filter(b,a,s);   %filtrage de s donne sf
     
    % analyse temporelle
    plot(s),ylabel('Volt'),xlabel('Samples');
    title('Analyse temporelle');
    xlabel('Time (s)');
    ylabel('Pression (Pa)');
     
    fileAF = file(1:end-6);
    fileAT = strcat(fileAF, '_AT');
    saveas(gcf, fileAT, 'fig');
     
    % analyse fréquentielle
    Hs = spectrum.periodogram;
    saf = psd(Hs,s,'Fs',fsd);
     
    figure; plot(saf);
    title('Densité spectrale moyenne');
    xlabel('Frequency (Hz)');
    xlim([0.01 0.1]);
    ylim([-150 0]);
     
    fileAF = file(1:end-6);
    fileAF = strcat(fileAF, '_AF');
    saveas(gcf, fileAF, 'fig');
     
     
    % spectrogramme
    [Sas, Fas, Tas] = spectrogram(s,1024*16,1024*13,1024*16,fsd);
     
    figure; surf(Tas, Fas, 20*log10(abs(Sas)),'EdgeColor','none');
    axis xy; axis tight; colormap(jet); view(0,90);
    ylim([10 80]);
    title('Sonogramme par FFT');
    xlabel('Time (s)');
    ylabel('Frequency (Hz)');
    colorbar;
     
    fileAS = file(1:end-6);
    fileAS = strcat(fileAS, '_AS');
    saveas(gcf, fileAS, 'fig');
    Toute aide bienvenue avec d'infinis remerciements !

  2. #2
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 143
    Points : 102
    Points
    102
    Par défaut
    oui si tu as deja tes fonctions sous matlab qui fonctionnent bien, les relier a l'interface n'est pas le plus dur.
    une fois que tu as realise ton .fig, eventuellement mis des noms qui allaient bien a tes differents boutons (remplir le champ tag) matlab te genere le fichier .m qui va avec et tu n'as plus qu'a remplir les trous.

    a chaque pushbuttone st associe une fonction nomdubouton_Callback : c'est cette fonction qui s'executera quand tu cliqueras sur ton bouton. tu n'as donc qu'a remplir ce Callback.
    par exemple pour le bouton pour selectionner le fichier a ouvrir voici un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    % --- Executes on button press in browsefile.
    function monBouton_Callback(hObject, eventdata, handles)
    % hObject    handle to browsefile (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % selectionner le fichier a ouvrir
     
    [filename,pathname] = uigetfile({'*.m';'*.mdl';'*.mat';'*.*'},'File Selector')  %ouvre une %fenetre ou l'utilisateur selectionne le fichier qui l'interesse. tu peux preciser le type de %fichiers a afficher en choisissant le type d'extentsion. ici c'est pour des fichiers matlab.
    editmat = sprintf('%s%s', pathname, filename)
     
    set(handles.filename, 'String', editmat);
     
    guidata(hObject,handles);
    regarde dans l'help de matlab uigetfile. dans le meme genre il y a uigetdir, juste pour recuperer le nom d'un fichier.

    une fois que tu auras recuperer le fichier son, tu peux le passer en variable globale pour qu'il soit accessible. Pour cela declare au debut de chaque Callback ou tu en a besoin :
    ensuite dans les callback associe a tes pushbutton tu n'as plus qu'a lancer tes fonctions deja ecrites par ailleurs avec pour argument ta variable globale MonSon.

    si tu veux plus de details n'hesite pas (je ne suis peut-etre pas tres claire dans mes explications...)
    Matlab version R2006b et R2007a, sous Linux ou Windows

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Ok merci deja pour cette aide précieuse.
    je vais deja tester le bouton d'appel fichier apres manger et je reviens si j'ai des soucis.
    C'est tres cool encore une fois merci !

  4. #4
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 143
    Points : 102
    Points
    102
    Par défaut
    de rien.
    ton programme est deja bien ecrit, enfin tout est bien separe, donc tu n'as plus qu'a le couper et a mettre chaque element dans le Callback qui va bien, et passer les variables globales entre Callback. si certaines fonctions sont longues, ecrit le code dans un fichier a part, et appelle cette fonction dans le callback.
    Matlab version R2006b et R2007a, sous Linux ou Windows

Discussions similaires

  1. afficher des variables dans une interface graphique
    Par massi15301 dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 15/03/2012, 12h02
  2. utilisation des structures dans une interface
    Par ralf91 dans le forum C#
    Réponses: 5
    Dernier message: 22/01/2010, 16h55
  3. [AC-2003] Gérer des doublons dans une importation Excel
    Par Perce le vent dans le forum Modélisation
    Réponses: 3
    Dernier message: 19/08/2009, 18h59
  4. gérer des pdf dans une base de données
    Par marion5515 dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 28/04/2008, 15h40
  5. Comment gérer des mp3 dans une animation flash ?
    Par jonglo-sapiens dans le forum Flash
    Réponses: 3
    Dernier message: 03/01/2008, 10h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo