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

Signal Discussion :

transformée de Fourier sans fft


Sujet :

Signal

  1. #1
    Membre du Club
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    96
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 96
    Points : 45
    Points
    45
    Par défaut transformée de Fourier sans fft
    bonjour,
    j'essais de faire la transformée de Fourier d'un signal sauf qu'il n'est pas forcément en puissance de 2 donc je ne peux pas utiliser de fft donc je voudrais savoir comment je pourrais faire une transformée de fourier discrète sans fft et qui s'adapte à un signal qui n'est pas en puissance de deux
    Merci de votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    La fonction fft accepte tout aussi bien des signaux de taille en puissance de 2 ou non, il n'y a aucune problème
    Tu peux consulter sa documentation, et plus particulièrement sa partie algorithmes

  3. #3
    Membre du Club
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    96
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 96
    Points : 45
    Points
    45
    Par défaut
    Merci pour votre réponse, en fait je croyais qu'il fallait la faire sur un nombre de points qui soit en 2^n c'est ce qu'on m'a dit du moins , et en plus j'ai testé avec la fft j'ai eu des résultats pas très exacts. je fesais ma fft sur 295 points ce n'est pas de là que viens le problème vous pensez??

  4. #4
    Invité
    Invité(e)
    Par défaut
    C'est en général le cas pour de nombreux algorithmes effectuant le calcul de la FFT, mais MATLAB lève cette obligation en utilisant comme tu as pu le voir différents algorithmes selon le nombre d'échantillons du signal.

    Si tu veux affiner ton résultat, tu peux effectuer du zéro padding en spécifiant le deuxième argument "n" de la fonction.

  5. #5
    Membre du Club
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    96
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 96
    Points : 45
    Points
    45
    Par défaut
    je vous remercie énormément pour vos réponses, j'ai l'impression que j'utilise mal la fft par exemple quand j'essais de faire la fft d'un signal sinusoïdal de fréquence 100 hz
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    >> t=0:0.001:1;
    >> x=sin(2*pi*t*100);
    >> plot(abs(fft(x)));
    je suis sensé obtenir un pic en 100 mais le résultat que j'obtiens n'est pas très exact; j'ai un pic en 101 cette inexactitude pourrais me fausser mes calculs donc je me demande à quoi elle est due


    Merci de me répondre

  6. #6
    Invité
    Invité(e)
    Par défaut
    Attention à bien mettre des fréquences en abscisses et non des échantillons

    Sinon, tu auras toujours une précision de fs/N (fs : fréquence d'échantillonnage ; N : nombre d'échantillons)
    Je t'invite à lire ce passage de Wikipédia.

  7. #7
    Membre du Club
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    96
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 96
    Points : 45
    Points
    45
    Par défaut
    je vous remercie, mais si j'ai bien compris je dois modifier l'axe des abscisses comme ceci??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    f=abs(fft(x));
    N=length(f);
    w=-fs/2:fs/N:fs/2;
    plot(w,f)

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 51
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    En reprenant les valeurs de votre exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    f0  = 100;
    fs  = 1000; 
     
    t   = 0:1/fs:1;
    x   = sin(2*pi*f0*t);
    y   = abs(fft(x)); 
    f   = fs*linspace(0,1,length(x));
     
    plot(f,y);
    A noter qu'il suffit de tracer jusqu'à fs/2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    f0   = 100;
    fs   = 1000; 
     
    t    = 0:1/fs:1;
    x    = sin(2*pi*f0*t);
     
    nfft = 2^nextpow2(length(x)); % prochaine puissance de 2 >= à la durée de votre signal
    y    = abs(fft(x,nfft)); 
    f    = fs/2*linspace(0,1,nfft/2+1);
     
    plot(f,y(1:nfft/2+1))
    Cordialement,

    K.

Discussions similaires

  1. Transformé de fourier (fft)
    Par alexismarque dans le forum Calcul scientifique
    Réponses: 3
    Dernier message: 01/06/2010, 17h51
  2. fft, fitre et transformation de fourier
    Par cedric06000 dans le forum Traitement du signal
    Réponses: 14
    Dernier message: 02/08/2009, 13h11
  3. Réponses: 2
    Dernier message: 05/05/2009, 08h57
  4. La transformée de Fourier rapide (FFT)
    Par driss80 dans le forum Fortran
    Réponses: 5
    Dernier message: 25/02/2008, 13h43
  5. Transformée de Fourier (fft) en 3D
    Par frederic.lip dans le forum MATLAB
    Réponses: 1
    Dernier message: 12/09/2007, 15h03

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