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

C++ Discussion :

FFT et phase


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 29
    Par défaut FFT et phase
    Bonjour


    Je recherche à faire l'acquisition d'un signal, de le transformer en FFT et de le comparer à une autre FFT.

    Le soucis que j'ai est de savoir s'il est possible en C++ de connâitre la phase d'une FFT.

    L'utilisation serait BASS, FMOD (si je peux éviter, tant mieux) ou autre moyen permettant de faire une FFT.


    Concrêtement, je place 2 micros au centre de 2 enceintes emettant le même son.
    Chaque micro aura la même FFT (car même signal) même si une des enceinte est plus loin que l'autre.


    Enceinte A-> micro A -> FFT A (mets temps A )
    Enceinte B -> micro B -> FFT B (mets temps B)
    FFTA = FFTB car même signaux mais temps A # temps B

    La, seule la phase (ou décalage temporel -le temps que mets le son pour aller d'une enceinte vers un des micros centraux) peut définir cette différence de temps.



    Savez vous s'il est possible (et en utilisant quelle fonction) de récupérer cette différence de phase / de temps sous C++?

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    La phase d'une FFT ?? Chaque coefficient de la FFT d'un signal a une phase, donc je ne vois pas trop où tu veux en venir.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 29
    Par défaut
    Ce que je veux faire, c'est calculer le décallage temporel de 2 séries de fourier identique (même signal).

    En effet, mon signal f(x) va me donner une FFT = f1 + f2 + ... sans savoir lequel arrive en premier.

    Pour reprendre mon exemple, le micro sité le plus pres de l'enceinte "recevra" le signal plus tot que le micro sité le plus loin de l'autre enceinte.

    Enceinte 1 est située à 1 m de mon micro 1
    Enceinte 2 est située à 11 m de mon micro 2
    le son emis par l'enceinte 1 est le même que par l'enceinte 2

    la différence entre le signal 1 et le signal 2 est le temps que le son met pour parcourir 10 m (11-1).

    Au niveau signal, je vais avoir Signal 1 = Signal 2 + Temps des 10 m.


    Je ne sais pas si j'ai été clair mais ce que je recherche à connaître, c'est la valeur T (temps que le son met pour faire 10 m dans mon exemple pour a terme, définir la différence de distance connaissant le temps et la vitesse)


    Merci d'avance

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Si tu fais le rapport entre les 2 FFTs, tu auras le déphasage et donc d'après la fréquence, tu auras le décalage temporel pour chaque fréquence, donc tu auras une approximation du décalage temporel réel.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 29
    Par défaut
    rapport = division ?

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    ben oui.

  7. #7
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Ce que je veux faire, c'est calculer le décallage temporel de 2 séries de fourier identique (même signal).
    Les deux FFT ne sont pas identiques, elles diffèrent effectivement (essentiellement) par la phase des coefficients.
    Si les deux signaux ne diffèrent que par un décalage temporel (retard pur), alors la difference de phase entre eux est linéaire en fonction de la fréquence.
    Pour chaque coefficient calcule la phase dans les 2 FFT et fait la différence. Tu peux alors faire un fit pour obtenir la pente de la "meilleure" droite .
    Sachant q'un décalage d'un échantillon correspond à un changement de phase de 360° sur tout le spectre, tu obtiens alors facilement le décalage temporel correspondant à cette pente.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 29
    Par défaut
    merci pour ce début de compréhension


    mais, est-ce que cette phase d'une série de fourier peût-être récupérée facilement sous C++ (avec par exemple FMOD ou tout autre moyen) ou faut se lancer dans les maths complexes ?

    sinon, un "fit", c'est quoi ?



    En réalité, mon soucis est plus complexe que ca car la phase est issue d'une référence (point 0 ou T=0) et pour cela, il me faut une valeur sans phase pour savoir ou se trouve les autres avec phase.

    Je reprends mon exemple du dessus avec mes 2 micros et enceintes ou la mesure s'effectuais en même temps. Ce que je désire faire, c'est de la faire avec un seul micro donc pour cela :

    enceinte 1 en fonctionnement (2 non) -> micro -> FFT sous C dans l'ordinateur
    puis
    enceinte 2 en fonctionnement (1 non) -> micro (tj au même endroit) -> FFT sous C dans ordinateur

    autant avant (2 enceintes en mm temps avec 2 micro), nous avions une référence temporelle équivalente, autant la ce n'est plus le cas.

    Alors, est-ce je peux toujours faire une opération mathématique sur les 2 FFT pour récupérer cette phase d'ou en déduire le temps et ainsi la différence de distance entre les 2 enceintes ?

    nb : peut-être en prenant l'amplitude la plus grande des 2 FFT (qui est la même fréquence) et en associant un début de période (signal = 0 en amplitude) le tout ramené à l'horloge de l'ordinateur (donc une base temps "fiable" et faible)
    nb2 : faudrait pouvoir récupérer une base temps trés fine sous C ? (ex : avoir l'heure à la micro-seconde pres)


    allez, je vais bosser un peu sur mon fourier ...

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Ca dépend de la librairie de FFT que tu utilises, ça dépend de son type de retour. La phase, c'est la phase du nombre complexe qui représente une fréquence, c'est donc facile de calculer le rapport entre les coefficients.

  10. #10
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    sinon, un "fit", c'est quoi ?
    C'est, dans notre cas, trouver la droite qui représente au mieux les données (qui passe globalement au plus près des points). On pourra préciser plus tard.
    autant avant (2 enceintes en mm temps avec 2 micro), nous avions une référence temporelle équivalente, autant la ce n'est plus le cas.
    La référence temporelle est donnée par le début du signal envoyé (supposé le même dans les deux cas) à l'enceinte. Il convient que, dans les deux cas, le début de l'acquisition commence au même moment par rapport au début de l'émission du signal. Dans ce cas, La FFT du signal au niveau de l'enceinte 1 et de l'enceinte 2 est la même (puisque le signal émis au niveau des enceintes est présumé le même et mesuré dans les mêmes conditions). Soit Phase(p) la phase du p-ieme coefficient de cette (hypothétique) FFT.
    Pour l'enceinte 1, au niveau du micro, ce coefficient est affecté d'un changement de phase du à la distance d1 entre enceinte 1 et micro
    Phase1(p) = Phase(p)+a.d1.p,
    et de la même façon pour l'enceinte 2
    Phase2(p) = Phase(p)+a.d2.p.
    La différence de phase est donc
    Del(p) =a(d1-d2)p,
    indépendante de la phase Phase(p) et proportionnelle à d1-d2
    peut-être en prenant l'amplitude la plus grande des 2 FFT (qui est la même fréquence) et en associant un début de période (signal = 0 en amplitude) le tout ramené à l'horloge de l'ordinateur (donc une base temps "fiable" et faible)
    Tu parles de Période ? Au fait, quel signal utilises-tu ? Comment est-il créé ? Une sinusoïde n'est pas un bon choix. Il est préférable d'avoir un signal à spectre large, style bruit blanc, qui permet de faire la mesure sur plusieurs fréquences simultanément et d'améliorer la précision.
    L'horloge de l'ordinateur n'a rien à voir, ce qui compte est la fréquence d'échantillonnage.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 29
    Par défaut
    Merci pour cet avancement ...


    Le signal est périodique mais inconnu dans sa fréquence et je n'ai aucun moyen de le prendre comme référence.

    C'est un "bruit" suspect permanent.



    Pour me clarifier un peu, je "complique" mon exemple. En réalité, je n'ai qu'un bruit et un micro.

    Ce que je désire, c'est à partir d'un bruit suspect (dans un mur), définir exactement son point d'emission. Pour cela, je place un micro à gauche (n'importe ou) et je mesure le signal (signal 1). Je place le micro à droite et je mesure le signal (signal 2).

    Donc, ce que je recherche c'est l'endroit exacte du bruit parasite (en partant du principe que le bruit se trouve bien sur la droite mesure1-mesure2) au travers des FFT et phases.
    (mesure 1 .... bruit .......................... mesure 2)

    L'analyse de fourier donne (en amplitude de F)
    F(x) = F1 + F2 + F3 + F4 + F5 avec :
    F1 = 1
    F2 = 1
    F3 = 3
    F4 = 1
    F5 = 1
    avec F3 la fréquence du bruit suspect et les autres F du bruit parasite ambiant

    nb : la valeur de F3 peut varier en fonction des murs


    Ce que vous m'avez indiqué est toujours valable ?
    Même si j'ai :
    (mesure 1 ..... mesure 2 .................................. bruit) ?

  12. #12
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Le problème est totalement différent du problème initial !
    Si tu n'es pas maître de l'émission du bruit ou si tu n'es pas sûr que ce bruit conserve une cohérence de phase entre les deux mesures (et encore, ce dernier cas reste théorique (il n'est pas exploitable en pratique dans ton cas) et peu vraisemblable), tu ne peux pas trouver d'informations dans la phase si les deux mesures ne sont pas simultanément faites en deux endroits différents (donc avec deux micro)

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 29
    Par défaut
    J'avais pensé, devant ce probléme le schéma logique suivant :

    A) Acquisition au travers de la carte son avec récupération sous la forme
    Numéro Acquisition - Horloge (ms) - Amplitude de l'acquisition (mV)
    1 - 2,225 - 2,4
    2 - 2,500 - 1,8
    3 - 2,725 - 2,3
    4 - 3,000 - 2,1
    ...
    B) Transformé de Fourier de se signal
    C) Application d'un filtre numérique autour de la fréquence dominante (plus grande amplitude)

    Je récupére ainsi des valeurs échantillonnées qui ont la forme d'une sinus (ou cos) à la fréquence filtrée.

    Et comme j'ai la base temps (horloge) et que le filtre numérique n'améne pas de déphasage, je devrais récupérer la valeur de T ou le signal = 0. Connaissant la période (fréquence) du signal, sa valeur à 0, je peux en déduire :

    D) déduction f(x) = sin (wt - déphasage) avec déphasage = temps ou le signal = 0 (valeur de l'horloge)


    et je fais la même chose pour la seconde mesure ou j'obtiendrais toujours la même période (fréquence) car même filtrage numérique mais avec une valeur ou le signal = 0 différent cad pas un multiple entier de période du premier signal.

    Avec ces 2 valeurs, j'obtiens le déphase en les 2 signaux d'ou la valeur que je veux.



    Mais dans cette réflexion, j'ai quand même un soucis qui est que j'ai peur de perdre ma base temps avec le filtre numérique car j'ai associé la reflexion d'un systéme linéaire (signal analogique ou il n'y a pas de coupure dans le temps) que j'ai appliqué sur un systéme echantilloné.

    La solution serait peut-être de transformer le resultat du filtre numérique (donc echantillonné) en fonction continue (mais est-ce que ma base temps est toujours utilisable)


    Est-ce que cette solution vous parez faisable ?

  14. #14
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Est-ce que cette solution vous parez faisable ?
    Non.
    On n'est pas dans un problème lié à la fft ou au filtrage numérique mais encore dans l'analyse des conditions expérimentales à réunir.
    Par exemple : Supposons même que le signal soit cohérent de la forme sin(wt+P) en choisissant une origine des temps arbitraire. Je fais une première mesure à partir du temps t1. J'obtiens comme points ceux du signal sin(wT+wt1+P1+P), P1 le déphasage lié à la distance. Je fais ensuite une deuxième mesure à partir du temps t2. J'obtiens comme points ceux du signal sin(wT+wt2+P2+P), P2 le déphasage lié à la distance. La différence de phase entre les signaux est w(t1-t2)+P1-P2 et dépend hélas très fortement de w et de t1-t2 qui doivent être bien connus si on veut obtenir P1-P2. Par exemple, si la différence des distances est de 1m , et la vitesse du son 330m/s , la différence des distances donne un écart de temps de 3ms. donc t1-t2 doit être précis à mieux que 0.3 ms pour limiter l'erreur à 10% . Comme changer le micro de place et lancer une nouvelle acquisition demande au moins 10s , t1-t2 doit être connu avec une précision de 3 10^-5. Si on réunit ces conditions, on peut tenter le coup , mais l'expérience demande du doigté. Mais attention, tout ceci suppose que pendant ces 10s la fréquence émise soit parfaitement stable , à mieux que 3 10^-5, et de plus sans aucune discontinuité de phase ce qui semble très improbable.
    A noter qu'avec deux micro et une acquisition simultanée, le problème est tout différent.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 29
    Par défaut
    je n'avais pas percu sous cette forme mathématique ce soucis.


    Le "must" serait de pouvoir récupérer une fréquence de référence (un temps) de la plus petite échelle petite. Par exemple, avoir l'horloge de l'ordinateur avec une précision de 10 ^ -6 ou moins.

    Est-possible ?

    nb : je vois aussi la réalisation faite en assembleur pour connaître le nombre de période utilisée et donc avoir un temps hyper précis (déjà fait il y a quelques année et complétement faut, mais bon)


    Quant à la fréquence, elle ne peut être que constante car c'est celle la qui est filtrée dc il n'y en a qu'une (je sents le cas d'ecole la mais en pratique ????)


    edit : pe une base temps interessante : http://www.viagenie.qc.ca/en/qos/basetemps.shtml

  16. #16
    Membre éclairé Avatar de ttone
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    589
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 589
    Par défaut
    flag

  17. #17
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Dans l'histoire, il te faut 2 micros et faire ton acquisiton en même temps. A ce moment, tu auras le même signalq ue tu enregistres et tu pourras faire des calculs correctement.

  18. #18
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Quant à la fréquence, elle ne peut être que constante car c'est celle la qui est filtrée dc il n'y en a qu'une (je sents le cas d'ecole la mais en pratique ????)
    En pratique, ce n'est pas le filtrage qui apportera la cohérence de phase ou la stabilité en fréquence de la source. Cette cohérence et cette stabilité doit être assurée entre les deux mesures. Par exemple, si la source change de 0.1 Hz entre les mesures espacées de 10s, une erreur de phase de 2pi est introduite!
    Suppose, pour fixer les idées, que ta source émette à 100 Hz. Une stabilité de 3 10^-5 signifie une fréquence stable à mieux que 0.003 Hz. Il te faut faire une acquisition du signal de durée supérieure à ... 330s pour avoir la résolution suffisante sur le spectre pour vérifier que la source est suffisamment monochromatique.
    Tu peux d'ailleurs vérifier expérimentalement si c'est possible en faisant deux mesures espacées de 10s sans changer la place du micro et voir si tu arrives à corriger tes mesures pour avoir une différence de phase nulle de façon reproductible.
    Pourquoi repousses-tu la solution des deux micro ?
    Personnellement, je ne crois pas que ceci soit possible dans les conditions que tu as décrites (mais je ne sais peut être pas tout)

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 29
    Par défaut
    heuu, en effet, cela devient tres / trop compliqué à mettre en oeuvre. Je vais donc revenir à un méthode plus certaine, 2 micros.

    Les 2 micros servant à définir précisemment l'endroit du bruit.

    En utilisant un seul micro, on peut définir s'il existe un bruit (si existe fréquence) voir, si plusieurs points de mesure, définir un endroit approximatif (ou une direction du bruit) en fonction, non pas du déphasage, mais de l'amplitude (plus le bruit est proche, plus l'amplitude est élevée).

    nb : en partant du principe que la perte est linéaire (faut que je vérifie)

  20. #20
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Intuitivement j'ai du mal à croire que ce soit linéraire. Plus on s'éloigne de la source, plus on a une quantité d'air important à exiter.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. FFT - phase - déphasage
    Par Neuropro dans le forum Signal
    Réponses: 1
    Dernier message: 14/06/2013, 12h56
  2. la FFT pour calculer l'image d'amplitude et de phase
    Par narcisseb dans le forum Signal
    Réponses: 2
    Dernier message: 23/05/2013, 02h25
  3. Une FFT tres rapide
    Par JuJu° dans le forum Autres éditeurs
    Réponses: 13
    Dernier message: 06/11/2003, 14h03
  4. Algo de calcul de FFT
    Par djlex03 dans le forum Traitement du signal
    Réponses: 15
    Dernier message: 02/08/2002, 17h45
  5. FFT(Fast Fourier Transform)
    Par IngBen dans le forum Traitement du signal
    Réponses: 6
    Dernier message: 23/05/2002, 16h35

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