基于FPGA的高速定点FFT算法的实现

2010-05-13 08:46娜,杨鼎才
现代电子技术 2009年12期
关键词:蝶形浮点信号处理

徐 娜,杨鼎才

摘 要:针对高速实时信号处理的要求,提出一种基于现场可编程门阵列(FPGA)实现64点高速定点快速傅里叶变换(FFT)算法的方法。该方法从运算速度和实现复杂度两方面综合考虑,采用基于按时间抽取的Radix-4算法的三级流水线结构,每级将乘法器的旋转因子输入端固定为常数值,而不是作为变量从ROM中读取,从而减少ROM的读取时间。另外,为了避免溢出,还采用块浮点结构表示数据,节省了大量的硬件资源。从实验结果看,可以满足对数据高速实时处理的要求。

关键词:现场可编程门阵列;Radix-4算法;流水线结构;块浮点结构

中图分类号:TP368.1文献标识码:A

文章编号:1004-373X(2009)12-106-02

Implementation of High Speed Fixed-piont Fast Fourier Transform Algorithm Based on FPGA

XU Na,YANG Dingcai

(Information Science and Engineering Institute,Yanshan University,Qinhuangdao,066004,China)

Abstract:To meet the requirement of high data processing, an implementation method of 64 points high speed fixed-point FFT algorithm based on FPGA is discussed.Considering both the speed and the complexity,this method uses three- stage pipeline structures based on Radix-4 algorithm by DIT.The input of rotating factor is fixed to constant,rather than variables,which can reduce the reading time from ROM.Moreover,in order to avoid overflowing,it also uses block-floating-piont structure that can save many hardware resources.It is able to meet the requirement of high speed and real-time through the experimental results.

Keywords:FPGA;Radix-4 algorithm;pipeline structure;block-floating-piont structure

0 引 言

快速傅里叶变换(FFT)作为计算和分析工具,在众多学科领域(如信号处理、图像处理、生物信息学、计算物理、应用数学等)有着广泛的应用。在高速数字信号处理领域,如雷达信号处理,FFT的处理速度往往是整个系统设计性能的关键所在。

针对高速实时信号处理的要求,软件实现方法显然满足不了其需要。近年来现场可编程门阵列(FPGA)以其高性能、高灵活性、友好的开发环境、在线可编程等特点,使得基于FPGA的设计可以满足实时数字信号处理的要求,在市场竞争中具有很大的优势。

在FFT算法中,数据的宽度通常都是固定的宽度。然而,在FFT的运算过程中,特别是乘法运算中,运算的结果将不可避免地带来误差。因此,为了保证结果的准确性,采用定点分析是非常必要的。

1 FFT算法原理

FFT算法的基本思想就是利用权函数的周期性、对称性、特殊性及周期N的可互换性,将较长序列的DFT运算逐次分解为较短序列的DFT运算。针对N=2的整数次幂,FFT算法有基-2算法、基-4算法、实因子算法和分裂基算法等。这里,从处理速度和占用资源的角度考虑,选用基-4按时间抽取FFT算法(DIT)。

对于N=4γ,基-4 DIT具有log4 N=γ次迭代运算,每次迭代包含N/4个蝶形单元。蝶形单元的运算表达式为:

A′=(A+CW2P)+(BWP+DW3P)

B′=(A-CW2P)-j(BWP-DW3P)

C′=(A+CW2P)-(BWP+DW3P)

D′=(A-CW2P)+j(BWP-DW3P)

其信号流如图1。式中:A,B,C,D和A′,B′,C′,D′均为复数据;W=e-j2π/N。进行1次蝶形运算共需3次复乘和8次复加运算。N=64点的基-4DIT信号流其输入数据序列是按自然顺序排列的,输出结果需经过整序。64点数据只需进行3次迭代运算,每次迭代运算含有N/4=16个蝶形单元。

2 FFT算法的硬件实现

2.1 流水线方式FFT算法的实现

为了提高FFT工作频率和节省FPGA资源,采用3级流水线结构实现64点的FFT运算。流水线处理器的结构如图2所示。

图1 -4 DIT蝶形单元信号流图

图2 流水线结构

每级均由延时单元、转接器(SW)、蝶形运算和旋转因子乘法4个模块组成,延时节拍由方框中的数字表示。各级转接器和延时单元起到对序列进行码位抽取并将数据拉齐的作用。每级延时在FPGA内部用FIFO实现,不需要对序列进行寻址即可实现延时功能。数据串行输入,经过3级流水处理后,串行输出。

转接器有一定的工作规律。例如,当第0级变换做完进入转接器SW1前,先对后三路数据进行一定节拍的延时,延迟节拍分别为4,8,12。为了说明规律,把输入转接器的四路数据按照前后次序进行分组,每4个时钟节拍为1组,共16组,如图3(左)所示。在数据流串行经过转接器SW1时,第0组中的数据保持不变,第1组中的数据与第4组中的数据交换;5不变,2和8交换,3和12交换,6和9交换;10不变,7和13交换,11和14交换,15不变。交换完毕后,前三路数据经过延迟节拍分别为12,8,4的FIFO存储器输出,位置关系如图3所示。

图3 SW1前后各组位置关系

上述转换规律对于SW2也是适用的,只是转接器前后的延时节拍和分组的大小有所不同。

2.2 存储单元

为了实现算法的流水线设计,存储器RAM设计为64×16 b的双端口RAM,即在时钟信号和写控制信号同时为低电平时,从输入总线写入RAM;在时钟信号和读控制信号同时为高电平时,从 RAM输出数据。

ROM为17×16 b的ROM,储存经过量化后的旋转因子,旋转因子为正弦函数和余弦函数的组合。根据旋转因子的对称性和周期性,在利用ROM存储旋转因子时,可以只存储旋转因子的一部分。

2.3 运算结构

Radix-4蝶形运算单元是整个 FFT处理器中的核心部件。在用Radix-4运算器计算时需要并行输入数据,如果能以并发数据输入的话,则同步性和控制度较好,但实际上常要进行串并之间的转换。存储RAM按单节拍输出16 b位宽数据,选择器不停旋转送入到确定的位置,每4点全部到位后R-4使能有效;然后4个时钟节拍得到有效结果数据,再通过选择器旋转送入到对应存储RAM中。

复数运算中,对应复数的实部和虚部RAM用同一个地址发生器。地址发生器在进行RAM地址发生时采用两套地址,第一套是计数器按时钟节拍顺序产生的,用于输入数据的存储;第二套是由数据宽度为16 b的ROM产生的,ROM中存放的数据为下级运算所需倒序的序列地址,发生地址给RAM,然后RAM按倒序地址输出下级需要进行运算的数据。

2.4 块浮点结构

数字信号处理系统可分为定点制、浮点制和块浮点制,它们在实现时对系统资源的要求不同,工作速度也不同,有着不同的适用范围。定点制算法简单,速度快,但动态范围有限,需要用合适的溢出控制规则(如定比例法)适当压缩输入信号的动态范围。浮点表示法动态范围大,可避免溢出,但系统实现复杂,硬件需求量大,速度慢。

为了提高精度,并减少复杂度和存储量,采用块浮点结构。块浮点算法是以上两种表示法的结合。这种表示方法是,一组数共用同一个阶码,这个阶码是这组数中最大数的阶码。块浮点算法无需进行额外的指数运算,仅对尾数进行运算即可,其与定点运算一样方便,但需要在每级运算结束后进行本级运算溢出最大位数判断,以对数据块进行块指数调整。在调整时仅保留一位符号位,因而能够充分利用有限位长。这样处理比定点方法扩大了动态范围,并且提高了精度,比浮点运算在速度上有了提高。

块浮点结构如图4所示。

图4 块浮点结构

3 结 语

着重讨论基于FPGA的64点高速FFT算法的实现方法。采用高基数结构和流水线结构,大大提高了FFT处理器的运行速度。同时块浮点结构的引入,也大幅减少了浮点操作占用FPGA器件的资源数目,兼顾了FPGA高精度、低资源、低功耗的特点。从实验结果看,该方法可以满足高速实时处理数字信号的要求。

参考文献

[1]朱冰莲,刘学刚.FPGA实现流水线结构的FFT处理器[J].重庆大学学报,2004,27(9):33-36.

[2]胡广书.数字信号处理理论、算法与实现[M].2版.北京:清华大学出版社,2005.

[3]陈丽安,张培铭.定点DSP块浮点算法及其实现技术[J].福州大学学报:自然科学版,2004;32(6):689-693.

[4]求是科技.VHDL应用开发技术与工程实践[M].北京:人民邮电出版社,2005.

[5]孔利东.基于FPGA到数据采集与处理技术的研究[D].武汉:武汉理工大学,2007.

[6]谭征,张晓林.一种基于FPGA的超高速FFT处理器设计[J].遥测遥控,2005,26(6):46-49.

[7]任淑艳,关丛荣.应用VHDL语言的FFT算法实现[J].哈尔滨理工大学学报,2003,8(6):24-26.

[8]田丰,邓建国.FFT算法的一种FPGA实现[J].现代电子技术,2005,28(8):97-100.

[9]孙志坚,刘学梅.在FPGA中实现高速FFT算法的研究[J].青岛建筑工程学院学报,2005,26(2):84-86.

[10]王诚,吾继华.Altera FPGA/CPLD设计(基础篇)[M].北京:人民邮电出版社,2005.

猜你喜欢
蝶形浮点信号处理
在FPGA上实现FFT的高效串行流水线结构
LEO星座增强GNSS PPP模糊度浮点解与固定解性能评估
蝶形引入光缆技术新进展
基于浮点DSP的铁路FSK信号检测
《信号处理》征稿简则
《信号处理》第九届编委会
《信号处理》征稿简则
《信号处理》第九届编委会
基于FPGA的浮点FIR滤波器设计
改进的Goldschmidt双精度浮点除法器