2010-05-28 199 views
1

我想在MATLAB中使用fft来分析保存为excell文件的一些exprimental数据。 我的代码:MATLAB中的FFT:错误的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) 

但它绘制了大错为0Hz分量的图,我的真实频率是大约的395Hz,它没有在绘制的图所示。 请告诉我什么是错的。

任何帮助,将不胜感激。

+1

这将是很好看的截图或使book.xls提供给我们。 – MatlabDoug 2010-05-28 15:27:30

+0

对不起,我无法找到附加文件在这里。然而我上传了它: http://ifile.it/547kdag (请求下载票) 第一列对应于时间,第二列是我想要从fft发出的数据。 非常感谢提前。 – roujhan 2010-05-28 15:40:03

回答

8

假设我们从文件中读取信号:

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

首先我们估计从时间轴上的取样频率,并生成频率向量:

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

然后计算FFT和情节:

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

终于找到峰值和相应的频率:

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

您可能希望缩小在原点附近,看东西更清楚:

xlim([-1000 1000]) 
+0

+1:谢谢你提供了一个很好的例子 – 2010-05-28 18:54:32

+0

不错。有用。非常感谢你的明确答案。 – roujhan 2010-05-29 03:18:39