数字滤波器设计方法与MATLAB实现
一、先来介绍IIR数字滤波器、FIR数字滤波器的设计方法:
1. IIR数字滤波器的设计方法
借助模拟滤波器设计方法分为脉冲响应不变法,频率变换法,双线性变换法等。
- 脉冲响应不变法
利用模拟滤波器来设计数字滤波器,就是从已知的模拟滤波器传递函数Ha(s)设计数字滤波器的系统函数H(z)。
因此,它归根结底是一个由S平面映射到Z平面的变换,这个变换通常是复变函数的映射变换,为了保证转换后的H(z)稳定且满足技术要求,这个映射变换必须满足以下两条基本要求:因果稳定的模拟滤波器转换成数字滤波器,仍是因果稳定的。即 S平面的左半平面必须映射到Z平面单位圆的内部。数字滤波器的频率响应模仿模拟滤波器的频率响应,s平面的虚轴映射为z平面的单位圆,相应的频率之间成线性关系。
核心原理:通过对连续函数ha(t)等间隔采样得到离散序列ha(nT)。它是一种时域上的转换方法
- 频率变换法
把一个频带范围变换到另一个相应的频带范围,称之为频率变换.利用频率变换可设计各种类型的频率选择滤波器.其基本思想是:根据给定的待设计指标,先变换成相应的低通原型滤波器的设计指标;然后按照低通滤波器的设计方法,设计出一个低通原型波滤器;最后再通过频率变换,求得所要求的实际低通、高通、带通、或带阻滤波器.频率变换有模拟频率变换与数字频率变换,可根据设计对象的要求来选取.
- 双线性变换法
双线性换法的主要优点是S平面与Z平面一单值对应,S平面的虚轴(整个jΩ)对应于Z平面单位圆的一周,S平面的Ω=0处对应于Z平面的ω=0处,对应即数字滤波器的频率响应终止于折迭频率处,所以双线性变换不存在混迭效应。
第一步:将整个S平面压缩到S1平面的一条横带里;
第二步:通过标准变换关系将此横带变换到整个Z平面上去。由此建立S平面与Z平面一一对应的单值关系,消除多值性,也就消除了混淆现象。
2. FIR数字滤波器的设计方法
- 窗函数法
窗函数设计法又称为傅里叶级数法。
核心:理想滤波器频率设计->反变换时域无限长信号->信号截断->右移变因果系统。
- 频率抽样法
频率抽样法是从频域出发,在频域直接设计,把给定的理想频率响应加以等间隔抽样,并以此作为实际FIR滤波器的频率响应。设所需滤波器的频率响应为。
对Hd[m]进行频率抽样,就是在z平面单位圆上的N个等间隔点上抽样出频率响应值。在单位圆上可以有两种抽样方式,第一种是第一个抽样点在w=0处,第二种是第一个抽样点在w=pi/M处,每种方式可分为M为偶数与M为奇数两种。
为了提高逼近质量,使逼近误差更小,也就是减小在通带边缘由于抽样点的徒然变化而引起的起伏变化(这种起伏振荡使阻带内最小衰减变小,例如从衰减30dB变小为衰减20dB)。和窗口法的平滑截断一样,这里是使理想频率响应的不连续点的边缘加上一些过渡的抽样点(在这些点上抽样的最佳值由计算机算出),从而增加过渡带,减小频带边缘的突变,也就是减小了起伏振荡,增大了阻带最小衰减。这些抽样点上的取值不同,效果也就不同。如果精心设计过渡带的抽样值,就有可能使它的游泳频带的博文减小,从而设计出较好的滤波器。一般过渡带取一、二、三点抽样值即可得到满意结果。
在理想低通滤波器的设计中,若不增加过渡点,阻带和通带之间的衰减约为-21dB,如果在通带和阻带之间增加一个采样点,阻带的最小衰减可以提高到-65dB,如果增加两个采样点,阻带的最小衰减可以提高到-75dB,如果增加3个采样点,阻带的最小衰减可以提高到-85dB至-95dB。
频率抽样法的优点是可以在频域直接设计,并且适合于最优化设计;缺点是抽样频率只能等于2pi/M的整数倍或等于2pi/M的整数倍上加上pi/M,因而不能确保截止频率Wc的自由取值。要想实现自由选择频率,则必须增加抽样点数M,但这种计算量加大。
- 切比雪夫逼近法。
切比雪夫最佳一致逼近的基本思想是,对于给定区间[a,b]上的连续函数f(x),在所有n次多项式的集合中,寻找一个多项式,使其在[a,b]上对f(x)的偏差和其他一切属于集合的多项式对f(x)的偏差相比是最小的。
利用切比雪夫设计FIR数字滤波器时,满足最佳一致逼近的滤波器又具有等纹波性质。存在通带纹波以及阻带纹波。在实际求解过程中,利用数值分析中的Remez算法,靠一次次迭代来求得一组交错点组。
二、MATLAB实现如下
1. IIR滤波器的设计
对于IIR滤波器,冲激响应理论上应会无限持续,其输出不仅取决于当前和过去的输入信号值,也取决于过去的信号输出值
滤波器的性能指标
低通滤波器性能指标 fp=500Hz, fs=550Hz, As=40dB, Ap=1dB。
高通滤波器性能指标 fs=4000Hz, fp=4300Hz, As=40dB, Ap=1dB
带通滤波器性能指标 fp1=1200 Hz, fp2=3000 Hz, fs1=1000 Hz,
fs2=3200 Hz, As=40dB, Ap=1dB。
滤波器设计要求:
(1) 设计IIR模拟滤波器原型:分别设计巴特沃斯型低通、高通、带通滤波器。
(2)设计切比雪夫和椭圆型低通滤波器,比较巴特沃斯型、切比雪夫和椭圆型低通滤波器的区别。
(3)设计IIR数字滤波器:用双线性变换法设计上面(1)要求的3种滤波器。
(4)设计FIR滤波器:用窗函数法设计上面要求的3种滤波器。可以利用函数fir1设计FIR滤波器。
2. IIR模拟滤波器
2.1 巴特沃斯低通滤波器
Fs = 2000;
fp = 500;
fs = 550;
As = 40;
Ap = 1;
[n,fn] = buttord(fp/(Fs/2),fs/(Fs/2),Ap,As); [b,a] = butter(n,fn);
[h,w] = freqz(b,a);
figure(1)
Hf=abs(h);
plot(w,Hf)
title('巴特沃斯低通滤波器')
axis([0 4 0 2])
2.2 巴特沃斯高通滤波器
clear
Fs = 12000; fp = 4300;
fs = 4000;
As = 40;
Ap = 1;
[n,fn] = buttord(fp/(Fs/2),fs/(Fs/2),Ap,As);
[b,a] = butter(n,fn,'high');
[h,w] = freqz(b,a);
figure(1)
Hf=abs(h);
plot(w,Hf)
title('巴特沃斯高通滤波器')
2.3 巴特沃斯带通滤波器
fp1=1200;fp2=3000;
fs1=1000;fs2=3200;
wp=[0.1*2*pi 0.15*2*pi];
ws=[0.05*2*pi 0.2*2*pi];
Rp=1;Rs=40;
[N,Wn]=buttord(wp,ws,Rp,Rs,'s');
fprintf('巴特沃斯带通滤波器 N= %4d\n',N);
[bb,ab]=butter(N,Wn,'s');
W=0:0.01:2;
[Hb,wb]=freqs(bb,ab,W);
plot(wb/pi,20*log10(abs(Hb)),'b');
hold on
title('巴特沃斯带通滤波器')
篇幅有限,暂时分享以上代码。
- 点赞
- 收藏
- 关注作者
评论(0)