基于MatlabGUI的模拟带通滤波器的设计
贾建科,韩团军,朱宁洲
(陕西理工学院,陕西汉中 723003)
摘 要:在传统的模拟带通滤波器设计过程中需要大量繁琐的数值计算,若手工计算则费时费力。在分析模拟带通滤波器设计理论和基于Matlab的图形用户界面(GUI)设计方法的基础上,利用MatlabGUI工具设计了具有通用性交互式切比雪夫模拟带通滤波器分析设计软件,并对软件中各控件回调函数的设计给出了详细的设计方法。用户只需要输入设计滤波器所需参数,然后选择相应的功能菜单,就可以得到滤波器的特性参数,并进行滤波器的性能分析。该设计解决了滤波器设计过程中大量繁琐的数值计算问题,为切比雪夫模拟带通滤波器的研究设计提供了有效的辅助工具。
关键词:模拟带通滤波器;MatlabGUI;回调函数;代码优化
中图分类号:TP391.9 文献标识码:B 文章编号:10042373X(2010)1020058205
DesignofAnalogBand2passFilterBasedonMatlabGUI
JIAJian2ke,HUANTuan2jun,ZHUNing2zhou
(ShaanxiUniversityofTechnology,Hanzhong723003,China)
Abstract:Sincethetraditionaldesignprocessofananalogband2passfilterneedsagreatdealofcomplexnumericcalcula2tionswhichusealotofdesigner′stimeandenergy,auniversalandinteractivesoftware,bywhichusercanresearchandde2signtheanalogband2passChebyshevfilterwithsimulation,iscompletedbyusingtheMatlabGUItooloffilterdesign.Thedesignmethodofactivecallbackfunctioninthesoftwareisgiven.Thedesignisbasedontheanalysisofanalogband2passfil2terdesigntheoryandthedesignmethodofgraphicaluserinterface(GUI)isbasedonMatlab.Userscanobtainthecharacteris2ticparametersofthewantedfilterbyinputingsometargetparametersandchoosingthecorrespondingfunctionmenu,andtheperformance,analysisforthatfiltercanbeconducted.Thus,atoolwhichcanassistusertoresearchanddesignananalogband2passChebyshevfilterandavoidtoomuchcomplexnumericcalculationisfurnished.
Keywords:analogband2passfilter;MatlabGUI;callbackfunction;optimizationofcodec
0 引 言
模拟带通滤波器在信号的检测和传输过程中起着很重要的作用,但在传统模拟带通滤波器的设计过程中需要大量繁琐的数值计算,如果手工计算则费时费力。也有许多公司开发了相关的滤波器设计软件,如AnsoftDesigner,Filterlab等,但是它们大多数使用起
器类型,即可在分析滤波器特性时只需选择相应菜单就
能得出对应的特性。该工具解决了用户在设计Cheby2shev型模拟带通滤波器时大量繁琐的数值计算,不仅可以作为研究设计Chebyshev型模拟带通滤波器的辅助工具,还可以作为设计滤波器等相关课程的辅助教学软件。
1 模拟带通滤波器的设计理论
来不容易上手,而且价格比较昂贵。Matlab中的图形界面编程环境GUIDE为用户开发软件界面提供了强有力的工具。在图形界面编程环境GUIDE下,设计好滤波器的设计工具界面后,对界面上各个控件的回调函数进行编写就能设计出交互式滤波器的分析设计软件。
本文在MatlabGUI基础上设计了针对Chebyshev型模拟带通滤波器的设计分析软件。用户在使用时只需输入要设计的滤波器设计指标值,选择要设计的滤波
收稿日期:2009212220
基金项目:国家自然科学基金资助项目(60875016)
目前,模拟高通滤波器、带通滤波器和带阻滤波器的设计方法都是先将要设计的滤波器技术指标通过某种频率转换关系转换成模拟低通滤波器的技术指标,并依据这些技术指标设计出低通滤波器的转移函数,然后再依据频率转换关系变成所要设计的滤波器的转移函数[1]。工程实际中,设计高通、带通、带阻滤波器的常用方法是借助低通原型滤波器,经频率变换和元件变换得到[2]。
对于模拟带通滤波器的设计,首先是将要设计的模拟带通滤波器的技术指标通过频率变换关系,转换成模
58
《现代电子技术》2010年第10期总第321期
拟低通滤波器的技术指标,其次根据这些技术指标设计出低通切比雪夫滤波器转移函数,最后再依据频率转换关系变成模拟低通切比雪夫滤波器,其具体设计流程如图1所示。
计算机应用技术
波器类型的选择;在滤波器特性曲线分析和参数计算方面,利用图形界面设计工具GUIDE提供的菜单编辑器来设计出分析、计算菜单,并加入相应的功能子菜单。绘制输出滤波器的特性曲线时使用一个坐标轴来实现各个特性曲线的绘制,这样可以使软件界面简洁明了。最后对参数输入和参数输出区进行功能区域划分,利用控件工具箱中的框架按钮,将参数的输入与输出区划分,利用控件工具箱中文本标签对上面相应控件的功能命名。将设计好的界面文件保存运行,就可以看到软件在运行时显示出的实际效果。设计的界面如图2所示,设计出的软件界面由4个部分组成:菜单栏、参数输入区、参数输出区、绘图区。其中,设计的分析菜单包括滤波器的幅频特性、相频特性、阶跃响应、脉冲相应和零极点子菜单,计算菜单包括阶数、零点、极点、增益、转移函数(分子)和转移函数(分母)子菜单。
图1 模拟带通切比雪夫滤波器设计流程
2 MatlabGUI设计工具简介
在Matlab中,图形用户界面(graphicaluserinter2
face,GUI)是Matlab中一个专用于GUI程序设计的向导设计器,而GUI是由各种图形对象,如图形窗口、图轴、菜单、按钮、文本框等构建的用户界面,是人机交互的有效工具和方法。通过GUIDE可以很方便地设计出各种符合要求的图形用户界面[3]。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。GUI设计既能以基本的Matlab程序设计为主,也能以鼠标为主,利用GUIDE工具进行设计,也可综合以上两种方法进行设计[4]。GUIDE主要是一个界面设计工具集。Matlab将所有GUI支持的用户控件都集成在这个环境中并提供界面外观、属性和行为相应方式的设置方法[5]。GUIDE将用户保存设计好的图形用户界面保存在一个FIG资源文件中,同时自动生成包含图形用户界面初始化和组件界面布局控制代码的M文件,这个M文件为实现回调函数的编写提供了一个参考框架。FIG文件是一个二进制文件,包含系列化的图形窗口对象。所有对象的属性都是用户创建图形窗口时保存的属性。该文件最主要的功能是对象句柄的保存。M文件包含GUI设计、控制函数及控件的回调函数,主要用来控制GUI展开时的各种特征[6]。该文件基本上可以分为GUI初始化和回调函数2个部分,控件的回调函数可根据用户与GUI的具体交
GUI包含许多可以使软件终端与用户界面进行交
图2 软件界面
4 应用程序M文件的设计
互行为分别调用。3 软件界面设计
互的用户界面组件,GUI实现的任务之一就是控制组
件如何响应用户的行为。Matlab通过创建应用程序M文件为GUI控制程序提供一个框架。所有代码(包括回调函数)都包含在应用程序M文件中[7],即完成了图形界面的设计后,应用程序设计的主要工作是控件回调函数的设计。下面讨论程序设计流程及控件回调函数的设计。4.1 程序设计流程
软件运行时,系统首先初始化。接着判断输入的滤波器参数及其类型是否正确,不正确重新输入,正确即可选择相应的功能菜单,实现相应的功能。程序具体流
59
在软件设计时,通过文本编辑框控件来接收用户输入的滤波器设计指标值,考虑到分析滤波器时输出的参数较多,如果用一一对应的文本框来接收输出的参数值,则使软件界面在设计中难以布局,并影响了界面的美观,所以只用一个文本编辑框控件来实现多个参数的输出。在滤波器类型选择控件方面,因为只用2种滤波器来进行选择设计,所以使用两个单选按钮,以实现滤
软件技术程图如图3所示。4.2 控件回调函数设计
贾建科等:基于MatlabGUI的模拟带通滤波器的设计
); [b,a]=cheby1(n,Rp,Wn,′s′
%得到滤波器的转移函数和分子、分母系数
W=linspace(1,33Wo,1000)323pi;
%等分横坐标轴上点
H=freqs(b,a,W);%求出幅频响应magH=abs(H);%求出幅值
);plot(W/(23pi),203log10(magH),′b′
%绘制出幅频响应特性曲线
);xlabel(′频率(Hz)′%加注横坐标轴标识);ylabel(′幅度(dB)′%加注纵坐标轴标识
);title(′切比雪夫1型模拟带通滤波器幅频特性曲线′
%加注所绘制的滤波器的特性曲线名称
line(Wsl,2Rs,′marker′,′.′,′markeredgecolor′,′r′,′marker2size′,10)
line(Wsl,2Rp,′marker′,′.′,′markeredgecolor′,′r′,′marker2size′,10)
line(Wsh,2Rp,′marker′,′.′,′markeredgecolor′,′r′,′mark2ersize′,10)
line(Wsh,2Rs,′marker′,′.′,′markeredgecolor′,′r′,′mark2ersize′,10)%标记出特殊点
set(gca,′XTickMode′,′manual′,′XTick′,[0,Wsl,Wsh,33);Wo]′
set(gca,′YTickMode′,′manual′,′YTick′,[2Rs,2Rp,0,);1]′%绘制出特殊点的纵横坐标对应栅格线ylim([21500]);xlim([0Wo33]);%设定绘图范围gridonelse
)[n,Wn]=cheb2ord(Wp,Ws,Rp,Rs,′s′
);[b,a]=cheby2(n,Rp,Wn,′s′
W=linspace(1,33Wo,400)323pi;H=freqs(b,a,W);magH=abs(H);
);plot(W/(23pi),203log10(magH),′b′
);xlabel(′频率(Hz)′);ylabel(′幅度(dB)′
);title(′切比雪夫2型模拟带通滤波器幅频特性曲线′
line(Wsl,2Rs,′marker′,′.′,′markeredgecolor′,′r′,′marker2)size′,10
line(Wsl,2Rp,′marker′,′.′,′markeredgecolor′,′r′,′marker2)size′,10
line(Wsh,2Rp,′marker′,′.′,′markeredgecolor′,′r′,′mark2ersize′,10)
line(Wsh,2Rs,′marker′,′.′,′markeredgecolor′,′r′,′mark2ersize′,10)
set(gca,′XTickMode′,′manual′,′XTick′,[0,Wsl,Wsh,33);Wo]′
set(gca,′YTickMode′,′manual′,′YTick′,[2Rs,2Rp,0,);1]′
gridonend
该软件的控件回调函数包括“确定”按钮控件回调函数“、清除”按钮控件回调函数、滤波器类型选择控件回调函数“、分析”菜单下各子菜单功能回调函数和“计算”菜单下各子菜单功能控回调函数的设计。限于篇幅,仅讨论“分析”菜单下各个菜单功能回调函数和“计算”菜单下各功能回调函数的设计。
图3 程序设计流程图
4.2.1 “分析”菜单下的各子菜单功能回调函数设计
在“分析”菜单下应包含“幅频特性”、“相频特性”、“阶跃响应”“脉冲响应”、“、零极点图”子菜单,分别用来实现幅频特性曲线、相频特性曲线、阶跃响应、脉冲响应、零极点图的绘制。其中“幅频特性”,菜单用来绘制给定参数的滤波器的幅频特性曲线,在程序设计过程中首先使用Matlab中的axes函数,得到坐标轴控件的句柄,以便绘制特性曲线。在得到用户输入的设计指标值后,利用ifelse语句来判断用户所选择的是哪一种滤波器类型,在阶数和截止频率的计算中,利用信号处理工具箱中的cheb1ord和cheb2ord函数来计算,再用che2by1和cheby2函数来计算转移函数的分子、分母,设计出用户所要求的滤波器。在计算滤波器幅值时,利用freqs函数计算出转移函数的响应[8]。在绘制滤波器幅频特性曲线时,利用plot函数来完成,即在plot函数的参数中设置相关值,以完成幅频特性曲线的绘制。为了更好地观察到滤波器的设计是否达到相关的设计要求,利用line函数在坐标上标识出通带最大损耗、阻带最小损耗等点,这样可以直观地观察到所设计出的滤波器是否符合用户提出的要求,其具体程序如下:
axes(handles.myAxes);%得到坐标轴控件句柄
));B=str2num(get(handles.dk,′String′
));Wo=str2num(get(handles.zxpl,′String′
));Wsl=str2num(get(handles.zdxxpl,′String′));Wsh=str2num(get(handles.zdsxpl,′String′));Rp=str2num(get(handles.tdsj,′String′));Rs=str2num(get(handles.zdsj,′String′
%得到用户输入的设计指标值
Wp=[Wo2B/2Wo+B/2]323pi;%求出通带上下限频率Ws=[WslWsh]323pi;%求出阻带上下限频率(()==get(handles.ra2ifgethandles.radiobutton3,′Value′
))diobutton3,′Max′%判断用户所设计的滤波器类型
) [n,Wn]=cheb1ord(Wp,Ws,Rp,Rs,′s′
%得到滤波器的阶数和截止频率
在“分析”菜单下“相频特性”子菜单用来绘制给定参数的滤波器的相频特性曲线。相频特性曲线的在程序设计过程与幅频特性曲线的程序设计比较相似,只是在求得幅值后加一相位计算函数angle来求相位角。在plot函数中将纵坐标参数换为求出的相位角变量即可完成相频特性曲线的绘制。
对于“阶跃响应”回调函数的程序设计,要将计算出的阶跃响应绘制在坐标轴控件界面上,不能利用信号处理工具箱中step函数直接求得。因为若用该函数会使绘制出的阶跃响应曲线在一个新打开的窗口上,而软件
60
《现代电子技术》2010年第10期总第321期
在界面设计时,所求滤波器的所有特性曲线都共用一个坐标轴来绘制;在程序设计时利用tf函数将计算出的滤波器转移函数的分子、分母系数生成转移函数,再利用阶跃响应函数step对求出的转移函数变量求解出阶跃响应值;最后利用plot函数绘制出所求滤波器的阶跃响应曲线,这样即可完成阶跃响应曲线在坐标轴上的绘制。
“脉冲响应”回调函数的程序设计与“阶跃响应”回调函数的程序设计十分相近,只是将上述程序中的阶跃响应函数step换成脉冲响应函数impluse,并在对应的时间做相应的调整即可完成脉冲响应回调函数的编写。
“零极点图”回调函数的程序设计与以上两个子菜单的回调函数设计大致相同,程序的设计结构与前面几个菜单的回调函数的设计基本一致。在求得转移函数的分子、分母系数后,利用tf2zp函数求出所设计出的滤波器的零点、极点、增益,再用real函数和imag函数求出零点、极点的实部和虚部,最后利用绘图函数plot绘制出系统的零极点图。
4.2.2 “计算”菜单下各功能回调函数的编写
计算机应用技术
else
)[n,Wn]=cheb2ord(Wp,Ws,Rp,Rs,′s′
);[b,a]=cheby2(n,Rp,Wn,′s′
W=linspace(1,33Wo,1000)323pi;H=freqs(b,a,W);magH=abs(H);num=[b];den=[a];
sys=tf(num,den);
[Z,P,K]=tf2zp(num,den);set(handles.editssc,′string′,num2str(n));end
“阶数”“、零点”“、极点”“、增益”“、转移函数分子系数”“、转移函数分母系数”子菜单中回调函数的程序设计基本一样,只是在输出值时参数名称不同。将阶数子菜单程序中set语句的“n”换成相应菜单对应的变量名即可实现相应的功能。在完成了各个控件的回调函数编写后,对软件的功能进行逐一调试,以保证每项功能都能正确响应用户的操作。4.3 代码优化在调试完软件的各项功能后,应对所设计的软件代码进行优化。打开软件中使用次数比较多的程序段,利用Matlab中的程序执行耗时剖析功能函数profile指令对程序中执行耗时情况进行分析,之后进行改进,以提高执行效率[9]。打开设计出的软件主程序M文件,对已经优化过且使用次数较多的程序段,应另外编写成函数形式,供需要的控件回调函数调用,在需要调用的相关控件回调函数下只需要填写相应的函数名称就能实现其相应的功能[10]。
对于在界面设计时没有用到的控件,对应生成的代码可以直截删去。最后在Matlab环境下,运行该程序,即可实现模拟带通滤波器的设计和性能分析。利用该软件对模拟带通滤波器进行了分析,其部分结果如图4、图5所示。
“计算”菜单下包含了“阶数”、“零点”、“极点”、“增
益”“、转移函数分子系数”。其中“,转移函数分母系数”菜单分别用来计算所设计的滤波器阶数、零点、极点、增益、转移函数分子系数、转移函数分母系数“;阶数”菜单用来计算所输入参数滤波器的阶数,并将它输出到输出参数框。在程序的设计中,首先判断用户所选择滤波器的类型,然后将计算出的参数用set函数输出到输出文本区。因为极点、零点值可能为复数,而文本编辑框的数据类型为数值型,所以在输出时,利用num2str函数将得到的值进行格式转化,以防止出现复数值只能显示出实部来。“阶数”菜单程序如下:
));B=str2num(get(handles.dk,′String′
));Wo=str2num(get(handles.zxpl,′String′
));Wsl=str2num(get(handles.zdxxpl,′String′));Wsh=str2num(get(handles.zdsxpl,′String′));Rp=str2num(get(handles.tdsj,′String′));Rs=str2num(get(handles.zdsj,′String′
%得到用户输入的设计指标值
Wp=[Wo2B/2Wo+B/2]323pi;Ws=[WslWsh]323pi;
)==get(handles.ra2if(get(handles.radiobutton3,′Value′
))diobutton3,′Max′
)[n,Wn]=cheb1ord(Wp,Ws,Rp,Rs,′s′
);[b,a]=cheby1(n,Rp,Wn,′s′
W=linspace(1,33Wo,1000)323pi;H=freqs(b,a,W);magH=abs(H);sys=tf(num,den);
[Z,P,K]=tf2zp(num,den);set(handles.editssc,′string′,num2str(n));
%将计算出的滤波器阶输出
图4 滤波器幅频特性和极点分析图
61
软件技术贾建科等:基于MatlabGUI的模拟带通滤波器的设计
参 考 文 献
[1]胡广书.数字信号处理[M].北京:清华大学出版社,2003.[2]郑君里,应启珩,杨为理.信号与系统(下册)[M].2版.北
京:高等教育出版社,2000.
[3]陈亮,郝卫东.基于Matlab的滤波器分析界面设计[J].现代
电子技术,2009,32(10):39241.
[4]张志勇.精通Matlab6.5版[M].北京:北京航空航天大学
出版社,2003.
[5]李海涛,邓樱.Matlab程序设计教程[M].北京:高等教育出
版社,2002.
[6]施晓红,周佳.精通GUI图形界面编程[M].北京:北京大学
出版社,2003.
[7]李钟慎.基于GUIDE设计CAI课件的GUI[J].电气电子教
图5 滤波器的零极点图
学学报,2002,24(6):91293.
[8]印金国.Matlab可视化界面设计与控件使用[J].电脑编程
图4为切比雪夫2型模拟带通滤波器的幅频特性和极点分析计算结果;图5为切比雪夫1型模拟带通滤
波器零极点分析计算结果。分析结果表明,该软件有助于模拟带通滤波器的分析设计。5 结 语
技巧与维护,2007(1):30235.
[9]LOPEZB,YILLEGASD,ALCANTARAD,etal.Apack2
ageforfilterdesignbasedonMatlab[J]FrontiersinEduca2tionConference,2001,31(1):2172221.
[10]李向阳,刘晓晖,邹显炳.耦合谐振带通滤波器带外特征及应用[J].现代电子技术,2009,32(24):74277.
[11]王靖,李永全.数字椭圆滤波器的Matlab设计与实现[J].
该文在分析模拟滤波器设计理论的基础上,设计了基于MatlabGUI的模拟带通滤波器设计软件。利用该软件可以分析滤波器的幅频特性、相频特性和零,极点分布特性等。如何将该课题的研究与实际的模拟滤波器设计整合在一起,将是下一步面临的重要工作。同时也可利用该设计方法设计功能更大的滤波器分析设计软件,使该软件具有更大的实用价值。
现代电子技术,2007,30(6):425,8.
[12]赵辉.无源滤波器与耦合滤波器设计[D].西安:西安电子
科技大学,2009.
[13]张亚,黄克平.有源模拟带通滤波器的设计[J].电子科技,
2009,22(1):9212.
[14]宋琦.并联型有源滤波及无功补偿的研究[D].武汉:华中
科技大学,2005.
(上接第57页)
参 考 文 献
[1]张强.Excel2007与VBA编程从入门到精通[M].北京:电
工业出版社,2007.
[7]郭珺.Office2007实用技巧四合一[M].北京:电子工业出
版社,2009.
[8]马维峰.Office2007的VBA以及Office开发的随想[ED/
OL].[2008206206].http://www.builder.com.cn/2008/0606/911988.shtml.
[9]佚名.Excel2007Application对象开发指南[ED/OL].
[2009202203].
http://www.vbafan.com/2009/02/03/
delvelopers2guide2to2the2Excel20072application2object.[10]XAUTCHAO.VBA知识普及[ED/OL].[2008211209].
http://www.jacktown.net/dp/dp2bbsthread218.html.[11]陈浩.智能文档报表系统的设计与实现[D].武汉:华中科
子工业出版社,2008.
[2][美]杰莱,斯太德.Excel2007VBA与宏完全剖析[M].郭
兵英,译.北京:人民邮电出版社,2008.
[3]魏汪洋.Excel2007VBA高级编程宝典[M].北京:电子工
业出版社,2009.
[4][美]格林.Excel2007VBA参考大全[M].ExcelHome,译.
北京:人民邮电出版社,2009.
[5]EDBOTT,WOODY.Office2007应用大全[M].张乐华,朱
珂,许晓哲,等译.北京:人民邮电出版社,2008.
[6]卞诚君,刘亚朋.Office2007完全应用手册[M].北京:机械
技大学,2006.
作者简介:刘 铭 男,1973年出生,四川仪陇人,硕士研究生,副教授。主要研究方向为网页设计、计算机教育、计算机辅助
设计。
62
因篇幅问题不能全部显示,请点此查看更多更全内容