时域补零对于DFT谱的影响

时域补零对于DFT谱的影响

转自:http://blog.sina.com.cn/s/blog_62eb77f90100xa3l.html

      节前总是疯狂加班,今天晚上还在实验室干到十点。其实这篇文章早就写好了,只是太忙,没时间上网。

      前几天上数字信号处理(本以为第二次上这个课只是简单地重复过去学习过的内容,但是这次有了很多新的发现),书上说对时域信号补零之后再作DFT并不能提 高频谱的频率分辨率,提高采样频率也不能提高DFT谱的频率分辨率。这个很新鲜,以前上课时没有考虑过这个问题,以前的课本好像也没有开辟专门的章节论述 这个问题。

      提高采样频率不能提高频率分辨率的原因其实很简单,因为提高了采样频率,虽然在相同的观察时长那的点数增多了,但与此同时采样频率也变大了,点数增加几倍采样频率增加几倍,所以不改变观察时长而仅仅提高采样频率并不能提高DFT谱的频率分辨率。

      但是时域补零呢?采样频率没有变化,而点数增加无疑会减小DFT谱的相邻谱线间隔,相邻谱线间隔的缩小为什么不能提高频率的分辨率呢?书上是这样写的: “错把‘计算分辨率’当成了‘物理分辨率’……补零没有对原信号增加任何新的信息,因此不可能提高分辨率。但补零……补零还可以对原X(k)做插值。” (《数字信号处理——理论、算法与实现(第二版)》清华大学出版社,胡广书)

      为了更好地理解这个问题,我又一次借用MATLAB的强大力量,写了一个简单的程序如下: 

%点数

n=0:127;

%频率

f=0.1;

%信号,正弦叠加矩形

y1=sin(2*pi*f*n);

y1(1:16)=y1(1:16)+1;

%绘制y1的fft谱幅度

%谱线较多,直接画的包络

figure;

plot(abs(fft(y1)));

%对信号进行截短

y2s=y1(1:32);

%绘制y1截断后没有补零的fft谱幅度

figure;

fy2s=abs(fft(y2s));

stem(fy2s);

%然后补零使y1和y2一样长

y2=[y2s zeros(1,128-32)];

%打开一个绘图窗口

figure;

%绘制y1的fft谱幅度

%谱线较多,直接画包络

plot(abs(fft(y1)));

%在同一个figure中继续绘图

hold on;

%绘制y2的fft谱幅度(红色)

%谱线较多,直接画包络

plot(abs(fft(y2)),'r');

%绘制y2s的fft幅度谱

stem(1:4:128,fy2s,'k');

hold off;

fft-matlab <wbr>补零对结果影响的讨论

fft-matlab <wbr>补零对结果影响的讨论

fft-matlab <wbr>补零对结果影响的讨论

图3(比较原信号【蓝】,截短信号【黑】,补零信号【红】三者谱的关系,补零信号的谱由于点数较多,绘制的是包络)

      程序的大意是:首先生成了一个长度为128点的信号,绘制了它的DFT谱,然后将该信号截短,求其DFT谱,然后对截短的信号补零,使其长度为128点再求DFT谱,并将原信号的谱与补零信号的谱进行比较,结果一目了然。

      从图三中我们可以发现,红色的补零信号的谱,仅仅是对黑色的截短信号的谱的插值,也就是说补零信号的谱,是通过截短信号的谱进行了推测(插值算法)得来 的,它并不能反映原信号的谱(因为原信号在截短的过程中部分信息丢失了,而补零并没有将这些丢失的信息找回来),所以虽然补零信号的谱线间隔变小了,但是 除了从截短信号的谱中取出来的32根谱线以外,其余的96根谱线都是无效的。去掉这些无效的谱线,采样频率不变,有效的谱线数不变,所以其物理频率分辨率 自然没有改变。

      在时域补零起到了对频谱的插值作用,考虑到傅立叶变换的对称性,考虑到变换与反变换的表达式除了系数和符号的差别外并没有根本的不同,推断出这样一个结 果:在频域补零也会造成时域的插值(当然在频域进行操作一定要注意谱的对称性,否则反变换回来得到的将是一个复信号,至于为什么会这样参看《xialulee来说明什么是负频率》 ),于是我又写了如下的程序:  

f=0.1;

n=0:31;

%产生正弦信号

y1=sin(2*pi*f*n);

%y1的fft谱

f1=fft(y1);

%给y1的谱补零

f2=[f1(1:end/2+1) zeros(1,31) f1(end/2+1:end)];

stem(abs(f2));

%对补零后的谱作反变换

y2=ifft(f2);

%打开绘图窗口

figure;

%绘制多幅图形

hold on;

%绘制y2

stem(y2);

%绘制原信号(除以2以比较插值效果)

stem(1:2:64,y1/2,'r');

hold off;

      程序的输出图形如下:fft-matlab <wbr>补零对结果影响的讨论

仿佛证明了这个推测。这是不是就是所谓的傅立叶插值?

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值