IIR数字滤波器的Matlab和FPGA实现

2011-07-22 19:52:11来源: 现代电子技术
   

摘要:提出一种通过两个二阶节级联构成四阶IIR数字椭圆滤波器的设计方法,并利用Matlab仿真软件设计了通带内波纹不大于0.1 dB,阻带衰减不小于42 dB的IIR数字滤波器。论述了一种采用可编程逻辑器件,通过VHDL硬件描述语言实现该滤波器的方法。给出了在QuartusⅡ软件下的仿真结果,并在FPGA器件上验证实现。实验证明,这种方法是切实可行的。
关键词:无限长单位脉冲响应滤波器;Matlab;FPGA;VHDL

0 引言
    数字滤波器具有比模拟滤波器精度高、稳定、体积小、重量轻、灵活、不要求阻抗匹配,以及能够实现模拟滤波器无法实现的特殊滤波功能等特点,因此数字滤波器被广泛应用于图像处理和识别、语音处理和识别、通信、雷达、人工智能、核技术等多个领域。
    数字滤波器的实现方法很多,采用FPGA器件实现具有速度快、效率高、成本低、开发周期短等优点,而且还可以直接使用Altera公司提供的FIR/IIR IP core或采用LPM的设计方法进行设计,使数字滤波器设计变得简单、可靠。本系统通过一个实例说明如何通过Matlab设计并在FPGA器件上实现IIR椭圆函数滤波器。

1 IIR数字滤波器的Matlab设计
1.1 IIR数字滤波器设计要求
    本系统的设计指标如下:模拟信号采样频率为2 MHz,每周期最少采样20点,即模拟信号的通带边缘频率为fp=100 kHz,阻带边缘频率fs=200 kHz,通带波动Rp≤0.1 dB(通带误差不大于5%),阻带衰减As≥42 dB。换算为数字域指标为:Wp=0.1π,Ws=0.2π,Rp=0.1 dB,As=42 dB。
1.2 IIR数字滤波器设计方案
    (1)根据设计要求确定滤波器数字域指标
    换算为数字域指标为:Wp=0.1π,Ws=0.2π,Rp=0.1 dB,As=42 dB。
    (2)采用Matlab软件设计滤波器系统函数
    IIR滤波器系统函数是采用计算机辅助工程CAE工具进行设计的。系统函数H(z)的计算采用Matlab软件设计比较方便,其中有两个现成的函数可以使用:ellipord(Wp/pi,Ws/pi,Rp,As)函数用来计算数字椭圆滤波器的阶次N和3 dB截止频率Wn;ellip(N,Rp,As,Wn)函数可以求得直接型椭圆IIR滤波器的各个系数。
    根据要求,设计采用Matlab软件实现IIR滤波器的源程序如下:
   b.JPG
    利用Matlab软件可以得到如下结果:
    c.JPG
    这是一个四阶IIR系统,通过Matlab计算出该系统的频率响应如图1所示,可见能满足设计要求。

d.JPG


    (3)确定滤波器网络结构
    本设计如果采用直接型结构实现,则需用的乘法器和延迟单元相对较多,而且分子和分母的系数相差较大,需要较多的二进制位数才能实现相应的精度要求。
    为了克服上述缺点,采用二阶级联实现。IIR滤波器采用级联型的网络结构既可以对各基本节的零点、极点方便地单独进行调整,又可以降低对二进制数位数的要求。
    这里采用Matlab中的“二阶部分传递函数”tf2sos()完成IIR滤波器直接型网络结构到级联型网络结构的转换。
    将IIR滤波器由直接型变为级联型的Matlab语言源程序如下:
e.JPG
    可以看出,每个二阶节的分子、分母系数差异减少了。值得注意的是,在分配二阶节的增益时,要保证每个节不会发生运算溢出,可以先用Matlab软件分析计算来合理安排各节的增益。经过计算,本文采用第一级分配0.162 6,第二级分配0.065 8,可以保证在要求的输入范围,没有数据溢出发生。
    (4)滤波器参数量化
    差分方程的量化后各系数如表1所示,这里采用10位定点纯小数补码表示。

f.JPG



2 IIR数字滤波器的FPGA实现
2.1 总体设计方案
    根据上述参数计算可知,需要设计的IIR滤波器为2个二阶节的系统级联形式,其二阶节系统函数的差分方程均为:
    g.JPG
    可以看出,一个二阶节的实现,需要五次乘法运算、四次加法运算(采用二进制补码将减法运算变为加法运算),两个二阶节共需要10次乘法运算,所有乘法运算均为无符号数的乘法运算,所以使用时需要先将两个补码乘数转换为无符号数相乘后,再将乘积转换为补码乘积输出,送入累加器求和。根据以上设计思想可知,一个二阶节系统均由控制模块、移位模块、求补模块、乘法模块和累加器模块等模块组成,其系统电路框图如图2所示。

h.JPG


    由于IIR滤波器的两个节系统电路结构完全相同,只是系数不同,故另一个二阶节的设计与此类似。
2.2 主要功能模块的设计
    控制模块主要用来产生对其他模块的时序控制。
    累加模块的功能是将10位×1位乘法器的5个输出数据在10个时钟周期内累加后,并将结果输出。
    移位模块主要完成数据交换功能,将输入数据送入输入寄存器x(n)中,同时将x(n)寄存器上一时刻的数据送入x(n-1)寄存器,同时又将x(n-1)寄存器上一时刻的数据送入x(n-2)寄存器。同理有y(n)→y(n-1)→y(n-2)。
    求补模块主要根据每路乘法器2个输入数据的补码,判断输入数据的正负,设置该路乘积结果正负标志位,并对输入的负数进行求补运算,保证乘积是在2个无符号数之间进行,再根据该路乘积结果正负标志位,对乘积结果进行求补运算,保证送入累加器的数据为补码。
    将设计好的各模块按照二阶节系统电路框图衔接,即可完成IIR滤波器其中一个二阶节系统的设计。只要修改差分方程的系数就可完成另一个二阶节系统的设计。
2.3 仿真结果
   各功能模块设计、调测完成之后,按照总体设计方案完成IIR滤波器的实现,并下载到Altera公司的EP1C6Q240C8器件上验证,QuartusⅡ中的仿真结果如图3所示。

a.JPG


    图3中:xn为输入信号,采用单极性方波周期信号;频率为100 kHz,在采样频率为2 MHz时,每个周期采样20个点,换算成数字域频率为0.1π;二次谐波的数字频率为0.2π;yn为滤波输出。观察仿真波形可知,所设计的IIR滤波器符合设计要求。为了更直观地观察IIR滤波器滤波后的输出结果,可将仿真波形文件转换为*.tbl文件,在Matlab中描绘波形。

3 结语
    数字滤波器的应用十分广泛,实现方法很多,运用Matlab语言,能很容易地设计出具有严格指标要求的数字滤波器。采用FPGA器件实现数字滤波器的方法,大大缩短了设计周期,降低了成本,提高了设计的可靠性、灵活性,为数字滤波器的设计与实现提供了一种有效的方法。

关键字:VHDL  IIR数字滤波器

编辑:北极风 引用地址:http://www.eeworld.com.cn/FPGA/2011/0722/article_2332.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
VHDL
IIR数字滤波器

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 

夏宇闻老师专栏

你问我答FPGA设计

北京航空航天大学教授,国内最早从事复杂数字逻辑和嵌入式系统设计的专家。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved