数字滤波技术是数字信号处理技术的重要分支。无论是信号的处理交换,还是信号的获取、传输,都离不开滤波技术。数字滤波的实验实现方法有在通用计算机上用软件实现、采用DSP实现、采用FPGA实现。快速发展的EDA技术和大规模可编程器件,使得采用FPGA实现数字滤波器可以克服传统DSP技术中的技术瓶颈,在高可靠性、高速与实时性、系统的重配置与硬件可重构性、单片系统的可实现性及自主知识产权化等许多方面具有突出的优势。
本设计采用FPGA设计工具DSP Builder实现FIR数字滤波器的设计方案,按照MATLAB/Simulink/DSP Builder/Quartus II的设计流程,设计一个32阶的抽样频率为400 kHz,截止频率为10 kHz的FIR低通滤波器。在硬件实现上应用A/D转换芯片AD9224采样输入信号后送给FPGA芯片EP1C6Q240C8处理,处理后的信号经D/A转换芯片AD9764转换为模拟信号输出。软件仿真与硬件实验结果表明,该设计基于FPGA的FIR数字滤波器滤波效果良好,可有效提取需要的信号。
1 FIR滤波器建模设计分析
FPGA器件由大量逻辑宏单元构成,通过配置,使这些逻辑单元形成不同的硬件结构,从而构成不同的电子系统,完成不同的功能。正是FPGA的这种硬件重构的灵活性,使得用硬件描述语言(VHDL或Verilog HDL)描述的电路在FPGA中实现。而DSP Builder可以完成基于FPGA的DSP系统设计的整个过程,它是连接MATLAB/Simulink和QuartusII开发软件的DSP技术,在Simulink中进行图形设计和仿真,同时又通过Signal Compiler把MATLAB/Simulink的设计文件(.mdl)转换成相应的硬件描述语言VHDL设计文件(.vhd),以及用于控制综合与编译的TCL脚本,然后可以用FPGA开发工具Quartus II实现综合、布线、RTL级仿真以及生成目标板下载文件,在灵活的硬件实验平台上实现。
FIR滤波器的数学表达式为:
FIR的滤波过程就是一个信号逐级延迟移位的过程,将各级的延迟输出加权累加,即得到FIR滤波器的输出,其中最主要的算法是乘累加运算。根据FIR滤波器的数学表达式,用Altera DSP Builder建立图1所示的FIR滤波器图形仿真模型,主要由总线模块、采样率降低模块(Down Sampling)、移位寄存器模块(Shift Taps)、乘累加模块(MultAdd32)、总线类型转换模块(Bus Conversion)以及方波信号产生模块(Pulse Generator)和观测仿真结果的示波器组成。其中乘累加模块采用层次化设计,由前一级的移位寄存器提供数据输入,经过多级累加求和得到FIR滤波器的输出结果,其内部子模块采用8个Multiply Add构成,每个Multiply Add模块具体设置为:Number of Multipilers:4、Bus Type:Signed Integer、Inputs[number of bits].[]:12、No Register、Constant Values为滤波器设计系数,并将输出用Paraller Adder相加在一起。由于在后续硬件实现上A/D采用12 bit、D/A采用14 bit,因此输入信号FIRIN为12 bit整型、输出信号FIROUT为14 bit整型。
滤波器的设计指标为:32阶低通滤波器,采样率为400 kHz,截止频率为10 kHz。采用MATLAB中FDATool工具,使用Hamming窗,计算出滤波器系数。在MATLAB命令行中输入:round(Num1×212),得到FIR滤波器的整形系数h[32]={4 6 10 16 25 37 52 70 90 112 134 155 173 188 199 204 204 199 188 173 155 134 112 90 70 52 37 25 16 10 6 4}。
滤波器建模设计完成后,输入5 kHz的方波信号,从中提取5 kHz的正弦波信号,其仿真波形如图2所示。从仿真波形可以看出,经过FIR滤波后,很好地达到滤波效果。
在FIR模型中用Signal Compiler模块Analyze模型,然后选定Cyclone系列FPGA,使用QuartusII综合工具,优化规则,并产生VHDL程序。
2 FIR滤波器硬件实现系统
FIR数字滤波器FPGA实现的硬件系统如图3所示,该系统由A/D转换模块、FPGA模块、D/A转换模块和电源模块4部分组成。
FPGA模块采用Altera公司Cyclone系列FPGA芯片EP1C6Q240C8。
A/D转换模块的主要功能是对模拟信号进行数字化,然后送入FPGA中进行数字信号处理。A/D转换芯片使用ADI公司单芯片、12 bit、40 MS/s模数转换器AD9224。AD9224采用单电源供电,内置一个片内高性能采样保持放大器和基准电压源。它采用多级差分流水线架构,内置输出纠错逻辑,在40 MS/s数据速率时可提供12 bit精度,并保证在整个工作温度范围内无失码。
D/A转换模块的主要功能是将FPGA处理后输出的数字信号转换为模拟量,然后经信号调理输出。A/D转换芯片选用ADI公司的AD9764。AD9764属于TxDAC系列高性能、低功耗CMOS数模转换器(DAC)的14 bit分辨率。
在硬件实现过程中,由于要使用A/D转换时钟信号AD_CLK和D/A转换时钟信号DA_CLK,需要设计顶层文件,以便调用前述所设计的FIR滤波器。
顶层主要源程序如下:
entity FIR is
port(
AD_IN:in STD_LOGIC_VECTOR(11 downto 0);
DA_OUT:out STD_LOGIC_VECTOR(13 downto 0);
CLK_IN:in STD_LOGIC;
AD_CLK:out STD_LOGIC;
DA_CLK:out STD_LOGIC);
end entity;
architecture rtl of FIR is
component FIRSimulink
port(
FIRIN:in STD_LOGIC_VECTOR(11 downto 0);
Input:in STD_LOGIC;
FIROUT:out STD_LOGIC_VECTOR(13 downto 0);
FIRaclr:in STD_LOGIC;
FIRClock:in STD_LOGIC);
end component;
……
FIRSimulink_instance:
component FIRSimulink
port map(
FIRIN=>ad_d2,
input=>clk_div,
FIROUT=>da_d2,
FIRaclr=>FIR_aclr,
FIRClock=>CLK_IN);
……
顶层实体原理图如图4所示,输入时钟CLK_IN由外部40 MHz晶振提供。A/D转换后的数字量由AD_IN[11..0]输入,输出数字量由DA_OUT[13..0]输出给D/A转换器。CLK_IN 100分频后由AD_CLK、DA_CLK送给A/D、D/A芯片。
对整个项目进行综合、编译和调试后,生成的RTL级电路图如图5所示。
3 硬件测试实现
滤波器硬件测试系统中,函数信号发生器产生的5 kHz方波信号一路直接输入数字示波器CH2通道,另一路输入给A/D转换模块,经FPGA滤波后送给D/A转换模块输出给示波器的CH1通道。通过JTAG接口配置FPGA,测试结果如图6所示。由图6可以看出,输入5 kHz方波信号,经过滤波后得到输出为5 kHz的正弦波信号。测试结果与MATLAB/Simulink/DSP Builder模型仿真结果相同,证明该滤波器设计正确,滤波效果很好。
本文主要研究了FIR数字滤波器的设计,包括建模算法仿真以及最后的硬件实现。
设计结果表明,在利用FPGA进行数字滤波器设计时,利用DSP Builder可以简化计算与设计难度,加快设计速度,灵活选择精度,实现优化设计。将DSP Builder与Quartus II软件有机融合,整个开发流程一气呵成,真正实现了自顶向下的设计流程,充分显示了现代EDA(电子设计自动化)开发的特点与优势。设计不同性能的滤波器电路,只需修改滤波器模型文件即可实现,不仅避免了繁琐的VHDL语言编程,而且易于修改、测试及硬件升级,成本相对较低,具有一定的工程设计参考价值。
参考文献
[1] 程佩青.数字信号处理教程(第3版)[M].北京:清华大学出版社,2007.
[2] 席在芳,周少武,欧青立,等.基于Simulink的FIR数字滤波器设计实验教学探索与实践[J].实验技术与管理,2010(5):80-82.
[3] 潘松,黄继业.SOPC技术实用教程[M].北京:清华大学出版社,2005.
[4] 潘松,黄继业,王国栋.现代技术DSP技术[M].西安:西安电子科技大学出版社,2003.
[5] 郭海丽,王紫婷.基于Matlab/Simulink的FIR数字滤波器的设计与实现[J].电气应用,2008(1):73-75.
[6] 徐年,张剑英.基于FPGA的FIR数字滤波器的实现[J].煤炭工程,2007(4):118-120.
[7] 张海军.基于FPGA的16阶FIR滤波器的设计与实现[J].安徽大学学报(自然科学版),2009(1):62-65.
[8] 赵文兵,杨建宁.FIR滤波器的FPGA实现及其仿真研究[J].微计算机信息,2005(6Z):108-109.
[9] 雷能芳.基于分布式算法有限脉冲响应(FIR)滤波器的FPGA设计[J].科学技术与工程,2010(11):2743-2746.
[10] 郝小江,缪志农,张小平.基于FPGA的FIR滤波器设计与实现[J].仪表技术,2010(1):44-46.
[11] 蒋立平,谭雪琴.一种基于FPGA的高效FIR滤波器的设计与实现[J].南京理工大学学报,2007,31(1):125-128.