Décomposer en fréquences initiales : Fourier ?
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Décomposer en fréquences initiales : Fourier ?



  1. #1
    solad

    Question Décomposer en fréquences initiales : Fourier ?


    ------

    Bonjour !
    J'ai synthétisé un son en additionnant trois sons de même amplitude et de fréquences respectives 600Hz, 700Hz et 800Hz.
    J'obtiens donc une courbe périodique, mais pas vraiment sinusoïdale (voir la pièce jointe).

    Est-il ensuite possible de retrouver ces fréquences initiales à partir du signal obtenu ?
    En faisant des recherches j'ai vu que les séries de Fourier ou la transformée de Fourier pouvaient m'être utiles, mais je n'arrive pas à comprendre exactement comment...
    Merci d'avance

    -----
    Images attachées Images attachées  

  2. #2
    GrisBleu

    Re : Décomposer en fréquences initiales : Fourier ?

    Bonjour

    Si ton signal est de periode N, tu peux le "decomposer" sur une base de signaux sinusoidaux de periode nN, n variant de 0 a l'infini. L'idee est de "projeter" ton signal sur ces signaux. La norme de la projection etant d'autant plus grande que les signaux sont proches.
    Cdlt

  3. #3
    Jeanpaul

    Re : Décomposer en fréquences initiales : Fourier ?

    Toute fonction périodique peut se décomposer d'une seule façon en une somme de sinusoïdes donc, dans ton cas, tu vas évidemment retrouver tes fréquences de départ.
    Pour dire les choses sans équations, on va multiplier la fonction par tous les sinus possibles et faire la moyenne sur la durée du signal : on trouvera zéro sauf pour les "bonnes" fréquences. Ca, c'est la transformée de Fourier.
    Si la fonction est périodique, on se limite aux fonctions dont la fréquence est un multiple de la fréquence du signal et c'est alors une série de Fourier.

  4. #4
    phuphus

    Re : Décomposer en fréquences initiales : Fourier ?

    Traduction : tu fais une transformée de Fourier discrète ayant comme période la période globale de ton signal (donc ici 10 ms). Les coefficients, complexes, représenteront par définition les fréquences multiples de l'inverse de ta période d'analyse :

    Coef 1 : composante continue
    Coef 2 : composante 100Hz
    Coef 3 : composante 200 Hz
    Coef 4 : composante 300 Hz
    ..
    Coef 7 : composante 600 Hz, tu devrais retrouver son amplitude (module du coefficient) et sa phase (argument du coefficient)
    etc.

    Pour cela, tu peux utiliser Matlab. Sinon, télécharge Audacity, qui est capable de faire de la transformée de Fourier discrète, mais pas sur n'importe quelle période : tu seras forcément sur des multiples de 2 de ta période d'échantillonnage. Du coup, Audacity utilise, comme tous les analyseurs de spectre d'ailleurs, des astuces pour retrouver une allure de spectre correcte (fenêtrage). Il te faudra donc prendre les pics sur le spectre donné par Audacity, en ayant bien conscience que tes amplitudes seront justes à quelques dizièmes de dB (tout ceci à cause de la période d'analyse qui n'est pas un multiple de la période de ton signal).

    Conclusion : comme le dit wlad_von_tokyo, tu auras réalisé une projection de ton signal sur une base de sinus, cette base étant constituée par des fréquences multiples de l'inverse de ta période d'analyse.

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

    Re : Décomposer en fréquences initiales : Fourier ?

    Citation Envoyé par phuphus Voir le message
    Traduction : tu fais une transformée de Fourier discrète ...
    Bonjour Phuphus.
    Je ne pense que que "tu fais une transformée de Fourier discrète" soit une "traduction" pour quelqu'un qui pose une question du niveau de celle-ci.
    Jeanpaul aurait pu donner ça comme réponse, mais il a intelligemment adapté sa réponse au niveau de connaissances que la question laisse transparaître.
    Au revoir.

  7. #6
    phuphus

    Re : Décomposer en fréquences initiales : Fourier ?

    Bonjour LPFR,

    en effet, tu as raison. J'ai rédigé mon message suite à l'intervention de wlad_von_tokyo, qui est très bonne sur le plan théorique mais qui ne fait pas avancer solad sur "comment faire concrètement". Jeanpaul a été plus rapide que moi, je n'ai donc vu sa réponse, plus claire que la mienne, qu'après.

    @ solad : as-tu tout ce dont tu as besoin ?

  8. #7
    solad

    Re : Décomposer en fréquences initiales : Fourier ?

    Bonjour !
    D'abord merci beaucoup pour toutes ces explications, je comprends mieux

    J'ai essayé de l'appliquer en utilisant Python et Numpy. La fonction fft() me renvoie une liste de valeurs, dont je suppose qu'il s'agit de ces coefficients complexes ?
    En effet la liste se présente comme ça :
    [ -2.49000000e+02, 0.00000000e+00j, 1.54588923e+01, +7.44919577e+00j...]
    Est-ce que j'ai raison ?

    Ensuite je peux calculer l'amplitude et la phase comme l'a précisé phuphus avec le module et l'argument des coefficients.
    Normalement l'amplitude devrait être nulle pour toutes les composantes sauf pour celles qui sont à l'origine de mon signal... C'est bien ça ?

    Désolé si je suis à côté de la plaque...
    Je vous remercie encore pour toutes vos explications

  9. #8
    LPFR

    Re : Décomposer en fréquences initiales : Fourier ?

    Re.
    Oui, vous avez bien compris.
    Par contre, les autres composantes ne seront pas strictement nulles à cause des erreurs introduites par la discrétisation.
    Mais si vous utilisez "Audacity" (gratuit), vous pourrez visualiser le spectre, ce qui est plus parlant qu'un tableau de valeurs.
    A+

  10. #9
    solad

    Re : Décomposer en fréquences initiales : Fourier ?

    Merci infiniment, ça marche !

    NB : si jamais ça pouvait aider quelqu'un, je me suis inspiré de l'exemple de la documentation de Matlab pour trouver les fréquences ensuite :
    http://www.mathworks.com/help/techdoc/ref/fft.html

  11. #10
    phuphus

    Re : Décomposer en fréquences initiales : Fourier ?

    Content de voir que tu es arrivé à bout de ton problème !

    Si jamais tu as besoin de détails supplémentaires, n'hésite pas. Je pense que les points que tu dois bien comprendre si tu veux vraiment mettre les mains dans la graisse au niveau de la programmation et de la fft, ce sont :

    - normalisation de ta FFT par la longueur de ton échantillon d'analyse (la division par L dans le code Matlab)
    - la multiplication par 2 de la moitié exploitable des coefs renvoyés par la FFT (présent dans la ligne "plot(f,2*abs...) de l'exemple Matlab)
    - à terme, le fenêtrage de ton signal : regarde dans Matlab les commandes Hanning, Hamming, Kaiser, Blackman, etc., avec une compensation supplémentaire sur tes niveaux (à part la fenêtre rectangulaire, toutes les autres bouffent de l'énergie au signal qu'il faut ensuite réinjecter artificiellement par un simple facteur multiplicatif)

    LPFR évoque les problèmes de discrétisation (il parle de la discrétisation en niveau, et non pas de l'échantillonnage...), si jamais tu comptes analyser des signaux acquis par exemple par un carte son en 16 bits ces problèmes ne devraient se poser que sur les signaux de faible amplitude (donc mal conditionnés...). Il y a d'autres problèmes avec la FFT, comme le fait de ne pas faire la FFT sur un nombre entier de périodes de ton signal, ou encore de faire une FFT sur un signal non périodique. Ces problèmes sont atténués par le fenêtrage, c'est donc un point crucial si tu veux te lancer dans l'analyse de signaux dits arbitraires, et non plus de sinus parfaits générés en 32 ou 64 bits.

  12. #11
    solad

    Re : Décomposer en fréquences initiales : Fourier ?

    Merci beaucoup pour ces informations
    - la multiplication par 2 de la moitié exploitable des coefs renvoyés par la FFT (présent dans la ligne "plot(f,2*abs...) de l'exemple Matlab)
    Justement, je n'ai pas vraiment compris pourquoi on ne prenait pas tous les coefficients renvoyés par la FFT...
    On ne peut utiliser que la première moitié d'entre eux ?

  13. #12
    phuphus

    Re : Décomposer en fréquences initiales : Fourier ?

    Ceci est lié aux propriétés de la FFT. Dans le domaine du son numérique, on travaille toujours sur des signaux discrets (échantillonnés) et réels. La FFT d'un tel signal renvoie un résultat :

    - discret, ça tu l'as déjà compris
    - avec une symétrie conjuguée par rapport à la fréquence de Nyquist (si tu traces d'une part la partie réelle de TOUS les coefs renvoyés par la FFT, et d'autre part la partie imaginaire, tu constateras que la partie réelle est symétrique par rapport au (N/2)+1ème coefficient et la partie imaginaire antisymétrique)

    Chaque fréquence de ton signal est donc représentée deux fois dans ta FFT, les deux coefficients en question étant conjugués. La moitié de l'amplitude est affectée à un des coefficients, l'autre moitié sur l'autre. Au lieu d'additionner les amplitudes de chaque moitié de la FFT, on préfère prendre uniquement une seule moitié et tout multiplier par 2 : le résultat est le même, et on a manipulé deux fois moins de données.

  14. #13
    solad

    Re : Décomposer en fréquences initiales : Fourier ?

    Merci beaucoup, c'est très clair !

Discussions similaires

  1. exo:Un aquarium peut-il décomposer la lumière ?
    Par Lenalee dans le forum Physique
    Réponses: 4
    Dernier message: 08/04/2010, 19h49
  2. pourquoi la forme d'un prisme pour decomposer lumiere?
    Par hopefullspiritflyer dans le forum Physique
    Réponses: 9
    Dernier message: 26/05/2009, 15h16
  3. Décomposer en produit de facteurs irréductibles.
    Par invitecaeaab4f dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 09/05/2009, 15h48
  4. Décomposer un entier en une somme d'entiers consécutifs
    Par Flyingsquirrel dans le forum Mathématiques du collège et du lycée
    Réponses: 12
    Dernier message: 07/03/2009, 22h33
  5. décomposer une fonction
    Par Clem076 dans le forum Mathématiques du collège et du lycée
    Réponses: 17
    Dernier message: 09/01/2008, 20h21