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

MATLAB Discussion :

[subplot] conflit plot et surf


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut [subplot] conflit plot et surf
    Bonjour,

    Voici un code d'ouverture de fichier de signal (.gcf) dans lequel je souhaite tracer en subplot: le signal, le spectrogramme et la FFT :


    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
     
    clear all
    close all
     
     
    RootDir=['C:\Documents\Datas\'];
     
     
    %listDir = dir(RootDir)
     
    FileName = '6c47e2';
     
    cd([RootDir,FileName]) ;
     
    rep=[RootDir,FileName] ;
    ext = '*.gcf';
     
    chemin = fullfile(rep,ext);
     
    list = dir(chemin);
     
     
    % lecture en boucle des signaux dans dossiers
    for n = 1:numel(list)
     
        [list(n).name,ext(3:end)]
     
        [signal,streamID,sps,ist]=readgcffile([list(n).name]);
     
        signalRaw = signal ;
        ind = find(isnan(signal));
        signal(ind)=[] ;
     
        taille = numel(signal);
        duree = taille/sps ; % sps = sample frequency
        temps = linspace(ist,ist+(duree*(1/24/60/60)),taille) ;
     
        %% moyennage du signal = 0
        moySignal=mean(signal) ;
        signal = signal-moySignal ;
     
        %% apodisation par fenetre de hanning
        nH = 3000 ;
        pourcentage_echantillon_han = 1 ; % ! en %
        [windowHann,SigHann,maxSigx] = HannWinCell(signal,nH,pourcentage_echantillon_han);
        signal =  SigHann ;
     
     
        %% spectro
        % Compute the ifft of the signal
        L = numel(signal)
        NFFTbis = 2^nextpow2(L); % Next power of 2 from length of y
        Y = fft(signal,NFFTbis)/L;
        fbis = sps/2*linspace(0,1,NFFTbis/2+1);
     
     
        % % spectrogramme
        nfft = 128 ;
     
        [S,F,T,P] = spectrogram(signal,nfft,[],nfft,sps);
     
     
     
        figure ;
     
         subplot(3,1,1);
        plot(temps, signal,'b');
        hold on
        plot(temps,windowHann,'r')
        plot(temps,signalRaw,'g')
        legend('signal corrected', 'Hanning window','raw signal')
        %  xlim([temps(1) temps(end)]) ;
        title([list(n).name]) ;
        datetick('x','HH:MM','keeplimits')
     
        subplot(3,1,2);
        surf(T,F,10*log10(P),'edgecolor','none');
        axis tight;
        view(0,90);
     
        subplot(3,1,3);
        plot(fbis,2*abs(Y(1:NFFTbis/2+1)))
     
     
        clear signal streamID sps ist ;
    end
    Seulement lors de la création du spectrogramme (subplot(3,1,2)), le subplot précédent (du signal) disparait laissant celui-ci gris.. comme vous pouvez le voir:



    Aucun message d'erreur, ni de warning.. je ne vois pas du tout d'où ça pourrait provenir..

    Une idée?

    Merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut
    Pour illustrer le problème, voici un .zip dans lequel test.mat contient toutes les variables nécessaires pour faire un test rapide suivant le code simplifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    clear all
    close all
     
    load test
     
    figure ;
     
         subplot(2,1,1);
        plot(temps, signal);
      subplot(2,1,2);
        surf(T,F,10*log10(P),'edgecolor','none');
    Ça serait sympa si vous pouviez me dire si chez vous, oui ou non vous rencontrez ce problème d'affichage.

    Merci d'avance

    (PS: je travail avec la version R2013b)
    Fichiers attachés Fichiers attachés

  3. #3
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 885
    Par défaut
    salut

    pas le temps de tester, mais ca vient peut etre de ton 'edgecolor','none' ou quelque chose comme ca
    si c'est ca, tu peut regarder des fonction comme freezecolor

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut
    Merci de ta réponse.

    mais malheureusement j'ai déjà essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    clear all
    close all
     
    load test
     
    figure ;
     
         subplot(2,1,1);
        plot(temps, signal);
      subplot(2,1,2);
        surf(T,F,10*log10(P));
    Ça ne change rien.

    mais si je change le premier plot et que j'écris par exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    clear all
    close all
     
    load test
     
    figure ;
     
         subplot(2,1,1);
        plot(rand(20000,1));
      subplot(2,1,2);
        surf(T,F,10*log10(P),'edgecolor','none');
    ça marche...

    Je sais pas c'est magique non?

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2012
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 97
    Par défaut
    Bonjour,

    Testé à l'instant avec un matlab2013b sous win7 64 bits, j'ai la même chose que toi, avec ou sans edgecolor :


  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut
    Merci Adjen, au moins tu prouves que je ne suis pas fou !

    Quelqu'un qui a une version alpha et non beta pourrait essayer pour voir? merci d'avance

  7. #7
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 885
    Par défaut
    cela viens peut être de la différence d'échelle entre ton signal(-1e5 5e4) et ta surface (-100 100) (ton rand lui reste entre 0 et 1)
    la colormap de ta surface doit être automatiquement appliqué à ton plot

    en tout cas en 2013a j'ai le même pb

    une piste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    clear all
    close all
    
    load test
    
    figure ;
        
         subplot(2,1,1);
        plot(temps - temps(1), signal,'b-');
      subplot(2,1,2);
        surf(T,F,10*log10(P),'edgecolor','none');
    ca marche : c'est un pb d'échelle

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tracer un plot 3D (avec surf?) à partir d'un fichier
    Par DJEcalcul dans le forum MATLAB
    Réponses: 8
    Dernier message: 02/04/2015, 12h00
  2. surf + plot > planete + satellite
    Par fanchois dans le forum MATLAB
    Réponses: 9
    Dernier message: 28/07/2009, 16h58
  3. Plot fonction surf dans plusieurs plans
    Par AppleGuy dans le forum MATLAB
    Réponses: 2
    Dernier message: 30/06/2006, 17h59
  4. [Technique] Conflits entre plusieurs requêtes
    Par Neowile dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 24/03/2003, 09h37

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