FFT补零
实验0.8ms采集一个点,采集了4069个点,对这4069点的数据进行处理获得这个数据的频率成分,用了两种办法做(1)直接对4069个点进行FFT(2)补上27个零构成4096个点(2的整次幂)然后做FFT,两种办法下得到的频谱图差别很大,无法理解两个图,哪位高手帮忙解释下,谢谢 复值谱的差异应不大。
实部和虚部因补零造成中心位置不同,差异比较大 记得以前有个帖子说,数据后面加0会提高频率分辨率(显示分辨率,真正的分辨率并没有变),不改变包络,相当于对频谱进行内插值。但是从楼主的结果来看,的确差别很大,而且也不像内插值。
请高手详解。 建议直接贴图方便大家阅读!
个人以为若先对数据执行detrend再补零, 就不会差这么多
数据
前一段时间有点事,一直没有看回复,谢谢回帖的人,希望大家继续帮忙现在将测得数据发出来,大家帮忙看看
回复 地板 ChaChing 的帖子
频率图都是去掉趋势项的值用了这么两个函数
b=polyfit(i,a,1);
b=polyval(b,i);
本来准备直接贴图的可在MATLAB中另存为JPEG、PNG等几种都不能传到附件,只能传LZ贴中的附件了
[ 本帖最后由 linden 于 2009-7-21 21:41 编辑 ] 原以为若先对数据执行detrend再补零, 就不会差这么多! detrend基本上同LZ用的polyfit(i,a,1)相当
刚试下LZ的资料, 好像都处理不好!
回复 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); 我不太喜欢补零,更改了原始信号,怎么地也会有不良影响,补零的原因是为了兼顾频率分辨率和FFT要求的2整数次幂数据量两方面的要求。我的做法是不补零,数据量满足fft要求,频率分辨率高点低点没那么严重。
回复 9楼 hyl2323 的帖子
我测得的数据补零和不补零怎么差别那么大啊!是不是哪地方出问题了 补零后,作DFT的点数N变化了,所以频率分辨率=fs/N发生了变化,设原始信号的频率为f0,没变化,则f0/N不再是整周期采样了,频谱出现了泄漏。不知道我理解的对不对? 同意11楼观点,确实出现泄漏现象!
页:
[1]