DFT插零FFT算法理解

20180801:1043
这里写图片描述
图1
为什么FFT时域补0后,经FFT变换就是频域进行内插?
  应该这样来理解这个问题:
补0后的DFT(FFT是DFT的快速算法),实际上公式并没变,变化的只是频域项(如:补0前FFT计算得到的是m*2*pi/M处的频域值,而补0后得到的是n*2*pi/N处的频域值),M为原DFT长度,N变成了补0后的长度。将(-pi,pi)从原来的M份变成了N份,如果将补0前后的这些频域值画在坐标上,其中m*2*pi/M和n*2*pi/N重合的部分,它所对应的频域值(变换后的值)是不变的,而在原来的M份里多了(N-M)份的分量,即在频域内多了(N-M)份插值,这样理解就清楚了。


补零好处有二:
  其一是,可使数据点数为2的整次幂,以便于使用FFT
  其二,对原数据起到了做插值的作用,一方面克服“栏栅”效应,使谱的外观平滑,
  另一方面,由于对数据截短时引起的频域泄漏,有可能在频谱中出现一些难以确认的谱峰(见《数字信号处理》课本147页图6-13),补零后有可能消除这种现象。

20180801:0929
这里写图片描述
图2
DFT泄漏和加窗-频域分析的重要理论 
在最后补零不能提高分辨率
因为补零并不能增加数据的有效长度。
书上说了,好处有二:
其一是,可使数据点数为2的整次幂,以便于使用FFT
其二,对原数据起到了做插值的作用,一方面克服“栏栅”效应,使谱的外观平滑,
另一方面,由于对数据截短时引起的频域泄漏,有可能在频谱中出现一些难以确认的
谱峰,补零后有可能消除这种现象。
频域的采样率不是指频域分辨率,是指在频域采样点数
重复会出问题的… 做能量谱的时候… 能量谱做出来后会爽爽的变成一个栅栏,但栅栏有数的地方还是对的。

图3
DFT分辨率、补零和频域采样–频域分析的重要理论
每一个章节都要查看一下:

http://blog.sina.com.cn/s/blog_8a3196910101ki1o.html
二、栅栏效应与分辨率
信号x(n)的DFT相当于对x(n)做Z变换,然后在单位圆上对频率进行N的点(等间隔)的抽样,所以信号x(n)被分解成一个个信号的组合,这些信号都是单频的且彼此之间等间隔离散。频域离散也可以直接由傅里叶变换公式得到,或者直观的由图(d)得到。这些频率都在基频的整数倍处,不是连续的频率函数,我们通过这个离散的频谱函数来分析原函数的频率分布。对于离散频率之间的频率信息我们不得而知,这就是栅栏效应。
栅栏效应的本质就是频率的离散化,它是频谱率散化的一种形象的描述。
栅栏效应的产生导致了频谱分辨率的问题。频谱分辨率就是频域两相邻谱线之间的频率间隔。
首先需要明白,频率有模拟频率与数字频率之分,模拟频率表示的谱线间隔其实际值的数学表达式为fs/N(Hz)也就是1/T,T为时域一个周期的长度,计算公式为1/(Ts*N),f为时域抽样频率,频域谱线间隔等于时域周期的倒数,这个关系可以由变换关系式得到,任何形式的傅里叶变换都满足这样的关系。;数字角频率与模拟频率之间的关系为w=Ω*T,其中Ω模拟角频率,所以数字角频率表示的谱线间隔w=2π/N。
对于真正的频率(模拟频率)我们要增加频谱分辨率,表面看有两种方法,减小采样频率和提高N。一般情况下我们是针对已有的采样数据而言,因为fs已定,不能改变。所以分辨率只能通过提高N来得到改善。在不改变原采样数据的情况下,我们可以在信号后面补零。这就是常说的补零法。
现在我们从DFT公式上分析补零的效果。因为频域点数和时域点数是相等的,所以首先频谱点数增多。由正变换公式,设点数由N变为m*N,新变换的频率用k1表示,当k1满足m*k时,由exp(j*k1*2π/(m*N)可知此时的频率点和未补零前k时的频率点是重合的,此时正变换公式求和项与为补零前的求和项是一样的,只不过增加了求和点数,不过这些点数也就是补的x(n)值是零,对求和并无影响。如果不化成真正的幅度,那么这两个频谱图在这些频率点上频谱图是完全重合的。因为N发生了变化,所以真正的幅度以1/m的比例的发生了变化。
仿真结果如下,m等于2,也就是补了N个零。频谱的幅度不是真正的幅度,没有对其做除以N的处理。由于补了一倍的点,图g可以看出,每隔一个点,两个频谱都是重合的。相对于原来的频谱函数,在频域进行了内插,所以频谱分辨率提高了。
补零的结果是对已经截断得到的信号的频谱分辨率的提高,而不是对原来为截断的信号的分辨率的提高。这由图(d)可以很容易看出,补零后DFT的结果使得图10的谱线变的更密而更加逼近图(6),而做不到使频谱逼近图(2),所以截断而丢失的信息无法通过补零而得到。

20180801:0839
第二种方法:相应地,我也可以通过把输入信号和每一种频率的正余弦信号进行相乘(关联操作),从而得到原始信号与每种频率的关联程度(即总和大小),这个结果便是我们所要的傅立叶变换结果,下面两个等式便是我们所要的计算方法:

图4
第二个式子中加了个负号,是为了保持复数形式的一致,前面我们知道在计算 时又加了个负号,所以这只是个形式的问题,并没有实际意义,你也可以把负号去掉,并在计算 时也不加负号。
这里有一点必须明白一个正交的概念:两个函数相乘,如果结果中的每个点的总和为0,则可认为这两个函数为正交函数。要确保关联性算法是正确的,则必须使得跟原始信号相乘的信号的函数形式是正交的,我们知道所有的正弦或余弦函数是正交的,这一点我们可以通过简单的高数知识就可以证明它,所以我们可以通过关联的方法把原始信号分离出正余弦信号。当然,其它的正交函数也是存在的,如:方波、三角波等形式的脉冲信号,所以原始信号也可被分解成这些信号,但这只是说可以这样做,却是没有用的。

猜你喜欢

转载自blog.csdn.net/maifeilaoshi11/article/details/81354383
今日推荐