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

Calcul scientifique Python Discussion :

Conseil traitement signal: calculer un déphasage de signaux


Sujet :

Calcul scientifique Python

  1. #1
    Membre confirmé
    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
    Points : 476
    Points
    476
    Par défaut Conseil traitement signal: calculer un déphasage de signaux
    Bonjour,

    J'étais sur Matlab, je dois m'enfuir chez Python pour le traitement du signal

    Pour l'instant j'essaye simplement de mesurer le déphasage de plusieurs signaux assez propres car ils viennent de simulations numériques (les formats c'est juste du ASCII sans headers)

    Pièce jointe 272020

    Pourriez vous me renseigner pour me lancer?
    Y'a t il des librairies à utiliser ?
    des programmes de traitement déjà existants pour calculer la Hilbert, l'angle voire simplement le maximum dans une apodisatoin ?

    Bref je pars de 0

    Merci d'avance. Tout type d'aides ou de remarques est la bienvenue.
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Newenda Voir le message
    Pourriez vous me renseigner pour me lancer?
    Y'a t il des librairies à utiliser ?
    Vous pourriez commencer par jeter un œil aux fonctions de traitement des signaux proposées par la bibliothèque scipy (à installer).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé
    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
    Points : 476
    Points
    476
    Par défaut
    Merci j'ai trouvé tout ce qui me fallait !
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

  4. #4
    Membre confirmé
    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
    Points : 476
    Points
    476
    Par défaut
    Je ré ouvre la discussion en ce qui concerne le déphasage de signaux.

    Pour calculer le déphasage de 2 signaux je les transforme sous format analytique avec hilbert, je mesure leur phase instannée avec np.angle en oubliant pas np.unwrap pour éviter les sauts modulo 2 pi.
    Cette méthode a été référencée plusieurs fois ici même
    https://www.developpez.net/forums/d1...asage-signaux/
    https://www.developpez.net/forums/d1...x-sinusoidaux/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    h1= hilbert(signal1);
    h2= hilbert (signal2);
     
    P1=np.unwrap(np.angle(h1));
    P2=np.unwrap(np.angle(h2));
     
    dephasage = np.mean(P2-P1)
    Voici les résultats :

    Nom : DVPsignal.png
Affichages : 2961
Taille : 95,3 Ko

    en colonne on a : sur la 1ere ligne les signaux (signaux1 et signaux2), le spectre sur la 2eme ligne et les déphasage instantanées (P1 et P2) des deux signaux sur la 3eme ligne

    1ere colonne: signaux brutes avec une première onde dont je veux me débarrasser
    on calcul un déphasage de 2,217 rad

    2eme colonne: signaux fenêtrés par la fenêtre de hamming
    on a un déphasage de 4.35

    3eme colone: signaux coupés brutalement dans l'intervalle qui nous intéresse
    déphasage de 4.8

    Mes questions sont:

    - Est ce que cette méthode est adéquate pour mesurer les déphasages de signaux peu périodique comme ici ? y'en a t il une autre ?
    - Comment np.unwrap(np.angle()) définissent ils la période du signal ?
    - d'ou vient le gros décalage de déphasage instantanée que l'on observe à la fin des signaux fenetrés mais du tout sur les signaux brutes ? (en gros pourquoi les deux courbes ne se confondent pas sur une même horizontal comme au début du plot)


    Merci d'avance pour toutes remarques.
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

  5. #5
    Membre confirmé
    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
    Points : 476
    Points
    476
    Par défaut
    je place les infos intéressantes que je trouve sur le sujet


    http://stackoverflow.com/questions/2...etween-signals


    There are several ways that you can measure the phase shift between signals. Between your response, the comments below your response, and the other answers, you've gotten most of the options. The specific choice of technique is usually based on issues such as:

    Noisy or Clean: Is there noise in your signal?
    Multi-Component or Single-Component: Are there more than one type of signal within your recording (multiple tones at multiple frequencies moving in different directions)? Or, is there just a single signal, like in your sine-wave example?
    Instantaneous or Averaged: Are you looking for the average phase lag across your entire recording, or are you looking to track how the phase changes throughout the recording?

    Depending on your answer to these questions, you could consider the following techniques:

    Cross-Correlation: Use the a command like [c,lag]=xcorr(y1,y2); to get the cross-correlation between the two signals. This works on the original time-domain signals. You look for the index where c is maximum ([maxC,I]=max(c) and then you get your lag value in units of samples lag = lag(I);. This approach gives you the average phase lag for the entire recording. It requires that your signal of interest in the recording be stronger than anything else in your recording...in other words, it is sensitive to noise and other interference.

    Frequency Domain: Here you convert your signals into the frequency domain (using fft or cpsd or whatever). Then, you'd find the bin that corresponds to the frequency that you care about and get the angle between the two signals. So, for example, if bin #18 corresponds to your signal's frequency, you'd get the phase lag in radians via phase_rad = angle(fft_y1(18)/fft_y2(18));. If your signals have a constant frequency, this is an excellent approach because it naturally rejects all noise and interference at other frequencies. You can have really strong interference at one frequency, but you can still cleanly get your signal at another frequency. This technique is not the best for signals that change frequency during the fft analysis window.

    Hilbert Transform: A third technique, often overlooked, is to convert your time-domain signal into an analytic signal via the Hilbert transform: y1_h = hilbert(y1);. Once you do this, your signal is a vector of complex numbers. A vector holding a simple sine wave in the time domain will now be a vector of complex numbers whose magnitude is constant and whose phase is changing in sync with your original sine wave. This technique allows you to get the instantaneous phase lag between two signals...it's powerful: phase_rad = angle(y1_h ./ y2_h); or phase_rad = wrap(angle(y1_h) - angle(y2_h));. The major limitation to this approach is that your signal needs to be mono-component, meaning that your signal of interest must dominate your recording. Therefore, you may have to filter out any substantial interference that might exist.
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

Discussions similaires

  1. [Débutant] Calcul du déphasage entre 2 signaux
    Par Dolli04 dans le forum Signal
    Réponses: 2
    Dernier message: 20/11/2016, 13h39
  2. calculs de déphasage des signaux
    Par taiaa92 dans le forum Signal
    Réponses: 1
    Dernier message: 05/02/2016, 22h02
  3. Calcul du déphasage entre deux signaux sinusoidaux
    Par bendesarts dans le forum Signal
    Réponses: 2
    Dernier message: 02/10/2014, 09h33
  4. Calcul intercorrélation entre 2 signaux
    Par jmhohen dans le forum Signal
    Réponses: 1
    Dernier message: 07/03/2007, 18h06
  5. Conseils pour serveur calculs de maths en C
    Par smithofmatrix dans le forum Réseau
    Réponses: 1
    Dernier message: 08/11/2006, 13h51

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