基于DSP的FFT算法实现RealizationofFFTalgorithmbasedonDSP艾红,常青青,邓大伟AIHong,CHANGQing-qing,DENGDa-wei(北京信息科技大学自动化学院,北京100192摘要:快速傅立叶变换(FFT是将信号从时域变换到频域的一种方法,广泛运用于各种信号分析领域。文中介绍了FFT算法的原理,构建了基于TMS320F2812的硬件平台,阐述了FFT算法的硬件与软件实现。利用TMS320F2812内部的ADC模块与事件管理器的定时器实现信号的实时采集,不需要使用专门的A/D转换芯片。软件上以128点FFT运算为例,在CCS环境下利用C语言编程实现了FFT算法,程序充分利用蝶式权的周期性及FFT运算中第一级蝶式权值固定为1的特点,使得运算量与复杂度大大减小。运行结果表明TMS320F2812能够快速高效地完成FFT运算。关键词:数字信号处理;快速傅立叶变换;信号采集中图分类号:TP273文献标识码:B文章编号:1009-0134(201201(上-0017-03Doi:10.3969/j.issn.1009-0134.2012.01(上.070引言快速傅立叶变换(FFT在雷达、通信、电子对抗和电力系统等领域有广泛应用,特别是在电力系统的谐波检测中,FFT几乎是唯一可行的检测方法。通常提高FFT运算速度有两种途径:改进FFT算法本身和改进运算工具。现阶段提高FFT算法本身非常困难,一般方法致力于改进运算工具。数字信号处理器DSP是一种可编程的高性能处理器。文中充分利用TMS320F2812DSP强大的数据处理能力,实现了FFT运算,并提高了运算速度。1系统硬件结构系统设计以TMS320F2812处理器为核心,辅以外围电路构成。DSP负责模拟输入信号数据采集以及FFT算法实现。外围电路包括电源转换电路,时钟电路,复位电路以及外部RAM等。系统的硬件整体结构如图1所示[1]。对信号进行FFT变换,首先要对模拟信号采样将其转换为数字信号。输入的连续模拟信号经信号调理电路后输出到DSP的ADC模拟输入通道,经过ADC数据采集,模数转换的结果存放于ADC结果寄存器中。信号调理电路主要是为了信号的抗混叠滤波以及电路阻抗的匹配。信号调理电路对输入信号进行调理处理,包括信号的滤波、跟随输出以及信号的稳定。DSP对采集的数字信号进行FFT运算处理,同时对运算结果进行相应的数据显示和数据存储。图1系统的硬件整体结构图2FFT算法原理FFT是离散傅立叶变换(DFT的快速运算,是数字信号处理的基础。因为有些信号在时域很难看出特性,使用FFT将其变换到频域,就会很容易看出其特性。DFT算法的基本公式为[3]:式中x(n表示时域信号,X(k表示频域信号,为运算蝶式权。FFT算法是不断地把长序列的DFT分解成几个短序列的DFT,并利用的周期性和对称性减少DFT的运算次数。设序列x(n的长度为N(N=2M,M为任意正整数,按n的奇偶把x(n分解成两个N/2收稿日期:2011-08-12基金项目:北京市教育委员会科技计划面上项目(KM200910772008作者简介:艾红(1962-,女,四川重庆人,副教授,硕士,研究方向为检测技术与自动化装置。点的子序列:若:则:由此可见,若将任何一偶数点序列按下标的奇偶性分成两个子序列,则原序列的DFT可由两子序列的DFT线性组合得到。运算流图如图2所示。图2运算流图图3蝶式运算流图其中,A和B的距离称为翅尖距。这种方法和直接进行DFT计算相比较,运算量减少一半。按照这种分解运算的思想,将X1(k和X2(k继续向下分解,直到最后变为一点序列,此时的运算量大大减小。以8点序列X(n的FFT运算为例:第一次分解:第二次分解:蝶式运算流图如图3所示。比较FFT和DFT的运算量。假设序列点数为N,且有N=2L,当使用FFT进行运算时,计算过程中只有蝶式运算,它的复数乘法运算量为,复数加法运算量为;直接进行DFT运算时,复数乘法和复数加法的运算量均为N2。由此可见,FFT运算确实大大减小了DFT的运算量。由图3可以看出,若想得到顺序正确的频域序列X(k,必须对时域序列进行重新排序。这里先说明比特逆序的概念:设存储地址m,其二进制数(设m=2L为m=(m1m2m3,若有=(m3m2m1,则称为m的L位比特逆序列。若将图4中的输入时域序列下标转换成二进制,依次是:000,100,010,110,001,101,011,111;而原时域序列下标转换成二进制依次是:000,001,010,011,100,101,110,111,将两者对比可发现,输入时域序列下标就是原时域序列下标的比特逆序。所以FFT蝶式运算的第一步就是对时域序列进行比特排序。3系...