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

下载本文档

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

文档简介

1、1 数字滤波器的概述31.1 fir数字滤波器设计原理31.2 fir数字滤波器的特性31.3 窗函数的介绍52 fir数字滤波器设计及实现62.1 低通滤波器的设计62.2 高通滤波器的设计72.3 带通滤波器的设计92.4 带阻滤波器的设计103基于matlab gui的fir滤波器的仿真123.1 fir数字滤波器设计所实现的任务123.2 fir数字滤波器界面设计123.3 fir数字滤波器函数的编写133.3.1 菜单filtertype的回调函数133.3.2 显示类型disptype的函数143.3.3 阶数n和最小阶数n按钮的函数143.3.4 文本编辑框的回调函数153.3.

2、5 滤波器波形按钮的回调函数153.3.6 文本框rp和rs的函 数163.3.7 产生信号按钮的回调函数163.3.8 滤波后的信号按钮的回调函数163.3.9 按钮quit的回调函数163.4总程序的编写174 实验结果与显示175 结束语176 感谢177 参考文献17附录18基于matlab的fir数字滤波器的设计与仿真李宏华湛江师范学院信息科学与技术学院,湛江 524048摘 要:本文从fir数字滤波器的设计原理和特性入手,实现了用matlab设计fir数字滤波器的功能,重点阐述了通过matlab gui实现了fir数字滤波器的仿真。详细介绍了matlab gui界面的构建与回调函数

3、的程序编写与调试。关键词:matlab;gui;fir滤波器the design and simulation of fir digital filter base on atlabli honghuainformation science & technology school, zhanjiang normal university, zhanjiang, 524048 chinaabstract:this paper starts with the design principles and characteristics of the fir digital filter, achie

4、ve the task of using matlab software to design the fir digital filter, in particular introduction to complete the simulation of the fir digital filter base on matlab gui software. comprehensive introduce to the building of gui interface and the program compiled with debugging of the callback functio

5、n.key word:matlab; gui; fir filter1 数字滤波器的概述1.1 fir数字滤波器设计原理1中介绍了数字滤波器冲激响应的时域特征,可将数字滤波器分为2种,即无限长冲激响应滤波器( iir)和有限长冲激响应滤波器(fir) 。fir具有突出的优点:系统总是稳定的、易于实现线性相位、允许设计多通带(或多阻带)滤波器。但与iir相比,在满足同样的阻带衰减的情况下需要较高的阶数。fir的冲激响应h(k)是有限长的m 阶fir系统函数可表示为滤波器的输出: 它的设计问题实质上是确定能满足所要求的转移序列或脉冲响应的常数问题,2中给出的设计方法主要有窗函数法、频率采样法和等波

6、纹最佳逼近法等。在这里我们利用窗函数法设计fir滤波器。给定所要求的滤波器的频率响应hd ( ejw) , 要求设计一个fir 滤波器的频率响应h( ejw) 来逼近hd( ejw) .设计是在时域进行的, 首先由傅立叶变换导出无限长的序列hd( n) , 然后用窗函数截断hd ( n) ,即: h( n) = hd( n) w( n)。1.2 fir数字滤波器的特性fir滤波器有以下特点: (1) 系统的单位冲激响应h(n)在有限个n值处不为零; (2) 系统函数h(z)在|z|0处收敛,极点全部在z = 0处(因果系统);(3) 结构上主要是非递归结构,没有输出到输入的反馈,但有些结构中(

7、例如频率抽样结构)也包含有反馈的递归部分。因为fir数字滤波器的单位冲激响应是有限长的,所以它永远都是稳定的。3说明了达到具有线性相位这一要求,仅需要对fir数字滤波器的冲激响应施加一定的约束。令,就可由得到fir数字滤波器的频率响应: (1-2-1)式中是的幅频特性,是的相频特性 (1-2-2)4中讨论了由于h(n)的长度n取奇数或偶数时对h(w)的特性有影响, fir滤波器的幅频特性可以分为以下4种情况:(1)第种类型:为偶对称,且n为奇数根据式:可以得到滤波器的幅频函数为: (1-2-3)其中,。幅度函数对呈偶对称。(2)第种类型:为偶对称,且n为偶数根据式:可得滤波器的幅频函数为: (

8、1-2-4)其中:。幅度函数对于或呈偶对称。如果数字滤波器在处不为零,如本文设计的高通滤波器和带阻滤波器则不能用这一类型。 (3)第种类型:为奇对称,且n为奇数根据式:可得滤波器的幅频函数为: (1-2-5)其中。数字滤波器在=0,2处不为零如低通滤波器、高通滤波器、带阻滤波器,则不适合用这类滤波器来设计。(4)第种类型:为奇对称,且n为偶数根据式:可得滤波器的幅频函数可表示为: (1-2-6)其中:。幅度函数对于呈偶对称。如果数字滤波器在处不为零如低通滤波器、带阻滤波器,则不适合用这类数字滤波器来设计。1.3 窗函数的介绍设计滤波器尽量要求窗函数满足以下两项要求: (1)窗谱主瓣尽可能地窄,

9、以获取较陡的过渡带。 (2)尽量减少窗谱的最大旁瓣的相对幅度。也就是能量尽量集中于主瓣,这样使尖峰和波纹减小,就可增大阻带的衰减。 但是这两项要求是不能同时满足的。当选用主瓣宽度较窄时,虽然得到陡峭的过渡带,但通带和阻带的波动明显增加;当选用最小的旁瓣幅度时,虽能得到平坦的幅度响应和较小的阻带波纹,但过渡带加宽,即主瓣会加宽。因此,实际所选用的窗函数往往是它们的折中。设计fir滤波器常用的窗函数有:矩形窗、三角窗、汉宁窗、海明窗、布拉克曼窗、凯塞窗等。以下是几种窗函数的性能比较:窗函数旁瓣峰值衰减(db)等效凯塞尔窗()主瓣过渡带宽()精确过渡带宽()最小阻带衰减(db)矩形窗-13041.8

10、-21三角窗-251.3386.1-25汉宁窗-313.8686.2-44海明窗-414.8686.6-53布莱克曼窗-577.041211-74凯赛尔窗-577.8651010-80想详细了解以上几个窗函数请查阅参考文献4或者用命令wvtool(windows(n)查看。2 fir数字滤波器设计及实现2.1 低通滤波器的设计低通滤波器允许信号中的低频或直流分量通过,抑制高频分量或干扰和噪声。程序如下:%fp1=10;fs1=15;fs=100;boxcar window%fp1=10; %低通通带模拟截止频率fs1=15; %低通阻带模拟截止频率fs=100; %采集频率wp1=2*pi*f

11、p1/fs; %模拟转变为数字域的截止频率ws1=2*pi*fs1/fs;delta_w=ws1-wp1; %过渡带宽n=ceil(1.8*pi/delta_w)+1;%最小阶数nwindow=boxcar(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;

12、%最小阶数n%window=blackman(n);%n=ceil(10*pi/delta_w)+1;%最小阶数n%window=kaiser(n+1);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

13、(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(signal);title(滤波前的信号波形);grid on;subplot(2,2,4);plot(t,filtersignal);xlabel(t);ylabel(filtersignal);

14、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=ceil(1.8*pi/delta_w)+1;n=n+rem(n,2);window=boxcar(n+1);%n=ceil(6.1

15、*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=blackman(n+1);%n=ceil(10*pi/delta_w)+1;n=n+rem(n,2);%window=kaiser(n+1);wn=(fp1+fs1)

16、/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,signal);subplot(2,2,1);plot(w*fs/(2*pi),db);xlabel(频率);ylabel(db);title(滤波器的相对振幅);grid on;subplot(2,2,2);plot(w*f

17、s/(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);xlabel(t);ylabel(filtersignal);title(滤波后的信号波形);grid on;2.3 带通滤波器的设计带通滤波器允许一定频段的信号通过,抑制低于或高于该频段的信号、干扰和噪声。程序如下:%fp1=20;

18、fp2=30;fs1=10;fs4=40;fs=100%n,wn,beta,ftype=kaiserord(7 13 17 23,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 bandwidth deltaw2=ws2-wp2; delta_w=min(deltaw1,d

19、eltaw2);n=ceil(1.8*pi/delta_w)+1;window=boxcar(n+1);%n=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/p

20、i wp2/pi,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(频率);ylabel(db);title(滤波器的相对振幅);grid on;subplot(2,2,2);plot(w*fs/(2*pi),angle(h);xlabel(频率);ylabel(angle

21、(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(滤波后的信号波形);grid on; 2.4 带阻滤波器的设计带阻滤波器抑制一定频段内的信号,允许该频段以外的信号通过。程序如下:%fp1=10;fp2=40;fs1=20;fs2=30;fs=100;%n,wn,beta,ftype=kaiserord(7 1

22、3 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,delta2); %过渡带宽n=ceil(1.8*pi/delta_w)+1;n=n+rem(n,2);window=boxcar(n+1);%n=ceil(6.1*pi

23、/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=blackman(n+1);%n=ceil(10*pi/delta_w)+1;n=n+rem(n,2);%window=kaiser(n+1);b=fir1(n,ws1/pi

24、 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(频率);ylabel(db);title(滤波器的相对振幅);grid on;subplot(2,2,2);plot(w*fs/(2*pi),angle(h);xlabel(频率);ylabel(a

25、ngle(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(滤波后的信号波形);grid on;3基于matlab gui的fir滤波器的仿真3.1 fir数字滤波器设计所实现的任务6中介绍了gui设计工具应用的平台。应用matlab gui设计一个界面友好的仿真软件,完成gui界面的设计和回调函数的编写。它所能

26、实现的任务有:(1)、能够实现人机交换。(2)、能够选择boxar、bartlett、hanning、hamming、blackman、kaiser窗设计 滤波器。(3)、在filtertype中能够选择lowpass、highpass、bandpass、bandstop。(4)、在displaytype中能够选择linear、logarithmic两种不同的图形显示类型。(5)、根据输入的数据计算并显示系统的最小阶数。(6)、根据输入的参数,得到通带波动系数rp、最小阻带衰减系数rs。3.2 fir数字滤波器界面设计 7中给出了gui有以下四种启动方式: (1)、在命令行窗口中输入guide

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

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

29、ntdata, 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,

30、off);%fs2else 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 endend 图3-2 初始化或选择lowpass、highpass 图3-3 选择band

31、pass、bandstop3.3.2 显示类型disptype的函数 滤波器的幅度特性有两种方式显示,设计的程序如下:if (displaytypevalue=1) %select linearaxes(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);end3.3.3 阶数n和最小阶

32、数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”框上。3.3.4 文本编辑框的回调函数参数输入

33、时,在输入抽样频率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) err

34、ordlg(wp1=2*fp1/fs is not in 0,1,please check input number);end图3-4 输入参数错误信息框显示fp2、fs1、fs2的回调函数同理编程。3.3.5 滤波器波形按钮的回调函数根据输入的参数显示设计的滤波器的幅频特性和相频特性图,其程序如下:function filterwave_callback(hobject, eventdata, handles)filterwave(handles) %点击该按钮后自动运行filterwave.m文件。3.3.6 文本框rp和rs的函 数系统根据输入的参数自动计算滤波器的通带波动和最小阻带衰减

35、并显示在文本框中,为了防止用户自动输入该两个参数,在文本框属性的:enable项设为off,禁止输入参数。以下程序为低通滤波器部分,其他的详情请查看附录程序。delta_w=2*pi/1000; %why is 1000 wpi=floor(wp1/delta_w)+1; %对wp1/delta_w取最近的整数rp=-min(db(1:1:wpi); %passband ripple 实际通带波动set(handles.rpvalue,string,num2str(rp);%display passband ripplewsi=floor(ws1/delta_w)+1; %对ws1/delta_w取最近的整数rs=-round(max(db(wsi:1:501); %minstopband attenuation 最小阻带衰减set(handles.rsvalue,string,num2str(rs);%display minstopband attenuation3.3.7 产生信号按钮的回调函数 回调函数程序如下:fs=100;t=(0:20

温馨提示

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

评论

0/150

提交评论