|
本帖最后由 VibInfo 于 2016-10-20 16:34 编辑
原帖由 kmkeke 于 2008-12-18 15:10 发表
这是我的程序
N=128 或256 或512 或1024
x=0:.001:1;
y=sin(2*pi*50*x);
M=fft(y,N);
Py=abs(M)*2/N;
f=fs*(0:N/2)/N; %fs采样率
plot(f,Py(1:N+1));
请麻烦试验一下,不同的N,fft幅值结果相差较大。
不同的fs,fft后幅值处频率值也随fs差异成倍。多谢!
那么在这里大概怎么进行频率补偿呢?希望在matlab里面给指个方向就行。多谢啊!
楼主的主要问题是泄漏的问题,楼主的信号是50,但是在FFT变换后,没有一根谱线落在50上,所以看到的只是泄漏出来的部分(可以从下图中看到)。同时在1024时,信号长只有1001,所以Py=abs(M)*2/N;中除1024也是不合适的。我把程序稍改一下,得到的图如下。
x=0:.001:1; fs=1000;
y=sin(2*pi*50*x);
N=64;
for k=1 : 4
N=N*2;
M=fft(y,N);
Py=abs(M)*2/N;
f=fs*(0:N/2)/N; %fs采样率
subplot (4,1,k);
stem(f,Py(1:N/2+1));
xlim([0 100]);
title(['N=' num2str(N)]);
end |
|