sunyuxinhe 发表于 2013-10-16 20:25

FFT出现频率畸变 求解释

我取得采样时间是10ms,1000个数据,补零到100000做FFT,得到频率为184Hz(真实值是189Hz)
求解释,这是怎么情况,这就是传说中的频率畸变(由于频率分辨率导致的)?

Fs=100000;
Nt=1000;
N=100000;
t=(0:Nt-1)/Fs;
x=sin(2*pi*189*t);
tic;
y=2*abs(fft(x,N))/Nt;
f=(0:N/2-1)/N*Fs;
toc;
figure;
plot(f,y(1:end/2),'*');
axis();



sunyuxinhe 发表于 2013-10-19 20:07

我说详细一点吧



补零的基本目标是,希望能够知道Fs/N意外频率点上的频谱值。

对离散傅里叶比较了解的人,就会知道补零相当于:如果频率分辨率是10,那么直接用FFT只能得到10,20,30Hz上的频谱值,补零可以任何频率对应的频谱值。

你说的补零只是FFT内部算法的需求,跟我这个补零无关。

yghit08 发表于 2013-10-19 20:18

sunyuxinhe 发表于 2013-10-19 20:07 static/image/common/back.gif
我说详细一点吧




http://www.chinavib.com/forum.php?mod=viewthread&tid=98535
http://www.chinavib.com/forum.php?mod=viewthread&tid=97556
http://www.chinavib.com/forum.php?mod=viewthread&tid=84346
你看看这些帖子。
补零对于提高分辨率无济于事。补零只是为了让数据长度满足FFT算法,补零补充的是对原数据无用的数据,怎么可能提高分辨率?

yghit08 发表于 2013-10-19 20:24

本帖最后由 yghit08 于 2013-10-19 20:45 编辑

如果补零能达到理论上无限程度的频域分辨率,那么你让那些做系统数据延拓、做模型的人干啥去!
这样做只是异想天开。1000个原始数据点竟然通过加9900个零增加所谓的数据点数达到分辨率的提高,这种做法本身就是错误的。有这时间还不如用AR模型、SVM等算法做模型预测做数据预测补充有用的数据,至少还利用了原始那1000个数据点,还利用了原始系统的信息。

sunyuxinhe 发表于 2013-10-19 20:45

yghit08 发表于 2013-10-19 20:24 static/image/common/back.gif
如果补零能达到理论上无限程度的频域分辨率,那么你让那些做系统数据延拓、做模型的人干啥去!
这样做只是 ...

我什么时候说过,补零能够提高分辨率了?补零怎么可能提高分辨率??这点常识就不要拿出来说事了。

我说的只是,在现有的数据下,补零相当于求更多频率点的频谱值而已,又没说这些频谱值就是真值。

sunyuxinhe 发表于 2013-10-19 20:48

yghit08 发表于 2013-10-19 20:24 static/image/common/back.gif
如果补零能达到理论上无限程度的频域分辨率,那么你让那些做系统数据延拓、做模型的人干啥去!
这样做只是 ...

你自己仿真过没有啊,你自己说的“即使几乎是没有完成一个周期,FFT分析的结果亦会是非常好的189Hz。”麻烦您自己亲手试一下下,就知道不是189Hz了。

谢谢你给我发的帖子,我看了,解决不了我的问题。

sunyuxinhe 发表于 2013-10-19 20:52

sunyuxinhe 发表于 2013-10-19 20:48 static/image/common/back.gif
你自己仿真过没有啊,你自己说的“即使几乎是没有完成一个周期,FFT分析的结果亦会是非常好的189Hz。”麻 ...

你直接复制一下吧:
该信号还不只包含一个周期,包含了1.88个周期
Fs=100000;
Nt=1000;
t=(0:Nt-1)/Fs;
x=sin(2*pi*189*t);
tic;
y=2*abs(fft(x))/Nt;
f=(0:Nt/2-1)/Nt*Fs;
toc;
figure;
plot(f,y(1:end/2),'*');

yghit08 发表于 2013-10-19 20:54

sunyuxinhe 发表于 2013-10-19 20:52 static/image/common/back.gif
你直接复制一下吧:
该信号还不只包含一个周期,包含了1.88个周期
Fs=100000;


做了,确实没能到189Hz,所以我修改了我的回复。那么事实上通过补零对你的目标也是没有用处的。

sunyuxinhe 发表于 2013-10-19 20:55

sunyuxinhe 发表于 2013-10-19 20:45 static/image/common/back.gif
我什么时候说过,补零能够提高分辨率了?补零怎么可能提高分辨率??这点常识就不要拿出来说事了。

我 ...

最后请教你一个问题,如果数据量比较少,包含所测信号1-2周期,请问怎么才能准确测出该频率。直接FFT肯定不行的,因为频率分辨率低。这个问题也就是等同于我给你发的代码。

sunyuxinhe 发表于 2013-10-19 20:56

yghit08 发表于 2013-10-19 20:54 static/image/common/back.gif
做了,确实没能到189Hz,所以我修改了我的回复。那么事实上通过补零对你的目标也是没有用处的。

这正是我的问题呀,请提供建议

sunyuxinhe 发表于 2013-10-19 21:03

sunyuxinhe 发表于 2013-10-19 20:56 static/image/common/back.gif
这正是我的问题呀,请提供建议

谢谢你提供的建议, 有些话不方便说。我很高兴你觉得我的问题很幼稚,因为我很高兴看到它可以被解决。
页: [1]
查看完整版本: FFT出现频率畸变 求解释