滤波器设计与信号处理的matlab实现(2014年12月)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
滤波器设计与信号处理的MATLAB 实现
庞 勇 2014年12月
1. IIR 滤波器设计和MATLAB 实现
1.1 IIR 滤波器设计原理
对于IIR 滤波器设计,我们主要学习的是由模拟滤波器设计数字滤波器的方法,设计思路和流程如图:
目的满足
先设计
基于第3步由模拟滤波器向数字滤波器的转化方式,IIR 滤波器设计方法分为“脉冲响应不变法”和“双线性变换法”,由于“脉冲响应不变法”存在混叠误差的缺陷,因此一般我们多选“双线性变换法”,而对于第2步模拟滤波器的设计,我们主要学习的是巴特沃斯设计方法,因此这里以“巴特沃斯滤波器双线性变换”设计法为例来阐述IIR 滤波器的设计方法和matlab 实现。
“巴特沃斯滤波器双线性变换”设计法的设计流程:
终始DF 指标
DF
()
c H s ()
d H z 11
211z s T z ---=
+
原理解释:
δ1δ-1+δ
222p
T
tg 1-1+2
s T
2
2tg ()
c H j Ω2p
T ω
Ω
2
δ1
1δ-1
1+δ2
s T
ω(d p ωs
ω0
δ1δ-1
1+π
其中巴特沃斯模拟滤波器设计流程为:
1+2
δ1δ-δH 得两点代入()j ΩN
Ωj A 点代入
()H Ω得c H(s)H(-s)极点分布:共2N 个共圆c
Ω等角距N π
1.2 “巴特沃斯滤波器双线性变换”设计法的matlab 实现:
按照设计原理和流程,每一步都可以在matlab 里进行编程计算,因此完全可以编程实现从技术指标到系统函数的整个计算,并且matlab 的信号处理工具箱已经把这整个计算过程编成函数供人们直接调用,我们只要了解这个函数的使用方法就可以了。
下面两个函数的联用就由技术指标计算出系统函数:
[N,Wn]=buttord(wp,ws,rp,rs); [b,a]=butter(N,Wn);
函数“buttord ”由技术指标计算出巴特沃斯滤波器的阶数和3dB 截止频率。其中“wp,ws,rp,rs ” 分别表示通带截止频率,阻带截止频率,通带衰减和阻带衰减;“N,Wn ” 分别表示巴特沃斯滤波器阶数和3dB 截止频率。
注意:wp,ws 要求用归一化频率,即把0-pi ,归为0-1;rp,rs 用dB 数表示;Wn 指的是,模拟巴特沃斯滤波器经双线性变换成数字滤波器时的3dB 截止频率,且是归一化表示。
函数“butter ”由巴特沃斯滤波器阶数和3dB 截止频率计算出系统函数。其中“b,a ”表示系统函数的系数序列。我们知道数字滤波器系统函数一般形式
为: ()1201212012M
M N
N b b z b z b z H z a a z a z a z ------++++=++++,“b,a ”就分别是系数序列
[]0
12
M b b b b 和[]0
12
N a a a a 。
例:设计一个满足以下技术指标的数字滤波器:
0.1
0.9
通阻带截止频率分别为0.3π和0.7π,归一化表示就是:0.3p ω=和0.7s ω=。通阻带衰减的dB 表示分别为()1
20lg 0.9151dB 0.9
p r ==和()120lg 20dB 0.1s r == 编程:
wp=0.3;ws=0.7;rp=0.9151;rs=20; [N,Wn]=buttord(wp,ws,rp,rs); [b,a]=butter(N,Wn);
返回:
b = 0.1447 0.4342 0.4342 0.1447 a = 1.0000 -0.1677 0.3408 -0.0153 于是设计出数字滤波器:
()123
123
0.14470.43420.43420.144710.16770.34080.0153z z z H z z z z ------+++=-+-
上述设计原理和方法是以低通滤波器为例来说明,如果要设计高通、带通、带阻等其它类型滤波器,只需要由低通滤波器进行转换而来,下面进行详细介绍。
1.3IIR各类滤波器设计原理和MATLAB实现
IIR各类数字滤波器设计原理如图所示:
在matlab里,整个设计计算过程由同样两个函数的联用来实现:
[N,Wn]=buttord(wp,ws,rp,rs);
[b,a]=butter(N,Wn,‘*’);
其中“wp,ws,rp,rs”可以表示各类数字滤波器技术指标:
对于低通就有wp
对于带通就有wp=[wp1, wp2],ws=[ws1, ws2],且ws1 对于带阻就有wp=[wp1, wp2],ws=[ws1, ws2],且wp1 函数“butter”可以设计各类滤波器: [b,a]=butter(N,Wn),若Wn为一数值,则设计低通滤波器; 若Wn为一向量wn=[wn1, wn2],则设计带通滤波器; [b,a]=butter(N,Wn,‘high’),且wn为一数值,设计高通滤波器; [b,a]=butter(N,Wn,‘stop’),且wn=[wn1, wn2],设计带阻滤波器。