当前位置:
文档之家› 快速傅立叶变换_FFT_在数字信号处理器_DSP_上的实现
快速傅立叶变换_FFT_在数字信号处理器_DSP_上的实现
器(DSP)TMS320C5402上实现中出现的计算溢出等问题进行了分析并提出了解决方法,同时对快速
傅立叶变换(FFT)的特点进行了研究和总结,据此在DSPC5402上实现了快速傅立叶变换(FFT)。
关键词:数字信号处理;快速傅立叶变换;反序
中图分类号:TN911.72
文献标识码:A
The Implementation of Fast Fourier Transform (FFT) in DSP
(1)
式中: X1(k) 和 X 2 (k ) 分别为 x1 (r) 和 x2 (r) 的 N / 2 点DFT,即:
X1 (k) = DFT[x1 (r)]
(2)
X 2 (k) = DFT[x2 (r)]
(3)
因此对于一个 N 点的DIT-FFT运算来说,可以表
示成如下的流程图(图1): 写成向量形式即为:
· 36 ·
舰船防化
2007 年第 1 期
图 1 N 点 DIT-FFT 运算流程图(N=8)
入序列进行适当的组合以形成N点复数序列;复数序 列的FFT;将FFT的N点复数输出序列进行适当的运算 组合,获得原实数输入的2N点FFT复数输出序列。通 过这种变换处理,FFT的运算量减少了一半,效率可 比一般的FFT提高一倍。
RM[0]=IM[0]=RM[N/2] =IM[N/2 ]=0
RP[N/2]=R[N/2];IP[N/2]=I[N/2 ]
对应于 2N 点实输入序列的 2N 点 FFT 复输出序列
的形成:
利用序列 RP[k],RM[k],IP[k]和 IM[k],按下
面等式计算实输入序列 a(n)FFT 的输出:
AR[k]:AR[2N-k]=RP[k]+cos(kπ/N)*IP[k]-sin(k
(1)信号处理算法运算量大,要求速度快。不
2007 年第 1 期
快速傅立叶变换(FFT)在 TMS320C5402 上的实现
· 35 ·
论是一维的语言信号,还是二维的图像信号,一般算 法的运算量都很大,且算法的实现都必须实时。
(2)信号处理算法通常需要执行大量的乘累加 运算。比如FIR滤波算法主要执行的是一个点积运算, 也就是以乘、加为主的运算。
(1)单周期快速运算,允许任意计算次序。 (2)单周期内能取两个以上操作数,保证快速 的乘累加运算(MAC)。 (3)能产生信号处理算法需要的特殊寻址,如 循环寻址和位翻转寻址。 (4)有相应的硬件循环缓冲区,能执行零开销 的循环和转移操作。 (5)具有串口、DMA控制器、定时器等丰富的 外设资源。 数字信号处理中大量使用了内积,或称"点积"的 运算。无论是FIR滤波,FFT,信号相关,数字混频, 下变频。所有这些数字信号处理的运算经常是将输入 信号与一个系数表或者与一个本地参考信号相乘然 后积分(累加)。了解DSP的这一特点后,当我们设 计一个嵌入式系统时,首先要考虑处理器所实现的算 法中是否有点积运算,即是否要经常进行两个数组的 乘加(例如数字滤波,相关等需要两个数组的点积), 如果有的话,每秒要做多少次,这样就能够决定是否
2007 年第 1 期
快速傅立叶变换(FFT)在 TMS320C5402 上的实现
· 37 ·
转因子表可适应于不同点数的 FFT 的运算。
(3)原 2N 点实输入序列 a(n)的所有信息都包含
在这 N 点复数序列 D(k)中。
输出复序列奇偶分离:
对上一阶段的 N 点复数输出数据 D(K)进行运算
重组。方法为:
π/N)*RM[k]
AI[k]=-AI[2N-k]=IM[k]-cos(k π / N)*RM[k]-sin(k
π/N)*IP[k]
AR[0]=RP[0]+IP[0];AI[0]=IM[0]-RM[0];
AR[N]=R[0]-I[0];AI[N]=0
这里:A[k]=A[2N—k]=AR[k]+j AI[k]=F{a(n)}
Li Meng, Li Hong (The 718th Research Institute of CSIC, Handan 056027, China)
Abstract: This paper introduces the principle and implementation of FFT with rapidness and high efficiency and puts forward the problems that appear in the accomplishment of FFT in DSP such as overflowing. The characteristics of FFT are researched and summarized, on which it shows that a result can be acquired of the accomplishment of FFT in DSPC5402. Keywords: DSP, FFT, Bit reverse
C5402是定点的DSP,因而在用C5402实现FFT
时,应考虑防止中间结果产生溢出的问题。解决这个
问题的方法就是对中间数值进行归一化[3]。1-2点碟
形节可以用(5)式表示:
Pm+1 = Pm + WNK Qm
Qm+1
=
Pm
−
W
K N
Qm
(5)
式中:Pm和Qm是第m级碟形节的两节点;Pm+1 和 Qm+1 是第m+1级碟形节的两节点,且设:
对 d(n)进行位翻转: STM #INPUT,AR3 ;AR3 指向数据处理缓冲器的 第一个输入数据 STM #DATA,AR7; AR7 指向数据处理缓冲器的预 留空间的起始地址 MVMM AR7,AR2;AR2 =AR7 STN # N -1.BRC;装载块循环计数器的值,使 块循环 N 次。 RfrrBD P1end STN # N.ARO;ARO 为循环缓冲器的大小 MVDD * AR3+ .* AR2+ MVDD * AR3-.* AR2+ Plend:MAR *AR3+OB ;位翻转寻址 N 点复输入 FFT: (1)对 d(n)进行 N 点复 FFT 运算。 D[k]= F{d(n)}= R[k]+ j I[k](式中:R[k]和 I[k] 分别是 D(k)的实部和虚部) (2)旋转因子是以 Q15 的格式储存在两个分开的 数据表中。每一个表包含有 5l2 个值,角度范围从 0 到丌左右。对旋转因子表的存取是通过 C54x 的一种 特殊的寻址方式—循环寻址进行的,因此,同一个旋
Pm = PRm + jPI m Qm = QRm + jQI m
(6)
W
K N
= e − j 2πk / N
= cos( 2πk / N ) +
j sin( 2πk / N )
经过整理后得到:
(7)
Pm+1 = PRm + URm + j(PI m + UI m ) Qm+1 = PRm − URm + j(PI m + UI m )
3 FFT在C5402上的实现
3.1 运算法则和实现 FFT在C5402上的实现采用的是基于C5402的时
域抽取原位基一2FFT,共分四阶段:2N点实数输入 序列的分组和位翻转,N点复输入FFT,输出复序列 奇偶分离,对应于2N点实输入序列的2N点FFT复输出 序列的形成。
2N点实数输入序列a(n)的分组和位翻转: 位翻转目的是使在整个运算过程结束时其FFT输 出恰为自然顺序。实现过程是: a(n)被分解成两个序列: r(n):a(2n);i(n)=a(2n+1) (n:0,1,2,⋯ ,N-1) FFT的N点复数输入d(n)通过下面的等式来构成: d(n)=r(n)+ji(n)
作者用TI公司C54x系列数字信号处理器(DSP)
芯片中的TMS320C5402实现了快速傅立叶变换,该芯 片是基于CMOS制造工艺第七代产品,它集程度高, 结构简单,处理功能强,而且属于低功耗产品,因此 在许多领域得到了广泛的应用。
1 数字信号处理和DSP的特点
数字信号处理是指将模拟信号通过采样进行数 字化后的信号进行分析、处理,它侧重于理论、算法 及软件实现[1]。数字信号处理算法具有如下主要的特 点:
RP[k]=RP[N-k]=0.5*(R[k]+R[N-k]);
RM[k]=-RM[N-k]=0.5*(R[k]-R[N-k])
IP[k]=IP[N-k]=0.5*(I[k]+I[N-k]);
IM[k]=-IM[N-k]=0.5*(I[k]-I[N-k])
RP[O]=R[0];IP[O]=I [0];
(3)信号处理算法常具有某些特定模式,比较 典型的是数字滤波器中的连续推移位。
(4)信号处理算法大部分处理时间花在执行相 对小循环的操作上。
(5)信号处理算法要求专门的接口。一个非常 重要的接口是把模拟信号与数字信号相互转换的 ADC和DAC,另外大量的数据交换需要有高速的数据 吞吐能力。
从一开始,DSP的结构就是针对数字信号处理算 法模型进行构造的,几乎所有的DSP都包含有数字信 号处理算法的特征。因此,数字信号处理的上述特点 要求DSP必须是专门设计的,典型DSP的设计满足数 字信号处理的这样一些要求:
采用DSP,采用多高性能的DSP了。
2 算法的原理
快速傅立叶变换(FFT)算法基本上分为两大类:
时域抽取法FFT(Decimation-In-Time FFT)和频域抽
取法FFT(Decimation-In-Frequency FFT)。在算法的时
间和空间复杂度上两者是一致的,只是序列在计算前