素数因子算法的FFT处理器的设计
- 格式:doc
- 大小:16.00 KB
- 文档页数:4
素数因子算法的FFT处理器的设计
作者:潘东强
来源:《中国新技术新产品》2011年第07期
摘要:为满足FFT运算速度的要求,提出了一种易于FPGA 实现的素数因子算法FFT处理器的硬件结构。
其中数据存储采用了乒乓RAM 结构来实现,可以扩大吞吐量;数据缓存使用FIFO来实现,可以减少一半存储空间的使用;运算模块使用素数因子算法结合流水线结构,在一定延迟后可以连续输出结果;增加地址排序映射可以实现数据正序输入输出。
关键词:FFT;FPGA;素数因子算法;流水线
中图分类号:TN957.52 文献标识码:A
1、引言
硬件实现FFT的运算速度取决于算法的效率问题,一般来讲硬件实现加减法比实现乘除法要耗时多很多,所以尽可能的减少乘法运算次数可以有效提高运算速度[1]。
目前已有的基于FPGA的FFT的IP核大多采用库利-图基基2或基4或二者混用算法,采样点数只能是2的整数次幂,可选范围小,灵活性不高,而素数因子算法FFT比库利-图基算法所需乘法次数要少一半,可以极大提高运算速度。
2素数因子FFT分析
以简单的二维序列为例,在素数因子算法中,序列x(n)的长度 N可以分解为两个整数N1和N2的乘积:N= N1N2,时域的序号n可以表示成n1和n2的函数,如下所示:
同样,DFT序列X[k]的频域序号k也可以表示成k1和k2的函数,如下所示:
如此,DFT运算可写为:
当N1和N2互质,且合理选择ABCD的值[2],使满足
如:A=N2,B=N1,C=N2N1,D=N1N2 则可化简为:
由此可见,素因子算法将FFT序列分为互质的小序列,可先分别计算小序列变换,再得到N点变换,序列分解也给出了流水线设计的可行性。
通过分析,不难看出从二维推广到多维数组,序号映射关系如下[3]:
可见多维情况下相当于二维的持续扩展,此思想类似于库利-图基FFT的算法思想,易于FPGA硬件实现,只需进行适当的地址映射就可以实现序列的素因子分解排序,而且通过上述分析可以发现经过素数因子地址映射后分解后的各小序列经DFT运算后可直接送下一级运算,不需要进行旋转因子的处理,所需存储空间大大减小。
3FFT处理器设计
3.1. 整体架构框图:
对各个模块进行合理划分,具体结构如图1所示。
3.2. 二进制算法选择:
通常数字信号处理使用的二进制算法有定点算法、浮点算法和块浮点算法[4]。
浮点算法消耗资源较大,硬件实现上比较困难,而块浮点需要等待计算结果来校验溢出,不利于流水线结构的实现,所以设计中采取了定点算法并在计算过程中对数据按一个适当的比例因子量化,以满足x(n)的模最大为1,这样可以保证数据不溢出,设计中输入数据采用14位宽,经6级流水线结构后扩充至20位,将数据溢出误差控制在合理范围内,输出时通过归一化模块返回14位宽数据。
3.3. FFT/IFFT切换:
比较IDFT与DFT公式[5]:
我们可以发现,只要把DFT运算中的旋转因子换成,那么FFT模块就可以用来计算IFFT。
通过变换
我们发现执行IFFT运算,只要在数据输入端插入一个减法器,对虚部取反;在输出端,也插入一个减法器,对虚部再取反一次,最后就得到IFFT结果。
3.4.地址排序映射:
中,地址产生模块就负责产生相应的i值。
计算方法可通过式(1)和式(2)推广到多维计算,观察计算公式可发现序号映射顺序具有递归性,所以每级地址只要存储该级点数的地址即可,只需要增加加法与减法运算的次数。
3.5.FIFO:
素数因子算法可以同址方式运算,输入数据经一次DFT变换后即失去存储价值,所以输出数据可以放回到输入RAM中替换掉输入数据,因而对存储单元的要求大大降低。
3.6. 归一化:
在经过位扩展后,流水线运算得到的结果为18位或20位,而最终需要的结果为14位。
这就需要一个归一化模块对数据进行处理。
数据归一化的实质是将结果除以sqrt(N)。
数据包括实部和虚部,因此只要两个乘法器就可以完成归一化操作。
3.7.旋转因子ROM:
旋转因子计算方法为:
其中Ni为各级素数值,因为素数因子算法不需要中间旋转因子,所以旋转因子所需的存贮空间大大减少,当N较大时,几乎可以忽略不计。
3.8.控制模块:
控制模块是各级流水结构的核心,功能模块之间的数据传递与运算均通过控制模块的调用。
控制模块根据当前蝶型运算所处的级数和个数,从地址排序映射中读取产生数据的地址。
控制模块读取地址,向处于等待状态的FIFO发出使能请求,数据被写入FIFO,当写入数据到达可以计算的个数时,FIFO反馈控制模块,控制模块使能运算模块,运算模块将旋转因子ROM数据与FIFO中数据读出并计算处理,一定延迟后,运算结果将被连续算出并写入FIFO 替换掉已经用过的数据,运算结束后,控制模块继续重复上述操作,直到一个序列结束,向下一级控制模块发出使能信号,如此反复实现流水作业。
4仿真与验证
FFT处理器综合以后,用QuartusII工具对处理器进行仿真实现实现,其资源利用情况请见表1。
从表1可以看出,如果按照频率优化的话,虽然可以提高十几兆的频率,但是带来的面积增加是非常大的,增加了近2000个ALTUs。
综合各种资源占用情况,系統在资源占用和运算速度上均达到理想水平,素数因子算法FFT处理器设计是比较成功的。
结论。
本设计采用素数因子FFT算法,在FPGA上流水实现,并在SpartanIII上综合仿真通过,使用QuartusII、ModelSim、ISE软件完成了整个FFT处理器的设计,与MATLAB计算结果相比误差在合理范围内。
本设计为以后可配置点数高速FFT处理器的设计提供了新思路,随着数字信号处理的发展,点数可任意配置会有很大的竞争力。
参考文献
[1]阔永红.数字信号处理—基于计算机的方法.第三版[M].北京:电子工业出版社,2006.6.
[2]Fast Fourier Transform v3.2 Product Specification[J]. . August 2005.
[3]郑容,张红才等.提高运算速度的素因子分解FFT算法[J].航空学报,1994年第10期.
[4]邓学禹.基于FPGA的高速高阶流水线FFT设计[J].电视技术,2005年第二期.188-199.
[5]谢彦林.可变点流水线结构FFT处理器的设计及其FPGA实现[D].硕士论文,西安电子科技大学,2007.。