基于Quartus II的综合仿真实现FFT IP核的FFT算法

引 言
数字信号处理领域中fft算法有着广泛的应用。目前现有的文献大多致力于研究利用fft算法做有关信号处理、参数估计、f+ft蝶形运算单元与地址单元设计、不同算法的fft实现以及fft模型优化等方面。而fpga厂商altera公司和xilinx公司都研制了fft ip核,性能非常优越。在fft的硬件实现中,需要考虑的不仅仅是算法运算量,更重要的是算法的复杂性、规整性和模块化,而有关利用fft ip核实现fft算法却涉及不多。这里从altera ip核出发,建立了基4算法的512点fft工程,对不同参数设置造成的误差问题进行分析,并在ep2c70f896c8器件上进行基于quartus ii的综合仿真,得到利用fft ip核的fft算法高效实现,最后利用matlab进行的计算机仿真分析证明了工程结果的正确性。
1 算法原理
fft算法是基于离散傅里叶变换(dft),如式(1)和式(2):
求和运算的嵌套分解以及复数乘法的对称性得以实现。其中一类fft算法为库利一图基(cooley-tukey)基r按频率抽选(dif)法,将输入序列循环分解为n/r个长度为r的序列,并需要logr n级运算。算法的核心操作是蝶型运算,蝶型运算的速度直接影响着整个设计的速度。
基4频域抽取fft算法是指把输出序列x(k)按其除4的余数不同来分解为越来越短的序列,实现x(n)的dft算法。fft的每一级的运算都是有n/4个蝶形运算构成,第m级的一个蝶形运算的四节点分别为xm(k),xm(k+n/4m),xm(k+2n/4m)以及xm(k+3n/4m),所以每一个蝶形运算结构完成以下基本迭代运算:
式(3)~式(6)中:m表示第m级蝶形算法;k为数据所在的行数;n为所要计算的数据的点数;wn为旋转因子。
将输入序列循环分解为4点序列的基4分解,使用4点fft在乘法上更具优势,altera的:fft兆核选用的就是基4运算,若n是2的奇数幂的情况下,fft ip核则自动在完成转换的最后使用基2运算。
2 fft兆核(ip)函数
fft core支持4种i/o数据流结构:流(stream-ing)、变量流(variable streaming)、缓冲突发(bufferedburt)、突发(burst)。流结构允许输入数据连续处理,并输出连续的复数据流,这个过程不需要停止fft函数数据流的进出。变量流结构允许输入数据连续处理,并产生一个与流结构相似连续输出数据流。缓冲突发数据流结构的fft需要的存储器资源比流动i/o数据流结构少,但平均模块吞吐量减少。突发数据流结构的执行过程和缓冲突发结构相同,不同的是,对于给定参数设置,突发结构在降低平均吞吐量的前提下需要更少的存储资源。
3 fft处理器引擎结构
fft兆核函数可以通过定制参数来使用两种不同的引擎结构:四输出(quad-outlput)或单输出(signal-output)引擎结构。为了增加fft兆核函数的总吞吐量,也可以在一个fft兆核函数变量中使用多个并行引擎。本文建立一个基于quartusⅱ7.o计算24位512点fft工程,采用四输出fft引擎结构,如图1所示。
复取样数据x[k,m]从内部存储器并行读出并由变换开关(sw)重新排序,排序后的取样数据由基4处理器处理并得到复数输出g[k,m],由于基4按频率抽选(dif)分解方法固有的数字特点,在蝶形处理器输出上仅需要3个复数乘法器完成3次乘旋转因子(有一个因子为1,不需要乘)计算。这种实现结构在一个单时钟周期内计算所有四个基4蝶形复数输出。
同时,为了辨别取样数据的最大动态范围,四个输出由块浮点单元(bfpu)并行估计,丢弃适当的最低位(lsb),在写入内部存储器之前对复数值进行四舍五入并行重新排序。对于要求转换时间尽量小的应用,四输出引擎结构是最佳的选择;对于要求资源尽量少的应用,单输出引擎结构比较合适。为了增加整个fft吞吐量,可以采用多并行的结构。
4 系统验证
4.1 工程仿真
选择cycloneⅱ系列的ep2c70f896c8芯片来实现,先在quartusⅱ软件下进行综合仿真,初始化参数设置fft变换长度为512点,数据和旋转因子精度为24 b,选择缓冲突发的数据流结构,四输出引擎并行fft引擎个数为4个,复数乘法器结构为“4/mults/2adders”。ep2c70f896c8芯片包括68 416个逻辑单元,31 112个寄存器单元,最大用户输入/输出引脚622个,总ram达1 152 000 b,其布线资源由密布的可编程开关来实现相互间的连接,这种结构完全符合实现fft电路的要求。
经综合和时序分析得知:其工作时钟频率
69.58 mhz(period=14.372 ns),进行一次蝶形运算只需约14 ns,全部512点数据处理完成则需14.372×4×512=29.3μs满足时序要求。具体综合结果如图2所示,为quartus软件环境下仿真得到。
图3则表明了fft的综合逻辑结果,为编译成功后的rtl级电路描述。
fft处理器模块采用缓冲突发数据流结构的信号时序图如图4所示,在系统复位信号(reset_n)变为低电平后,数据源将sink_ready信号置高电平,表明有能力接收输入信号。数据源加载第一个复数数据样点到fft函数中,同时将sink_sop信号置高电平,表示输入模块的开始。在下一个时钟周期,sink_sop信号被复位,并以自然顺序加载后面的n-1个复输人数据样点。
当完全载入输入模块时,fft函数复位sink_ena信号,表示fft不再接收其他输入数据并开始计算输入数据模块的变换结果。在fft处理器内部输入缓冲区读取样点之后,fft将sink_ena信号重新置高电平,准备读取下一个输入模块。下一个输入模块的起点由sink_sop脉冲确定。当fft完成了输入模块的变换,并且从设备汇端将source_ready信号(表示数据从设备接收器可以接收输出数据模块)置高电平,并且以自然顺序输出复数变换域数据模块。
4.2 仿真结果分析
在编译综合后,工程当中含有基于fft ip核生成的matlab文件,这样就可在matlab下对工程结果进行进一步测试,构建信号,并与matlab计算的理论结果进行比较。设输入函数为z(t)=20 000sin(20πt),点数n=512,采样频率为500 hz,即采样间隔为o.002 s,采样的时间长度为o.002 x 512 s,该正弦信号通过512点fft处理结果如图5所示,正弦信号基于ip核matlab文件仿真结果如图6所示。
由图5,图6比较可以看出fft、处理器处理后的结果和matlab计算的理论结果基本一致。都在第11点和第503点取得最大fft绝对值,两者的误差只是在fft频谱绝对值的幅度大小原因:一是altera fft兆核函数的块浮点输出与matlab这种全精度fft的输出相比,存在最低位(lsb)被丢弃的影响;二是工程初始化ip核采用的数据精度取24位(v7.0 ip最大支持24位数据精度)。
5 结 语
在利用fft ip核进行fft算法实现的同时,对仿真结果做了全面分析,由于ip核的可塑性很强,增加了芯片的灵活性。使用altera fft的ip core大大减少了产品的开发时间,altera还可进一步实现加窗功能,甚至ddc部分(单端信号向i/q转换)整合到其fft处理器模块中,能进一层次简化开发的流程,在今后实际工程应用中高效利用。

外媒发Apple Car概念图引发热议
【CES 2018】仁清卓越携无人机、机器人、智能打印等系列前沿科技产品参展
主流蓝牙BLE控制芯片详解(3):创杰 IS1685S
蔚来与恩智浦开展4D成像雷达合作
音圈电机柔性振动供料系统可解决多品类物料供料问题
基于Quartus II的综合仿真实现FFT IP核的FFT算法
中资大手笔收购NXP模拟/电源管理业务
大陆LED芯片厂商祭低价战术,台企疲于应对
微软为Windows 10用户修复与USB相关的Bug
2021年锂电设备投资需求将延续高增长
双工器频率可以偏频吗
直播电商的新玩法,沉浸式数字体验零售是大趋势
三网融合双向突破 国网挂牌一步之遥
拉曼光谱分析仪的简单介绍
无纺布污点检测仪是什么,它的原理是怎样的
柔性OLED为可弯折材料带来很大机遇包括触控技术
04/24 烟台 面向科研领域的自动化测控系统设计
ADAYO华阳多媒体@2022第四届智能座舱与用户体验大会
魅族最新消息:删除传统闪光灯,环形围绕摄像头?魅蓝E2真会玩
强化河流生态水文综合治理