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 :

Analyse spectrale dans ≠ intervalles de temps


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2014
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 27
    Points : 11
    Points
    11
    Par défaut Analyse spectrale dans ≠ intervalles de temps
    Bonjour à tous !

    Je me permets de vous solliciter au sujet de mon code.
    J'aimerais définir le spectre de mon signal dans différents intervalles de temps.

    Voici mon signal :


    Avec mon code, je suis capable de déterminer le spectre de ce signal.
    Mais l'idée est vraiment de segmenter ce signal en 5 zones : [T1 T2] [T3 T4] [T5 T6] [T7 T8] [T9 T10] et de calculer le spectre correspondant à chaque zone.

    L'idée a beau être claire dans ma tête, elle n'est pas claire dans mes doigts. J'ai essayé d'écrire mon code de 1001 facons, je ne suis pas encore tombée sur la bonne...

    Voici une partie de mon code actuel, qui me semble le plus proche de la solution:

    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
    Time_RR1_16Hz = interp1(times_rr, RR_interval_ms, Time_orig, 'spline');
        Time_RR1_16Hz =  Time_RR1_16Hz - mean( Time_RR1_16Hz);
     
     
       % TRANSITION POINTS - RR
       x_RR = [1115 14400 15560 24220 24940 28740 30910 38680 39340 48010];
       y_RR = [35.03 27.06 -46.51 -40.51 25.2 30.75 -49.61 -34.13 32.19 4.636];
     
       Zone1_RR = (x_RR(1:2), y_RR(1:2));
       Zone2_RR = (x_RR(3:4), y_RR(3:4));
       Zone3_RR = (x_RR(5:6), y_RR(5:6));
       Zone4_RR = (x_RR(7:8), y_RR(7:8));
       Zone5_RR = (x_RR(9:10), y_RR(9:10));
     
       p = 256; 
       [Pxx,f] = pburg( Zone1_RR,p,1028,16); % spectrum estimate
       figure (1);
       subplot(3,1,1);
       plot(Time_orig,  Zone1_RR,'k'); xlabel('Time [s]');ylabel('RRi [ms]');
       xlim([0 3000]); ylim([-50 300]);
       subplot(3,1,[2 3]);
       plot(f,Pxx,'k'); xlim([0 0.5]); xlabel('Frequency [Hz]'); ylabel(sprintf('PSD [ms^2/Hz]'));
    Seulement, j'ai une erreur de : ) } ) quand je définis les zones dans lesquelles je veux déterminer le spectre... Je dois avoir les yeux rivés dessus depuis trop longtemps.

    Néanmoins, pensez-vous que je suis sur la bonne voie ?

    Je vous remercie d'avance pour votre aide !

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    A tout hasard :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Zone1_RR = [x_RR(1:2), y_RR(1:2)];
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2014
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Merci pour ta réactivité et pour ta réponse !

    J'obtiens l'erreur suivante :
    Error using arburg (line 56)
    The length of input vector X
    must at least 257.
    
    Error in arspectra (line 76)
    [a,v] = feval(method,x,p);
    
    Error in pburg (line 88)
    [Pxx,freq,msg,units,~,options,msgobj]
    =
    arspectra(method,x,p,varargin{:});
    
    Error in Session11 (line 79)
       [Pxx,f] = pburg(
       Zone1_RR,p,1028,16); %
       spectrum estimate
    Alors j'ai vérifié ce que Zone1_RR contient et effectivement, il y a un problème de longueur.
    Zone1_RR contient 4 valeurs : 1115 14400 35,03 27,06.

    L'idée serait que Zone1_RR corresponde à la portion du signal entre les points T1 et T2.

    Serait-ce juste un problème d'écriture ?

    Je vous remercie pour votre aide !

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Quelque chose comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Zone1_RR = y(x_RR(1):x_RR(2));
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2014
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Je viens d'essayer avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Zone1_RR =   y_RR(x_RR(1):x_RR(2));
    Et j'obtiens l'erreur suivante :

    "Index exceeds matrix dimensions.
    
    Error in Session11 (line 72)
       Zone1_RR =    y_RR(x_RR(1):x_RR(2));"
    Comme si j'en demandais plus que ce qu'il y a dans la matrice...

    Une idée quelconque pour m'aider à avancer ?

    Merci d'avance pour votre aide...

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2014
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    C'est bon ! je pense avoir trouvé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Zone1_RR = Time_RR1_16Hz(1115 : 14400);
    Si je regarde les valeurs contenues dans Zone1_RR, il y a bien les valeurs désirées.

    SAUF QUE maintenant, j'ai un problème d'affichage avec plot :

    Vectors must be the same lengths

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2014
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    J'AI TROUVE LA SOLUTION !!!!!!

    En fait, c'est tout bêtement parce que je n'avais pas sélectionné le même intervalle sur l'axe temporel !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
       % TRANSITION POINTS - RR
       x_RR = [1115 14400 15560 24220 24940 28740 30910 38680 39340 47905];
    
      Zone1_y = Time_RR1_16Hz(1115 : 14400);
      Zone1_x = Time_orig (1115: 14400);
      
      
       p = 256; % AR model order
       [Pxx,f] = pburg( Zone1_y,p,1028,16); % spectrum estimate
       figure (1);
       subplot(3,1,1);
       plot(Zone1_x, Zone1_y,'k'); xlabel('Time [s]');ylabel('RRi [ms]');
    ALLEZ LOUIA !

    Merci pour vos pistes !

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

Discussions similaires

  1. [XL-2007] Calculer le nombre d'heure dans un intervalle de temps
    Par sofianeb dans le forum Excel
    Réponses: 2
    Dernier message: 13/04/2010, 16h06
  2. Réponses: 7
    Dernier message: 17/06/2008, 21h58
  3. Synchronisation de deux fonctions dans un intervalle de temps
    Par florentino dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 03/01/2008, 12h50
  4. Synchronisation de deux fonctions dans un intervalle de temps
    Par florentino dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 22/12/2007, 22h45
  5. Réponses: 7
    Dernier message: 20/07/2006, 10h29

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