1、“滤波器设计软件滤波器设计软件”设计设计 基于MATLAB GUI设计滤波器软件设计一 MATALB GUI介绍 MATALB 可以创建图形用户界面GUI ( GraphicalUser Interface) ,它是用户和计算机之间交流的工具。MATLAB 将所有GUl 支持的用户控件都集成在这个环境中并提供界面外观、属性和行为响应方式的设置方法,随着版本的提高,这种能力还会不断加强。而且具有强大的绘图功能,可以轻松的获得更高质量的曲线图。1、IIR滤波器设计原理 滤波器的设计质上是寻找一个既能物理实现,又能满足给定频率特性指标要求的系统传输函数。IIR滤波器一般采用递归型的结构,系统的输入与
2、输出服从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*Fp
3、1 /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()(
4、)()Njj njdnH eh n eHe1( )2jj nddh nHeed( )( )( )dh nw n h nw(n):窗函数序列要选择合适的形状和长度2、FIR滤波器设计思想 将设计指标归一化处理 根据归一化频率,选择函数buttord确定最小阶数N 和频率参数Wn 确定窗口值。Windows指定窗函数类型,默认为Hamming窗;可选Hanning、Hamming、Blackman、triangle、bartlett等窗 确定传递函数的分母系数。函数fir1的调用格式为B= fir1(n, Wn, ftype, Windows),同时选择在此函数中选择要设计的滤波器的类型。 再用f
5、reqz 函数验证设计结果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); %画相频响应图软件
6、效果显示四、基于四、基于Matlab GUI的数字滤波器的数字滤波器设计思路及实现设计思路及实现 MATLAB提供了编写图形用户界面的功能。所谓图形用户界面, 简称为GUI GUI设计面板是GUI设计工具应用的平面,面板上部提供了菜单和常用工具按钮,左边提供了多种如命令按钮、单选按钮、可编辑文本框、静态文本框、弹出式菜单等 GUI设计面板是GUI设计工具应用的平面,面板上部提供了菜单和常用工具按钮,左边提供了多种如命令按钮、单选按钮、可编辑文本框、静态文本框、弹出式菜单等Filter DisignIIR滤波器FIR滤波器BoxcarBartlett Blackman Hanning Hammi
7、ng Kaiser Butterworth Chebyshev Chebyshev Ellipse 选择IIR或者FIRFilter设计Butterworth等Filter选择窗口选择1、滤波器设计总框图2、“滤波器设计软件”设计的GUI界面设计 MATLAB GUI设计界面 “滤波器设计软件” GUI界面设计 2、设计界面功能显示选择IIR或者FIRFilter选择Butterworth、 Chebyshev、 Chebyshev 、 Ellipse 滤波器选择Boxar、Bartlett、Blackman、Hanning、Hamming、Kaiser窗口 选择Lowpass、Highpas
8、s、Bandpass、Bandstop四种类型选择图形显示Linear、Logarithmic两种类型 最小阶数设计滤波器 显示最小阶数 选择自定义阶数 阶数输入框 抽样频率Fs 通带临界频率Fp1、Fp2滤波器阻带临界频率Fst1、Fst2最大衰减Rp 最小衰减Rs幅频响应显示相频响应显示 退出设计界面手动运行自动运行(1)Digital Filter下拉菜单 function DigitalFilter_Callback(hObject, eventdata, handles)%读取此时选择的滤波器选择,“IIR、FIR” DigitalFilter_value=get(handles.D
9、igitalFilter,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 3、按钮实现编程 选择IIR屏蔽Windows选择选择FIR屏蔽Filter D
10、esign选择(2)Filter Type下拉菜单 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
11、.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(
12、handles.text17,visible,on);set(handles.text19,visible,on); set(handles.text6,visible,on);set(handles.text10,visible,on); end end选择低通或者高通滤波器时,隐藏相应的带通和带阻的第二个临界频率 选择带通或者带阻滤波器时,显示相应的带通和带阻的第二个临界频率 (3)Min Order和Custom Orde按钮 选择使用最小阶数设置时,屏蔽自定义阶数的输function MinOrder_Callback(hObject, eventdata, handles)MinOr
13、der_value=get(handles.MinOrder,Value); if(MinOrder_value=1) set(handles.Order,visible,off); else set(handles.Order,visible,on); end 选择自定义阶数时,显示阶数输入框 function CustomOrderButton_Callback(hObject, eventdata, handles) CustomOrderButton_value=get(handles.CustomOrderButton,Value); if(CustomOrderButton_val
14、ue=0) set(handles.Order,visible,off); else set(handles.Order,visible,on); end (4)Fp1、Fp2、Fst1、Fst2文本编辑框 参数输入时,在输入抽样频率Fs的前提下,判断滤波器通带临界频率(Fp1、Fp2)、滤波器阻带临界频率(Fst1、Fst2)的归一化频率wp1、 wp2、ws1、ws1是否在0,1之间,如不正确显示错误对话框 function Fp1_Callback(hObject, eventdata, handles)%检查输入的通带临界频率Fp1的归一化频率是否在0,1之间Fs_value=str2
15、double(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按钮根据输入的参数显示设计的滤波器的幅频特性和相频特性图,其程序如下:function Run_Callback(hObject, eventdata, handles)%点击Run立即运行AutoChoose,m文件
16、,实现滤波器设计程序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);%当选择了
17、Filter(Butterworth、 Chebyshev等)中一种Filter运行AutoChoose,m文件 if(AutoRun_value=1) AutoChoose(handles) end(7)Quit按钮退出滤波器设计窗口,其程序如下:function Quit_Callback(hObject, eventdata, handles)%点击Quti按钮退出Close4、运行和结果显示 在图形界面下, 按“ 运行” , 在Fiter Design界面,选择要设计的滤波器选项,编辑框中输人要求设计的数字滤波器的性能指标, 选择“Run”命令按钮, 出现如图所示的模拟低通原型滤波器幅频响应和相频响应曲线, 最小阶次。 当选择了“Auto Run”按钮,在“滤波器类型选择”旁的下拉菜单框中选择其他类型的滤波器会立刻出现此类型的滤波器的图形。例如选择设计IIR的Butterworth低通滤波器,其Fs=1000Hz,Fp1=100Hz, Fs1=300Hz,Rp=3dB,Rs=20dB,n=4,