2010-05-28 18 views
1

Je veux utiliser fft dans MATLAB pour analyser certaines données expérimentales sauvegardées dans un fichier excell. mon code:FFT dans MATLAB: mauvaise fréquence 0Hz

A=xlsread('Book.xls'); G=A'; x=G(2, :); 
N=length(x); 
F=[-N/2:N/2-1]/N; 
X = abs(fft(x-mean(x),N)) 
X = fftshift(X); 
plot(F,X) 

Mais il trace un graphique avec un grand mauvais composant de 0 Hz, ma vraie fréquence est d'environ 395Hz et il ne figure pas dans le graphique tracé. S'il vous plaît dites-moi ce qui ne va pas.

Toute aide serait appréciée.

+1

Il serait agréable de voir une capture d'écran ou faire Book.xls à notre disposition. – MatlabDoug

+0

Je suis désolé de ne pas trouver de toute façon joindre le fichier ici. Cependant je l'ai téléchargé: http://ifile.it/547kdag (demander le ticket de téléchargement) la première colonne correspond à l'heure et la seconde est les données que je veux fft de. Merci beaucoup d'avance. – roujhan

Répondre

8

Supposons que l'on lit le signal du fichier:

G = xlsread('Book.xls'); 
t = G(:,1); 
x = G(:,2); 
N = length(x); 

D'abord, nous estimons que la fréquence d'échantillonnage de l'axe du temps, et de construire le vecteur de fréquence:

Fs = 1 ./ abs(t(2)-t(1)); 
F = (-N/2:N/2-1)*Fs/N; 

Calculons alors la FFT et l'intrigue:

X = abs(fft(x-mean(x),N)); 
X = fftshift(X); 
stem(F,X) 

enfin trouver le pic et la fréquence correspondante:

>> [~,ind] = max(X); 
>> F(ind) 
ans = 
     -400 

vous voudrez peut-être effectuer un zoom avant près de l'origine pour voir les choses plus clairement:

xlim([-1000 1000]) 
+0

+1: merci de fournir un bon exemple clair –

+0

Nice. Ça marche. Merci beaucoup pour votre bonne réponse claire. – roujhan