Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

transformée de fourier: encore et encore



  1. #1
    acx01b

    transformée de fourier: encore et encore


    ------

    Bonjour, j'ai été très étonné en dessinant le spectre (discret) d'une sinusoide pure de fréquence 500, avec une définition de 100 points par pérdiode (donc N = 50000) d'obtenir non pas une valeur très grande pour f=500 et des valeurs presques nulles pour les autres valeurs de f (enfin sauf pour f=0 et f=N-1), mais une espèce de courbe de gausse(f) avec le pic situé à f=500...

    il y a-t-il une fonction mathématique pour calculer le spectre d'une sinudoïde pure (autrement qu'avec la transformée de fourier, qui est assez dure à mentaliser je trouve!) dans un cas très simple comme celui-ci: nombre entier de périodes, nombre entier de points par périodes, et déphasage horizontal et vertical nul... ?

    en espérant avoir été assez, clair, merci d'avance pour vos réponses, je poursuivrai avec d'autres questions...

    -----
    Dernière modification par acx01b ; 06/01/2005 à 12h03.

  2. Publicité
  3. #2
    Coincoin

    Re : transformée de fourier: encore et encore

    Salut,
    Qu'est-ce que tu as utilisé comme algorithme ? Ca me paraît bizarre quand même... Mathématiquement, le spectre d'une sinusoïde échantillonée avec plus de 2 points par période (critère de Shannon) est bien un pic infiniment fin (pic de Dirac). Et même si l'échantillonnage est insuffisant (ce qui est très loin d'être le cas, ici !), tu as une série de pics, pas une gaussienne. Je pense qu'il s'agit d'un artefact dû à l'algorithme (je pencherais pour le fait que les calculs se font avec une précision limitée).
    Encore une victoire de Canard !

  4. #3
    acx01b

    Re : transformée de fourier: encore et encore

    pourtant je l'ai fait avec un programme en C avec des variables double un peu partout....

    à la base c'est un fichier wav:
    signal[x] contient les valeur des y des points, buff les octets du fichier wav 16bits signed:
    for (....) {
    signal[x] = (unsigned char)buff[x*2+44] + 256*(char)buff[x*2+45]
    }
    con = 2M_PI/20000;
    //après:
    for (f1 = 0; f1 < 500; f1++) {
    fou_cos[f1] = 0;
    fou_sin[f1] = 0;
    for (f2 = 0; f2 < 20000; f2++) {
    fou_cos[f1] = fou_cos[f1] + signal[f2] * cos(con * f2 * f1);
    fou_sin[f1] = fou_sin[f1] + signal[f2] * sin(con * f2 * f1);
    }
    t_fourier[f1] = pow(pow(fou_sin[f1],2)+pow(fou_cos[f1],2),0.5);
    Image1->Picture->Bitmap->Canvas->MoveTo(f1, 135);
    Image1->Picture->Bitmap->Canvas->LineTo(f1, 135-t_fourier[f1]*zoom);
    //zoom c'est pour zoomer ^^
    }

    donc mon algo est bon !! ^^

    je vais peut-être aujourd'hui commencer les expérimentations sur la transformée inverse, pour voir ce que donne la transformée inverse de t_fourier[0 à 19999] = 0 et t_fourier[500] = 50000

  5. #4
    Coincoin

    Re : transformée de fourier: encore et encore

    Euh... j'ai pas le temps de regarder en détail ton algo, mais essaye de voir si en changeant la précision, ça change quelque chose (idée comme une autre).
    Encore une victoire de Canard !

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

    Re : transformée de fourier: encore et encore

    je ne sais pas si ton programme est bon ou pas... As tu vérifié en affichant signal[i] pour voir si tu as bien dedans ce que tu penses y avoir ?

    Pour le reste, lorsque l'on calcul la transformée de fourier d'un signal on le fait toujours sur un nombre de point fini... cela revient à calculer la transformée de fourier d'un signal qui n'est pas infini mais qui est limité dans le temps. Si la durée effective de ton signal est un multiple de la période du signal alors pas de problème. Mais si ce n'est pas le cas alors on observe le genre de chose que tu décris ce qui correspond à la transformé de fourier du signal infini convolué avec la transformé de fourier d'une porte de largeur la durée de ton signal.
    Pour s'affranchir de ce genre de chose, on fait une apodisation. C'est à dire que l'on multiplie le signal par une fonction qui s'annule aux bornes de ton signal. (Il peut être interessant au préalable de soustraire la valeur moyenne du signal).
    Il existe tout un tas de fonction que l'on peut utiliser pour faire cette apodisation. L'une des plus simple et qui marche bien est de multiplié la fonction par (1-cos(2 pi i/N)) où i est le numéro d'un point donné et N est le nombre total de points. Cela s'appelle l'apodisation de Hanning je crois...
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

  8. #6
    acx01b

    Re : transformée de fourier: encore et encore

    zoup1 : je t'aimeee

    par contre tu ne réponds pas à ma problématique de début: certe courbe qui a une "gueule" plus ou moins gaussienne est définie comment ? (bon en même temps ma question est peut-être stupide ou pas si simple, donc à voir...)

    je vais essayer ton truc de N multiple de de la période...

  9. Publicité
  10. #7
    monnoliv

    Re : transformée de fourier: encore et encore

    Si la durée effective de ton signal est un multiple de la période du signal alors pas de problème.
    Tout à fait d'accord, c'est de là que vient ton problème. Fais la transformée de Fourier discrète sur une période (ou plusieurs périodes) exactes et tu obtiendras un delta de Dirac. Ceci vient du fait que la TF de Fourier discrète considère le signal comme étant périodique, dans ton cas cette période doit correspondre à un multiple de la période de ton sinus, sinon tu as un saut entre la fin et le début de ton signal (voir ton signal se refermant sur un cercle, la fin touche le début), ce saut génère d'autres harmoniques.
    Ne soldez pas grand mère, elle brosse encore.

  11. #8
    zoup1

    Re : transformée de fourier: encore et encore

    Citation Envoyé par acx01b
    zoup1 : je t'aimeee
    C'est peut-être un peu beaucoup...

    Citation Envoyé par acx01b
    par contre tu ne réponds pas à ma problématique de début: certe courbe qui a une "gueule" plus ou moins gaussienne est définie comment ? (bon en même temps ma question est peut-être stupide ou pas si simple, donc à voir...)
    Ben si, si tu appelles f(t) ta fonction de départ (ton sinus). Le fait de l'échantilloner sur un temps T fait que ce que tu calcules est en réalité f(t).g(t) où g(t) est la fonction porte de largeur T (fonction qui vaut 0 de -l'inf à 0, 1 de 0 à T et 0 de T à l'inf). Du coup quand tu calcules sa transformée de fourier, tu obtiens le F(w)*G(w) où F(w) est la TF de f(t), G(w) est la TF de g(t) et * représente le produit de convolution. comme F(w) est un dirac centré en w0, la convolution du dirac avec G(w) donne simplement G(w-w0) (à des préfacteurs prêt bien sur). Donc ce que tu vas obtenir est la transformé d'une porte centrée sur la fréquence de ton signal.

    Si tu veux plus de précision tu peux te référer à ce que l'on trouve sur le web... ou tu peux voir ce lien (en anglais)

    http://www.library.cornell.edu/nr/bookcpdf/c13-4.pdf
    avec éventuellement les autres chapitres de ce livre (numerical recipes) qui sert de référence...
    http://www.library.cornell.edu/nr/cbookcpdf.html
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

  12. #9
    clide

    Re : transformée de fourier: encore et encore

    la fonction "en cloche" que tu observes est simplement la fonction "sinus cardinal" : sin(x)/x ici en val abs avec des coef. elle résulte de l'intégrale de la "porte". Elle est centré sur la freq du signal qu'on analyse et a comme largeur 1 / durée du signal , donc avec un échantillon long on se rapproche d'une raie (dirac) .

  13. #10
    acx01b

    Re : transformée de fourier: encore et encore

    merci merci ça me fait du boulot tout ça (j'ai un niveau assez faible en math):

    apriori vous m'avez donné toutes les pistes et notions qui me sont necessaires,
    donc si je réponds pas d'ici quelques mois ou années , ne vous inquiétez pas ; )

    si j'obtiens des résultats je vous le ferai savoir...

  14. #11
    chaos

    Re : transformée de fourier: encore et encore

    Clide A raison C'est un Sinus cardinal...

    Attention, le sinus ne possède pas de transformée de fourier !!! (divergence) au sens des fonctions et donc il est imposssible d'obtenir un pic. Simplement, en augmentant le temps d'évaluation, ce sinus "discrétisé" tendra vers le dirac, pris au sens des distributions tempérées .

Discussions similaires

  1. Encore un problème sinus-cosinus (encore)...
    Par julien_4230 dans le forum Mathématiques du supérieur
    Réponses: 11
    Dernier message: 04/10/2006, 14h55
  2. Réponses: 9
    Dernier message: 16/01/2006, 08h59
  3. Brandt Premia C100 qui disjoncte encore et encore.
    Par pcvision dans le forum Dépannage
    Réponses: 22
    Dernier message: 07/01/2006, 15h16
  4. Aide exo ! ( Encore et Encore )
    Par Oopsy dans le forum Chimie
    Réponses: 1
    Dernier message: 04/12/2005, 11h52
  5. Encore de l'zau, encore la vie sur Mars !!!!
    Par JPL dans le forum Archives
    Réponses: 19
    Dernier message: 05/04/2004, 16h00