基于Matlab GUI的模拟带通滤波器的设计
菜单。
4应用程序M文件的设计
GUI包含许多可以使软件终端与用户界面进行交互的用户界面组件,GUI实现的任务之一就是控制组件如何响应用户的行为。Matlab通过创建应用程序M文件为GUI控制程序提供一个框架。所有代码(包括回调函数)都包含在应用程序M文件中,即完成了图形界面的设计后,应用程序设计的主要工作是控件回调函数的设计。下面讨论程序设计流程及控件回调函数的设计。
4.1 程序设计流程
软件运行时,系统首先初始化。接着判断输入的滤波器参数及其类型是否正确,不正确重新输入,正确即可选择相应的功能菜单,实现相应的功能。程序具体流程图如图3所示。
4.2 控件回调函数设计
该软件的控件回调函数包括“确定”按钮控件回调函数、“清除”按钮控件回调函数、滤波器类型选择控件回调函数、“分析”菜单下各子菜单功能回调函数和“计算”菜单下各子菜单功能控回调函数的设计。限于篇幅,仅讨论“分析”菜单下各个菜单功能回调函数和“计算”菜单下各功能回调函数的设计。
4.2.1 “分析”菜单下的各子菜单功能回调函数设计
在“分析”菜单下应包含“幅频特性”、“相频特性”、“阶跃响应”、“脉冲响应”、“零极点图”子菜单,分别用来实现幅频特性曲线、相频特性曲线、阶跃响应、脉冲响应、零极点图的绘制。其中,“幅频特性”菜单用来绘制给定参数的滤波器的幅频特性曲线,在程序设计过程中首先使用Matlab中的axes函数,得到坐标轴控件的句柄,以便绘制特性曲线。在得到用户输入的设计指标值后,利用if else语句来判断用户所选择的是哪一种滤波器类型,在阶数和截止频率的计算中,利用信号处理工具箱中的cheblord和cheb2ord函数来计算,再用chebyl和theby2函数来计算转移函数的分子、分母,设计出用户所要求的滤波器。在计算滤波器幅值时,利用freqs函数计算出转移函数的响应。在绘制滤波器幅频特性曲线时,利用plot函数来完成,即在plot函数的参数中设置相关值,以完成幅频特性曲线的绘制。为了更好地观察到滤波器的设计是否达到相关的设计要求,利用line函数在坐标上标识出通带最大损耗、阻带最小损耗等点,这样可以直观地观察到所设计出的滤波器是否符合用户提出的要求,其具体程序如下:
在“分析”菜单下“相频特性”子菜单用来绘制给定参数的滤波器的相频特性曲线。相频特性曲线的在程序设计过程与幅频特性曲线的程序设计比较相似,只是在求得幅值后加一相位计算函数angle来求相位角。在plot函数中将纵坐标参数换为求出的相位角变量即可完成相频特性曲线的绘制。
对于“阶跃响应”回调函数的程序设计,要将计算出的阶跃响应绘制在坐标轴控件界面上,不能利用信号处理工具箱中step函数直接求得。因为若用该函数会使绘制出的阶跃响应曲线在一个新打开的窗口上,而软件在界面设计时,所求滤波器的所有特性曲线都共用一个坐标轴来绘制;在程序设计时利用tf函数将计算出的滤波器转移函数的分子、分母系数生成转移函数,再利用阶跃响应函数step对求出的转移函数变量求解出阶跃响应值;最后利用plot函数绘制出所求滤波器的阶跃响应曲线,这样即可完成阶跃响应曲线在坐标轴上的绘制。
“脉冲响应”回调函数的程序设计与“阶跃响应”回调函数的程序设计十分相近,只是将上述程序中的阶跃响应函数step换成脉冲响应函数impluse,并在对应的时间做相应的调整即可完成脉冲响应回调函数的编写。
“零极点图”回调函数的程序设计与以上两个子菜单的回调函数设计大致相同,程序的设计结构与前面几个菜单的回调函数的设计基本一致。在求得转移函数的分子、分母系数后,利用tf2zp函数求出所设计出的滤波器的零点、极点、增益,再用real函数和imag函数求出零点、极点的实部和虚部,最后利用绘图函数plot绘制出系统的零极点图。
4.2.2 “计算”菜单下各功能回调函数的编写
“计算”菜单下包含了“阶数”、“零点”、“极点”、“增益”、“转移函数分子系数”。其中,“转移函数分母系数”菜单分别用来计算所设计的滤波器阶数、零点、极点、增益、转移函数分子系数、转移函数分母系数;“阶数”菜单用来计算所输入参数滤波器的阶数,并将它输出到输出参数框。在程序的设计中,首先判断用户所选择滤波器的类型,然后将计算出的参数用set函数输出到输出文本区。因为极点、零点值可能为复数,而文本编辑框的数据类型为数值型,所以在输出时,利用num2str函数将得到的值进行格式转化,以防止出现复数值只能显示出实部来。“阶数”菜单程序如下:
“阶数”、“零点”、“极点”、“增益”、“转移函数分子系数”、“转移函数分母系数”子菜单中回调函数的程序设计基本一样,只是在输出值时参数名称不同。将阶数子菜单程序中set语句的“n”换成相应菜单对应的变量名即可实现相应的功能。在完成了各个控件的回调函数编写后,对软件的功能进行逐一调试,以保证每项功能都能正确响应用户的操作。
- 基于Matlab的无失真模拟滤波器设计(04-19)
- 基于Matlab的IIR数字滤波器设计方法比较及应用(07-15)
- 基于Matlab的雷达系统仿真软件包设计与实现(09-16)
- 基于Matlab的FIR数字滤波器设计(10-07)
- 基于Matlab的孤立逆变电源设计方案(09-17)
- 13款逆变电源的设计技术及具体应用案例(07-07)