基于DSPBuilder的插值滤波器的设计及FPGA实现*
2013-11-24杨守良杨保亮
杨守良,杨保亮
(重庆文理学院 电子电气工程学院,重庆402160)
插值滤波器是一种结构相对较为简单、整齐划一、占用存储量小的滤波器,广泛应用于数字示波器、数字通信和全数字收发机中。它不需要乘法器,因此占用硬件资源较少、实现简单且速度较高,是高分解速率滤波器的一种非常有效的结构,在高速抽取或插值系统中是非常有效的单元[1-3]。在插值滤波器的具体实现中,人们大多使用DSP来实现,但由于DSP具有串行执行指令的特点,使得其在高速信号处理中无法满足设计需要[4]。而高性能大规模可编程逻辑器件的出现,使得在FPGA中用软件实现插值滤波器成为可能,而且FPGA芯片内部的资源相当丰富,并行的处理速度较快,并具有极大的灵活性,使其成为设计的首选。
在以FPGA为核心器件来设计信号处理系统时,Altera公司的DSP Builder是一款理想的系统级工具软件,它建立了数字信号处理系统的抽象算法模型,并将抽象算法模型转化成可靠的硬件实现。DSP Builder提供了一个从MATLAB/Simulink直接到FPGA硬件实现的设计接口,是数字信号处理高层系统设计与FPGA的桥梁。DSP Builder极大地简化了硬件实现流程,同时提供了系统仿真测试功能,使利用FPGA设计并实现数字信号处理更加灵活,更容易开发。此外,还可以将设计模型直接编译成能在FPGA器件中布局布线的网表文件,成功地解决了算法研究人员和硬件实现工程师之间的工作协调问题,使得用户能够以最快的速度将他们的算法得到硬件实现。
1 插值滤波原理
插值滤波是由N个Comb模块(采样频率为fs/RD),再级联 N个 Intergrator模块级联(采样频率为 fs),结构如图 1 所示。 一般情况下插值比率为 1:1、1:2、1:5、1:10、1:20、1:50。 插值滤波器由一个插零模块和一个滤波器构成。如果插值比率为1:N,则插零模块负责在每两个原始数据之间插入N-1个0,再通过滤波平滑波形,出来的插值后的波形的采样率将是原始波形的N倍。
图1 多级CIC插值滤波器结构框图
2 CIC滤波器的模型建立
2.1 数据处理宽度的确定
用FPGA实现插值滤波器时[5-8],还有一个很重要的参数需要确定,那就是寄存器的宽度(或者位数)。只有精心计算寄存器的宽度,才能在运算不溢出的情况下,最大限度地节省FPGA的硬件资源。对于插值滤波器,最终的梳状器输出增益 G=(RD)N,其中,R为抽取因子,D为延迟数值,N为滤波器级数。假定采用二进制补码,设输入数据宽度为Bin,则内部数据处理的宽度Bout=Nlog2(RD)+Bin。 本设计中输入数据宽度为 8,N=3,R=75,D=1(即抽取因子为 75,延迟为 1的三级插值滤波器),则输出字宽 W=8+log2(75×1)≈26 bit,保证不会产生运行时间溢出。因此,可以根据前面的分析建立模型。
2.2 插值滤波器的模型建立
本文以带宽为30 kHz、采样率为2 MHz的信号加速为采样率为150 MHz的信号,而要求通带衰减最大不得超过3 dB,阻带衰减不得低于45 dB。根据前面的分析可以采用三级插值滤波器来实现。根据图1所示的框图在MATLAB的Simulink下,利用DSP Builder建立图2所示的三级插值滤波器模型[5-7]。
用SignalCompiler将图2的核心插值滤波器模型转化为 VHDL硬件描述语言,双击“SignalCompiler”图标,在弹出的对话框中点击 “Compile”,DSP Builder将会调用Quartus II进行全程编译,其过程包括创建Quartus II工程、综合及适配。由于在DSP Builder中只有器件系列,且编译之后没有时序报告,因此,在用 SignalCompiler将.mdl文件转化成HDL语言后,一般还需在Quartus II中进行进一步的设置和完整编译。
3 仿真分析
3.1 基于DSP Builder软硬件协同仿真
由于在Simulink下进行的仿真不涉及任何硬件 (如FPGA),只能是算法级的仿真,但是如果完全放在底层设计工具Quartus II上仿真,尽管获得了全硬件的仿真结果,但是难以获得一些特定功能的激励信号,因此,本仿真通过引入HIL模块来进行软硬件协同仿真。首先在Simulink平台下进行软件仿真,当结果满足设计要求时,使用HIL将Input和Output模块之间DSP Builder模块生成HDL工程,从而实现基于MATLAB/DSP Builder平台的硬件仿真。本文选用Altera公司的Cyclone II系列EP2C5Q208C8为主芯片的开发板进行仿真,仿真结果如图3所示。由图3可以看出,输出端的数据比输入端的数据整整快了75倍,仿真结果表明,三级插值滤波器的实现方法正确。
图3 三级CIC滤波器仿真图
3.2 Quartus II时序仿真
采用一个幅值为127的阶跃信号作为插值滤波器的输入信号,在Quartus II开发环境下进行仿真、综合,运行结果如图4所示。可以看出达到了预定的设计要求。
图2 三级CIC滤波器结构框图
图4 三级CIC滤波器仿真所得的时序图
本文提出一种根据插值滤波器数学模型,采用MATLAB/Simulink来建立相应的模型,然后利用Signal Compiler工具将其转化为Quartus II能够识别的VHDL程序来实现插值滤波器的方案。该方案充分发挥了FPGA器件处理速度快、实现灵活方便的特性,大大提高了整个系统的性能。采用DSP Builder系统工具,从插值滤波器建模、仿真到FPGA的具体设计都在一个环境中完成,方便了系统的更改和扩展,使得设计更加灵活、便捷,相对于传统开发方式,具有更大的优势。
[1]姜宇柏,游思晴.软件无线电原理与工程应用[M].北京:机械工业出版社,2007.
[2]田耘,徐文波,张延伟.无线通信 FPGA设计[M].北京:电子工业出版社,2008.
[3]王超,董德存.GLONASS接收机快速捕获方案及其仿真[J].铁路计算机应用,2005,14(12):7-9.
[4]曹琦,毕笃彦.MAC在FPGA中的高效实现[J].微计算机信息,2007(6-2):216-218.
[5]马涛,陈娟,单洪.基于DSP Builder的数字下变频器的FPGA 设计[J].电子技术应用,2006,(32)7:93-96.
[6]贾雪琴,李强,王旭,等.用 MATLAB在 FPGA芯片中实现数字下变频设计[J].计算机仿真,2005(12):303-306.
[7]王飞,梁清华.基于 FPGA的 CIC滤波器的设计[J].辽宁工业大学学报(自然科学版),2009(4):77-79.
[8]牛大胜,唐丽萍.积分梳状滤波器在FPGA中的实现[J].国外电子测量技术,2006(9):48-50.