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

MATLAB Discussion :

Calcul de fréquence via FFT


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Par défaut Calcul de fréquence via FFT
    Bonjour,
    j'aimerai calculer la fréquence d'un signal de type sinusoidal. Pour cela j'utilise la FFT qui me permet de passer du domaine temporel au domaine fréquentiel.
    Cependant, après avoir fait ma FFT, je trouve des resultats incohérents. Voici un exemple du code de la doc Matlab:
    Fs = 1000; % Sampling frequency
    T = 1/Fs; % Sample time
    L = 1000; % Length of signal
    t = (0:L-1)*T; % Time vector

    y = 7*sin(2*pi*50*t) % je crée une sinusoide de 50hz et d'amplitude 7 volts

    NFFT = 2^nextpow2(L); % Next power of 2 from length of y

    Y = fft(y,NFFT)/L; % Calcul de la FFT
    A ce stade Y est une matrice de 1024 points complexes représentant la FFT de y.
    Pour trouver la fréquence j'ai mis dans une matrice le module de Y, trouvé le maximum, calculé la matrice avec la phase de Y, lu la valeur dont l'indice est le maximum pour la matrice précédente. Code:

    module = abs(Y) % calcul du module (donc de l'amplitude?)
    [valeur,Indice]=max(module) % valeur=3.2978 et I=52 (deja la je m'attendais à avoir valeur=~7)
    phase = angle(Y) % calcul de la phase de Y (donc des fréquences?)
    phase(52) % retourne -0.9572 !!!
    Pouvez vous m'indiquer ou sont mes erreurs de raisonnement?
    j'ai enfait 2 questions principales:
    1)que représente le "Sampling frequency" ?
    2)comment déduire la fréquence depuis la FFT?

    Merci.

  2. #2
    Membre habitué
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Par défaut Eléments de réponse
    J'ai trouvé un début de réponse:
    1)le Sample Time c'est le temps séparant 2 points de l'échantillon (et le Sampling Frequency son inverse = le nombre de points par seconde)
    2)code pour trouver la fréquence:
    y = 7*sin(2*pi*50*t); % je crée une sinusoide de 50hz et d'amplitude 7 volts
    Y = fft(y,NFFT)/L; % Calcul de la FFT
    amplitude = 2*abs(Y(1:NFFT));
    [amplitudeMAX,FrequenceSignal] = max(amplitude)

    % On obtient les bon résultats:
    amplitudeMAX = 6.5814
    FrequenceSignal = 52
    Maintenant ce pose un autre problème, lorsque je mets une fréquence de 1MegaHz par exemple, j'obtiens à nouveau de faux résultats.
    Quelqu'un aurait-il une idée d'où cela provient?

  3. #3
    Membre habitué
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Par défaut Solution
    Après une bonne nuit de sommeil et après avoir rêvé de Fourier voici la solution! Dans mon cas j'ai besoin de calculer une fréquence entre 1Mhz et 10Mhz, j'ai donc mis le Sampling Frequency à 20 000 000.

    %Parametres

    Fs = 20000000; % Sampling frequency
    T = 1/Fs; % Sample time
    L = 1000; % Length of signal
    t = (0:L-1)*T; % Time vector
    NFFT = 2^nextpow2(L); % Next power of 2 from length of y

    %Calculs

    y = 7*sin(2*pi*3500000*t); % je crée une sinusoide de 3.5Mhz et d'amplitude 7 volts
    Y = fft(y,NFFT)/L; % Calcul de la FFT
    amplitude = 2*abs(Y(1:NFFT));
    f = Fs/2*linspace(0,1,NFFT/2);
    plot(f,2*abs(Y(1:NFFT/2)))
    [amplitudeMAX,indiceFrequence] = max(amplitude);
    frequence = f(indiceFrequence)

    frequence =

    3.5029e+006

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul de fréquence
    Par lozeba dans le forum Langage SQL
    Réponses: 14
    Dernier message: 15/04/2010, 16h42
  2. probleme de calcule de fréquence
    Par étoile de mer dans le forum Débuter
    Réponses: 0
    Dernier message: 18/10/2009, 21h14
  3. Calculer une fréquence relative
    Par Ptinéwik dans le forum MATLAB
    Réponses: 9
    Dernier message: 16/01/2008, 15h18
  4. calcul de coord via un azimut et une origine
    Par Chekov dans le forum Mathématiques
    Réponses: 3
    Dernier message: 09/02/2007, 15h54

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