基于matlab的滤波器的设计与仿真设计Word格式文档下载.docx
《基于matlab的滤波器的设计与仿真设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于matlab的滤波器的设计与仿真设计Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
FIR
Abstract
Thedigitalfilterisadiscretesystem.Thesystemcanbeabletohandlediscretesignals.Soitcanachieverequiredimportantinformation.Therearetwomajorkindsofdesignprincipleofdigitalfilter,whicharefiniteimpulseresponse(FIR)andinfiniteimpulseresponse(IIR).Themoderndigitalfiltercanbereceivedbytwokindsofmethodofsoftwareandhardware.ButusingMATLABsignaldisposingtoolcasetodesignthedigitalfilterismoreconvenientanduniversallyapplied.Themainbodyofthepaperisdemandedtodesignadigitalfilteraccordingtothedesigningindex.IIRadoptsButterworthandFIRadoptstheBlackmanwindowtodesignthedigitalfilter.Finally,carryoutcomparisononIIRandtheFIRrealizationandfunctionaspect.
Keywords:
MATLAB;
IIR;
FIR
1引言
理想滤波器就是一个让输入信号中的某些有用频谱分量无任何变化的通过,同时又能完全抑制另外那些不需要的成分的具有某种选择性的器件、网络或计算机硬件支持的计算程序。
根据对不同信号的处理可将滤波器分为模拟滤波器和数字滤波器两种。
模拟滤波器和数字滤波器的概念相同,只是信号的形式和实现滤波的方法不同。
数字滤波器是指输入输出都是数字信号的滤波器。
滤波器的滤波原理就是根据信号与噪声占据不同的频带,将噪声的频率放在滤波器的阻带中而由于阻带的响应为零,这样就滤去了噪声。
数字滤波器可以分为两大类:
一类是经典滤波器,即一般的滤波器,特点是输入信号中有用的频率成分和希望滤去的频率成分各占不同的频率带,通过一个合适的选频滤波器达到滤波的目的,这种滤波器主要是无限冲激响应滤波器和有限冲激响应滤波器;
另外一类滤波器是现代滤波器,当信号和干扰的频带相互重叠,经典滤波器不能完成对干扰的有效去除时,可以采用现代滤波器,这些滤波器可以按照随即信号部的一些统计分布规律,从干扰中最佳的提取信号。
这种滤波器主要有维纳滤波器、卡尔曼滤波器、自适应滤波器等[10]。
与模拟滤波器相同,数字滤波器从功能上可以分为四类,即低通(LP)、高通(HP)、带通(BP)、带阻(BS)滤波器等。
数字滤波器在数字信号处理的各种应用中发挥着十分重要的作用,任何数字系统都可看成一个数字滤波器,因此数字滤波器的应用相当广泛。
设计任务:
设计一数字带通滤波器,分别用IIR和FIR两种类型来实现。
2关于MATLAB
MATLAB是MatrixLaboratory(矩阵实验室)的缩写。
它是美国MathWorks公司推出的用于数值计算和图形处理的数学计算环境,现已发展成为一个具有高性能数值计算和可视化功能的科学计算环境,问题的提出和解答只需以数学方式表达和描述,不需要大量原始而传统的编程过程。
该软件包括:
数值分析、矩阵计算、数字信号处理、建模和系统控制等应用程序。
MATLAB语言简洁、紧凑、使用方便,有丰富的运算符号和函数库,还具有结构化的控制语句和面向对象编程的特点。
随着其版本的不断提高,各种工具箱的扩充和完善,MATLAB的功能越来越强大,从而被广泛应用于仿真技术、自动控制和数字信号处理等领域。
MATLAB是一个交互式系统,特别适用于研究、解决工程和数学问题,典型应用包括:
一般的数值计算、算法原型以及通过矩阵公式解决一些特殊问题,促进了统计、数字信号处理等科学的发展。
MATLAB功能强大、简单易学、编程效率高,深受广大科技工作者的欢迎。
特别是MATLAB还具有信号分析工具箱,不需具备很强的编程能力,就可以很方便地进行信号分析、处理和设计。
MATLAB的信号处理工具箱提供了丰富而简便的设计、实现IIR和FIR的方法,使原来烦琐的程序设计简化成函数的调用,特别是滤波器的表达方式和滤波器形式之间的相互转换显得十分简便,为滤波器的设计和实现开辟了一片广阔的天地。
数字滤波器采用传统的设计方法要进行大量复杂的运算,而利用MATLAB强大的计算功能进行计算机辅助设计,就可以快速要效的设计数字滤波器,大大的简化计算量,直观简便。
MATLAB的信号处理工具箱包含了各种经典的和现代的数字信号处理技术,是一个非常优秀的算法研究和辅助设计的工具。
在设计数字滤波器时,通常采用信号处理工具箱提供的设计模拟和数字滤波器的MATLAB函数采用编程的方法和仿真实现,亦可以利用信号处理工具箱提供的滤波器设计和分析工具(FilterDesign&
AnalysisTool)实现。
MATLAB的一种重要的工作方式就是M文件的编程工作方式。
M文件有两种形式,一种是脚本文件,另一种是函数文件。
M文件的扩展名为“.m”。
M文件可以通过任何纯文本编辑器进行编辑,MATLAB也自带有文本编辑器,使用“edit”命令即可开启。
3数字滤波的基本概念
滤波器的种类很多,从功能上可以分为低通、高通、带通和带阻滤波器,每一种又有模拟滤波器和数字滤波器两种形式。
如果滤波器的输入和输出都是离散时间信号,则该滤波器的冲击响应也必然是离散的,这种滤波器称之为数字滤波器。
该滤波器通过对时域中离散的采样数据作差分运算实现滤波。
一个线性时不变数字滤波器可以用常系数线性差分方程表示为
式中x(n),y(n)分辨是输入和输出信号序列;
ai,bk分别是滤波系数。
当上式bk中系数全部为零时,就有
这种形式的滤波器为有限冲激响应滤波器,简称FIR型。
此事系统的输出仅与输入有关。
它的实现一般采用非递归算法。
4设计方案
4.1数字滤波器设计的基本步骤
4.1.1确定指标
在设计一个滤波器之前,必须首先根据工程实际的需要来确定滤波器的技术指标。
在很多实际应用中,数字滤波器常被用来实现选频操作。
因此指标的形式一般在频域中给出幅度和相位响应。
4.1.2模型逼近
一旦确定了技术指标,就可以利用已学习过的基本原理和关系式,提出一个滤波器模型来逼近给定的技术指标。
这是滤波器设计所要研究的主要问题。
4.1.3实现性能分析和计算机仿真
以上两步的结果得到的滤波器,通常是以差分方程、系统函数或脉冲响应描述的。
根据这个描述就可以分析其频率特性和相位特性,以验证设计结果是否满足指标要求;
或者利用计算机仿真实现设计的滤波器,再分析滤波结果来判断。
4.2基于MATLAB的FIR数字滤波器的设计与仿真
利用MATLAB设计滤波器,可以随时对比设计要求和滤波器特性调整参数,直观简便,极减轻了工作量,有利于滤波器设计的优化。
FIR滤波器的设计方法有窗函数法、最优化设计法及约束最小二乘逼近法。
MATLAB信号处理工具箱中提供了滤波器设计方法的工具函数,编程中可以根据设计要求直接调用相应函数,方便快捷。
本设计数字滤波器的性能指标为:
,
,要求用窗函数设计一个高通滤波器。
本例采用凯泽窗函数设计该高通滤波器,原程序节选如下:
As=50;
ws=0.2*Pi;
wp=0.3*Pi;
tr_width=wp-ws;
M=ceil((As-7.95)*2*pi/(14.36*tr_width)+l)+l;
disp([‘滤波器的长度为’,num2str(M)]);
beta=0.1102*(AS-8.7);
n=【0:
l:
M-l]:
disp([‘线性相位斜率为’,num2str(beta)]);
w_kai=(kaiser(M,beta))’;
wc=(ws+wp)/2:
hd=ideal_lp(pi,M)-ideal_lp(wc,M);
h==hd.*w_kai;
[db,mag,pha,grd,w]=freqz_m(h,[1]);
delta_w=2*pi/l000;
Rp=-(min(db(wp/delta_w+l:
501)));
disp([‘实际通带波动为’,num2str(Rp)]);
As=-round(max(db(l:
ws/delta_w+l)));
disp([‘最小阻带衰减为’,num2str(As)]);
subplot(l,l,l);
subplot(2,2,l);
stem(n,hd);
title(‘理想脉冲响应’);
axis([0,M-l-0,40.8]);
ylabel(‘hd(n)’);
subplot(2,2,2):
stem(n,w_kai):
title(‘凯泽窗’):
axis([0,M-101.1]);
ylabel(‘w(n)’);
subplot(2,2,3);
stem(n,h);
title(‘实际脉冲响应’);
axis(【0,M-l-0.40.8]);
xlabel(’n’);
ylabel(’h(n)’);
subplot(2,2,4);
plot(w/pi,db);
title(‘幅度响应/dB’);
axis([01-10010]);
grid;
xlabel(‘以π为单位的频率’):
ylabel(‘分贝数/dB’);
程序运行后得到的结果如图1所示。
由图1可知滤波器的数据:
线性相位斜率为4.5513,滤波器的长度为61,参数beta(β)为4.55126,实际通带波动为0.040436,最小阻带衰减为50,由此可知设计的滤波器达到了要求。
程序执行的结果如下图所示:
滤波器幅频特性相频特性
滤波前后的波形
FIR的冲激响应
从滤波效果图看,所设计的滤波器基本消除了噪声和干扰的影响,客观的得出真实信号。
在设计中如果该滤波器的特性不满足要求,原有的参数必须作相应的调整,在程序中只需对参数进行重新设定,就可以得到所需要的滤波器。
在实际应用中,如果需要对某一信号源进行特定的滤波,并要检测滤波效果,应用传统方法比较繁琐。
在MATLAB环境下,可先用软件模拟产生信号源,再设计滤波器对其进行滤波。
在MATLAB环境下,数字滤波器的设计已经变得非常简单和高效率,而且FIR滤波器的冲激响应是有限长序列,其系统函数为一个多多项式,它所含的极点多为原点,所以FIR滤波器是稳定的。
4.3基于MATLAB的IIR数字滤波器的设计
4.3.1IIR数字滤波器的设计原理
IIR一般采用递归型的结构,系统的输入与输出服从N阶差分方程:
相应的传输函数为:
设计IIR数字滤波器就是要确定传输函数中的系数aj、bi,或者零极点增益ci、dj、A,使滤波器的频率特性满足给定的性能指标要求。
设计原理主要包括两个方面:
一是根据设计指标,先设计出相应的模拟滤波器,再通过脉冲响应不变法或者双线性变化法转换成对应的数字滤波器;
二是先选择一种最优准则,如最小均方误差准则,再在此准则下求出滤波传输函数的系数。
4.3.2IIR数字滤波器的传统设计方法
IIR数字滤波器具有无线宽的冲击响应,与模拟滤波器相匹配。
所以IIR滤波器的设计可以采取在模拟滤波器设计的基础上进一步变换的方法。
例如利用脉冲响应不变法设计IIR数字滤波器,其基本设计思路是直接设计一个数字滤波器并让它的时间特性逼近一个模拟滤波器。
为了达到时间特性的最佳逼近,把模拟滤波器的冲击响应均匀取值,作为数字滤波器的单位脉冲响应,即:
然后将h(n)通过z变换即糗得H(z)。
因此,脉冲响应不变法实际是时域取样法,整个过程先是根据给定的指标设计一个模拟滤波器,进而按下列变换的顺序,最后糗得数字滤波器的系统函数H(z),即;
在对滤波器进行设计时,整个过程运算量是很大的。
设计完成后要对已设计的滤波器的频率响应进行校核,得到幅频相频响应特性,运算量也是很大的。
通常,待设计的数字滤波器,阶数和类型并不一定是完全给定的,很多时候都是要根据设计要求和滤波效果不断进行调整,以达到设计的最优化。
在这种情况下,滤波器的设计就要进行大量复杂的运算,单纯的靠公式计算和编制简单的程序很难在短时间使问题得到解决。
4.3.3IIR数字滤波器的设计
FDATool(FilterDesign&
AnalysisTool)是MATLAB信号处理工具箱里专用的滤波器设计分析工具,MATLAB6.0以上的版本还专门增加了滤波器设计工具箱(FilterDesignToolbox)。
FDATool可以设计几乎所有的常规滤波器,包括FIR和IIR的各种设计方法。
它操作简单,方便灵活。
下面就利用
本文要求设计一个10阶的带通ChebyshevI滤波器,它的通带围是100到200Hz,采样频率为1000Hz,Rp=0.5。
本例中,首先在FilterType中选择Bandpass(带通滤波器);
在DesignMethod选项中选择IIR,接着在相邻的右则选项中选择ChebyshevÑ
(切比雪夫I型);
指定FilterOrder项中的SpecifyOrder=10;
由于采用的是切比雪夫设计,不必在Options中选择;
然后在FrequencySpecifications中选择Unit为Hz,给出采样频率Fs=1000,通带Fpass1=100和Fpass2=200;
最后在MagnitudeSpecifications中选择Unit为db,Apass=0.5。
设置完成后点击DesignFilter即可得到所设计的IIR滤波器。
通过菜单选项Analysis可以在特性区看到所设计的幅频响应、相频响应、冲激响应和零极点配置等特性,如图1所示。
设计完成后将结果保存为filter1.fda文件。
图1滤波器的幅频、相频和冲激响应(特性区)
4.3.4IIR数字滤波器的程序设计
上例IIR滤波器的冲激响应可用程序设计如下:
%chebyshev1bpf
n=10;
%阶数为10
Rp=0.5;
%幅值衰减为0.5
Wn=[100200]/500;
[b,a]=cheby1(n,Rp,Wn);
[y,t]=impz(b,a,101);
stem(t,y,’.’);
由图1(a)可知,这种滤波器在100-200Hz的通带围是等波纹的,而在阻带中是单调的,这是ChebyshevI滤波器的幅频特性。
由图1(b)可知,在100-200Hz的围相移较小,其曲线近似一条直线,失真较小;
当频率超过这一围时,相移较大,而且其曲线是非直线的,所以失真也较大。
图1(c)得到了ChebyshevI滤波器的时域冲激响应,在5—100ms有冲激响应,超过这一围的冲激响应近似为零,进而实现了ChebyshevI带通滤波器的设计。
4.3.5IIR数字滤波器的仿真
通过调用Simulink中的功能模块,可以构成数字滤波器的仿真框图。
在仿真过程中,双击各功能模块,随时改变参数,获得不同状态下的仿真结果。
例如原始信号x(t)=2sin(0.05Pt)+w(t),w(t)为随机信号,幅值为0.2,通过一传递函数为H(z)=0.15/(1-0.8z-1)的滤波器可得到如图2的仿真结果。
其中仿真过程中可导入FDATool所设计的滤波器文件。
图2Simulink仿真结果
比较图2中(b)和(c)的波形可知,输入的原始信号经过滤波器滤波后,(b)中波形的毛刺部分(即干扰噪声)被滤除,输出的信号更接近正弦波,如(c)中所示波形。
由此说明,传递函数为H(z)=0.15/(1-0.8z-1)的滤波器的设计是恰当的。
5FIR数字滤波器与IIR数字滤波器的比较
从性能上来说,IIR滤波器传递函数包括零点和极点两组可调因素,对极点的惟一限制是在单位圆。
因此可用较低的阶数获得高的选择性,所用的存储单元少,计算量小,效率高。
但是这个高效率是以相位的非线性为代价的。
选择性越好,则相位非线性越严重。
FIR滤波器传递函数的极点固定在原点,是不能动的,它只能靠改变零点位置来改变它的性能。
所以要达到高的选择性,必须用较高的阶数;
对于同样的滤波器设计指标,FIR滤波器所要求的阶数可能比IIR滤波器高5-10倍,结果,成本较高,信号延时也较大;
如果按线性相位要求来说,则IIR滤波器就必须加全通网络进行相位校正,同样要大大增加滤波器的阶数和复杂性。
而FIR滤波器却可以得到严格的线性相位。
从结构上看,IIR滤波器必须采用递归结构来配置极点,并保证极点位置在单位圆。
由于有限字长效应,运算过程中将对系数进行舍入处理,引起极点的偏移。
这种情况有时会造成稳定性问题,甚至产生寄生振荡。
相反,FIR滤波器只要采用非递归结构,不论在理论上还是在实际的有限精度运算中都不存在稳定性问题,因此造成的频率特性误差也较小。
此外FIR滤波器可以采用快速傅里叶变换算法,在相同阶数的条件下,运算速度可以快得多。
另外,也应看到,IIR滤波器虽然设计简单,但主要是用于设计具有分段常数特性的滤波器,如低通、高通、带通及带阻等,往往脱离不了模拟滤波器的格局。
而FIR滤波器则要灵活得多,尤其是他易于适应某些特殊应用,如构成数字微分器或希尔波特变换器等,因而有更大的适应性和广阔的应用领域。
从上面的简单比较可以看到IIR与FIR滤波器各有所长,所以在实际应用时应该从多方面考虑来加以选择。
从使用要求上来看,在对相位要求不敏感的场合,如语言通信等,选用IIR较为合适,这样可以充分发挥其经济高效的特点;
对于图像信号处理,数据传输等以波形携带信息的系统,则对线性相位要求较高。
如果有条件,采用FIR滤波器较好。
当然,在实际应用中可能还要考虑更多方面的因素。
6结论
利用MATLAB的信号处理工具箱强大的信号处理功能,采用编程的方法设计数字滤波器,使设计达到了最优化;
并且它可以快速的实现数字滤波器的仿真,使设计达到了最简化。
本文设计的数字滤波器采用IIR和FIR两种方法来实现,其中IIR采用巴特沃什,FIR采用布莱克曼窗函数法,按设计指标要求进行设计。
利用MATLAB采用编程的方法实现。
通过对IIR数字滤波器和FIR数字滤波器的比较可知IIR数字滤波器幅频特性较好,而相频特性曲线呈非线性,会使信号产生失真,阶数比FIR数字滤波器低,系统不稳定;
FIR数字滤波器相位线性,信号在传输过程中不会产生失真,系统稳定,阶数高,而幅频特性难以满足要求。
参考文献
[1]志凯.数字滤波与卡尔曼滤波[M],:
中国科学技术,1993:
100-120.
[2]健,勇.数字信号处理[M],:
清华大学,2006:
103-155.
[3]怀琛.数字信号处理教程—MATLAB释义与实现[M],:
电子工业,2004:
106-123.
[4]邓华.MATLAB通信仿真及应用实例解析[M],:
人民邮电,1997:
123-156.
[5]胡光书.数字信号处理:
理论、算法与实现[M],:
清华大学,1997:
136-155.
[6]楼天顺.基于MATLAB的系统分析与设计-信号处理[M],:
电子科技大学,1998:
133-142.
[7]徐明远.MATLAB仿真在通信与电子工程中的应用[M],:
电子科技大学,2005:
154-187.
[8]后金.数字信号处理[M],:
高等教育,2004:
124-177.
[9][美]SanjitK.Mitra著,烘,余翔宇等译.数字信号处理实验指导书(MATLAB版)[M],:
电子工业,2005:
71-85.
[10]桂明,明照,戚红雨.应用MATLAB语言处理数字信号与数字图像[M],:
科学,2001:
165-200.
[11]健,毅,菊平.数字信号处理学习辅导[M],:
93-95.