一种31阶FIR数字滤波器的设计及实现
扫描二维码
随时随地手机看文章
引言
严格上讲,利用QuartusH设计可以完成FPGA硬件的所有设计,但是使用这种方法设计涉及算法类或信号处理的设计项目,工作量极大且复杂,极大地降低了工程设计的效率。鉴于此,Altera公司推出了DSPBuilder这一工具,极好地解决了这个困扰工程师的难题。DSPBuilder是一个系统级(或算法级)设计工具,它架构在多个软件工具之上,利用Matlab工具和DSPBuilder可以完成图形化的系统建模、大部分的设计过程和仿真。
常用的数字滤波器有无限长冲激响应型(IIR)和有限长冲激响应(FIR)型。IIR滤波器的相位具有非相位特征,不适合用于数字通行系统。FIR型可以采用FFT来快速实现滤波,且相位具有严格线性关系,非常适合数字通信的要求。
1基本原理
1.1数字滤波器原理
因为FIR数字滤波器具有的线性相位非常适合数字通行要求,并被大量应用于数字通行系统,所以,本设计为FIR数字滤波器。FIR滤波器系统的冲击响应是有限长的,其系统函数为:
其中,M是FIR数字滤波器的阶数,也称为延时阶数。所以,基本的FIR数字滤波器系统的表达式如下:
其中,h(i)是数字滤波器系数;x(n)是输入信号的采样序列;L是数字滤波器的系数长度;y(n)是数字滤波器的输出序列。
1.2DDS
原理幅值为1,初始相位为0,频率为f0的正弦波表达式如下:
将正弦波周期分为M份,第n份所在的相位对应的波形幅值u(n)为:
这样,则DDS的基本原理图如图1所示。
DDS的正(余)弦波形是通过查找表生成波形的,如图1所示。正弦查找表中存储了正弦波形M个不同相位的幅值u(n),把表数据查找一轮产生一个周期的正弦波形,相位控制字P改变的是查表的初始位置,而频率控制字F改变的是查表的步进值,假如F=1,产生的正弦波频率为f1,则F=k时,表明查表每隔k个位置取一次值,因此产生的正弦波频率为kf1。
1.3Matlab/DSPBuilder设计流程
Matlab/DSPBuilder设计流程框图如图2所示。该流程的第一步,是在Matlab/Simulink中,使用DSPBuilder模型库中的元素建立一个mdl模型文件,以完成系统级或算法级设计框图;第二步,利用Simulink的图形化仿真、分析功能,分析此设计的正确性;第三步,由于EDA工具软件不能直接处理Matlab的mdl文件,需要通过Signalcompiler转化为硬件语言(VHDL文件),因VHDL文件是基于RTL级的,故可以下载至硬件。
图2Matlab/DSPBuilder设计流程框图
2设计的具体实现
由公式(2)分析可知,滤波器输出是不同时刻输入的线性组合,为实现此逻辑需使用L位的移位寄存器和L路输入的求和器。本设计为31阶FIR数字滤波器,需使用32位的移位寄存器和32路输入的求和器,这样,其滤波器模型如图3所示。
设计FIR数字滤波器的第二步是确定32路输入的求和器中的32个系数,即公式(2)中的h(i)具体方法是:打开Matlab中的FDATool(FilterDesign&AnalysisTool)工具,输入滤波器参数,本设计为中心频率为6kHz的带通数字滤波器,其输入参数如表1所列。
点击DesignFilter,可得到如图4所示的滤波器;然后选择“File->Export…”,则滤波器的系数就被存在了NUM向量中。
在Matlab命令窗口键入NUM,由于K*NUM与NUM设计的滤波器只有幅值差异,所以可取一适当K值使系数向量为(-100〜+100)以内的数,四舍五入为整数,此设计K=256,所得到的滤波器系数如表2所列。然后把系数添加进滤波器模型,便可得到所设计的带通中心频率为6kHz的FIR数字滤波器。按照Matlab/DSPBuilder设计流程框图,使用DSPBuilderBlockset->IO&Bus为滤波器添加Input、Output模块,对其进行simulink仿真,正确无误后,添加signalCompiler模块,对滤波器模型进行编译,生成VHDL文件。
为了验证数字滤波器的效果,根据DDS的原理,分别
设计频率为6kHz和12kHz的正弦波信号,接入数字滤波器,使用Simulink仿真,观看设计效果。结果证明数字滤波器效果良好,其结果仿真图如图5所示。
3结语
本文以中心频率为6kHz的带通FIR数字滤波器为例,系统地介绍了Matlab和DSPBuilder工具联合在一起完成系统级或算法级系统的设计方法和流程。使用Matlab和DSPBuilder工具设计系统相较于传统方法,操作简单,逻辑清晰,可以极好地实现系统的要求。
20211020_61702b4b7cf62__一种31阶FIR数字滤波器的设计及实现