基于MATLAB+GUI的滤波器设计软件设计 下载本文

数字滤波器的设计与仿真

图7 设计总框图 1、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

图8 IIR滤波器选择 图 9 FIR滤波器选择 2、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))

4

数字滤波器的设计与仿真

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') end end

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

图10低通、高通滤波器频率参数输入 图11 低通、高通滤波器频率参数输入 3、Min Order和Custom Orde按钮

在设计滤波器阶数时,可选择自定义阶数和利用最小阶数设计滤波器,并显示最小阶数 ,这里涉及的控件Min Order和Custom Order,其回调函数如下: (1)按钮Min Order

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

4

数字滤波器的设计与仿真

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

图12 使用最小阶数设计Filter 图13 使用自定义阶数设计Filter 4、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]之间 Fs_value=str2double(get(handles.Fs,'String')); Fp1_value=str2double(get(handles.Fp1,'String'));

4

数字滤波器的设计与仿真

wp1=2*Fp1_value/Fs_value;

%如果不在[0,1]之间,显示输入错误对话框 if(wp1>=1)

errordlg(‘wp1=2*Fp1/Fs,归一化频率不在【0,1】之间,请输入正确的参数’,‘错误信息’) end

图 14 输入参数错误信息框显示 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)立即显示滤波器的幅频特性和相频特性图,其中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 7、Quit按钮

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

function Quit_Callback(hObject, eventdata, handles)

4