带通 FIR 滤波器设计 胡泽琛,S321517032,huzc@hrbeu.edu.cn 摘要:本文采用 Matlab 滤波器设计工具 FDAtool,设计了一个采样率为 1MHz 的带通滤波器,其通带截止频 率分别为 170KHz、230KHz,阻带截止频率分别为 150KHz、250KHz,通带内波纹抖动和阻带衰减为 1dB,阻带 衰减 60dB。生成滤波可执行程序。分别在 System Generator 和 Matlab Simulink 中建立仿真模型,仿真并对比 FIR 数字带通滤波效果,再由 ModelSim 和 System Generator Simulink 得出时域仿真图。最后借助数字滤波器调试验证 该方法的有效性。 关键词:FIR 滤波器、FPGA、信号采集、IP 核 1 基本原理 每一个 FIR 数字滤波器都有一个相应的系 统函数,这个函数用来表示系统的输入与输出之 间的联系,假设 X(z)为系统输入,Y(z)为系 统输出,H(z)为系统传递的关系,通常可以将 系统函数表示为: 器和累加器组成。此结构为直接型 FIR 滤波器结 构,也称横向结构(transverse)。 −𝑘 ∑𝑚 𝑌(𝑧) 𝑘=0 𝑏𝑘 𝑧 𝐻(𝑧) = = 𝑛 1 − ∑𝑘=1 𝑎𝑘 𝑧 −𝑘 𝑋(𝑧) 当系数为固定的常数时,可以将函数变化为: 𝑛 𝑚 𝑦(𝑛) = ∑ 𝑎𝑘 𝑦(𝑛 − 𝑘) + ∑ 𝑏𝑥 𝑥(𝑛 − 𝑘) 𝑘=1 𝑘=0 由式可以看出,滤波器进行滤波处理的本质 是进行一次函数处理,将输入的离散信号进行一 定关系的函数运算,然后得到滤波器处理后的一 组信号。在许多工程领域中,所采用的数字滤波 器是具有线性相位这一重要特点的。对于因果系 统来说,除了 z=0 的极点外都是零点,而且 a=0, 对式进行简化得: 𝑚 𝑦(𝑛) = ∑ 𝑏𝑘 𝑥(𝑛 − 𝑘) 𝑘=0 对式(3)进行分析可知,可以认为输出 y(n) 是由输入 x(n)与激励 h(n)进行卷积运算得到 的。 FIR 数字滤波器的激励信号是有限个数的, 当滤波器阶数为 N=1 时,H(z)可简化为: 图 1 直接型 FIR 滤波器结构 2 设计过程 2.1 matlab 滤波器设计与仿真 首 先 在 matlab 的 APP 中 找 到 filter designer 或在命令行里输入:fdatool。其中 Fs 为采样率,滤波器有效频率范围为 Fs/2, 下面的 值不能超出这个范围,另外注意 Specify order 的值,这里是数字滤波器阶数,阶数越高其复杂 度越高滤波器带内越平滑,具体取值取多少应在 工程中取舍,在类型中选择需要的滤波器类型, 依次为低通、高通、带通、带阻,选择带通后, 在 Frequency Specifications 里,先确定采样 率,这里选择 1MHz 的采样率,设计一个中心频率 为 200kHz,带宽为 60MHz 的滤波器。设置通带阻 带后点击 Design Filter,通带与阻带设置如图 2 所示: 𝑁=1 𝐻(𝑧) = ∑ ℎ(𝑛)𝑧 −𝑛 𝑛=0 可以这样理解式,H(z)是 z-1 的 N-1 阶多项 式,H(z)在复数平面中共有 N-1 个零点,而复 数平面原点 Z=0 处是 N-1 个极点所在的位置。 由上式可得到 FIR 滤波器在 FPGA 中的实现 结构,如图 1 所示,主要由延迟单元 Z-1、乘法 图 2 FDA tool 设计界面 将上面的程序执行 Generate MATLAB code,产生 专用的系数产生程序。然后我们使用这个程序在 matlab 中直接进行滤波效果的处理。通过仿真, 得到的仿真效果如图 3: 用 FDAtool 产生一个 MATLABY 源程序,通过 直接修改这个程序,产生 xilinx 所需要的滤波 器系数格式数据,在 FPGA 中,为了节约硬件资 源,我们将滤波器的阶数降低为 127 阶。产生一 个 FIR 的 IP 核,具体的参数配置如下图 6: 图 6 滤波器参数配置 然后完成配置,根据系统参数设计要求,编 写相应的 verilog 程序,最后通过 modelsim 仿 图 3 matlab 仿真 真得到的仿真效果如下所示: 为了产生比较明显的对比结果,我们这里产 3 结果验证 生一段频谱均匀的随机数进行仿真,从上图的仿 System Generator 仿真数据和 MATLAB 中使 真结果可知,通过该滤波器之后,可以实现对应 用的一致,分别输入频率 100kHz,160kHz,180kHz, 的通带滤波器效果。 200kHz,220kHz,240kHz 和 300kHz,可以看到这 2.2 System Generator 部分设计与仿真 部分的频谱分析仪的波形,与 Simulink 中的 在 SG 模 块 中 建 立 Simulink 模 型 和 在 FDATool 设计的数字滤波器滤波后的信号的频谱 Matlab Simulink 仿真环境中直接建立仿真模块, 进行对比,如下图 7 所示,仿真结果基本一致, 两者都利用 FDAtool 参数设计工具对系统所要 可以看到右边窗口的频谱(Spectrum Analyzer 求的滤波参数进行对比仿真,从而在频域上验证 SysGen 的窗口)和左边窗口即用 Simulink 的数 System Generator 模块仿真的正确性。 字滤波器设计所得的(Spectrum Analyzer FDA 在 System Generator 中,设计的模型如下 Tool)有轻微的不同,这是因为当连续时间系统 图 4 所示: 在离散时间硬件描述时受到量化和采样的影响。 图 4 System Generator Simulink 仿真模块图 为了对比效果,我在 SIMULINK 中也建立了 一个类似的模型,仿真模型如下图 5 所示: 图 7 仿真结果对比 图 5 Matlab Simulink 仿真模块图 2.3 FPGA 实现与仿真 根据系统参数设计要求,完成配置,编写相 应的 verilog 程序,最后通过 modelsim 仿真得 到的仿真效果如下图 8 所示,基本实现了带通 FIR 滤波器的功能。 图 8 modelsim 仿真结果 4 结论 基于多平台模型化的 FIR 数字带通滤波器设计方法, 利用 Xilinx System Generator for DSP 与 Matlab 联合开 发,实现数据流的相互调用与转换,与单纯只采用 HDL 和 C 语言对滤波器的设计与仿真相比,具有多方面的优 势,描述如下: 1) 操作界面图形化,参数改变简单方便灵活,并 且容易掌握,大大缩短了编程完成后综合布局布线调试 等工作的开发周期; 2) 最大程度保证滤波器算法在实际实现时与预 期设计要求做出的仿真高度一致; 在建立模型时,不需要建立仿真与实际实现的两种 模型,软件直接将其转换为硬件描述语言。 参考文献 [1]宋卓达,王志乾,李建荣,沈铖武,刘绍锦.基于 FPGA 的 FIR 数字 滤 波 器 设 计 及 实 现 [J]. 液 晶 与 显 示 ,2020,35(10):1073-1078. 术,2022,56(03):9-11. [2]罗耀国,娄淑琴.基于 FPGA 的字串行 FIR 滤波器的 实现[J] .2005,12 (6 ):48-51 [3]彭文钦、孙世新.FIR 滤波器分块并行算法分析[J].计 算机应用,2006,20(3):32-35 [4]殷福亮,宋爱军.数字信号处理 C 语言程序集[M].沈 阳:辽宁科学技术出版社,1997 [5]仲巡.FIR 的 FPGA 设计[J].电子产品设计,2007, (2 ): 32-34 [6]褚振勇,屈丹,门向生.利用 FPGA 实现数字信号处理 [J].电讯技术,2006,(1):91-96 [7]张卫杰,吴琼之.新一代 CPLD 及其应用[J].电子技术 应用,2006, (7):63-66