DFT相比FFT的优势

一 概述

在谐波分析仪中,我们常常提到的两个词语,就是DFT算法与FFT算法,功率分析或谐波分析时用户往往关注的是能否达到所要分析谐波次数的目的,而并未考虑两种算法之间有什么不同,采用相关算法的依据。下面就来介绍一下两种算法的不同以及适用的一些场合。

  • DFT算法,是连续傅里叶变换在时域和频域上都离散的形式,将时域信号的采样变换为在离散时间傅里叶变换频域的采样。
  • FFT算法,是离散傅里叶变换的快速算法,它是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅里叶变换的算法进行改进获得的。它对傅氏变换的理论没有新的算法发现,但是对于在计算机系统或者说数字系统中应用离散傅里叶变换,可以说进了一大步。

二 DFT与FFT的比较

1. 运算量

一般来说FFT比DFT运算量小得多,N点的FFT需要做

  • N 2 log ⁡ 2 N \frac{N}{2} \log _{2} N 2Nlog2N次乘法运算
  • N log ⁡ 2 N {N} \log _{2} N Nlog2N次加法运算

而N点DFT需要做

  • N 2 {N}^{2} N2 次乘法运算
  • N ( N − 1 ) {N}{(N-1)} N(N1) 次加法运算

由于乘法运算耗时比加法运算大的多,我们可以只关注乘法运算,由此看来N点 DFT运算量大约是FFT的
2 N l o g 2 N \frac {2 N }{log _{2} N} log2N2N倍,例如对1024点的变换,DFT大约是FFT的200倍。然而实际应用时存在下列情况:

① 实际应用时DFT中的乘法可以是实数和复数相乘,原因是FFT是分级运算的,中间运算过程都是复数运算,由此来看当输入信号是实数时,DFT的运算量大约是FFT的 N / log ⁡ 2 N N / \log _{2} N N/log2N倍;

② 实际应用时往往只关心整个频谱中的某一部分,甚至是只关心某些个别频点的谱线。DFT的特点是可单独计算某一部分的谱线,而直接进行 FFT的算法必须计算整个频谱后才能得到需要的那一部分频谱,实际上已造成了浪费。如果N点的变换中只关心其中的M个频点或称M条谱线,那么实际DFT的运算量大约是FFT的
2 M l o g 2 N \frac {2 M }{log _{2} N} log2N2M倍(复数输入)。例如对N=1024点实数的变换,只关心10条谱线(M=10),那么直接用DFT和用FFT的运算量是相同的。因此,实际应用时DFT与FFT相比可能并没有那么慢。
只要关心的谱线足够少, D F T 就能比 F F T 快 \color{red}{只要关心的谱线足够少,DFT就能比FFT快} 只要关心的谱线足够少,DFT就能比FFT

2. 点数或采样率的可选性

对DFT来讲其变换点数可任意选定。如实际应用时采样率已确定为1000 Hz,如选变换点数为1000点,那么每条谱线正好可落在整数频点上。FFT的变换点数必须是有规律的,如基数为2算法的FFT其点数必须是2的次幂,如1024点、4096点等。

在实际应用时为分析方便,采样率往往要定为变换点数的倍数,如2048 Hz、8192 Hz,以避免变换后的频谱落在复杂的带小数点的频点上。对于固定频率的交流信号的测量,可以使采样频率为信号频率的M倍,且M= 2 N {2}^{N} 2N。 但是,如果测量前基波未知,那么就无法同时满足样本数为2^N和整周期的要求。

因此实际应用时FFT在变换点数选择或采样率选择上可能会带来局限性。

3. 实时性

DFT运算可以用采一点后立即进行相乘、累加运算的方法,即可以边采边算,从采样结束到DFT变换结束只需要一个点的运算时间。而FFT运算必须在全部点采集结束后才能开始进行计算,因此从某种角度讲DFT的实时性优于FFT。

4. 数据内存开销

对N点DFT来讲,如只需其中的M个频点,那么在计算时需2M个单元的数据内存,对N点FFT来讲则至少需2N个单元的数据内存,另外现有的FFT程序一般需要将系数放在数据内存区,因此需另选N个单元的数据内存,故DFT有可能比FFT更节省数据内存。

5. 程序的复杂性

DFT计算程序非常简单而且可以非常方便地在非DFT专用芯片上实现,而FFT程序较为复杂。

6. 动态范围或抗溢出性

在定点运算的场合,DFT较FFT更容易实现多精度的运算, 例如在TI公司的16位定点DSP处理器中,采用的数据和系数为16位,而相乘并累加的结果可设为双字节即32位,一般来讲设计合理的话不会产生计算溢出的现象,免去了复杂的溢出控制,同时输入输出信号可保持较好的动态范围,FFT在程序中有防溢出的措施,然而在定点运算的场合点数越多输入信号的动态范围越小

三 结论

在某些具体的应用场合,DFT与它的快速算法FFT相比可能更有优势,而FFT却存在某些局限性:

  • 在只需要求出部分频点的频率谱线时DFT的运算时间大为减少,所需的数据内存量也大为减小。
  • DFT运算速度一般虽远远低于FFT,但是对样本数没有要求,具有适应变换点数或采样率选择更灵活的优点。可以适应各种信号频率,减少栅栏现象。
  • DFT与FFT相比还具有实时性更好、更容易控制溢出和动态范围、运算编程简单、可方便地在非DSP芯片中编程实现等优点。

因此,在实际应用中可以从具体条件出发来比较、选择DFT或FFT,而不应片面地由于FFT是所谓的DFT的快速算法而只选用FFT。

转载自 https://www.vfe.ac.cn/NewsDetail-765.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值