MATLAB-GUI设计FIR滤波器(窗函数)_第1页
MATLAB-GUI设计FIR滤波器(窗函数)_第2页
MATLAB-GUI设计FIR滤波器(窗函数)_第3页
MATLAB-GUI设计FIR滤波器(窗函数)_第4页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、-精选文档 -1 数字滤波器的概述 .31.1FIR 数字滤波器设计原理 .31.2FIR 数字滤波器的特性 .41.3窗函数的介绍 .62 FIR 数字滤波器设计及实现 .72.1低通滤波器的设计 .72.2高通滤波器的设计 .92.3带通滤波器的设计 .112.4带阻滤波器的设计 .133 基于 MATLAB GUI 的 FIR 滤波器的仿真 .153.1FIR 数字滤波器设计所实现的任务 .153.2FIR 数字滤波器界面设计 .163.3FIR 数字滤波器函数的编写 .173.3.1菜单 FilterType 的回调函数 .173.3.2显示类型 DispType 的函数 .193.3

2、.3阶数 N 和最小阶数 N 按钮的函数 .193.3.4文本编辑框的回调函数 .203.3.5滤波器波形按钮的回调函数 .203.3.6文本框 Rp 和 Rs 的函 数 .213.3.7产生信号按钮的回调函数 .213.3.8滤波后的信号按钮的回调函数.223.3.9按钮 Quit 的回调函数 .223.4 总程序的编写 .22可编辑-精选文档 -4 实验结果与显示225 结束语226 感谢237 参考文献23附录24基于 MATLAB的 FIR 数字滤波器的设计与仿真李宏华湛江师范学院信息科学与技术学院,湛江524048摘 要:本文从 FIR 数字滤波器的设计原理和特性入手,实现了用MAT

3、LAB设计 FIR 数字滤波器的功能,重点阐述了通过MATLAB GUI实现了 FIR 数字滤波器的仿真。 详细介绍了MATLABGUI 界面的构建与回调函数的程序编写与调试。关键词: MATLAB ; GUI ; FIR 滤波器可编辑-精选文档 -The Design and Simulation of FIR Digital Filter base onATLABLI HonghuaInformation Science & Technology School, Zhanjiang Normal University, zhanjiang,524048 ChinaAbstract:

4、This paper starts with the design principles and characteristics of the FIRdigital filter, Achieve the task of using MATLAB software to design the FIR digital filter, inparticularintroductiontocompletethesimulationoftheFIR digitalfilterbaseonMATLAB GUI software. Comprehensive introduce to the buildi

5、ng of GUI interface andthe program compiled with debugging of the callback function.Key word: MATLAB; GUI; FIR Filter1 数字滤波器的概述1.1 FIR 数字滤波器设计原理1 中介绍了数字滤波器冲激响应的时域特征 ,可将数字滤波器分为 2 种,即无限长冲激响应滤波器 ( IIR) 和有限长冲激响应滤波器(FIR) 。FIR 具有突出的优点 :系统总是稳定的、易于实现线性相位、允许设计多通带(或多阻带 )滤波器。但与 IIR 相比 ,在满可编辑-精选文档 -足同样的阻带衰减的情况下

6、需要较高的阶数。FIR 的冲激响应 h(k) 是有限长的 M 阶FIR 系统函数可表示为Mh(k )z kH ( z)k0M滤波器的输出 : y(k ) h( k) x(k )h(i ) x(ki)i 0它的设计问题实质上是确定能满足所要求的转移序列或脉冲响应的常数问题,2中给出的设计方法主要有窗函数法、频率采样法和等波纹最佳逼近法等。在这里我们利用窗函数法设计FIR 滤波器。给定所要求的滤波器的频率响应Hd( ejw) ,要求设计一个FIR 滤波器的频率响应H( ejw)来逼近 Hd( ejw) . 设计是在时域进行的 , 首先由傅立叶变换导出无限长的序列hd( n) ,然后用窗函数截断hd

7、 ( n) ,即: h( n) = hd( n) w( n)。1.2 FIR 数字滤波器的特性FIR 滤波器有以下特点:(1) 系统的单位冲激响应 h(n) 在有限个 n 值处不为零;(2) 系统函数 H(z) 在 |z|>0 处收敛,极点全部在 z = 0 处(因果系统);(3) 结构上主要是非递归结构,没有输出到输入的反馈,但有些结构中(例如频率抽样结构)也包含有反馈的递归部分。因为 FIR 数字滤波器的单位冲激响应是有限长的,所以它永远都是稳定的。3说明了达到具有线性相位这一要求, 仅需要对 FIR 数字滤波器的冲激响应h(n) 施加一定的约束。令 zejw ,就可由 H ( z)

8、 得到 FIR 数字滤波器的频率响应:N 1H (e j) H ( z) | jh( n)e j nH ( )e j ( )(1-2-1 )z en 0可编辑-精选文档 -式中 H() 是 H( ej ) 的幅频特性,() 是 H (e j ) 的相频特性( )arctan( Im( H ( ej) )( 1-2-2 )RE( H (ej)4 中讨论了由于 h(n) 的长度 N 取奇数或偶数时对 H(w) 的特性有影响, FIR 滤波器的幅频特性可以分为以下 4 种情况:( 1)第种类型: h(n) 为偶对称,且 N 为奇数N 1根据式: H()n 0N1h(n)cos(n) 可以得到滤波器的

9、幅频函数为:( N1)/2H ( )a(n) cos( n)( 1-2-3 )n 0其中 a(0) h( N1) ,a(n) 2h( Nn), n 1,2, , N 1 。幅度函数 H ( ) 对0, ,2222呈偶对称。(2 )第种类型: h(n) 为偶对称,且 N 为偶数N 1根据式: H()n 0h(n)cos( N1n) 可得滤波器的幅频函数为:2N /21)H ()b(n)cos (n( 1-2-4 )n 12其中: b(n)NN。幅度函数 H ( ) 对于0 或 2呈偶对称。如2h(n), n 1,2, ,22果数字滤波器在处不为零,如本文设计的高通滤波器和带阻滤波器则不能用这一类

10、型。(3 )第种类型: h(n) 为奇对称,且 N 为奇数N 1( N 1根据式: H ()h(n)sinn) 可得滤波器的幅频函数为:n 02(N 1)/2H ( )c( n)sin( n)(1-2-5 )n 1可编辑-精选文档 -其中 c(n) 2h Nn ,n 1,2, N-1 。数字滤波器在 =0 ,2处不为零如22低通滤波器、高通滤波器、带阻滤波器,则不适合用这类滤波器来设计。(4 )第种类型: h(n) 为奇对称,且 N 为偶数N1( N 1根据式: H ()h(n)sinn) 可得滤波器的幅频函数可表示为:n02N /21)H ( )d( n)sin ( n(1-2-6 )n 1

11、2其中: d( n)2h Nn , n1,2, N 。幅度函数 H ( ) 对于呈偶对称。如22果数字滤波器在0,2处不为零如低通滤波器、 带阻滤波器,则不适合用这类数字滤波器来设计。1.3窗函数的介绍设计滤波器尽量要求窗函数满足以下两项要求:(1) 窗谱主瓣尽可能地窄,以获取较陡的过渡带。(2) 尽量减少窗谱的最大旁瓣的相对幅度。也就是能量尽量集中于主瓣,这样使尖峰和波纹减小,就可增大阻带的衰减。但是这两项要求是不能同时满足的。当选用主瓣宽度较窄时, 虽然得到陡峭的过渡带,但通带和阻带的波动明显增加;当选用最小的旁瓣幅度时, 虽能得到平坦的幅度响应和较小的阻带波纹,但过渡带加宽,即主瓣会加宽

12、。因此,实际所选用的窗函数往往是它们的折中。设计FIR 滤波器常用的窗函数有:矩形窗、三角窗、汉宁窗、海明窗、布拉克曼窗、凯塞窗等。以下是几种窗函数的性能比较:可编辑-精选文档 -窗函数旁瓣峰值衰等效凯塞尔主瓣过渡带精确过渡带最小阻带衰减( dB )窗()宽()宽()减(Db)矩形窗-1304/ N1.8/ N-21三角窗-251.338/ N6.1/ N-25汉宁窗-313.868/ N6.2/ N-44海明窗-414.868/ N6.6/ N-53布莱克曼窗-577.0412/ N11/ N-74凯赛尔窗-577.86510/ N10/ N-80想详细了解以上几个窗函数请查阅参考文献4 或

13、者用命令 wvtool(windows(N)查看。2 FIR 数字滤波器设计及实现2.1低通滤波器的设计低通滤波器允许信号中的低频或直流分量通过,抑制高频分量或干扰和噪声。程序如下:%fp1=10;fs1=15;fs=100;boxcar window%fp1=10;%低通通带模拟截止频率fs1=15;%低通阻带模拟截止频率可编辑-精选文档 -fs=100;%采集频率wp1=2*pi*fp1/fs; %模拟转变为数字域的截止频率ws1=2*pi*fs1/fs;delta_w=ws1-wp1; %过渡带宽N=ceil(1.8*pi/delta_w)+1;%最小阶数 Nwindow=boxcar(

14、N)'%N=ceil(6.1*pi/delta_w)+1;%最小阶数 N%window=bartlett(N)'%注意要改一下过渡带宽的系数%N=ceil(6.2*pi/delta_w)+1;%最小阶数 N%window=hanning(N)'%N=ceil(6.6*pi/delta_w)+1;%最小阶数 N%window=hamming(N)'%N=ceil(11*pi/delta_w)+1;%最小阶数 N%window=blackman(N)'%N=ceil(10*pi/delta_w)+1;%最小阶数 N%window=kaiser(N+1)

15、9;Wn=(fp1+fs1)/fs;%理想 LPF 的截止频率b,a=fir1(N-1,Wn,window);H,w=freqz(b,1,512);db=20*log10(abs(H);%db imaginet=(0:200)/fs;Signal=sin(2*pi*t*5)+sin(2*pi*t*15)+sin(2*pi*t*30); %输入信号可编辑-精选文档 -FilterSignal=filter(b,1,Signal);subplot(2,2,1);plot(w*fs/(2*pi),db);xlabel('频率 ');ylabel('db');title

16、('滤波器的相对振幅 ');grid on;subplot(2,2,2);plot(w*fs/(2*pi),angle(H);xlabel('频率 ');ylabel('angle(H)');title('滤波器相位响应');grid on;subplot(2,2,3);plot(t,Signal);xlabel('t');ylabel('Signal');title('滤波前的信号波形 ');grid on;subplot(2,2,4);plot(t,FilterSignal);x

17、label('t');ylabel('FilterSignal');title('滤波后的信号波形 ');grid on;2.2高通滤波器的设计高通滤波器允许信号中的高频分量通过,抑制低频或直流分量。程序如下:%fs1=10,fp1=15;fs=100(wp1=0.3pi;ws1=0.2pi)%fs1=10;%高通阻带模拟截止频率fp1=15;%高通通带模拟截止频率fs=100;%采用频率可编辑-精选文档 -wp1=2*pi*fp1/fs; %模拟转变为数字域的截止频率ws1=2*pi*fs1/fs;delta_w=wp1-ws1; %过渡带宽N

18、=ceil(1.8*pi/delta_w)+1;N=N+rem(N,2);window=boxcar(N+1)'%N=ceil(6.1*pi/delta_w)+1;N=N+rem(N,2);%window=bartlett(N+1)'%N=ceil(6.2*pi/delta_w)+1;N=N+rem(N,2);%window=hanning(N+1)'%N=ceil(6.6*pi/delta_w)+1;N=N+rem(N,2);%window=hamming(N+1)'%N=ceil(11*pi/delta_w)+1;N=N+rem(N,2);%window=b

19、lackman(N+1)'%N=ceil(10*pi/delta_w)+1;N=N+rem(N,2);%window=kaiser(N+1)'Wn=(fp1+fs1)/fs;%理想 LPF 的截止频率b,a=fir1(N,Wn,'high',window);H,w=freqz(b,1,512);db=20*log10(abs(H);%db imaginet=(0:200)/fs;Signal=sin(2*pi*t*5)+sin(2*pi*t*15)+sin(2*pi*t*30); %输入信号可编辑-精选文档 -FilterSignal=filter(b,1,Si

20、gnal);subplot(2,2,1);plot(w*fs/(2*pi),db);xlabel('频率 ');ylabel('db');title('滤波器的相对振幅 ');grid on;subplot(2,2,2);plot(w*fs/(2*pi),angle(H);xlabel('频率 ');ylabel('angle(H)');title('滤波器相位响应');grid on;subplot(2,2,3);plot(t,Signal);xlabel('t');ylabel(

21、'Signal');title('滤波前的信号波形 ');grid on;subplot(2,2,4);plot(t,FilterSignal);xlabel('t');ylabel('FilterSignal');title('滤波后的信号波形 ');grid on;2.3带通滤波器的设计带通滤波器允许一定频段的信号通过,抑制低于或高于该频段的信号、干扰和噪声。程序如下:%fp1=20;fp2=30;fs1=10;fs4=40;fs=100%n,Wn,beta,ftype=kaiserord(7 13 17 23

22、,0 1 0,0.01 0.01 0.01,100);fp1=20; % 带通通带模拟截止频率fp2=30; % 带通通带模拟截止频率可编辑-精选文档 -fs1=10;fs2=40;fs=100;wp1=2*pi*fp1/fs;%数字域的截止频率wp2=2*pi*fp2/fs;ws1=2*pi*fs1/fs;ws2=2*pi*fs2/fs;deltaw1=wp1-ws1;%Transition bandwidthdeltaw2=ws2-wp2;delta_w=min(deltaw1,deltaw2);N=ceil(1.8*pi/delta_w)+1;window=boxcar(N+1);%N=

23、ceil(6.1*pi/delta_w)+1;%window=bartlett(N+1);%N=ceil(6.2*pi/delta_w)+1;%window=hanning(N+1);%N=ceil(6.6*pi/delta_w)+1;%window=hamming(N+1);%N=ceil(11*pi/delta_w)+1;%window=blackman(N+1);%N=ceil(10*pi/delta_w)+1;%window=kaiser(N+1);可编辑-精选文档 -b=fir1(N,wp1/pi wp2/pi,window);H,w=freqz(b,1,512);db=20*log

24、(abs(H);t=(0:200)/fs;Signal=sin(2*pi*t*5)+sin(2*pi*t*15)+sin(2*pi*t*30);%输入信号FilterSignal=filter(b,1,Signal);subplot(2,2,1);plot(w*fs/(2*pi),db);xlabel('频率 ');ylabel('db');title('滤波器的相对振幅 ');grid on;subplot(2,2,2);plot(w*fs/(2*pi),angle(H);xlabel('频率 ');ylabel('an

25、gle(H)');title('滤波器相位响应');grid on;subplot(2,2,3);plot(t,Signal);ylabel('Signal');title('滤波前的信号波形 ');grid on;subplot(2,2,4);plot(t,FilterSignal);xlabel('t');ylabel('FilterSignal');title('滤波后的信号波形');gridon;2.4带阻滤波器的设计带阻滤波器抑制一定频段内的信号,允许该频段以外的信号通过。程序如下

26、:%fp1=10;fp2=40;fs1=20;fs2=30;fs=100;%可编辑-精选文档 -%n,Wn,beta,ftype=kaiserord(7 13 17 23,0 1 0,0.01 0.01 0.01,100);fp1=10; % 带通通带模拟截止频率fp2=40; % 带通通带模拟截止频率fs1=20;fs2=30;fs=100;wp1=2*pi*fp1/fs;wp2=2*pi*fp2/fs;ws1=2*pi*fs1/fs;%数字域的截止频率ws2=2*pi*fs2/fs;delta1=ws1-wp1;delta2=wp2-ws2;delta_w=min(delta1,delta

27、2); %过渡带宽N=ceil(1.8*pi/delta_w)+1;N=N+rem(N,2);window=boxcar(N+1);%N=ceil(6.1*pi/delta_w)+1;N=N+rem(N,2);%window=bartlett(N+1);%N=ceil(6.2*pi/delta_w)+1;N=N+rem(N,2);%window=hanning(N+1);%N=ceil(6.6*pi/delta_w)+1;N=N+rem(N,2);%window=hamming(N+1);可编辑-精选文档 -%N=ceil(11*pi/delta_w)+1;N=N+rem(N,2);%wind

28、ow=blackman(N+1);%N=ceil(10*pi/delta_w)+1;N=N+rem(N,2);%window=kaiser(N+1);b=fir1(N,ws1/pi ws2/pi,'stop',window);H,w=freqz(b,1,512);db=20*log(abs(H);t=(0:200)/fs;Signal=sin(2*pi*t*5)+sin(2*pi*t*15)+sin(2*pi*t*30);%输入信号FilterSignal=filter(b,1,Signal);subplot(2,2,1);plot(w*fs/(2*pi),db);xlabel

29、('频率 ');ylabel('db');title('滤波器的相对振幅 ');grid on;subplot(2,2,2);plot(w*fs/(2*pi),angle(H);xlabel('频率 ');ylabel('angle(H)');title('滤波器相位响应');grid on;subplot(2,2,3);plot(t,Signal);ylabel('Signal');title('滤波前的信号波形 ');grid on;subplot(2,2,4);

30、plot(t,FilterSignal);xlabel('t');ylabel('FilterSignal');title('滤波后的信号波形');gridon;3 基于 MATLAB GUI的 FIR 滤波器的仿真3.1 FIR 数字滤波器设计所实现的任务可编辑-精选文档 -6 中介绍了 GUI 设计工具应用的平台。 应用 MATLAB GUI 设计一个界面友好的仿真软件,完成 GUI 界面的设计和回调函数的编写。它所能实现的任务有:(1) 、能够实现人机交换。(2) 、能够选择 Boxar 、Bartlett 、 Hanning 、Hammi

31、ng 、Blackman 、Kaiser 窗设计滤波器。(3) 、在 FilterType 中能够选择 Lowpass 、Highpass 、Bandpass 、Bandstop 。(4) 、在 DisplayType 中能够选择 Linear 、Logarithmic 两种不同的图形显示类型。(5) 、根据输入的数据计算并显示系统的最小阶数。(6) 、根据输入的参数,得到通带波动系数 Rp、最小阻带衰减系数 Rs。3.2 FIR 数字滤波器界面设计7 中给出了 GUI 有以下四种启动方式:(1 )、在命令行窗口中输入 guide ;(2)、点击 matlab 界面上面的菜单中的图标;(3)、

32、在 START 菜单中选 MATLAB|GUIDE(GUI Builder);(4)、在 MATLAB File 菜单中选 New|GUI 。本设计用的第一种方式设计GUI 界面。点击 guide界面上方的 Run 按钮,会生成一个 fig 文件,一个 m 文件,其中 fig 文件就是界面的图形, m 文件是界面的回调函数,在 m 文件里完成回调函数的编写。设计如下图3-1 所示的图形主面板,共包括 4 个区域:( 1)图形区:用于显示各模块的仿真曲线。( 2)参数设区:由静态文本框和编辑框以及类型选择按纽组成, 实时的进行系可编辑-精选文档 -统参数的设定和滤波器原型的选定。( 3)对象模型

33、区:实现设计结果的实时刷新与显示。( 4)数据显示区:对应于图形显示结果。图 3-13.3 FIR 数字滤波器函数的编写菜单 FilterType的回调函数在下拉菜单 FilterType中选择滤波器类型因为界面 FilterType默认的是 lowpass 选项,所以 GUI 初始化时把第二个临界频率控件隐藏起来, Fp2 、Fs2 控件的 visible 设置为 off 状态,选择带通或带阻滤波器时就把这几个控件显示出来,选择低通或者高通滤波器时, 隐藏相应的带通和带阻的第二个临界频率,使其频率参数不能输入,程序和效果如图3-2 、3-3 所示:function FilterType_Ca

34、llback(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

35、9;);set(handles.Fs2,'visible','off');%Fp2set(handles.text37,'visible','off');set(handles.text39,'visible','off');%Fs2else if (FilterType_value=3)|(FilterType_value=4)set(handles.Fp2Value,'visible','on');set(handles.Fs2Value,'visible

36、','on');set(handles.Fp2,'visible','on');set(handles.Fs2,'visible','on');%Fp2set(handles.text37,'visible','on');set(handles.text39,'visible','on');%Fs2endend可编辑-精选文档 -图 3-2初始化或选择 lowpass 、highpass图 3-3选择 bandpass 、bandstop显示类

37、型 DispType的函数滤波器的幅度特性有两种方式显示,设计的程序如下:if (DisplayTypeValue=1)%select Linearaxes(handles.Magnitude);plot(w*FsValue/(2*pi),abs(H);grid on;else%select Logarithmicaxes(handles.Magnitude);plot(w*FsValue/(2*pi),db);grid on ;%set(gca,'XTickMode','manual','XTick',0,3,5,10);end阶数 N 和最小

38、阶数 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 bset(handles.min_N_Value,'string',num2str(M);%将得到的滤波器的最小阶数显示在“最小阶数N”框上。可编辑-精选文档 -文本编辑框的回调函数参数输入时,在输入抽样频率Fs 的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论