基于matlab的数字滤波器的设计 下载本文

? 函数Cheby2,该函数用于设计ChebyshevⅡ型滤波器。常用格式为 [b,a]=cheby2(n,Rs,Wn)

[b,a]=cheby2(n,Rs,Wn,’ftype’) [b,a]=cheby2(n,Rs,Wn,’s’)

[b,a]=cheby2(n,Rs,Wn,’ftype’,’s’)

该函数与Cheby1函数几乎一摸一样,只不过cheby2函数设计的滤波器是ChebyshevⅡ型滤波器。其通带内为单调,阻带内为等波纹,因此由Rs指定阻带内的波纹。Cheby2函数可设计为低通、带通、高通和带阻的数字和模拟ChebyshevⅡ型滤波器,针对所获得滤波器的形式:传递函数表示、零极点增益表示和状态方程,都有两种格式,因此对数字域和模拟域各有六种格式。

? 函数ellip,该函数用于设计椭圆滤波器。常用格式为 [b,a]=ellip(n,Rp,Rs,Wn)

[b,a]=ellip(n,Rp,Rs,Wn,’ftype’) [b,a]=ellip(n,Rp,Rs,Wn,’s’)

[b,a]=ellip(n,Rp,Rs,Wn,’ftype’,’s’)

该函数与函数类似,可设计低通、高通、带通和带阻的数字和模拟椭圆滤波器。与或滤波器相比,函数可得到下斜度更大的滤波器,但在通带和阻带内均为等波纹的。一般情况下,椭圆滤波器能以最低的阶实现指定的性能。

在格式中,用于指定通带的波纹,指定阻带波纹,指定截止频率。

2.2 FIR数字滤波器设计

在MATLAB中,FIR数字滤波器的设计常用的方法有:窗函数法、频率抽样法、切比雪夫逼近法和约束最小二乘法等。 2.2.1常用窗函数

在MATLAB中,可以用下列函数产生常用的窗函数序列:函数boxcar、函数triang、函数batlett、函数hamming、函数hanning、函数blackman、函数chebwin。 ? 函数boxcar。该函数用于产生矩形窗序列。格式为 w=boxcar(n)

格式boxcar(n)可产生一长度为n的矩形窗函数。

? 函数triang。该函数用于产生三角窗序列。格式为 w=triang(n)

格式triang(n)可得到n点的三角窗函数。三角窗函数类似于bartett窗。bartett窗在取样点1和n上总是以零结束,而三角窗在这些点上并不为零。实际上,当n为奇数时,的中心(n-2)个点等效于bartett(n).

? 函数bartett。该函数用于产生bartett窗。格式为 w=Bartlett(n)

格式bartlett(n)可以得到n点Bartett窗函数。bartett窗函数与三角函数非常类似。当n为奇数时,bartett(n)的中心(n-2)点等效于triang(n-2)。 ? 函数hamming。该函数用于产生hamming窗。格式为 w=hamming(n)

格式hamming(n)可以产生n点hamming窗序列。 ? 函数hanning。该函数用于产生窗。格式为 w=hanning(n)

13

格式hanning(n)可以产生n点Hanning窗序列.

? 函数black。该函数用于产生Blackman窗。格式为 w=Blackman(n)

格式blackman(n0可以产生n点Blackman窗序列。与等长度的Hamming窗和Hanning窗相比,Blackman窗的主瓣稍宽,旁瓣稍低。

? 函数chebwin。该函数用于产生Chebyshev窗。格式为 w=chebwin(n,r)

格式w=chebwin(n,r)可以产生n点的Chebyshev窗函数序列,其傅里叶变换后的旁瓣波纹低于主瓣rdB。当为偶数时,窗函数的长度为(n+1)。 ? 函数kaiser。该函数用于产生kaiser窗。格式为 w=Kaiser(n,beta)

格式w=Kaiser(n,beta)可以产生n点的kaiser窗序列,其中参数beta为影响窗函数旁瓣的参数,增加beta可以使主瓣变宽,旁瓣的幅度降低。 2.2.2窗函数法设计FIR数字滤波器

在MATLAB中,利用窗函数法设计FIR数字滤波器时,可以直接使用函数fir1和fir2. ? 函数fir1。该函数利用窗函数法设计FIR滤波器。常用格式为 b=fir1(n,Wn)

b=fir1(n,Wn,’ftype’) b=fir1(n,Wn,Window)

b=fir1(n,Wn,’ftype’,Window)

该函数以经典的方法实现加窗线性相位FIR数字滤波器的设计,它可设计出标准的低通、带通、高通和带阻滤波器(具有任意频率的加窗滤波器由fir2函数设计)。

利用格式 b=fir1(n,Wn)可得到n阶低通FIR滤波器,滤波器系数包含在b中,这时一个截止频率为Wn的家了Hamming窗的线性相位FIR滤波器,当Wn=[W1 W2]时,fir1函数可得到FIR带通滤波器,其通带为W1

利用格式b=fir1(n,Wn,’ftype’)可设计高通和带阻滤波器,当ftype=high时,设计高通FIR滤波器;当ftype=stop时,设计带阻FIR滤波器。在设计高通和带阻滤波器时,fir1函数总是使用阶为偶数的结构,因此当输入的阶次为奇数时,fir1函数会自动将阶次加1.这时因为对奇次的滤波器,其在Nyquist频率处的频率响应为零,因此不适合于构成高通和带阻滤波器。

在格式b=fir1(n,Wn,Window)中,则利用矢量Window中指定的窗函数进行滤波器设计,Window长度为(n+1)。如果不指定Window参数,则fir1函数采用hamming窗

在格式b=fir1(n,Wn,’ftype’,Window)中,可利用 ftype和Window参数,设计各种加窗的FIR滤波器。

函数fir2。该函数用于设计任意频率响应的FIR滤波器。常用格式为 b=fir2(n,f,m)

b=fir2(n,f,m,Window) b=fir2(n,f,m,npt)

b=fir2(n,f,m,npt,Window) b=fir2(n,f,m,npt,lap)

b=fir2(n,f,m,npt,lap,Window)

该函数用于设计具有任意频率响应的加窗的FIR数字滤波器,对标准的低通、高通、带通和带阻滤波器的设计采用fir1函数。

格式b=fir2(n,f,m)可设计出一个n阶的FIR滤波器,其滤波器的频率特性由矢量f和

14

m决定。格式b=fir2(n,f,m,Window)可将矢量Window中指定的窗函数用于滤波器设计,如省略window,则自动选取Hamming窗。

在b=fir2(n,f,m,npt)格式中,可利用参数npt指定fir2对频率响应进行内插的点数,对应的b=fir2(n,f,m,npt,Window)格式中,可以自行指定窗函数window。

在b=fir2(n,f,m,npt,lap)格式中,可利用参数lap指定fir2在重复频率点附近插入的区域大小,对应的b=fir2(n,f,m,npt,lap,Window)格式中,可用window指定窗函数。

3. 基于MATLAB GUI的数字滤波器设计思路及实现

一个可开发的应用程序通常都需要具备一个友好的图形界面,MATLAB中的GUI就是一个很好的应用工具。

3.1 GUI界面设计概述

GUI设计面板是GUI设计工具应用的平面,面板上部提供了菜单和常用工具按钮,左边提供了多种如命令按钮、单选按钮、可编辑文本框、静态文本框、弹出式菜单等。进行设计时, 首先单击面板左边所需的控件, 然后在右边的图形界面编辑区中再次单击某一恰当位置, 这时将在该位上为图形界面添加相应的控件。一个图形界面的完成, 除了设计其外观外, 还有相当的一部分是通过属性的设来完成的。因此在设置这些属性时, 要注意下面几个常用又很重要的属性设置: ? 控件风格和外观

(1)BackgroundColor:设置控件背景颜色,使用[R G B]或颜色定义。 (2)CData:在控件上显示的真彩色图像,使用矩阵表示。 (3)ForegroundColor:文本颜色。

(4)String属性:控件上的文本,以及列表框和弹出菜单的选项。 (5)Visible:控件是否可见。 ? 对象的常规信息

(1)Enable属性: 表示此控件的使能状态,设置为on”,表示可选,为“off”时则表示不可选。

(2)Style:控件对象类型。 (3)Tag:控件表示(用户定义)。

(4)TooltipString属性:提示信息显示。当鼠标指针位于此控件上时,显示提示信息。

(5)UserData:用户指定数据。 (6)Position:控件对象的尺寸和位置。 (7)Units:设置控件的位置及大小的单位

(8)有关字体的属性,如 FontAngle, FontName等。 ? 控件回调函数的执行

(1)BusyAction:处理回调函数的中断。有两种选项:即Cancel:取消中断事件,queue:排队(默认设置)。

15

(2)ButtonDownFcn属性:按钮按下时的处理函数。

(3)CallBack属性:是连接程序界面整个程序系统的实质性功能的纽带。该属性值应该为一个可以直接求值的字符串,在该对象被选中和改变时,系统将自动地对字符串进行求值。

(4)CreateFcn:在对象产生过程中执行的回调函数。 (5)DeleteFcn:删除对象过程中执行的回调函数。

(6)Interruptible属性:指定当前的回调函数在执行时是否允许中断,去执行其他的函数。 ? 控件当前状态信息

(1)ListboxTop:在列表框中显示的最顶层的字符串的索引。 (2)Max:最大值。 (3)Min:最小值。 (4)Value:控件的当前值。

应用MATLAB制作这样一个过程是非常方便的, 我们可以通过GUI操作来看到。该环境下要设计一个界面友好的仿真软件,一般应完成以下两个步骤:

? GUI界面设计。主要是通过不同的文本框、按钮等许多工具的使用,设计出一个图

形用户界面。要清楚这个图形界面的功能是什么,即在图形界面上的操作会引发什么样的结果。

? 回调函数的设计。用户应根据设计好的图形界面的功能,针对各个不同的图形对象

来编写出能够实现该功能的函数代码,确保这个图形界面能够完成所预定的功能。

3.2 “滤波器设计软件”设计所实现任务

“滤波器设计软件”设计所实现任务如下: ? 能够实现人机交互

? 在下拉Digital Filter菜单里选择IIR和FIR滤波器设计

? 当选择IIR滤波器时,能够选择巴特沃斯(Butterworth)、切比雪夫Ⅰ(ChebyshevⅠ)

滤波器、切比雪夫Ⅱ(ChebyshevⅡ)滤波器、椭圆(Ellipse)滤波器

? 当选择FIR滤波器是,能够选择Boxar、Bartlett、Blackman、Hanning、Hamming、Kaiser

窗口设计滤波器

? 在下拉菜单Filter Type中选择滤波器类型,能够选择Lowpass、Highpass、Bandpass、

Bandstop四种类型

? 在下拉菜单Display Type中选择图形显示类型,能够选择Linear、Logarithmic两种

类型

? 在设计滤波器阶数时,可选择自定义阶数和利用最小阶数设计滤波器,并显示最小阶数 ? 在参数输入中,可输入抽样频率Fs、滤波器通带临界频率(Fp1、Fp2)、滤波器阻带临

界频率(Fst1、Fst2)、通带内的最大衰减Rp、通带内的最小衰减Rs

16