MaTLAB.docx
《MaTLAB.docx》由会员分享,可在线阅读,更多相关《MaTLAB.docx(12页珍藏版)》请在冰豆网上搜索。
MaTLAB
基于MATLAB(GUI)FIR滤波器设计
摘要
面对庞杂繁多的原始信号,如何提取所需信号、抑制不需要的信号这就需要使用滤波器。
滤波器的作用主要是选择所需频带的信号内容而抑制不需要的其他频带的信号内容。
数字滤波器因其精度高、可靠性好、灵活性大等优点,在语音信号处理、信号频谱估计、信号去噪、无线通信中的数字变频以及图像处理等工程实际应用中都很广泛。
根据其冲击响应函数的时域特性可将数字滤波器分为IIR(有限长冲击响应)和FIR(无限长冲击响应)。
作为强大的计算软件,MATLAB提供了编写图形用户界面的功能。
所谓图形用户界面,简称为GUI,是由各种图形对象,如图形窗口菜单按钮、文本框等构建的用户界面。
MATALB可以创建图形用户界面GUI(GraphicalUserInterface),它是用户和计算机之间交流的工具。
MATLAB将所有GUl支持的用户控件都集成在这个环境中并提供界面外观、属性和行为响应方式的设置方法,随着版本的提高,这种能力还会不断加强。
而且具有强大的绘图功能,可以轻松的获得更高质量的曲线图。
关键词:
MATLABGUIIIR滤波器FIR滤波器
用户界面(或接口)是指:
人与机器(或程序)之间交互作用的工具和方法。
如键盘、鼠标、跟踪球、话筒都可成为与计算机交换信息的接口。
图形用户界面(GraphicalUserInterfaces,GUI)则是由窗口、光标、按键、菜单、文字说明等对象(Objects)构成的一个用户界面。
用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。
假如读者所从事的数据分析、解方程、计算结果可视工作比较单一,那么一般不会考虑GUI的制作。
但是如果读者想向别人提供应用程序,想进行某种技术、方法的演示,想制作一个供反复使用且操作简单的专用工具,那么图形用户界面也许是最好的选择之一。
在这个具有挑战性的时代,把计算机充分运用到教学及工程运算中,虽然具有重要的意义,而随着计算机技术的发展,计算机软件在工程设计领域应用越来越广。
本设计研究是基于MATLAB的FIR数字滤波器的设计,是基于应用计算机软件编程。
首先了解滤波器的基本工作原理,针对FIR滤波器,有各种不同的方法。
FIR滤波器一般要求信号具有线性相位,同时由于脉冲响应无限长,因此具有永远稳定的特性。
根据这个特点,。
本文主要对FIR滤波器采用了窗函数法,最优设计法,最小二乘设计法,升余弦函数设计法和任意响应设计法来设计FIR滤波器,同时,还对滤波器进行阶数评估。
滤波是信号处理中最基本有极为重要的技术,利用滤波器技术可以从复杂的信号中提取出所需要的信号,抑制不需要的信号。
绝大多数传感器输出的信号,在使用过程中,都必须进行滤波,所以滤波器是具有一定传输选择特性的,对信号进行加工处理的装置,它允许输入信号中的一些成分通过,抑制或衰减另一些成分。
其功能是将输入信号变换为人们所需要的输入信号。
滤波器特性:
FIR系统只有零点,因此这类系统不像IIR系统那样易取得比较好的通带和阻带衰减特性。
但FIR系统有自己突出的优点,其一是系统总是稳定的,其二是易实现线性相位,其三是允许设计多通带(或多阻带)滤波器。
FIR滤波器是指系统的单位冲击响应h(n)仅在有限的范围内有非零值的滤波器。
N-1阶滤波器的系统函数H(z)可表示为
H(n)是
的N-1次多项式,它在z平面上有N-1个零点,原点z=0是N-1阶重极点。
因此,FIR滤波器永远稳定。
FIR滤波器的频率响应为
由于H(
)一般为复数,因此,可将其表示成
2.2FIR滤波器的线性相位特性
FIR滤波器的频率响应为
由于H(
)一般为复数,因此,可将其表示成
线性相位特性是指
是w的线性函数,即
式中,
是常数。
此时通过这一系统的各频率分量的时延为相同的常数,系统的群时延为
即系统的时延是一个与w无关的常数
,称系统H(z)具有严格的线性相位。
由于严格线性相位条件在数学上处理较为困难,因此在FIR滤波器设计中一般使用广义线性相位。
若一个离散系统的频率响应H(
)可以写为
H(
)=
其中,
和
是与w无关的常数,
是w的是函数(可任意取值),则称为广义幅频响应,
称为广义相频响应。
上式中,
为
当
=0时,称是第一类线性相位,当
(一般
)时,称是第二类线性相位。
滤波器设计软件GUI界面设计
在matlab命令行窗口中输入guide或点击matlab界面上面的菜单中的
图标,打开gui设计的图形界面如图5。
然后拖入所要的图形控件,按需要修改外观和空间属性,直至满足要求,如图6。
设置属性点击guide界面上方的Run按钮,会生成一个fig文件,一个m文件,其中fig文件就是界面的图形,m文件是界面的回调函数,在m文件里每个控件的回调函数都已经自动生成,控件要做的工作就是在文件框架下定义某些特殊要求的状态并补充完整回调函数场,使单击控件时激活回调程序完成一定的功能。
图5GUI设计的图形界面图6“滤波器设计软件”GUI界面设计
程序代码:
functionAutoChoose(handles)
Nn=128;
DigitalFilter_value=get(handles.DigitalFilter,'Value');
FilterDesign_value=get(handles.FilterDesign,'Value');
Windows_value=get(handles.Windows,'Value');
FilterType_value=get(handles.FilterType,'Value');
DisplayType_value=get(handles.DisplayType,'Value');
Order_value=get(handles.Order,'Value');
Rp_value=str2double(get(handles.Rp,'String'));
Rs_value=str2double(get(handles.Rs,'String'));
Fs_value=str2double(get(handles.Fs,'String'));
Fp1_value=str2double(get(handles.Fp1,'String'));
Fp2_value=str2double(get(handles.Fp2,'String'));
Fs1_value=str2double(get(handles.Fs1,'String'));
Fs2_value=str2double(get(handles.Fs2,'String'));
wp1=2*Fp1_value/Fs_value;wp2=2*Fp2_value/Fs_value;
ws1=2*Fs1_value/Fs_value;ws2=2*Fs2_value/Fs_value;
wp=[wp1,wp2];ws=[ws1,ws2];
if(DigitalFilter_value==1)if(FilterDesign_value==1)
if((FilterType_value==1)||(FilterType_value==2))[n,Wn]=buttord(wp1,ws1,Rp_value,Rs_value)set(handles.MinOrderDisplay,'string',num2str(n))elseif((FilterType_value==3)||(FilterType_value==4))[n,Wn]=buttord(wp,ws,Rp_value,Rs_value);
set(handles.MinOrderDisplay,'string',num2str(n))endendelse
if(FilterDesign_value==2)if((FilterType_value==1)||(FilterType_value==2))
[n,Wn]=cheb1ord(wp1,ws1,Rp_value,Rs_value);
set(handles.MinOrderDisplay,'string',num2str(n))
elseif((FilterType_value==3)||(FilterType_value==4))
[n,Wn]=cheb1ord(wp,ws,Rp_value,Rs_value);
set(handles.MinOrderDisplay,'string',num2str(n))endendelse
if(FilterDesign_value==3)if((FilterType_value==1)||(FilterType_value==2))
[n,Wn]=cheb2ord(wp1,ws1,Rp_value,Rs_value);
set(handles.MinOrderDisplay,'string',num2str(n))
elseif((FilterType_value==3)||(FilterType_value==4))
[n,Wn]=cheb2ord(wp,ws,Rp_value,Rs_value);
set(handles.MinOrderDisplay,'string',num2str(n))
endendelse
if(FilterDesign_value==4)
if((FilterType_value==1)||(FilterType_value==2))
[n,Wn]=ellipord(wp1,ws1,Rp_value,Rs_value);
set(handles.MinOrderDisplay,'string',num2str(n))
elseif((FilterType_value==3)||(FilterType_value==4))
[n,Wn]=ellipord(wp,ws,Rp_value,Rs_value);
set(handles.MinOrderDisplay,'string',num2str(n))
endendendendendendelse
if(DigitalFilter_value==2)
if((FilterType_value==1)||(FilterType_value==2))
[n,Wn]=buttord(wp1,ws1,Rp_value,Rs_value);
set(handles.MinOrderDisplay,'string',num2str(n))
elseif((FilterType_value==3)||(FilterType_value==4))
[n,Wn]=buttord(wp,ws,Rp_value,Rs_value);
set(handles.MinOrderDisplay,'string',num2str(n))
switchDigitalFilter_value
case1[b,a]=butter(n,Wn);[h,f]=freqz(b,a,Nn,Fs_value);
axes(handles.Magnitude);if(DisplayType_value==1)plot(f,abs(h))
elseplot(f,20*log10(abs(h)))endgridon;axes(handles.Phase);
plot(f,angle(h));
case2[b,a]=butter(n,Wn,'high');[h,f]=freqz(b,a,Nn,Fs_value);
axes(handles.Magnitude);if(DisplayType_value==1)plot(f,abs(h))
elseplot(f,20*log10(abs(h)))endgridon;
axes(handles.Phase);plot(f,angle(h));gridon;
case3
[b,a]=butter(n,Wn);[h,f]=freqz(b,a,Nn,Fs_value);axes(handles.Magnitude);
if(DisplayType_value==1)plot(f,abs(h))elseplot(f,20*log10(abs(h)))end
gridon;axes(handles.Phase);plot(f,angle(h));gridon;
case4[b,a]=butter(n,Wn,'stop');[h,f]=freqz(b,a,Nn,Fs_value);
axes(handles.Magnitude);if(DisplayType_value==1)plot(f,abs(h))
elseplot(f,20*log10(abs(h)))endgridon;
axes(handles.Phase);plot(f,angle(h));gridon;
end
运行和结果显示
在图形界面下,按“运行”,出现如图15所示界面,选择要设计的滤波器选项,编辑框中输人要求设计的数字滤波器的性能指标,,选择“Run”命令按钮,出现如图所示的模拟低通原型滤波器幅频响应和相频响应曲线,最小阶次。
当选择了“AutoRun”按钮,在“滤波器类型选择”旁的下拉菜单框中选择其他类型的滤波器会立刻出现此类型的滤波器的图形。
例如选择设计IIR的Butterworth低通滤波器,其Fs=1000Hz,Fp1=100Hz,
Fs1=300Hz,Rp=3dB,Rs=20dB,n=4,显示如图16
图15运行显示界面
图16Butterworth低通滤波器
2显示不同滤波器的显示结果
1、选择设计IIR低通滤波器,其Fs=1000Hz,Fp1=100Hz,Fs1=300Hz,
Rp=3dB,Rs=20dB,n=4,利用四种不同滤波器进行设计,如图17、18、19、20显示:
图17Butterworth低通滤波器图18ChebyshevⅠ低通滤波器
图19ChebyshevⅡ低通滤波器图20Ellipse低通滤波器
2、选择设计FIR带通滤波器,其Fs=4000Hz,Fp1=900Hz,Fp2=1300Hz,Fs1=600Hz,Fs2=1500Hz,Rp=1dB,Rs=40dB,n=20,Rp=3dB,Rs=20dB,
n=4,利用四种不同滤波器进行设计,如图21、22、23、24、25、26显示:
图21Boxar窗带通滤波器图22Bartlett窗带通滤波器
图22Blackman窗带通滤波器图23Hanning窗带通滤波器
设计总结
GUI是实现人机交互的中介,具有强大的功能,可以完成许多复杂的程序模块。
使用它,需要具有一定的知识储备和必要的经验技巧。
并且要充分利用好MATLAB 的帮助文档,仔细研读HELP是最好的办法。
需要了解函数句柄等必要基础知识,熟悉各控件对象的基本属性和方法操作,知晓不同控件的合适使用条件及其特有的功能,并会采用不同的使用手段来实现相同功能的设计。
同时还需要详细掌握菜单和控件。
菜单很简单,就是弄清除菜单之间的关系和如何调用就可以。
控件的使用主要是用好CreateFcn和Callback属性。
CreateFcn中的语句就是在程序运行时,就立即执行脚本。
如果希望界面可控,那么最好用Callback属性。
在相应控件下,添加相应的脚本就可以实现比较复杂计算绘图等功能。
在设计GUI的时候,要注意一定的原则和步骤,分析界面所要求实现的主要功能,明确设计任务,构思草图,设计界面和属性,编写对象的相应代码,实现控件的交互调用。
对于GUI在数字信号处理中的应用中,数字信号处理这门学科的知识是基础,要掌握数字信号处理的相关知识的原理后,并用代码来实现,才能很好地结合MATLAB进行GUI编程。