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 pour détecter les similitudes entre 6 vecteurs


Sujet :

MATLAB

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut Analyse spectrale pour détecter les similitudes entre 6 vecteurs
    Bonjour à tous,

    J'ai ouvert il y a peu un sujet relatif à la densité spectrale de puissance DSP et au filtrage : ici ; cependant je n'ai reçu de réponse et je ne sais pas moi-même que faire des résultats obtenus. Je repars donc sur une autre piste.

    Le problème est le suivant : je dispose de 6 pistes d'impédances qui, en résumé, sont 6 vecteurs constitués chacun d'une colonne. Je souhaiterais, à l'aide d'une analyse spectrale, pouvoir mesurer les similitudes éventuelles existantes entre ces vecteurs. Malheureusement je n'ai pas une idée claire de comment procéder. Malgré tout, j'ai débuté le travail par le calcul d'une fft et du fftshift pour chacun des 6 vecteurs. En me calquant ensuite sur ce que j'ai pu faire par le passé je représente le module du logarithme de la partie réelle des 6 vecteurs spectraux résultant. Pour rendre plus clair, mon propos voici le code utilisé et le résultat :

    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
    %--------------------------------------------------------------------------
     
    %ANALYSE EN UTILISANT LA FFT.
     
    %--------------------------------------------------------------------------
     
    valeurs_Imp1_fft=fftshift(fft2(valeurs_Imp1));
    valeurs_Imp2_fft=fftshift(fft2(valeurs_Imp2));
    valeurs_Imp3_fft=fftshift(fft2(valeurs_Imp3));
    valeurs_Imp4_fft=fftshift(fft2(valeurs_Imp4));
    valeurs_Imp5_fft=fftshift(fft2(valeurs_Imp5));
    valeurs_Imp6_fft=fftshift(fft2(valeurs_Imp6));
     
    %Visualisation des résultats issus du filtrage fft en prenant les modules
    %des logarithmes des parties réelles.
     
    figure(4)
    plot(abs(log(real(valeurs_Imp1_fft))),'c')
    hold on
    plot(abs(log(real(valeurs_Imp2_fft))),'r')
    hold on
    plot(abs(log(real(valeurs_Imp3_fft))),'g')
    hold on
    plot(abs(log(real(valeurs_Imp4_fft))),'b')
    hold on
    plot(abs(log(real(valeurs_Imp5_fft))),'k')
    hold on
    plot(abs(log(real(valeurs_Imp6_fft))),'m')
    hold on
    title('log du module de la partie réelle de la fft des impédances pour un patient donné')
    legend('Imp1','Imp2','Imp3','Imp4','Imp5','Imp6','Location','NorthEast')
    xlabel('fréquences')
    ylabel('impédances')


    Je compte faire de même pour la partie imaginaire, module et phase. Mais au regard de cette première figure, qu'en pensez-vous ? Est-ce que quelque chose saute directement au yeux ?

    Je sollicite plus généralement votre aide afin de savoir comment je pourrais concrètement mesurer les ressemblances entre 6 vecteurs. J'ai, en outre, penser à des calculs de corrélations mais je ne sais pas tout à fait comment procéder.

    Je donc serais ravi si vous me donniez ne serait-ce que des idées d'études que je pourrais mener sur ces 6 vecteurs ou des calculs, et particulièrement des idées de fonctions matlab à utiliser et paramétrer.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 37
    Points : 38
    Points
    38
    Par défaut
    Oui moi aussi, intuitivement j'aurais commencé par calculer la corrélation entre les différents vecteurs. Tu as 3 fonctions (au moins) :
    corr2
    corr
    corrcoef
    Je te laisse regarder la doc pour avoir plus de détail. Peut-être que le plus rapide sera d'utiliser une matrice contenant tous tes vecteurs et de faire une autocorrélation (avec corr ou corrcoef) sur cette matrice pour mettre en évidence des similitudes ?
    Plus le résultat d'une corrélation est proche de 1 (en valeur absolue), plus les vecteurs sont corrélés. Vers 0, les vecteurs sont totalement indépendants.

    J'espère que je n'ai pas dit trop de bêtises .

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut
    Merci L'hermine pour ta réponse. J'ai un peu essayé quelques petites choses. Si tu souhaites m'aider voici quelques vecteurs que j'ai testé.

    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
    pentes_1_psd=[-1,3565e+006
    -22349];
     
    pentes_2_psd=[-1,4842e+006
    -1,3338e+005];
     
    pentes_3_psd=[-1,0964e+006
    -1,5398e+005];
     
    pentes_4_psd=[-1,2941e+006
    -1,4085e+005
    -28457
    -31980];
     
    pentes_5_psd=[-2,0626e+006
    -6,3817e+005
    -50279];
     
    pentes_6_psd=[-9,9956e+005
    -1,9489e+005];
    Il s'agit donc de mesurer les similitudes entre ces 6 vecteurs. Pour commencer, comment faire pour rassembler tous ces vecteurs dans une même matrice comme tu le préconises vu qu'ils n'ont pas le même nombre de colonnes ? Je pourrais rajouter des 0 afin de "compléter" les vecteurs mais ne vais-je pas fausser ainsi les calculs ?

    Ensuite j'ai essayé ceci au hasard :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [x_corr y_corr]=xcorr(pentes_1_psd,pentes_4_psd);
    figure
    plot(x_corr,y_corr)
    J'obtiens une figure que je n'arrive pas à interpréter :



    De même j'ai essayé une autocorrélation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x_corr =xcorr(pentes_1_psd);
    figure
    plot(x_corr)
    Ce qui fournit :



    Ceci semble montrer que l'autocorrélation du premier vecteur est maximale au centre. Mais bon que faire avec cette autocorrélation ? Je chercher les similitudes entres les 6 vecteurs pas entre un vecteur et lui-même.

    Enfin j'ai essayé corrcoeff qui ne marche que pour les vecteurs de même taille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    corrcoef(pentes_1_psd,pentes_6_psd)
    Mais le résultat est toujours une matrice de 1. Dois-je en conclure que les vecteurs testés sont tous très semblables ? Pourtant numériquement, rien qu'en regardant les deux premiers il y a des différences.

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut
    Bon, de plus, j'ai essayé de faire quelque chose en écrivant une fonction qui crée une matrice avec les vecteurs pentes précédents : ils sont placés dans l'ordre sur les colonnes de cette matrice et il y a des 0 là où les nombres n'existent pas. En gros on a quelque chose de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    a   b   c   d   e  f
    a1 b1 c1 d1 e1 f1
    0  0   0   d2 e2  0
    0  0   0   d3 0   0
    0  0   0   0   0   0
    0  0   0   0   0   0
    En utilisant la fonction corr je réalise l'autocorrélation et j'obtiens des 1 sur la diagonales et autour que des nombres très proches de 1. Bref les 0 faussent les calculs d'une part et d'autre je ne sais pas quelle signification donner à une telle corrélation.

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut
    Pour qui aura envie de me lire et de me répondre je poursuis mes avancées et explications.

    Entre temps j'ai écris une fonction qui pour 6 vecteurs d'impédance, lesquels possèdent des milliers de valeurs mais même taille, renvoie toutes les corrélations possibles : 12,13,14,ect et qui recherche la corrélation maximale et minimale tout en renvoyant les pistes touchées. J'avais alors en tête de faire de même avec 3,4,5 ou même 6 vecteurs mais c'est assez difficile : par exemple avec 3 pistes si on veut calculer la corrélation 123 avec la fonction corr, on se heurte à la difficulté suivante : comment simuler une corrélation entre 3 pistes à l'aide de 2 vecteurs seulement (car corr n'accepte que 2 vecteurs) ? J'ai pensé rassemblé 2 vecteurs (par exemple 1 et 2) dans un unique vecteur et faire la corrélation avec 3. Mais on a plus la même taille donc corr ne fonctionne pas. J'ai également essayé de rassembler 12 et 23 ce qui donne donc deux vecteurs dont on peux calculer la corrélation. Mais bon, j'ignore la pertinence et la valeur de vérité à accorder à ce type de calcul si bien que j'ai laissé tombé et fait simplement le calcul avec 2 vecteurs. Si vous avez une idée de comment procéder n'hésitez pas à me la communiquer !

    J'ai également fait un nouveau travail avec la FFT et FFTSHIFT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    valeurs_Imp1_fft=fftshift(fft2(valeurs_Imp1));
    De même pour chaque piste. J'ai ensuite représenté le module du logarithme de la partie réelle de ces grandeurs, de même celui de la partie imaginaire, ainsi que le module simple et la phase de la fft. De nombreux essais donnent une allure semblable à ce qui suit :



    Il apparaît que Imp6 prédomine spectralement (courbe rose). Ce que je me demande à présent c'est comment mettre cela en évidence ? Je pensais à calculer l'air des différentes domaines, en montrant que celui rose est plus important. Que pourrais-je faire d'autre ?

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/07/2011, 17h25
  2. Réponses: 5
    Dernier message: 15/08/2008, 16h08
  3. Réponses: 4
    Dernier message: 16/04/2008, 11h12
  4. [W3C] Recherche d'un logiciel pour détecter les balises qui ne sont pas fermées
    Par Etanne dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 19/11/2007, 16h55

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