? 设计的滤波器的幅频响应和幅频响应显示在界面中
MATLAB中的属性控制非常多, 要设置哪些对象的属性, 哪些可以不设置, 都需针对具体问题具体分析解决。接下来再通过控件布置编辑器来设置控件的对齐方式及间距等, 以完善界面功能。按要求设计好的“滤波器设计软件”主面板见图4, 共包括5个区域:
? 图形区:用于显示各模块的仿真曲线
? 参数设区:由个静态文本框和个编辑框以及类型选择按纽组成, 实时的进行系统参
数的设定和滤波器原型的选定
? 对象模型区:由下拉菜单选定数字滤波器类型, 当用户的输人参数发生变化时, 可
通过单击响应的“ Run”按钮, 实现设计结果的实时刷新与显示
? 数据显示区:对应于图形显示结果, 实时显示滤波器阶次和分子分母多项式系数。
3.3基于MATLAB GUI的数字滤波器设计实现
3.3.1 “滤波器设计软件”GUI界面设计
在matlab命令行窗口中输入guide或点击matlab界面上面的菜单中的图标,打
开gui设计的图形界面如图5 。然后拖入所要的图形控件,按需要修改外观和空间属性,直至满足要求,如图6。设置属性点击guide界面上方的Run按钮,会生成一个fig文件,一个m文件,其中fig文件就是界面的图形,m文件是界面的回调函数,在m文件里每个控件的回调函数都已经自动生成,控件要做的工作就是在文件框架下定义某些特殊要求的状态并补充完整回调函数场, 使单击控件时激活回调程序完成一定的功能。 3.3.1 “滤波器设计软件”回调函数编写 设计总框图如图7所示
17
? Digital Filter下拉菜单
在下拉Digital Filter菜单里选择IIR和FIR滤波器设计
选择IIR或者FIR屏蔽相应的选项,当选择IIR选项时,使FIR的Windows的选择窗口不能使用,程序和效果图(图8 、图9 )如下:
function DigitalFilter_Callback(hObject, eventdata, handles) %读取此时选择的滤波器选择,“IIR、FIR”
DigitalFilter_value=get(handles.DigitalFilter,'Value'); %当选择了IIR时,使窗口选项屏蔽
if(DigitalFilter_value==1) set(handles.FilterDesign,'enable','on'); set(handles.Windows,'enable','off')
%当选择了FIR时,使IIR的滤波器(Butterworth、 ChebyshevⅠ等)选项屏蔽 else
set(handles.FilterDesign,'enable','off'); set(handles.Windows,'enable','on') end
Filter Type下拉菜单
? 在下拉菜单Filter Type中选择滤波器类型
选择低通或者高通滤波器时,隐藏相应的带通和带阻的第二个临界频率,使其频率参数不能输入,程序和效果图(图10 、图11 )如下:
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')s
et(handles.text6,'visible','on');set(handles.text10,'visible','on');
end
18
end
? Min Order和Custom Orde按钮
在设计滤波器阶数时,可选择自定义阶数和利用最小阶数设计滤波器,并显示最小阶数 ,这里涉及的控件Min Order和Custom Order,其回调函数如下: (1)按钮Min Order
选择使用最小阶数设置时,屏蔽自定义阶数的输入,如图12: 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
选择自定义阶数时,显示阶数输入框,如图13
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控件中的程序如下: ①显示最小阶数
set(handles.MinOrderDisplay,'string',num2str(n)) ②当选择了自定义阶数时,读取自定义阶数 if(MinOrder_value==0)
n=str2double(get(handles.Order,'String'))
end
? Fp1、Fp2、Fst1、Fst2文本编辑框
参数输入时,在输入抽样频率Fs的前提下,判断滤波器通带临界频率(Fp1、Fp2)、滤波器阻带临界频率(Fst1、Fst2)的归一化频率wp1、 wp2、ws1、ws1是否在[0,1]之间,如不正确显示错误对话框,其程序和效果图(图14)如下: function Fp1_Callback(hObject, eventdata, handles) %检查输入的通带临界频率Fp1的归一化频率是否在[0,1]之间
19
Fs_value=str2double(get(handles.Fs,'String')); Fp1_value=str2double(get(handles.Fp1,'String')); wp1=2*Fp1_value/Fs_value;
%如果不在[0,1]之间,显示输入错误对话框 if(wp1>=1)
errordlg(‘wp1=2*Fp1/Fs,归一化频率不在【0,1】之间,请输入正确的参数’,‘错误信息’) end
图 14 输入参数错误信息框显示 Fp2、Fst1、Fst2的回调函数同理编程
? Run按钮
根据输入的参数显示设计的滤波器的幅频特性和相频特性图,其程序如下: function Run_Callback(hObject, eventdata, handles) %点击Run立即运行AutoChoose,m文件,实现滤波器设计程序 AutoChoose(handles) ? Auto Run按钮
当选择了Auto Run按钮时,能够根据所选的IIR的滤波器(Butterworth、 ChebyshevⅠ等)、FIR的窗口选项、图形显示类型(Linear、Logarithmic)立即显示滤波器的幅频特性和相频特性图,其中IIR的滤波器(Butterworth、 ChebyshevⅠ等)的回调函数程序如下:
function FilterDesign_Callback(hObject, eventdata, handles) AutoRun_value=get(handles.AutoRun,'Value');
%当选择了Filter(Butterworth、 ChebyshevⅠ等)中一种Filter运行AutoChoose,m文件
if(AutoRun_value==1) AutoChoose(handles) end ? Quit按钮
20