基于MATLAB的滤波器设计.docx
《基于MATLAB的滤波器设计.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的滤波器设计.docx(15页珍藏版)》请在冰豆网上搜索。
基于MATLAB的滤波器设计
基于MATLAB的滤波器设计
摘要论文结合滤波器的不同种类进行设计,运用MATLAB软件,针对性地进行了实例分析。
设计了巴特沃斯模拟滤波器(50Hz处的衰减为1dB,400Hz处的最小衰减为60dB,带内增益为4,通带内无波纹),和切比雪夫滤波器(通带频率2~3kHz、两边的过渡带宽为0.5kHz、通带纹波为1dB、阻带衰减大于100dB),并给出相应的程序。
对于数字滤波器,通过FIR滤波器和IIR滤波器实例,运用MATLAB实现,给出了的相应的图形。
关键词滤波器;MATLAB;FIR滤波器;巴特沃斯滤波器;切比雪夫滤波器;
BasedontheMATLABfilterdesign
AbstractThispapercombiningthedifferentkindsoffiltertoachievethedesign,usedtheMATLABsoftware,andanalyzedtheproblemswhichaimedparticular.thesimulationfilterisbasedontheexamplesofBartheworthfilter(Requesttheattenuationin50Hzis1dB,requiregainthatlocatedintheminimumattenuationat60dBin400Hzplaceis4,andthenorippleinthepass-band)andChebyshevfilter(Passbandfrequencyisbetween2~3kHz,bothsidesoftransitionbandwidthis0.5kHz,passbandrippleis1dB,andstopbandattenuationbeyond100dB),thenprovidesthecorrespondingprogram.ThoughDigitalfiltersismainlybytheexampleofanalyzingFIRfilters,usingtheMATLABtorealize;thispaperusestheMATLABgaveoutthegraphicsdisplays.
Key-wordsFilter;MATLAB;FIRfilter;Bartheworthfilter;Chebyshevfilter
1引言
在工程实际中遇到的信号经常伴有噪声,为了消除或减弱噪声,提取有用信号,必须进行滤波,能实现滤波功能的系统称为滤波器。
严格地讲,滤波器可以定义为对已知的激励提供规定响应的系统,响应的要求可以在时域或频域内给定。
滤波器的功能主要由其系统函数决定。
滤波技术在通信测量、数据采集、控制系统及电力系统等领域得到了广泛的应用。
滤波器的设计在这些领域中必不可少,甚至是至关重要的环节,其优劣将直接影响整个系统的性能。
滤波器设计的关键是找到一个稳定可实现的逼近函数,其频率特性满足所需滤波器的所有要求。
虽然目前已有多种成熟的逼近函数(矩形窗等),然而不论哪种逼近函数都需要进行非常繁琐的计算,而且通过综合设计确定实现这一传递函数的电路及其元件值的过程也很复杂。
MATLAB中提供了丰富的用于模拟滤波器设计和数字滤波器设计的函数,通过编程可以很容易实现低通、高通、带通、带阻滤波器,并能画出滤波器的幅频、相频特性曲线。
本文是通过举例设计模拟和数字两种滤波器的设计方法的实现、电路图的以及仿真出其波形。
2MATLAB软件的简单介绍
MATLAB是国际公认的优秀科技应用软件,是计算机辅助分析与设计、算法研究和应用开发的基础工具和首选平台,是目前科学研究领域最流行的应用软件,其特点概括为[1]:
(1)高效的数字计算方法及符号计算功能,使用户从繁杂的数学运算分析中解脱出来。
(2)完备的图形处理功能,实现计算结果和编程的可视化。
(3)友好的用户界面及接近数学表达式的自然化语言,使学习者易于学习和掌握。
(4)功能丰富的应用工具箱,为用户提供了大量方便而实用的处理工具。
(5)Simulink动态建模与仿真系统,丰富而功能强大的器件库,提供了实时方便的仿真手段。
MATLAB软件是由美国Mathworks公司推出的用于数值计算和图形处理的科学计算系统环境。
MATLAB是英文MatrixLaborutory(矩阵实验室)的缩写。
是现今国际公认的最优秀的科技应用软件,它具有强大的数值计算和工程运算功能、符号计算功能和科学数据可视化能力。
广泛应用于数值计算、图形分析、过程控制、系统识别、实时控制和动态仿真等领域。
成为大学生、硕士生和博士生必须掌握的基本技能。
同时,MATLAB也被研究单位和工业部门广泛应用,使科学研究和解决各种具体问题的效率大大提高。
MATLAB集成环境主要包括五个部分[2]:
MATLAB语言、MATLAB工作环境、句柄图形、MATLAB数学函数库和数学建模、小波分析、MATLABAPI(ApplicationProgramInterface)。
MATLAB语言是以数组为基本数据单位,包括控制流程语句、函数、数据结构、输人输出及面向对象等特点的高级语言。
利用SIMULINK对系统进行仿真与分析[3],在进入虚拟实验环境后,不需要书写代码,只需使用鼠标拖动库中的功能模块并将它们连接起来,再按照实验要求修改各元器件的参数。
通过虚拟实验环境建立实验仿真电路模型,可使一些枯燥的电路变得有趣味,复杂的波形变得形象生动,使得各种复杂的能量转换过程比较直观地呈现。
3基于MATLAB的滤波器设计
由于滤波器种类的不同,在此讨论基于MATLAB的模拟滤波器设计和基于MATLAB的数字滤波器的设计。
3.1基于MATLAB的模拟滤波器的设计
3.1.1利用MATLAB确定低通滤波器的阶数和幅频特性曲线
设计要求:
模拟信号输入滤波器,要求在50Hz处的衰减为1dB,在400Hz处的最小衰减为60dB带内增益为4,通带内无波纹,而且要减小截止频率后波形的起伏。
根据对设计要求的分析,低通滤波器采用Butterworth滤波器,因为它具有较平坦的幅频特性,而且其元件值比较合乎实际、对精度要求稍宽。
下面利用MATLAB确定该低通滤波器的阶数,并画出其幅频特性(图1),程序代码如下[4]:
Wp=50*2*pi;
Ws=400*2*pi;
Rp=1;
Rs=60;
[N,Wn]=buttord(Wp,Ws,Rp,Rs,'s')
Fc=Wn/(2*pi);
[b,a]=butter(N,Wn,'s');
w=linspace(1,800,10000)*2*pi;
H=freqs(b,a,w);
magH=abs(H);
plot(w/(2*pi),20*log10(magH));
xlabel('频率(Hz))';
ylabel('幅度(dB))';
title('幅频特性)';
运行结果:
N=
4
Wn=
446.9304
图14阶Butterworth滤波器的幅频特性
由图1可以看出,由MATLAB所设计的5阶Butterworth滤波器波形在通带内平直、没有波纹,阻带内陡降,符合我们对滤波特性的实际要求,所以滤波器的阶数选为4阶。
在MATLAB中,用[N,Wn]=buttord(Wp,Ws,Rp,Rs,'s')语句实现Butterworth滤波器阶数和边缘频率的确定;[b,a]=butter(N,Wn,'s')语句来实现Butterworth滤波器的设计。
其中Wp为通带截止频率;Rp为通带截止频率处的衰减;Ws为阻带截止频率;Rs为阻带截止频率处的衰减;[b,a]是滤波器传递函数多项式的系数;n为滤波器的阶数;Wn为截止频率;‘s’表示模拟滤波器的。
3.1.2利用MATLAB设计带通滤波器
设计高通、带通、带阻滤波器的传统方法是:
根据对高通、带通、带阻滤波器的特性指标要求,导出相应的低通原型的指标来,然后确定低通原型的传递函数H(s),再根据一定变换关系得出高通、带通、带阻滤波器的传递函数。
而用MATLAB可以像设计低通滤波器一样直接得出高通、带通、带阻滤波器的参数和特性曲线。
设计一带通滤波器,设计要求为:
通带频率2~3kHz、两边的过渡带宽为0.5kHz、通带纹波为1dB、阻带衰减大于100dB,并画出幅频特性曲线[5](如图2所示)。
程序如下:
wp=[20003000]*2*pi;
ws=[15003500]*2*pi;
Rp=1;
Rs=100;
[N,Wn]=buttord(wp,ws,Rp,Rs,'s');
%计算阶数和截止频率
Fc=Wn/(2*pi);
[b,a]=butter(N,Wn,'s');
%计算滤波器传递函数多项式系数
w=linspace(1,4000,1000)*2*pi;
H=freqs(b,a,w);
magH=abs(H);
phaH=unwrap(angle(H));
plot((w/2*pi),20*log10(magH),'b');
xlabel('频率/Hz’);
ylabel('幅度/dB’);
gridon
运行结果:
N=
22
Wn=
1.0e+004*1.9070
图2巴特沃思带通滤波器的幅频特性
因此该带通滤波器的阶数为N=22
3.2基于MATLAB的数字滤波器的设计
数字滤波器又分为无限冲击响应数字滤波器(IIR)和有限冲击响应数字滤波器(FIR),在此举例基于MATLAB的FIR滤波器的设计和IIR滤波器的设计来讨论数字滤波器的设计。
3.2.1FIR数字滤波器设计原理
FIR数字滤波器可以用下面的差分方程来描述[6]
其中x(n)是输入序列,y(n)是输出序列,h(n)是系统的单位脉冲响应。
由于其采用卷积的方法得到输出,故可以采用快速算法FFT进行卷积计算,提高信号处理速度。
FIR数字滤波器满足线性相位的条件是其乘法器的系数关于中点对称,又因为其结构无反馈的回路,所以是无条件的稳定系统。
3.2.2窗函数法设计及MATLAB实现
FIR滤波器目前常用的设计方法有窗函数法和频率采样法,窗函数法是从时域进行设计,而频率采样法是从频域进行设计。
窗函数法由于简单、物理意义清晰,因而得到了较为广泛的应用。
窗函数法设计的基本思想是:
首先根据技术指标要求,选取合适的阶数N和窗函数的类型
,使其幅频特性逼近理想滤波器幅频特性。
其次,因为理想滤波器的
是无限长的,所以需要对
进行截断,数学上称这种方法为窗函数法[1]。
其中
是希望逼近的滤波器的单位脉冲响应,
是希望逼近的滤波器的幅频特性,
是所设计的滤波器的单位脉冲响应,
是窗函数。
在截断的过程中要保证FIR滤波器的稳定性与线性相位的特性。
由于截断效应使所设计滤波器的幅频特性存在误差,称之为吉布斯效应。
最后,验证所设计的滤波器是否满足要求,若不满足,重新设计。
常用的窗函数有矩形窗、三角窗、汉宁窗和凯塞窗等。
窗函数的选择一般要满足以下三个条件[7]:
(1)具有较低的旁瓣幅度,尤其是第一旁瓣幅度。
(2)旁瓣幅度下降速度要快,以利于增加阻带衰减。
(3)主瓣宽度要窄,以获得较陡的过渡带。
FIR滤波器的设计任务是选择有限长度的h(n),使函数H(ejω)满足技术要求。
本文将针对一个含有1000Hz和2000Hz的正弦波信号,设计一个FIR低通滤波器。
参数要求:
采样频率FS=8000Hz,通带为0~1200Hz,阻带1600~4000Hz,通带波纹为1%,阻带波纹10%。
下面将利用程序设计法,SPTool设计法和FDA-Tool设计法对上述滤波器进行设计。
3.2.3程序设计法
在Matlab下设计FIR滤波器有多种函数,如fir1,fir2,firls,remez,fircls,firclsl,cremez,firrcos。
下面以remez函数设计滤波器[8]。
程序如下:
Fs=8000;%采样频率
f=[12001600];
a=[10];
dev=[0.010.1];
[n,fo,ao,w]=remezord(f,a,dev,Fs);%估计滤波器的参数
b=remez(n,fo,ao,w);%用remez函数设计滤波器
freqz(b,1,1024,Fs);%滤波器的频率响应,如图1
t=(0:
100)/Fs;
x=sin(2*pi*t*1000)+sin(2*pi*t*2000);%设置输入信号x
x1=filter(b,1,x);%对信号x进行滤波,得输出信号x1
figure
subplot(211);plot(t,x);grid;
subplot(212);plot(t,x1);grid;
程序运行结果如图3,图4所示:
图3上图为幅频特性,下图为相频特性
图4上图为输入信号x,下图为输出信号x1
3.2.4IIR数字滤波器的设计
IIR数字滤波器冲激响应无限宽,与模拟滤波器相匹配。
因此可采取在模拟滤波器设计的基础上进一步变换的方法设计IIR滤波器,即通过已知的模拟滤波器系统的系统函数H(s)来设计数字滤波器的系统函数H(z),主要是通过脉冲响应不变法或双线性变换法完成s平面到Z平面的变换。
通过典型的模拟滤波器(如巴特沃斯滤波器、切比雪夫滤波器等)可实现一定参数要求的数字滤波器。
IIR数字滤波器的设计具体步骤[9]:
(1)按照既定规则将数字滤波器技术指标转为模拟低通滤波器技术指标。
(2)以转换后的技术指标为依据设计模拟低通滤波器H(s)(传递函数)。
(3)再按照一定规则将H(s)转换成H(z)(数字滤波器的传递函数)。
若设计的是高通、带通或带阻滤波器,还需进行以下步骤:
将高通、带通或带阻数字滤波器的技术指标转换为低通模拟滤波器的技术指标,然后设计出低通H(s),再将H(s)转换为H(z)。
(1)程序如下[10]:
wp0=0.5*pi;wp1=0.4*pi;wp2=0.6*pi;Ap=3;ws2=0.7*pi;As=15;
T=5*pi*10^(-6);
%用双线性变换法设计滤波器
%频率预畸变
ws1=wp0-(ws2-wp0);
wc1=(2/T)*tan(wp1/2);wc2=(2/T)*tan(wp2/2);
wr1=(2/T)*tan(ws1/2);wr2=(2/T)*tan(ws2/2);
w0=(2/T)*tan(wp0/2);
B=wc2-wc1;
%将指标转换成归一化模拟低通滤波器的指标
nowr1=(((wr1^2)-(w0^2))/(B*wr1));
nowr2=(((wr2^2)-(w0^2))/(B*wr2));
nowc1=(((wc1^2)-(w0^2))/(B*wc1));
nowc2=(((wc2^2)-(w0^2))/(B*wc2));
%设计归一化的模拟低通滤波器
if(abs(nowr1)-abs(nowr2))>0
nowr=abs(nowr2);
else
nowr=abs(nowr1);
end
nowc=1;
N=buttord(nowc,nowr,Ap,As,'s');
[bLP,aLP]=butter(N,nowc,'s');
[bBP,aBP]=lp2bp(bLP,aLP,w0,B);%用双线性变换法转换成数字滤波器
Fs=1/T;
[b,a]=bilinear(bBP,aBP,Fs);
w=linspace(0,pi,500);
h=freqz(b,a,w);
plot(w,20*log10(abs(h)));
axis([0,pi,-120,20]);grid;
xlabel('frequency(rad)');
ylabel('gain(db)');sys=tf(b,a,T)
(2)其图形如图5所示:
图5MATLAB程序设计法仿真波形
结论
论文通过利用MATLAB来设计数字滤波器和模拟滤波器,对于不同的设计要求,只需修改程序中的参数,运行后即可得到相应的阶数和截止频率,避免了复杂的运算及查表,使得滤波器的设计与实现趋于方便。
其中给出了巴特沃斯滤波器低通滤波器和巴特沃斯带通滤波器的实现程序、FIR数字滤波器的实现程序、IIR数字滤波器的实现程序以及各种滤波实现的滤波图形。
MATLAB软件使得工程设计中滤波器技术更加趋于完善,通过论文设计掌握了MATLAB的基本使用方法。
参考文献
[1]郑君里,应启衍,杨为理.信号与系统[M].北京:
高等教育出版社,2000.
[2]郑阿奇.MATLAB实用教程[M].浙江:
浙江电子出版社,2003.
[3]周学军.基于MATLAB的模拟滤波器的设计与仿真[M].陕西:
西安电子科技大学出版社,2010.
[4]姜春玲,史玲.基于MATLAB的模拟滤波器的设计[M].山东:
山东交通学院学报,2004.
[5]李瀚荪.电路分析[M].北京:
高等教育出版社,2005.
[6]程佩青.数字信号处理教程(第2版)[M].北京:
清华大学出版社,2002.
[7]高西全,丁玉美.数字信号处理(第3版)[M].陕西:
西安电子科技大学出版社,2008.
[8]林炜鹏.基于MATLAB的FIR数字滤波器的设计[M].广东:
广东科技出版社,2009.
[9]张维玺.巴特沃斯数字陷波滤波器的设计[M].北京:
现代电子技术出版社,2002.
[10]张春生,钱萌.MATLAB在数字滤波器设计中的应用探索[M].北京:
现代电子技术出版社,2008.
致谢
值此论文完成之际,我首先衷心感谢尊敬的导师***老师。
在求学期间,杨老师对我的学习和研究工作给予了极大的关怀和帮助。
正是由于他的严格要求和悉心指导,本文的研究工作才得以顺利完成。
杨老师深厚广博的学识修养、严谨求实的治学态度、敏锐活跃的学术思想、崇高执著的敬业精神和平易近人的学者风范深刻影响和教育了我,严谨的治学精神和良好的科研方法给学生留下了深刻的印象,将是我毕生受益的宝贵财富。
在此,对杨一军老师表示最诚挚的谢意!
谨向四年来为学生的成长和进步倾注了无数心血的老师们表示衷心的谢意!
在多年的学习生活中,还得到了许多领导和老师的热情关心和帮助。
在日常学习和生活中,我的室友****等关心和支持我,在完成论文之际***给了我很大帮助,在此对他们表示感谢。
感谢为我操劳一生的父母,没有您们对我的教导和关怀,就没有我现在的一切,您们对子女的深爱和支持我将铭记终生!
在此,向所有关心和帮助过我的领导、老师、同学和朋友表示由衷的谢意!
衷心地感谢在百忙之中评阅论文和参加答辩的各位老师,教授!