MATLAB-GUI设计FIR滤波器(窗函数)

发布时间 : 星期二 文章MATLAB-GUI设计FIR滤波器(窗函数)更新完毕开始阅读

-------------精选文档-----------------

统参数的设定和滤波器原型的选定。

(3)对象模型区:实现设计结果的实时刷新与显示。 (4)数据显示区:对应于图形显示结果。

图3-1

3.3 FIR数字滤波器函数的编写 3.3.1 菜单FilterType的回调函数

在下拉菜单FilterType中选择滤波器类型

因为界面FilterType默认的是lowpass选项,所以GUI初始化时把第二个临界频率控件隐藏起来,Fp2、Fs2控件的visible设置为off状态,选择带通或带阻滤波器时就把这几个控件显示出来,选择低通或者高通滤波器时,隐藏相应的带通和带阻的第二个临界频率,使其频率参数不能输入,程序和效果如图3-2、3-3所示: function FilterType_Callback(hObject, eventdata, handles) FilterType_value=get(handles.FilterType,'Value');% if (FilterType_value==1)||(FilterType_value==2)

set(handles.Fp2Value,'visible','off');set(handles.Fs2Value,'visible','off');

可编辑

-------------精选文档-----------------

set(handles.Fp2,'visible','off');set(handles.Fs2,'visible','off');%Fp2 set(handles.text37,'visible','off');set(handles.text39,'visible','off');%Fs2 else if (FilterType_value==3)||(FilterType_value==4)

set(handles.Fp2Value,'visible','on');set(handles.Fs2Value,'visible','on'); set(handles.Fp2,'visible','on');set(handles.Fs2,'visible','on');%Fp2 set(handles.text37,'visible','on');set(handles.text39,'visible','on');%Fs2 end end

可编辑

-------------精选文档-----------------

图3-2 初始化或选择lowpass、highpass 图3-3 选择bandpass、bandstop 3.3.2 显示类型DispType的函数

滤波器的幅度特性有两种方式显示,设计的程序如下: if (DisplayTypeValue==1) %select Linear

axes(handles.Magnitude); plot(w*FsValue/(2*pi),abs(H)); grid on;

else %select Logarithmic

axes(handles.Magnitude); plot(w*FsValue/(2*pi),db);

grid on; %set(gca,'XTickMode','manual','XTick',[0,3,5,10]);

end

3.3.3 阶数N和最小阶数N按钮的函数

在设计滤波器阶数时,在输入用户所希望的设计滤波器的阶数后系统自动计算并显示最小阶数N。为了防止用户自动输入该最小参数N,在文本框属性的:Enable项设为off,禁止输入参数。涉及的程序如下:

N_Value=str2double(get(handles.N_Value,'String'));%读取N值 N=N_Value;

b=fir1(N-1,Wn,windows); %Fir1 to caculate the b

set(handles.min_N_Value,'string',num2str(M));%将得到的滤波器的最小阶数显示在“最小阶数N”框上。

可编辑

-------------精选文档-----------------

3.3.4 文本编辑框的回调函数

参数输入时,在输入抽样频率Fs的前提下,判断滤波器通带临界频率(Fp1、Fp2)、滤波器阻带临界频率(Fs1、Fs2)的归一化频率wp1、 wp2、ws1、ws1是否在[0,1]之间,如不正确显示错误对话框,其程序和效果如图3-4所示: function Fp1Value_Callback(hObject, eventdata, handles) FsValue=str2double(get(handles.FsValue,'String')); Fp1Value=str2double(get(handles.Fp1Value,'String')); wp1=2*Fp1Value/FsValue; if (wp1>=1)

errordlg('wp1=2*Fp1/Fs is not in [0,1],please check input number'); end

图3-4 输入参数错误信息框显示 Fp2、Fs1、Fs2的回调函数同理编程。 3.3.5 滤波器波形按钮的回调函数

根据输入的参数显示设计的滤波器的幅频特性和相频特性图,其程序如下:

可编辑

联系合同范文客服:xxxxx#qq.com(#替换为@)