搜索
您的当前位置:首页正文

基于MATLAB的模拟滤波器设计.

来源:星星旅游
引言

基于MATLAB的模拟滤波器设计

1 引言

1.1 选题背景

1917年美国和德国科学家分别发明了LC滤波器,次年美国发明了第一个多路复用系统。50年代无源滤波在相频技术日趋成熟,自60年代起由于微电子技术、信息技术、计算机技术、集成工艺和材料工业的发展,滤波器朝着低功耗、高精度、小体积、多功能、高稳定性和价廉方向努力,这些成为70年代以后的主攻方向。RC有源滤波器、数字滤波器、开关电容滤波器和电荷转移器等各种滤波器的发展很快,它们被单片集成化。80年代,主要致力于各类新型滤波器性能的研究,并逐渐扩大应用范围。90年代至今主要致力于把各类滤波器应用于各类产品中,几乎在所有的工程技术领域中都会涉及到信号处理问题[1],而滤波是信号处理的一种基本而重要的技术,利用滤波可从复杂的信号中抑制不需要的部分,提取所需要的信号[2]。滤波器的优劣直接决定着产品的优劣,所以滤波技术一直是极为敏感和热门的课题,对滤波器的研制也历来为各国所重视。

在当今30多个数学类科技应用软件中,就软件数学处理的原始内核而言,可分为两大类。一类是数值计算型软件,如MATLAB,Xmath,Gauss等,这类软件长于数值计算,对处理大批数据效率高;另一类是数学分析型软件,Mathematica,Maple等,这类软件以符号计算见长,能给出解析解和任意精确解,其缺点是处理大量数据时效率较低。时至今日,经过MathWorks公司的不断完善,MATLAB已经发展成为适合多学科,多种工作平台的功能强大的大型软件。在欧美等高校,MATLAB已经成为线性代数,自动控制理论,数理统计,数字信号处理,时间序列分析,动态系统仿真等高级课程的基本教学工具。利用MATLAB具有较严谨的科学计算和图形界面显示这一优点,从而使滤波器设计结果显示的更加直观,且设计扩展性好,便于调节滤波器的性能。

1.2 目的和意义

MATLAB中的图形界面编程环境GUIDE为用户开发软件界面提供了强有力的工具,在图形界面编程环境GUIDE下,设计好滤波器的设计工具界面后,对界面上

第 1 页 (共 34 页)

基于MATLAB的模拟滤波器设计

各个控件的回调函数进行编写就能设计出交互式滤波器的分析设计软件。利用MATLAB具有较严谨的科学计算和图形显示这一优点,从而使滤波器设计结果显示的更加直观,设计扩展性好,便于调节滤波器的性能。

通过对模拟滤波器(包括巴特沃斯滤波器和切比雪夫滤波器)的设计原理和方法的研究,在此基础上论述了模拟滤波器(包括低通、高通、带通、带阻)的设计[3]。

1.3 发展现状及趋势

MATLAB以其强大的计算和绘图功能、大量稳定可靠的算法库、简洁高效的编程语言以及庞大的用户群,成为数学计算工具方面事实上的标准[4]。几乎所有的工程计算领域,MATLAB都有相应的软件工具箱。从20世纪90年代初期开始,MATLAB开始逐步引入到应用代数、数理统计、信号与系统、制动控制、数字信号处理、通信系统、动态系统仿真等课程中学习和运用,时至今日,经过MathWorks公司的不断完善,MATLAB已经发展成为适合多学科,多种工作平台的功能强大大型软件[5]。

在近代电信设备和各类控制系统中,滤波器应用极为广泛。几乎在所有的电子部件中使用最多,技术最为复杂的即为滤波器。滤波器的优劣直接决定着产品的优劣,所以对滤波器的研究和生产历来为各国所重视。随着电子工业的发展,对滤波器性能的要求越来越高。我国电子产品要实现大规模集成,滤波器集成化仍是重要课题。如何进一步实现滤波器的小型化、集成化和高效化是今后很长一段时间内不变的研究和发展主题。经过MathWorks公司的不断完善,在设计研究单位和工业部门,MATLAB被广泛用于科学研究和解决各种具体问题,对于滤波器的研究,能够在MATLAB里找到合适的功能[6]。

2 方案论证

2.1 滤波器设计原理

2.1.1 滤波器概述

滤波器是通讯系统中的一种不可缺少的器件。滤波技术是信号分析,处理技术的重要分支。无论是信号的获取,传输,还是信号的处理和交换都离不开滤波技术,它对信号安全可靠和有效灵活地传递是至关重要的。在所有的电子系统中,使用最多,技术最为复杂的应该是滤波器了。滤波器的优劣直接决定着产品的优劣,所以,滤波

第 2 页 (共 34 页)

方案论证

技术一直是极为敏感和热门的课题,对滤波器的研制也历来为各国所重视。

滤波器可广义地理解为一个信号选择系统。滤波器的功能是让某些频率的信号比较顺利的通过,而另外频率的信号受到较大抑制与衰减。滤波器中,把信号能够通过的频率范围,称为通频带或通带;反之,信号受到很大衰减或完全被抑制的频率范围称为阻带;通带和阻带之间的分界频率称为截止频率;理想滤波器在通带内的电压增益为常数,在阻带内的电压增益为零;带通滤波器两个截至频率的差值为带宽(BW);实际滤波器的通带和阻带之间存在一定频率范围的过渡带[7]。 2.1.2 模拟滤波器的工作原理

模拟滤波器是对模拟信号实行线性滤波的一种线性时不变系统,如图1所示。在时域内,它的动态特性可以用系统的单位冲激函数的响应ha(t)来描述,也就是该滤波系统在任何时刻对输入单位冲激信号xat=δ(t)的输出响应yathat。这个函数从时域上反映了该滤波系统的传输特性。对于任意输入信号xat,系统的输出yat可以卷积表示:

yathaxatd

 =xahatd (1)

上式表明在对线性滤波器系统进行时域分析时,采用了叠加原理,先将任意输入信号波形分成不同时间的窄脉冲之和,再分别求出各个脉冲通过滤波器之后的响应,并进行线性叠加从而得到总的输出信号。

xat xas 模拟滤波器yat

ha(t),H(s) 图1 模拟滤波器原理

yas

在频域分析时,线性滤波器的转移函数HaS等于系统的单位冲激函数的响应

ha(t)的拉普拉斯变换;

stHahtedt (2) 很明显,当s=jω,上式就是傅立叶变换的表达式,它反映了滤波器的传输特性对各种频率的响应,也就是滤波器的频率响应函数Haj,它决定着滤波特性。当滤波器输入信号xat与输出信号yat的拉普拉斯变换,得

YasHasXas (3)

第 3 页 (共 34 页)

基于MATLAB的模拟滤波器设计

这表明两信号卷积的变换等于各自变换的乘积。在频谱关系上,一个输入信号的频谱Xaj,经过滤波器的作用后,被变换成HajXaj的频谱。因此,根据不同的滤波要求来选定Haj,就可以得到不同类型的模拟滤波器。还可以看出,滤波器的滤波过程就是完成信号xat与它的单位冲激函数响应hat之间的数学卷积运算过程[8]。

2.1.3 模拟滤波器的设计

模拟滤波器按幅度特征可以分成低通、高通、带通和带阻滤波器。它们的幅频特性如图2所示,但我们设计滤波器时,总是先设计低通滤波器,再通过频率变换将低通滤波器转换成希望类型的滤波器。

模拟滤波器的设计方法:

利用频率变换设计模拟滤波器的步骤为:

(1) 给定模拟滤波器的性能指标,如截止频率0或上、下边界频率1,2等。 (2) 确定滤波器阶数

O 实际 理想 理想 AA0 A A0 阻带 实际 通带 阻带 通带 O H(a)  理想 O H (b)  A A0 A实际 理想 A0 实际 L0 H (c)  O L H 0  (d) 图2 几种滤波器的幅频响应 第 4 页 (共 34 页)

方案论证

(3) 设计模拟低通原型滤波器。

(4) 按频率变换设计模拟滤波器(低通、高通、带通、带阻)。

模拟低通滤波器的设计指标有Rp,p和s,其中p和s分别称为通带截止频率和阻带截止频率。Rp是通带Ω中的最大衰减系数,Rs是阻带Ω≥s的最小衰减系数,Rp和Rs一般用dB表示。对于单调下降的幅度特性,可表示成:

Rp10lgHa(j0)22 (4)

Ha(jp))Ha(j0)2 Rs10lgHa(js))2 (5)

如果Ω=0处幅度已归一化为一,即Haj1,p和s表示为

Rp10lgHa(jp) (6) Rs10lgHa(js) (7)

22以上技术指标用图3表示,图中c称为3dB 截止频率,因

Hajc12,-20Hajc3dB

Haj 1 0.707 0 p c

s

图3 低通滤波器的幅度特性

滤波器的技术指标给定以后,需要设计一个传输函数Has,希望其幅度平方函数满足给定的指标Rp和Rs,一般滤波器的单位冲激响应为实数,因此

第 5 页 (共 34 页)

基于MATLAB的模拟滤波器设计

Ha(j)Ha(a)Ha(s)|sj

 =Ha(j)Ha(j) (8)

2如果能由Rp,p,Rs,s求出Haj,那么就可以求出所需的Has,对

2于上面介绍的典型滤波器,其幅度平方函数有自己的表达式,可以直接引用[9]。

2.2 巴特沃斯与切比雪夫滤波器

2.2.1 巴特沃斯滤波器

巴特沃斯滤波器是最基本的逼近方法形式之一。它的幅频特性模平方为 Ha(j)2(1(12N)c)2 (9)

式中N是滤波器的阶数。当Ω=0时,Haj1;当Ω=c时,Haj12,

c是3dB截止频率。

不同阶数N的巴特沃斯滤波器特性如图4所示,这一幅频特性具有下列特点: (1) 最大平坦性:可以证明:在Ω=0点,它的前(2N-1)阶导数都等于0,这表明巴特

沃斯滤波器在Ω=0附近一段范围内是非常平直的,它以原点的最大平坦性来逼近理想低通滤波器。“最平响应”即由此而来。

(2) 通带,阻带下降的单调性。这种滤波器具有良好的相频特性。

(3) 3dB的不变性:随着N的增加,频带边缘下降越陡峭,越接近理想特性,但不

管N是多少,幅频特性都通过-3dB点。

图4 不同阶数N的巴特沃斯滤波器特性

第 6 页 (共 34 页)

方案论证

MATLAB中设计巴特沃斯模拟滤波器的函数[10]: (1) buttord

功能:用于计算巴特沃斯模拟滤波器的阶数N和3dB截止频率wc。 格式:[N,wc]=buttord(wp,ws,Rp,Rs,‘s’) (2) buttap

功能:用于计算滤波器的零点z,极点p,增益k。 格式:[z,p,k]=buttap(n) (3) zp2tf

功能:将模拟原型滤波器函数设计出的零点z,极点p,增益k形式转换为传递函数形式

格式:[b,a]=zp2tf(z,p,k) (4) lp2hp

功能:模拟低通滤波器到模拟高通滤波器的变换。 格式:[bt,at] = lp2hp(b,a,Wo) (5) lp2bp

功能:模拟低通滤波器到模拟带通滤波器的变换。 格式:[bt,at] = lp2bp(b,a,Wo,Bw) (6) lp2bs

功能:模拟低通滤波器到模拟带阻滤波器的变换。 格式:[bt,at] = lp2bs(b,a,Wo,Bw) (7) freqs

功能:求幅频响应和相频响应 格式:[H,f]=freqs(b,a,w) 2.2.2 切比雪夫滤波器

巴特沃斯滤波器的频率特性曲线,无论在通带和阻带都是频率的单调函数。当通带边界处满足指标要求时,通带内肯定会有余量。因此,更有效的设计方法应该是将精确度均匀地分布在整个通带内。这可通过选择具有等波纹特性的逼近函数来达到。

切比雪夫滤波器的振幅特性就是具有这种等波纹特性。它有两种型式:振幅特性

第 7 页 (共 34 页)

基于MATLAB的模拟滤波器设计

在通带内是等波纹的,在阻带内是单调的切比雪夫I型滤波器;振幅特性在通带内是单调的,在阻带内是等波纹的切比雪夫II型滤波器。采用何种型式切比雪夫滤波器取决于实际用途[11]。

这种滤波器的幅频特性模平方为:

1221TNc (10)Haj2式中ε是决定通带内起伏的等波纹参数,TNx是第一类切比雪夫多项式。 图5(a)是按式(10)画出的切比雪夫等波纹滤波器的幅频特性,图6(b)是通带内起伏与TN的关系[12]。

T5 1 -o 1 HajHaj211 21 N=5 N=4 c1121 Ω

(a)

-o 0.31 0.75 1 (b) 0.59 0.95

图5 切比雪夫滤波特性及内波纹TN关系

切比雪夫滤波器的滤波特性具有下列特点: (1) 所有曲线在Ω=c时通过

频率。

第 8 页 (共 34 页)

112点,因而把c定义为切比雪夫滤波器的截止角

方案论证

(2) 在通带内│Ω/c│≤1,Haj在1和

112之间变化;在通带外,│Ω/c

│>1,特性呈单调下降,下降速度为20NdB/dec。 (3) N为奇数,Haj0=1;N为偶数,Haj0=

实际上这种逼近称为最佳一致逼近。

(4) 由于滤波器通带内有起伏,因而使通带内的相频特性也有相应的起伏波动。即

相位是非线性的,这给信号传输时带来线性畸变,所以在要求群时延为常数时不宜采用这种滤波器。 2.2.2.1 ChbbyshevI型

Chbbyshev I型阻带内是平滑的,而通带具有等波纹起伏特性[13]。 MATLAB中设计巴特沃斯模拟滤波器的函数[14]: (1) cheb1ord

功能:用于计算切比雪夫I型模拟滤波器的阶数n 格式:[n,Wn]=cheb1ord(wp,ws,Rp,Rs,'s') (2) cheby1

功能:确定阶数为n的切比雪夫I型模拟滤波器的分子、分母多项式 格式:[b,a]=cheby1(n,Rp,Wn,'s'); (3) freqs

功能:求幅频响应和相频响应 格式:[H,f]=freqs(b,a,w) 2.2.2.2 ChbbyshevII型

ChbbyshevII型通带内是平滑的,而阻带具有等波纹起伏特性。因此,在阶数N的计算公式上是相同的,而-3dB截止频率c则不同[15]。

MATLAB中设计巴特沃斯模拟滤波器的函数: (1) cheb2ord

功能:用于计算切比雪夫II型模拟滤波器的阶数n 格式:[n,Wn]=cheb2ord(wp,ws,Rp,Rs,'s')

112。通带内误差分布是均匀的,

第 9 页 (共 34 页)

基于MATLAB的模拟滤波器设计

(2) cheby2

功能:确定阶数为n的切比雪夫II型模拟滤波器的分子、分母多项式 格式:[b,a]=cheby2(n,Rp,Wn,'s'); (3) freqs

功能:求幅频响应和相频响应 格式:[H,f]=freqs(b,a,w)

2.3 运行环境及实现技术

在Matlab中,图形用户界面(graphical user interface,GUI) (如图6所示)是Matlab中一个专用于GUI程序设计的向导设计器,而GUI是由各种图形对象,如图形窗口、图轴、菜单、按钮、文本框等构建的用户界面,是人机交互的有效工具和方法。通过GUIDE可以很方便地设计出各种符合要求的图形用户界面。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。GUIDE将用户保存设计好的图形用户界面保存在一个FIG资源文件中,同时自动生成包含图形用户界面初始化和组件界面布局控制代码的M文件,这个M文件为实现回调函数的编写提供了一个参考框架。FIG文件是一个二进制文件,包含系列化的图形窗口对象。所有对象的属性都是用户创建图形窗口时保存的属性。该文件最主要的功能是对象句柄的保存。M文件包含GUI设计、控制函数及控件的回调函数,主要用来控制GUI展开时的各种特征。该文件基本上可以分为GUI初始化和回调函数两个部分,控件的回调函数可根据用户与GUI的具体交互行为分别调用[16]。

本设计主要是先设计MATLAB中GUI界面设计。进行设计时, 首先单击面板左边所需的控件, 然后在右边的图形界面编辑区中再次单击某一恰当位置, 这时将在该位上为图形界面添加相应的控件。“滤波器设计软件”图形界面(如图7所示)的完成后,点击guide界面上方的Run按钮,会生成一个FIG文件,一个M文件,其中FIG文件就是界面的图形,M文件是界面的回调函数,在M文件里每个控件的回调函数都已经自动生成,要做的工作就是在文件框架下定义某些特殊要求的状态并补充完整回调函数, 使单击控件时激活回调程序完成一定的功能。

第 10 页 (共 34 页)

方案论证

图6 GUI设计的图形界面

图7 “滤波器设计软件”GUI界面设计

第 11 页 (共 34 页)

基于MATLAB的模拟滤波器设计

“滤波器设计软件”回调函数编写设计总框图如图8所示:

滤波器设计 选择滤波器类型 设置参数 幅频响应和相频响应曲线

图8 设计总框图

3 设计论述

3.1 设计综合要求

要实现的功能:

(1) 能够实现人机交互,便于操作;

(2) 能够选择巴特沃斯(Butterworth)、切比雪夫Ⅰ(ChebyshevⅠ)滤波器、切比雪夫

Ⅱ(ChebyshevⅡ)滤波器;

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

Bandpass、Bandstop四种类型;

(4) 在设计滤波器阶数时,可选择自定义阶数和利用最小阶数设计滤波器 ; (5) 在参数输入中,可输入截止频率Fc、滤波器通带临界频率(Fp1、Fp2)、滤波器

阻带临界频率(Fst1、Fst2)、通带内的最大衰减Rp、通带内的最小衰减Rs; (6) 当用户选择(或输入)滤波器的参数时,运行后能够及时显示设计好的滤波器的

幅频特性和相频特性图。

3.2 “滤波器设计”软件的总体设计

GUI界面设计总框图如图9所示。

第 12 页 (共 34 页)

设计论述

Butterworth 滤波器设计 Chebyshev1 ChebyShev2 选择滤波器类型 设置参数 幅频响应和相频响应曲线 图9 GUI界面设计总框图

3.3 “滤波器设计”软件的详细设计

3.3.1 GUI各控件简介

用户欲启动GUI操作,可以在命令窗口中输入guide命令。当用户在guide中打开一个GUI时,该GUI将显示在Layout编辑器中,Layout编辑器是所有guide工具的控制面板。在布局编辑器件中可以很方便地改变GUI中网格窗口的大小,只需要单击网格区域的右下角,当鼠标变为箭头形式时,拖动鼠标,即可适时改变窗口大小。

用户可以使用三种方法打开属性查看器:(1)在布局窗口中双击某个控件;(2)在View菜单中选择Property Inspector选项;(3)右击某个控件并从弹出的快捷菜单中选择Inspector Properties选项。当运行GUI时,M文件创建一个包含所有GUI对象(如控件,菜单和坐标轴)的句柄结构,句柄结构作为每一个响应的输入来处理。用户使用句柄结构可以实现如下操作:(1)在各响应之间实现数据共享;(2)访问GUI数据。假如用户欲取得变量X的数据可以想将句柄结构的一个域设为X,然后在使用guidata函数保存该句柄,如下所示:

然后在使用guidata函数保存该句柄,如下所示:

第 13 页 (共 34 页)

基于MATLAB的模拟滤波器设计

handles current_data=X; guidata(hObject,handle);

用户可以在其他任何响应中重新得到该变量值,使用的操作如下:

X=handles current_data;

用户还可以利用句柄获取GUI控件的任意数据。用户想要使用GUI中的另一个控件(比如一个按钮)来在当前所选的某个菜单项实现某个操作,那么用户可以在该按钮的响应输入如下命令:

all_choices=get(handles.my_menu,’string’)

current_choice=all_choice{get(handles.my_menu,’Value’)}

用户可以给GUI的M文件的如下部分增加程序代码:(1)打开函数(opening function),该函数可在GUI可见之前实施操作。(2)输出函数(output function),在必要的时候向命令行输出数据。(3)响应(callbacks),在用户激活GUI的响应控件时实施操作。打开函数包含有在GUI可见之前进行操作的代码,用户可以在打开函数中访问GUI的所有控件,因为所有GUI中的对象都在调用打开函数之前就已经创建。如果用户需要在访问GUI之前实现某些操作(如创建数据或图形),那么可以通过在打开函数中添加代码来实现[17]。如:对于一个文件名为my_gui的GUI来说,它的打开函数的定义语句如下:

function my_gui_OpeningFcn(hObject,eventdata,handles,varargin)

输出函数将输出结果返回给命令行。这一点在用户需要将某个变量传递给另一个GUI时尤其使用。GUI在输出函数中生成如下代码:

%---Outputs from this function are returned to the command line. function varargout=my_gui_OutputFcn(hObjcet,eventdata,handles) %Get default command line output from handles structure Varargout{1}=handles.output;

按钮(Radio Buttons)的响应:在图形界面中添加该控件之后,该控件将在指定位置添加按钮,按钮的标识字符由属性String控制,而返回值由Value值控制。在GUI的M文件中使用如下形式的代码来编制Radio按钮的响应程序:

if(get(hObject,’Value’)==get(hObject,’Max’)) %then radio button is selected-take approriate action

第 14 页 (共 34 页)

设计论述

else

%radio button is not selected-take approriate action end

“复选框”控件(Check Boxes)的响应:在图形界面中添加该控件之后, 该控件提供复选功能,将显示文本字符串及选择框。在GUI的M文件中使用如下形式的代码来编制“复选框”控件的响应程序:

function checkbox1_Callback(hObject,eventdata,handles) if(get(hObject,’Value’)==get(hObject,’Max’)) %then checkbox is checked-take approriate action else

% checkbox is not checked-take approriate action end

“文本框”控件(Edit Text)的响应:在图形界面中添加该控件之后,该控件的属性相当于其他语言中的文本框属性,允许用户动态地编辑或是输入文本字符串。如果需要获取用户在文本框中输入的字符串,可以在响应程序中输入如下代码: function edittext1_Callback(hObject,eventdata,handles) user_string=get(hObject,’string’); %proceed with callback

3.3.2 “滤波器设计”软件界面的设计 1、Filter design下拉菜单

在下拉菜单Filter design中选择Butterworth、 ChebyshevⅠ等滤波器,程序和效果图(图10)如下:

function FilterDesign_Callback(hObject, eventdata, handles) AutoRun_value=get(handles.AutoRun,'Value'); if(AutoRun_value==1) AutoChoose(handles) end

第 15 页 (共 34 页)

基于MATLAB的模拟滤波器设计

图10 Filter design下拉菜单选项

2、Filter Type下拉菜单

在下拉菜单Filter Type中选择滤波器类型

选择低通或者高通滤波器时,隐藏相应的带通和带阻的第二个临界频率,使其频率参数不能输入,程序和效果图(图11、图12)如下:

function FilterType_Callback(hObject, eventdata, handles)

%读取此时设计的滤波器的类型,“Lowpass、Highpass、Bandpass、Bandstop” FilterType_value=get(handles.FilterType,'Value');

%当选择Lowpass或者Highpass,屏蔽相应的临界频率的显示

if((FilterType_value==1)||(FilterType_value==2)) set(handles.Fp2,'visible','off');set(handles.Fs2,'visible','off'); set(handles.text17,'visible','off');set(handles.text19,'visible','off');

set(handles.text6,'visible','off');set(handles.text10,'visible','off'); else

%当选择Bandpass或者Bandstop,使相应的临界频率的显示,使参数能够输入 if((FilterType_value==3)||(FilterType_value==4)) set(handles.Fp2,'visible','on');set(handles.Fs2,'visible','on');

set(handles.text17,'visible','on');set(handles.text19,'visible','on');

set(handles.text6,'visible','on');set(handles.text10,'visible','on'); end end

第 16 页 (共 34 页)

设计论述

图11 低通、高通滤波器频率参数输入 图12 带通、带阻滤波器频率参数输入

3、Min Order和Custom Orde按钮

在设计滤波器阶数时,可选择自定义阶数和利用最小阶数设计滤波器 (1) 按钮Min Order

选择使用最小阶数设置时,屏蔽自定义阶数的输入,如图13 function MinOrder_Callback(hObject, eventdata, handles) MinOrder_value=get(handles.MinOrder,'Value');

if(MinOrder_value==1) set(handles.Order,'visible','off'); else

set(handles.Order,'visible','on'); end (2) 按钮Custom Order

选择自定义阶数时,显示阶数输入框,如图14

function CustomOrderButton_Callback(hObject, eventdata, handles) CustomOrderButton_value=get(handles.CustomOrderButton,'Value');

if(CustomOrderButton_value==0) set(handles.Order,'visible','off'); else

set(handles.Order,'visible','on'); end

(3) 其中涉及Run控件中的程序如下:

①显示最小阶数

第 17 页 (共 34 页)

基于MATLAB的模拟滤波器设计

set(handles.MinOrderDisplay,'string',num2str(n)) ②当选择了自定义阶数时,读取自定义阶数 if(MinOrder_value==0)

n=str2double(get(handles.Order,'String')) end

图13 使用最小阶数设计Filter 图14 使用自定义阶数设计Filter

4、Fp1、Fp2、Fst1、Fst2文本编辑框

function Fp1_Callback(hObject, eventdata, handles) Fp1_value=str2double(get(handles.Fp1,'String')); Fp2、Fst1、Fst2的回调函数同理编程 5、Run按钮

根据输入的参数显示设计的滤波器的幅频特性和相频特性图,其程序如下: function Run_Callback(hObject, eventdata, handles)

%点击Run立即运行AutoChoose,m文件,实现滤波器设计程序 AutoChoose(handles) 6、Auto Run按钮

当选择了Auto Run按钮时,能够根据所选的IIR的滤波器(Butterworth、 ChebyshevⅠ等)、FIR的窗口选项、图形显示类型(Linear、Logarithmic)立即显示滤波器的幅频特性和相频特性图。回调函数程序如下:

function FilterDesign_Callback(hObject, eventdata, handles) AutoRun_value=get(handles.AutoRun,'Value');

%当选择了Filter(Butterworth、 ChebyshevⅠ等)中一种Filter运行AutoChoose,m文件

if(AutoRun_value==1) AutoChoose(handles)

第 18 页 (共 34 页)

运行结果及分析

end 7、Quit按钮

退出滤波器设计窗口,其程序如下:

function Quit_Callback(hObject, eventdata, handles) %点击Quti按钮退出 Close

8、AutoChoose.m程序的编写(见附录2)

4 运行结果及分析

4.1 软件运行结果

以设计模拟低通滤波器为例,利用Butterworth滤波器进行设计其3dB截止频率Fc=1000Hz,Fp1=200Hz,Fs1=700Hz,Rp=3dB,Rs=30dB,n=5,n=7如图15、16所示:

图15 Butterworth低通滤波器(n=5) 图16 Butterworth低通滤波器(n=7)

模拟低通滤波器:利用ChebyshevⅠ滤波器进行设计Fp1=200Hz,Fs1=700Hz,Rp=3dB,Rs=30dB,n=5,n=7如图17、18所示:

第 19 页 (共 34 页)

基于MATLAB的模拟滤波器设计

图17 ChebyshevⅠ低通滤波器(n=5) 图18 ChebyshevⅠ低通滤波器(n=7)

模拟高通滤波器:用Butterworth滤波器进行设计Fc=2000Hz,Fp1=800Hz,Fs1=500Hz,Rp=3dB,Rs=30dB,n=5,如图19所示:

图19 Butterworth高通滤波器

模拟带通滤波器:用ChebyshevⅠ滤波器进行设计Fp1=400Hz,Fp2=800Hz,Fs1=200Hz,Fs2=1000Hz ,Rp=3dB,Rs=30dB,n=5,如图20所示:

第 20 页 (共 34 页)

运行结果及分析

图20 ChebyshevⅠ带通滤波器

模拟带阻滤波器:ChebyshevⅡ滤波器进行设计Fp1=400Hz,Fp2=1200Hz,Fs1=600Hz,Fs2=1000Hz ,Rp=3dB,Rs=30dB,n=5,如图21所示:

图21 ChebyshevⅡ带阻滤波器

第 21 页 (共 34 页)

基于MATLAB的模拟滤波器设计

4.2 运行结果分析

由运行结果显示的幅频响应可看出,切比雪夫滤波器的振幅特性具有这种等波纹特性。它有两种型式:振幅特性在通带内是等波纹的,在阻带内是单调的切比雪夫I型滤波器;振幅特性在通带内是单调的,在阻带内是等波纹的切比雪夫II型滤波器。随着N的增加,频带边缘下降越陡峭,越接近理想特性。

设计Butterworth滤波器时,先设计低通滤波器,再通过频率变换将低通滤波器转换成高通、带通、带阻滤波器。由运行结果显示的幅频响应可看出Butterworth幅频特性具有下列特点:(1) 最大平坦性。(2) 通带,阻带下降的单调性。这种滤波器具有良好的相频特性。(3) 3dB的不变性:随着N的增加,频带边缘下降越陡峭,越接近理想特性,但不管N是多少,幅频特性都通过3dB点。

5 结束语

MATLAB以其强大的计算和绘图功能、大量稳定可靠的算法库、简洁高效的编程语言,所以利用MATLAB具有较严谨的科学计算和图形显示这一优点,从而使滤波器设计结果显示的更加直观,而且对滤波器的精度也有了很大的提高,设计扩展性好,便于调节滤波器的性能。

本文首先介绍了模拟滤波器的工作原理及设计思路。然后重点介绍了模拟滤波器的设计和仿真,系统研究了模拟滤波器(包括巴特沃斯滤波器和切比雪夫滤波器)的设计原理和方法。先设计模拟低通滤波器,再通过频率变换将模拟低通滤波器转换成模拟高通、带通、带阻滤波器。在此基础上,描述了如何用MATLAB的图形用户界面来设置滤波器的设计界面及回调函数的编写。利用MATLAB具有较严谨的科学计算和图形显示这一优点,从而使滤波器设计结果显示的更加直观,设计扩展性好,便于调节滤波器的性能。最后设计了一个基于MATLAB平台的有多个滤波器的类型及参数可供选择的图形用户界面,通过运行可以显示出模拟滤波器(包括巴特沃斯滤波器和切比雪夫滤波器)的幅频响应和相频响应曲线。

通过本次设计,学习了巴特沃斯模拟滤波器和切比雪夫模拟滤波器设计的原理与方法,学习了MATLAB中GUI界面设计的操作和回调函数的编写。在今后的学习或工作中,我将继续努力,争取能设计出操作更加方便,运行速度更加快速的方案,来用MATLAB实现各种滤波器的幅频响应和相频响应曲线的显示。在实际完成论文的过程

第 22 页 (共 34 页)

结束语

中,由于受个人的知识、经验和能力的限制,文中肯定难免存在不足之处,恳请大家提出批评和指正。

参考文献

[1]金波.信号与系统基础[M].武汉:华中科技大学出版社,2006:183~202 [2]刘益成.数字信号处理[M].北京:电子工业出版社,2004:123~176 [3]金波.信号与系统实验教程[M].武汉:华中科技大学出版社,2008:90~145 [4]施阳.MATLAB语言工具箱[M].西安:西北工业大学出版社,1998:93~178

[5]赵红怡,张常年.数字信号处理及其MATLAB实现[M].北京:化学工业出版社,2002:113~125 [6]王宏.Matlab6.5及其在信号处理中的应用[M].北京:清华大学出版社,2004:123~175 [7]吴大正.信号与线性系统分析[M].第3版.北京:高等教育出版社,1998:102~152 [8]梁红,梁杰,陈跃斌.信号与系统分析及Matlab实现[M].北京:电子工业出版社,2007:93~146

[9]陈思.巴特沃斯低通滤波器的简化快速设计[J].信阳师范学院学报(自然科学版),1997,10(3) [10]甘俊英,胡异丁.基于Matlab的信号与系统实验指导[M].北京:清华大学出版社,2007:133~162

[11]乐正友.信号与系统[M].北京:清华大学出版社,2004:143~165 [12]胡光锐.信号与系统[M].上海:上海交通大学出版社,1995:83~128

[13]陈后金.信号与系统[M].第二版.北京:清华大学出版社,北京交通大学出版社, 2005:126~147

[14]吴大正,高西全.Matlab在电子信息课程中的应用[M].北京:电子工业出版社,2002:135~178 [15]燕庆明.信号与系统教程[M].北京:高等教育出版社,2004:93~135 [16]21IC中国电子网[Z].http://www.21ic.com/app/analog/201007/61639.htm [17]电子开发网[Z].http://www.dzjs.net/html/EDAjishu/2007/0509/2051.html

第 23 页 (共 34 页)

基于MATLAB的模拟滤波器设计

致谢

在这次课题研究及论文编写中,老师给了我大量的建议及指导,提供了课题研究的方向,在他的帮助下,课题的疑难问题能够得以成功解决,课题能够如期顺利地完成。同时,老师严谨的治学态度和实事求是的科研精神在课题研究中时刻影响着我,这将成为我在以后学习工作中的榜样,激励着我不断进步。在此特别感谢老师的悉心指导!

通过这次毕业设计,我除了深入地学到了更多相关的专业知识之外,更重要的是经历了毕业设计这个过程,熟悉了一般课题研究的整个过程,为今后更深入的学习和工作奠定坚实的基础。再次对在实验及论文撰写过程中,给予我很大帮助的老师和同学们表示诚挚的谢意。

附录:

function varargout = Filter(varargin)

第 24 页 (共 34 页)

附录1

% FILTER M-file for Filter.fig gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ...

'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @Filter_OpeningFcn, ... 'gui_OutputFcn', @Filter_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

gui_mainfcn(gui_State, varargin{:}); end

% --- Executes just before Filter is made visible.

function Filter_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. handles.output = hObject; % Update handles structure guidata(hObject, handles);

% --- Outputs from this function are returned to the command line. function varargout = Filter_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;

function Fc_Callback(hObject, eventdata, handles)

% Hints: get(hObject,'String') returns contents of Fc as text

% str2double(get(hObject,'String')) returns contents of Fc as a double

% --- Executes during object creation, after setting all properties. function Fc_CreateFcn(hObject, eventdata, handles)

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function Fp1_Callback(hObject, eventdata, handles) Fp1_value=str2double(get(handles.Fp1,'String'));

% Hints: get(hObject,'String') returns contents of Fp1 as text

% str2double(get(hObject,'String')) returns contents of Fp1 as a double

% --- Executes during object creation, after setting all properties. function Fp1_CreateFcn(hObject, eventdata, handles)

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

第 25 页 (共 34 页)

基于MATLAB的模拟滤波器设计

function Fp2_Callback(hObject, eventdata, handles) Fp2_value=str2double(get(handles.Fp2,'String'));

% Hints: get(hObject,'String') returns contents of Fp2 as text

% str2double(get(hObject,'String')) returns contents of Fp2 as a double

% --- Executes during object creation, after setting all properties. function Fp2_CreateFcn(hObject, eventdata, handles)

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function Fs1_Callback(hObject, eventdata, handles) Fs1_value=str2double(get(handles.Fs1,'String'));

% Hints: get(hObject,'String') returns contents of Fs1 as text

% str2double(get(hObject,'String')) returns contents of Fs1 as a double

% --- Executes during object creation, after setting all properties. function Fs1_CreateFcn(hObject, eventdata, handles)

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function Fs2_Callback(hObject, eventdata, handles) Fs2_value=str2double(get(handles.Fs2,'String'));

% --- Executes during object creation, after setting all properties. function Fs2_CreateFcn(hObject, eventdata, handles)

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function Rp_Callback(hObject, eventdata, handles)

% Hints: get(hObject,'String') returns contents of Rp as text

% str2double(get(hObject,'String')) returns contents of Rp as a double

% --- Executes during object creation, after setting all properties. function Rp_CreateFcn(hObject, eventdata, handles)

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function Rs_Callback(hObject, eventdata, handles)

第 26 页 (共 34 页)

附录1

% Hints: get(hObject,'String') returns contents of Rs as text

% str2double(get(hObject,'String')) returns contents of Rs as a double

% --- Executes during object creation, after setting all properties. function Rs_CreateFcn(hObject, eventdata, handles)

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

% --- Executes on selection change in FilterDesign.

function FilterDesign_Callback(hObject, eventdata, handles) AutoRun_value=get(handles.AutoRun,'Value'); if(AutoRun_value==1) AutoChoose(handles) end

% Hints: contents = get(hObject,'String') returns FilterDesign contents as cell array % contents{get(hObject,'Value')} returns selected item from FilterDesign

% --- Executes during object creation, after setting all properties. function FilterDesign_CreateFcn(hObject, eventdata, handles)

% Hint: popupmenu controls usually have a white background on Windows. % See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

% --- Executes on selection change in FilterType.

function FilterType_Callback(hObject, eventdata, handles) %当选择不同的滤波器类型时屏蔽相应的输入 FilterType_value=get(handles.FilterType,'Value');

%当选择低通滤波器时屏蔽Fp2、Fs2

if(FilterType_value==1) set(handles.Fp2,'visible','off'); set(handles.Fs2,'visible','off'); set(handles.text17,'visible','off'); set(handles.text19,'visible','off'); set(handles.text6,'visible','off');

set(handles.text10,'visible','off'); %当选择高通滤波器时屏蔽Fp2、Fs2 else

if(FilterType_value==2) set(handles.Fp2,'visible','off'); set(handles.Fs2,'visible','off'); set(handles.text17,'visible','off'); set(handles.text19,'visible','off'); set(handles.text6,'visible','off');

set(handles.text10,'visible','off'); %当选择带通滤波器时显示Fp2、Fs2 else

if(FilterType_value==3)

第 27 页 (共 34 页)

基于MATLAB的模拟滤波器设计

set(handles.Fp2,'visible','on'); set(handles.Fs2,'visible','on'); set(handles.text17,'visible','on'); set(handles.text19,'visible','on'); set(handles.text6,'visible','on');

set(handles.text10,'visible','on'); else

if(FilterType_value==4) set(handles.Fp2,'visible','on'); set(handles.Fs2,'visible','on'); set(handles.text17,'visible','on'); set(handles.text19,'visible','on'); set(handles.text6,'visible','on');

set(handles.text10,'visible','on'); end end end end

% Hints: contents = get(hObject,'String') returns FilterType contents as cell array % contents{get(hObject,'Value')} returns selected item from FilterType

% --- Executes during object creation, after setting all properties. function FilterType_CreateFcn(hObject, eventdata, handles)

% Hint: popupmenu controls usually have a white background on Windows. % See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

% --- Executes on selection change in DisplayType.

function DisplayType_Callback(hObject, eventdata, handles) AutoRun_value=get(handles.AutoRun,'Value'); if(AutoRun_value==1) AutoChoose(handles) end

% Hints: contents = get(hObject,'String') returns DisplayType contents as cell array % contents{get(hObject,'Value')} returns selected item from DisplayType

% --- Executes during object creation, after setting all properties. function DisplayType_CreateFcn(hObject, eventdata, handles)

% Hint: popupmenu controls usually have a white background on Windows. % See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

% --- Executes on button press in Run.

function Run_Callback(hObject, eventdata, handles) AutoChoose(handles)

% Hint: get(hObject,'Value') returns toggle state of Run

% --- Executes on button press in Quit.

第 28 页 (共 34 页)

附录1

function Quit_Callback(hObject, eventdata, handles) close

% Hint: get(hObject,'Value') returns toggle state of Quit

% --- Executes on button press in AutoRun.

function AutoRun_Callback(hObject, eventdata, handles) AutoRun_value=get(handles.AutoRun,'Value'); if(AutoRun_value==1) AutoChoose(handles) end

% Hint: get(hObject,'Value') returns toggle state of AutoRun

% --- Executes during object creation, after setting all properties. function Magnitude_CreateFcn(hObject, eventdata, handles) % Hint: place code in OpeningFcn to populate Magnitude

% --- Executes during object creation, after setting all properties. function Phase_CreateFcn(hObject, eventdata, handles) % Hint: place code in OpeningFcn to populate Phase

% --- Executes on button press in MinOrder.

function MinOrder_Callback(hObject, eventdata, handles)

%当不选择输入滤波器阶数时,即使用最小阶数时,选择屏蔽阶数输入 MinOrder_value=get(handles.MinOrder,'Value');

if(MinOrder_value==1) set(handles.Order,'visible','off'); else

set(handles.Order,'visible','on'); end

% Hint: get(hObject,'Value') returns toggle state of MinOrder

function MinOrderDisplay_Callback(hObject, eventdata, handles)

% Hints: get(hObject,'String') returns contents of MinOrderDisplay as text % str2double(get(hObject,'String')) returns contents of MinOrderDisplay %as a double

% --- Executes during object creation, after setting all properties. function MinOrderDisplay_CreateFcn(hObject, eventdata, handles) % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function Order_Callback(hObject, eventdata, handles)

% Hints: get(hObject,'String') returns contents of Order as text

% str2double(get(hObject,'String')) returns contents of Order as a double

% --- Executes during object creation, after setting all properties. function Order_CreateFcn(hObject, eventdata, handles)

% Hint: edit controls usually have a white background on Windows. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

第 29 页 (共 34 页)

基于MATLAB的模拟滤波器设计

set(hObject,'BackgroundColor','white'); end

% --- Executes on button press in CustomOrderButton.

function CustomOrderButton_Callback(hObject, eventdata, handles) CustomOrderButton_value=get(handles.CustomOrderButton,'Value');

if(CustomOrderButton_value==0) set(handles.Order,'visible','off'); else

set(handles.Order,'visible','on'); end

% --- Executes during object creation, after setting all properties. function uipanel11_CreateFcn(hObject, eventdata, handles)

% handles empty - handles not created until after all CreateFcns called function AutoChoose(handles)

FilterDesign_value=get(handles.FilterDesign,'Value'); FilterType_value=get(handles.FilterType,'Value'); DisplayType_value=get(handles.DisplayType,'Value'); Order_value=get(handles.Order,'Value');

Rp_value=str2double(get(handles.Rp,'String')); Rs_value=str2double(get(handles.Rs,'String')); Fc_value=str2double(get(handles.Fc,'String')); Fp1_value=str2double(get(handles.Fp1,'String')); Fp2_value=str2double(get(handles.Fp2,'String')); Fs1_value=str2double(get(handles.Fs1,'String')); Fs2_value=str2double(get(handles.Fs2,'String')); wp1=Fp1_value/Fc_value; wp2=Fp2_value/Fc_value; ws1=Fs1_value/Fc_value; ws2=Fs2_value/Fc_value; wp=[wp1,wp2]; ws=[ws1,ws2];

wp11=2*pi*Fp1_value; ws11=2*pi*Fs1_value; wp21=2*pi*Fp2_value; ws21=2*pi*Fs2_value; wp3=[wp11,wp21]; ws4=[ws11,ws21];

if(FilterDesign_value==1)

if((FilterType_value==1)||(FilterType_value==2)) %计算低通或高通巴特沃斯模拟滤波器的阶数N [n,Wn]=buttord(wp1,ws1,Rp_value,Rs_value,'s') set(handles.MinOrderDisplay,'string',num2str(n)) else

if((FilterType_value==3)||(FilterType_value==4))

%计算带通或带阻巴特沃斯模拟滤波器的阶数N

[n,Wn]=buttord(wp,ws,Rp_value,Rs_value,'s') set(handles.MinOrderDisplay,'string',num2str(n)) end end else

if(FilterDesign_value==2)

第 30 页 (共 34 页)

附录2

if((FilterType_value==1)||(FilterType_value==2))

%计算高通或低通切比雪夫I型模拟滤波器的阶数n

[n,Wn]=cheb1ord(wp11,ws11,Rp_value,Rs_value,'s') set(handles.MinOrderDisplay,'string',num2str(n)) else

if((FilterType_value==3)||(FilterType_value==4))

%计算带通或带阻切比雪夫I型模拟滤波器的阶数n

[n,Wn]=cheb1ord(wp3,ws4,Rp_value,Rs_value,'s') set(handles.MinOrderDisplay,'string',num2str(n)) end end else

if(FilterDesign_value==3)

if((FilterType_value==1)||(FilterType_value==2))

%计算高通或低通切比雪夫II型模拟滤波器的阶数n

[n,Wn]=cheb2ord(wp11,ws11,Rp_value,Rs_value,'s') set(handles.MinOrderDisplay,'string',num2str(n)) else

if((FilterType_value==3)||(FilterType_value==4)) %计算带通或带阻切比雪夫II型模拟滤波器的阶数n

[n,Wn]=cheb2ord(wp3,ws4,Rp_value,Rs_value,'s') set(handles.MinOrderDisplay,'string',num2str(n)) end end end end end

MinOrder_value=get(handles.MinOrder,'Value'); if(MinOrder_value==0)

n=str2double(get(handles.Order,'String')) end

switch FilterDesign_value

%选择设计Butterworth滤波器 case 1

%选择滤波器类型 switch FilterType_value %低通滤波器 case 1 [z,p,k]=buttap(n); [b,a]=zp2tf(z,p,k); [h,f]=freqs(b,a);

axes(handles.Magnitude);

if(DisplayType_value==1) plot(f*1000/(2*pi),abs(h)) else plot(f*1000/(2*pi),20*log10(abs(h))) end grid on;

axes(handles.Phase);

plot(f*1000/(2*pi),angle(h)); grid on; %高通滤波器 case 2

[z,p,k]=buttap(n);

第 31 页 (共 34 页)

基于MATLAB的模拟滤波器设计

[b,a]=zp2tf(z,p,k); wch=2*pi*Fc_value; [bh,ah]=lp2hp(b,a,wch); [h,f]=freqs(bh,ah);

axes(handles.Magnitude);

if(DisplayType_value==1) plot(f/(2*pi*10),abs(h)) else plot(f/(2*pi*10),20*log10(abs(h))) end grid on;

axes(handles.Phase);

plot(f/(2*pi*10),angle(h)); grid on; %带通滤波器

case 3 [z,p,k]=buttap(n); [b,a]=zp2tf(z,p,k); w0=sqrt(wp11*wp21); bw=wp21-wp11;

[bp,ap]=lp2bp(b,a,w0,bw); [h,f]=freqs(bp,ap);

axes(handles.Magnitude);

if(DisplayType_value==1) plot(f/(2*pi),abs(h)) else plot(f/(2*pi),20*log10(abs(h))) end grid on;

axes(handles.Phase); plot(f/(2*pi),angle(h)); grid on; %带阻滤波器 case 4

[z,p,k]=buttap(n); [b,a]=zp2tf(z,p,k); w0=sqrt(ws11*ws21); bw=ws21-ws11;

[bt,at]=lp2bs(b,a,w0,bw); [h,f]=freqs(bt,at);

axes(handles.Magnitude);

if(DisplayType_value==1) plot(f/(2*pi),abs(h)) else plot(f/(2*pi),20*log10(abs(h))) end grid on;

axes(handles.Phase); plot(f/(2*pi),angle(h));

grid on; end

%选择设计Chebyshev1滤波器 case 2

%选择滤波器类型 switch FilterType_value %低通滤波器

case 1

[b,a]=cheby1(n,Rp_value,Wn,'s'); [h,f]=freqs(b,a,Wn);

axes(handles.Magnitude);

第 32 页 (共 34 页)

附录2

if(DisplayType_value==1) plot(f/(2*pi),abs(h)) else plot(f/(2*pi),20*log10(abs(h))) end grid on;

axes(handles.Phase); plot(f/(2*pi),angle(h)); grid on; %高通滤波器

case 2

[b,a]=cheby1(n,Rp_value,Wn,'high','s'); [h,f]=freqs(b,a);

axes(handles.Magnitude);

if(DisplayType_value==1) plot(f/(2*pi),abs(h)) else plot(f/(2*pi),20*log10(abs(h))) end grid on;

axes(handles.Phase); plot(f/(2*pi),angle(h)); grid on;

%带通滤波器 case 3

[b,a]=cheby1(n,Rp_value,Wn,'s'); [h,f]=freqs(b,a);

axes(handles.Magnitude);

if(DisplayType_value==1) plot(f/(2*pi),abs(h)) else plot(f/(2*pi),20*log10(abs(h))) end grid on;

axes(handles.Phase); plot(f/(2*pi),angle(h)); grid on; %带阻滤波器 case 4

[b,a]=cheby1(n,Rp_value,Wn,'stop','s'); [h,f]=freqs(b,a);

axes(handles.Magnitude);

if(DisplayType_value==1) plot(f/(2*pi),abs(h)) else plot(f/(2*pi),20*log10(abs(h))) end grid on;

axes(handles.Phase); plot(f/(2*pi),angle(h));

grid on; end

%选择设计Chebyshev2滤波器 case 3

%选择滤波器类型 switch FilterType_value %低通滤波器

case 1

[b,a]=cheby2(n,Rp_value,Wn,'s'); [h,f]=freqs(b,a,Wn);

axes(handles.Magnitude);

if(DisplayType_value==1) plot(f/(2*pi),abs(h))

第 33 页 (共 34 页)

基于MATLAB的模拟滤波器设计

else plot(f/(2*pi),20*log10(abs(h))) end grid on;

axes(handles.Phase); plot(f/(2*pi),angle(h)); grid on; %高通滤波器

case 2

[b,a]=cheby2(n,Rp_value,Wn,'high','s'); [h,f]=freqs(b,a);

axes(handles.Magnitude);

if(DisplayType_value==1) plot(f/(2*pi),abs(h)) else plot(f/(2*pi),20*log10(abs(h))) end grid on;

axes(handles.Phase); plot(f/(2*pi),angle(h)); grid on; %带通滤波器 case 3

[b,a]=cheby2(n,Rp_value,Wn,'s'); [h,f]=freqs(b,a);

axes(handles.Magnitude);

if(DisplayType_value==1) plot(f/(2*pi),abs(h)) else plot(f/(2*pi),20*log10(abs(h))) end grid on;

axes(handles.Phase); plot(f/(2*pi),angle(h)); grid on; %带阻滤波器 case 4

[b,a]=cheby2(n,Rp_value,Wn,'stop','s'); [h,f]=freqs(b,a);

axes(handles.Magnitude);

if(DisplayType_value==1) plot(f/(2*pi),abs(h)) else plot(f/(2*pi),20*log10(abs(h))) end grid on;

axes(handles.Phase); plot(f/(2*pi),angle(h)); grid on; end end end

第 34 页 (共 34 页)

因篇幅问题不能全部显示,请点此查看更多更全内容

Top