Comparaison entre deux signaux
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Comparaison entre deux signaux



  1. #1
    invitec935934f

    Question Comparaison entre deux signaux


    ------

    Bonjour,

    Je travail actuellement sur la comparaison de deux signaux de type .wav avec Matlab. Le truc c'est que je vois bien qu'il y'a une relation entre les deux graphiquement mais j'ai essaye plusieurs méthodes pour comparer les deux avec des valeurs concrète mais ça marche pas trop si vous avez des suggestion d'algorithme .. le dernier que j'ai utilise c'était pour comparer la distance entre chaque pics (max et min ) pour chaque signal, mais ça a pas donne ce que je voulais, voila l'algo:
    Code:
    clear all
    close all
    clc
    
    % EPGG
    [x3,fs3]=audioread('/Users/C/Documents/2019_StageCelia/Data/ePGG_EGG/Loc1_AA/Document video_2018-04-27 16-19-46/wav/QuickDAQ Data-7171_3.wav');
    T3=1/fs3;     		      	 %Période
    L3=length(x3);   		      	 %Longueur du signal
    t3=(0:L3-1)*T3; 
    deb=4.5*fs3;
    fin=5*fs3;
    %x3=x3./0.2;
    sdegg3 = diff([0;x3]);
    B = smoothdata(sdegg3);
    x3_temps=[x3(deb:fin)];
    B_temps=[B(deb:fin)];
    % EGG
    [x2,fs2]=audioread('/Users/C/Documents/2019_StageCelia/Data/ePGG_EGG/Loc1_AA/Document video_2018-04-27 16-19-46/wav/QuickDAQ Data-7171_2.wav');
    T2=1/fs2;     		      	 %Période
    L2=length(x2);   		      	 %Longueur du signal
    t2=(0:L2-1)*T2;     %Vecteur temps
    %x2=x2./0.4;
    sdegg2 = diff([0;x2]);
    A = smoothdata(sdegg2);
    x2_temps=[x2(deb:fin)];
    A_temps=[A(deb:fin)];
    figure
    subplot(121)
    plot(B_temps,'k')  %dessiner le signal
    title('Derivee du Signal bruité enregistré EPGG')
    xlabel('Temps (secondes)')
    subplot(122)
    plot(A_temps,'y')  %dessiner le signal
    title('Derivee du Signal bruité enregistré EGG')
    xlabel('Temps (secondes)')
    [pksp,locvalp]= findpeaks(B);
    [pks,locval]= findpeaks(A);
    pkspm=0;
    pkspM=0;
    pksm=0;
    pksM=0;
    i=0;
    j=0;
    locvalpm=0;
    locvalpM=0;
    locvalm=0;
    locvalM=0;
    for i=1:length(pksp)
        
       if (pksp(i) < 0)
        
        pkspm(i,:) = pksp(i); locvalpm(i,:)=locvalp(i);
       else
            pkspM(i,:)= pksp(i);locvalpM(i,:)=locvalp(i);
    end
        end
    
    for j=1: length(pks)
        if (pks(j) < 0 )
        pksm(j,:)= pks(j);locvalm(j,:)=locval(j);
        else
            pksM(j,:)= pks(j);locvalM(j,:)=locval(j);
        end
    end
    
    moyPepggm=mean(diff(locvalpm));
    moyPepggM=mean(diff(locvalpM));
    moyPeggm=mean(diff(locvalm));
    moyPeggM=mean(diff(locvalM));
    moyPepggm
    moyPepggM
    moyPeggm
    moyPeggM

    -----
    Dernière modification par Antoane ; 10/05/2019 à 15h15. Motif: Ajout des balises code

  2. #2
    invite6c250b59

    Re : Comparaison entre deux signaux

    Citation Envoyé par celiaaf Voir le message
    ce que je voulais
    Ce n'est pas clair pour moi ce que tu cherches à faire. Si tes signaux A1 et A2 peuvent se comparer en fonction de la position du max alors une méthode simple est
    Code:
    res = find(A1==max(A1)) - find(A2==max(A2))
    ...mais le décalage avec ton propre code suggère que tu essais de faire quelque chose de plus compliqué. Quoi?

  3. #3
    invitec935934f

    Re : Comparaison entre deux signaux

    Ce que je veux c'est comparer la distance entre tous les max et tous les min de la dérivées du premier signal, faire de même avec celle du second signal, et ainsi voir si ces distance sont pareils car si ça trouve ils sont pas en phases et surtout normalement ils donnent des informations inverse c'est a dire que quand lun est au max autre et au min dautant plus qu'il y a plusieurs min et max je ne peux utiliser la fonction max qui cherche juste le plus grand jutilise findpeaks pour trouver tous les pics, après vu que les distance ne sont pas pareils soit il y a incohérence entre les deux signaux soit il faudrait une autre méthode ...

  4. #4
    invite6c250b59

    Re : Comparaison entre deux signaux

    Citation Envoyé par celiaaf Voir le message
    Ce que je veux c'est comparer la distance entre tous les max et tous les min de la dérivées du premier signal, faire de même avec celle du second signal, et ainsi voir si ces distance sont pareils
    "comparer la distance entre (...)", c'est ce que fait ton code. Tu n'es pas content du résultat. Donc ce n'est pas ce que tu veux faire.

    Je suppose que ton vrai besoin est quelque chose du genre "montrer si deux signaux sont en phase, avec un algorithme robuste au bruit, malgré que les signaux ne soient pas les mêmes". Pour cela il vaut mieux avoir une idée de comment les signaux se comparent, et de la nature du bruit. Bref, peux-tu montrer un graphique de ces signaux, plus les pics trouvés pour voir s'il n'y a pas un problème à ce niveau? Exemple (non testé mais ça devrait marcher tel que):

    Code:
    pics1 = ones('like', A) * min(A); pics1(locval)= max(A); %pour vérifier findpeaks
    pics2 = ones('like', B) * min(B); pics2(locvalp)= max(B);
    hold off; plot(A,'b'); hold on; plot(B, 'k'); plot(pics1, 'r'); plot(pics2,'g'); hold off

  5. A voir en vidéo sur Futura
  6. #5
    invitec935934f

    Re : Comparaison entre deux signaux

    En fait, j'ai deux machines EPGG et EGG. Le laboratoire ou je travail qui dispose d'un système de détection de lumière (électrophotoglotographe - ePGG). Il est utilisé pour détecter l'ouverture de la glotte et la vibration des plis vocaux. Il existe d'autres instruments qui permettent de détecter les vibrations des plis vocaux mais ces instruments n'utilisent pas le principe de photodétection mais utilisent un courant continu qui passe entre deux électrodes (Electroglotographe - EGG). J'ai plusieurs données des enregistrement pris en simultanée des deux machines, mon but est de compare les données des deux machines voir si elles sont similaires ou complémentaire ou rien a voir. Il faut savoir que l'EPGG montre du signal quand les plis sont ouvert car la lumière et rien quand ils sont fermées alors que l'EGG lui c'est le contraire signal quand courant passe donc plis fermes et pas de signal quand les plis sont ouvert puisque le courant ne passe pas. Ce qu'il faut donc retenir c'est qu'apriori les deux techniques donne les même informations juste inversement mais bien sur les amplitudes sont différentes puisque ça dépend autre paramètres. c'est pourquoi j'avais pense a voir la distance entre chaque pics max dans un intervalle pour le signal EPGG et faire de même avec l'EGG et normalement les distances serait pareil. autant plus que schématiquement on voit une similarités. Bien évidemment je travail avec la dérivée du signal car c'est beaucoup plus simple. je vais vous montrer quelques graphiques
    Capture d’écran 2019-05-14 à 10.39.42.jpg
    Capture d’écran 2019-05-14 à 10.43.14.jpg

  7. #6
    invite6c250b59

    Re : Comparaison entre deux signaux

    Beaucoup plus clair merci. PCA. Ton problème hurle pour être traité par une PCA.

    (ps: si tu n'as pas le module stat il y a du code très facile à adapter en fouillant octave)

  8. #7
    invitec935934f

    Re : Comparaison entre deux signaux

    Je travaille sur Matlab, c'est quoi une PCA ???

  9. #8
    invite6c250b59

    Re : Comparaison entre deux signaux

    https://fr.wikipedia.org/wiki/Analys...es_principales

    octave est un genre de matlab libre

Discussions similaires

  1. mesure de dephasage entre deux signaux
    Par invitec35bc9ea dans le forum Électronique
    Réponses: 23
    Dernier message: 01/04/2017, 11h20
  2. comparaison entre deux courbes
    Par invitef8fc1962 dans le forum Mathématiques du supérieur
    Réponses: 7
    Dernier message: 15/08/2016, 17h41
  3. Différence de phase entre deux signaux
    Par invite235c540d dans le forum Physique
    Réponses: 17
    Dernier message: 21/02/2015, 07h15
  4. OriginLab: La comparaison entre deux courbes
    Par invitef907a375 dans le forum Physique
    Réponses: 0
    Dernier message: 26/06/2014, 10h32
  5. Comparaison angle de phase de deux signaux
    Par inviteec8d8fa2 dans le forum Électronique
    Réponses: 8
    Dernier message: 01/12/2011, 20h12