“滤波器设计软件”设计基于MATLABGUI设计滤波器软件设计一MATALBGUI介绍MATALB可以创建图形用户界面GUI(GraphicalUserInterface),它是用户和计算机之间交流的工具。MATLAB将所有GUl支持的用户控件都集成在这个环境中并提供界面外观、属性和行为响应方式的设置方法,随着版本的提高,这种能力还会不断加强。而且具有强大的绘图功能,可以轻松的获得更高质量的曲线图。1、IIR滤波器设计原理滤波器的设计质上是寻找一个既能物理实现,又能满足给定频率特性指标要求的系统传输函数。IIR滤波器一般采用递归型的结构,系统的输入与输出服从N阶差分方程:相应的传输函数为:二、IIR滤波器设计原理2、IIR滤波器设计思想•将设计指标归一化处理•根据归一化频率,确定最小阶数N和频率参数Wn。可供选用的阶数选择函数有:buttord,cheblord,cheb2ord,ellipord等•运用最小阶数N设计模拟低通滤波器原型。根据最小阶数直接设计模拟低通滤波器原型,用到的函数有:butter,chebyl,cheby2,ellip和bessel•再用freqz函数验证设计结果3、IIR滤波器设计编程实现•Fs=22050;Fp1=3400;Fs1=5000;Rp=3;Rs=20;%设计指标•wp1=2*Fp1/Fs;ws1=2*Fs1/Fs;%求归一化频率•%确定butterworth的最小阶数N和频率参数Wn[n,Wn]=buttord(wp1,ws1,Rp,Rs);•w=blackman(n+1);%确定窗口值•b=fir1(n,wn,w);%确定传递函数的分母系数•plot(f,20*log(abs(h)))%画幅频响应图•plot(f,angle(h));%画相频响应图•[h,f]=freqz(b,1);%生成频率响应参数软件效果显示三、FIR滤波器设计原理1、FIR滤波器设计原理寻找一个FIR滤波器,使其频率响应H(ejω)逼近理想FIR滤波器的频率响应Hd(ejω).10()()()NjjnjdnHehneHe1()2jjnddhnHeed()()()dhnwnhnw(n):窗函数序列要选择合适的形状和长度2、FIR滤波器设计思想•将设计指标归一化处理•根据归一化频率,选择函数buttord确定最小阶数N和频率参数Wn•确定窗口值。Windows指定窗函数类型,默认为Hamming窗;可选Hanning、Hamming、Blackman、triangle、bartlett等窗•确定传递函数的分母系数。函数fir1的调用格式为B=fir1(n,Wn,'ftype',Windows),同时选择在此函数中选择要设计的滤波器的类型。•再用freqz函数验证设计结果3、FIR滤波器设计编程实现•Fs=22050;Fp1=3400;Fs1=5000;Rp=3;Rs=20;N=75%设计指标•wp1=2*Fp1/Fs;ws1=2*Fs1/Fs;%求归一化频率•%确定butterworth的最小阶数N和频率参数Wn[n,Wn]=buttord(wp1,ws1,Rp,Rs);•[B,A]=butter(N,Wn);%确定传递函数的分子、分母系数•[h,f]=freqz(b,a,Nn,Fs_value);%生成频率响应参数•plot(f,20*log(abs(h)))%画幅频响应图•plot(f,angle(h));%画相频响应图软件效果显示四、基于MatlabGUI的数字滤波器设计思路及实现•MATLAB提供了编写图形用户界面的功能。所谓图形用户界面,简称为GUI•GUI设计面板是GUI设计工具应用的平面,面板上部提供了菜单和常用工具按钮,左边提供了多种如命令按钮、单选按钮、可编辑文本框、静态文本框、弹出式菜单等•GUI设计面板是GUI设计工具应用的平面,面板上部提供了菜单和常用工具按钮,左边提供了多种如命令按钮、单选按钮、可编辑文本框、静态文本框、弹出式菜单等FilterDisignIIR滤波器FIR滤波器BoxcarBartlettBlackmanHanningHammingKaiserButterworthChebyshevⅠChebyshevⅡEllipse选择IIR或者FIRFilter设计Butterworth等Filter选择窗口选择1、滤波器设计总框图2、“滤波器设计软件”设计的GUI界面设计MATLABGUI设计界面“滤波器设计软件”GUI界面设计2、设计界面功能显示选择IIR或者FIRFilter选择Butterworth、ChebyshevⅠ、ChebyshevⅡ、Ellipse滤波器选择Boxar、Bartlett、Blackman、Hanning、Hamming、Kaiser窗口选择Lowpass、Highpass、Bandpass、Bandstop四种类型选择图形显示Linear、Logarithmic两种类型最小阶数设计滤波器显示最小阶数选择自定义阶数阶数输入框抽样频率Fs通带临界频率Fp1、Fp2滤波器阻带临界频率Fst1、Fst2最大衰减Rp最小衰减Rs幅频响应显示相频响应显示退出设计界面手动运行自动运行(1)DigitalFilter下拉菜单functionDigitalFilter_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Ⅰ等)选项屏蔽elseset(handles.FilterDesign,'enable','off');set(handles.Windows,'enable','on')end3、按钮实现编程选择IIR屏蔽Windows选择选择FIR屏蔽FilterDesign选择(2)FilterType下拉菜单functionFilterType_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');endend选择低通或者高通滤波器时,隐藏相应的带通和带阻的第二个临界频率选择带通或者带阻滤波器时,显示相应的带通和带阻的第二个临界频率(3)MinOrder和CustomOrde按钮选择使用最小阶数设置时,屏蔽自定义阶数的输functionMinOrder_Callback(hObject,eventdata,handles)MinOrder_value=get(handles.MinOrder,'Value');if(MinOrder_value==1)set(handles.Order,'visible','off');elseset(handles.Order,'visible','on');end选择自定义阶数时,显示阶数输入框functionCustomOrderButton_Callback(hObject,eventdata,handles)CustomOrderButton_value=get(handles.CustomOrderButton,'Value');if(CustomOrderButton_value==0)set(handles.Order,'visible','off');elseset(handles.Order,'visible','on');end(4)Fp1、Fp2、Fst1、Fst2文本编辑框参数输入时,在输入抽样频率Fs的前提下,判断滤波器通带临界频率(Fp1、Fp2)、滤波器阻带临界频率(Fst1、Fst2)的归一化频率wp1、wp2、ws1、ws1是否在[0,1]之间,如不正确显示错误对话框functionFp1_Callback(hObject,eventdata,handles)%检查输入的通带临界频率Fp1的归一化频率是否在[0,1]之间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(5)Run按钮根据输入的参数显示设计的滤波器的幅频特性和相频特性图,其程序如下:functionRun_Callback(hObject,eventdata,handles)%点击Run立即运行AutoChoose,m文件,实现滤波器设计程序AutoChoose(handles)(6)AutoRun按钮当选择了AutoRun按钮时,能够根据所选的IIR的滤波器(Butterworth、ChebyshevⅠ等)、FIR的窗口选项、图形显示类型(Linear、Logarithmic)立即显示滤波器的幅频特性和相频特性图,其中IIR的滤波器(Butterworth、ChebyshevⅠ等)的回调函数程序如下:functionFilterDesign_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按钮退出滤波器设计窗口,其程序如下:functionQuit_Callback(hObject,eventdata,handles)%点击Quti按钮退出Close4、运行和结果显示在图形界面下,按“运行”,在FiterDesign界面,选择要设计的滤波器