linden 发表于 2009-7-14 14:42

FFT补零

实验0.8ms采集一个点,采集了4069个点,对这4069点的数据进行处理获得这个数据的频率成分,用了两种办法做
(1)直接对4069个点进行FFT(2)补上27个零构成4096个点(2的整次幂)然后做FFT,两种办法下得到的频谱图差别很大,无法理解两个图,哪位高手帮忙解释下,谢谢

VibrationMaster 发表于 2009-7-14 18:16

复值谱的差异应不大。
实部和虚部因补零造成中心位置不同,差异比较大

ttwwooblueyes 发表于 2009-7-15 02:20

记得以前有个帖子说,数据后面加0会提高频率分辨率(显示分辨率,真正的分辨率并没有变),不改变包络,相当于对频谱进行内插值。但是从楼主的结果来看,的确差别很大,而且也不像内插值。

请高手详解。

ChaChing 发表于 2009-7-15 08:00

建议直接贴图方便大家阅读!
个人以为若先对数据执行detrend再补零, 就不会差这么多

linden 发表于 2009-7-21 21:32

数据

前一段时间有点事,一直没有看回复,谢谢回帖的人,希望大家继续帮忙
现在将测得数据发出来,大家帮忙看看

linden 发表于 2009-7-21 21:36

回复 地板 ChaChing 的帖子

频率图都是去掉趋势项的值
用了这么两个函数
b=polyfit(i,a,1);
b=polyval(b,i);
本来准备直接贴图的可在MATLAB中另存为JPEG、PNG等几种都不能传到附件,只能传LZ贴中的附件了

[ 本帖最后由 linden 于 2009-7-21 21:41 编辑 ]

ChaChing 发表于 2009-7-23 00:06

原以为若先对数据执行detrend再补零, 就不会差这么多! detrend基本上同LZ用的polyfit(i,a,1)相当
刚试下LZ的资料, 好像都处理不好!

linden 发表于 2009-7-25 15:07

回复 7楼 ChaChing 的帖子

下面是没有补零的程序,您帮忙看看,补零和不补零怎么差这么多
clear
load wucha150.txt
a=wucha150;
a=a';
i=1:1:4069;
b=polyfit(i,a,1);
b=polyval(b,i);
figure(1);
plot(i,a,'.',i,a);
figure(2);
plot(i,a-b);
x=a-b;
x=x(1:1:4069);
F=fft(x);
amb=abs(F)*2/4069;
angleb=angle(F)+2.5*pi;
for k=1:4069
    if angleb(k)>2*pi
      angleb(k)=angleb(k)-2*pi;
    end
end
f=(0:length(x)-1)'*1250/length(x);
figure(3);
plot(f(1:2035),amb(1:2035),'-');
figure(4);
amb=amb(1:100)
stem(amb);
figure(5);
amb=amb(1:100)
plot(amb);

hyl2323 发表于 2009-7-27 11:22

我不太喜欢补零,更改了原始信号,怎么地也会有不良影响,补零的原因是为了兼顾频率分辨率和FFT要求的2整数次幂数据量两方面的要求。我的做法是不补零,数据量满足fft要求,频率分辨率高点低点没那么严重。

linden 发表于 2009-7-30 10:16

回复 9楼 hyl2323 的帖子

我测得的数据补零和不补零怎么差别那么大啊!是不是哪地方出问题了

zzpanda5 发表于 2009-9-6 21:37

补零后,作DFT的点数N变化了,所以频率分辨率=fs/N发生了变化,设原始信号的频率为f0,没变化,则f0/N不再是整周期采样了,频谱出现了泄漏。不知道我理解的对不对?

xiaokang 发表于 2009-10-27 03:25

同意11楼观点,确实出现泄漏现象!
页: [1]
查看完整版本: FFT补零