且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

MATLAB中的高通滤波

更新时间:2022-10-15 15:58:41

有几个过滤器可以使用,而过滤器的实际选择将取决于你想要的实现。既然你提到了Butterworth,Chebyschev和Elliptical过滤器,我假设你一般都在寻找IIR过滤器。

***是一个很好的开始阅读不同的过滤器和他们做的。例如,上的wiki文章,尤其是关于稳定性的部分。



为了进一步说明我的观点,请考虑下面的带通滤波器。

  fpass = [0.05 0.2];%#通带
fstop = [0.045 0.205]; %#频率下降到一半功率
Rpass = 1;%#最大允许波段阻带(dB)
Astop = 40;%#最小40dB衰减
n = cheb2ord(fpass, fstop,Rpass,Astop);%#计算最小滤波器顺序以达到这些设计要求

[b,a] = cheby2(n,Astop,fstop);

现在,如果您使用 zplane(b, a),你会发现在单位圆外有几个极点( x ),这使得这个方法不稳定。 >



,这一点从频率响应全是无用的事实可以看出。使用 freqz(b,a)来获得以下内容: $ b



为了得到一个更稳定的滤波器,你需要精确的设计要求在MATLAB中使用 zpk 方法而不是 ba 来使用二阶滤波器。下面是如何使用与上面相同的过滤器:

pre code> [z,p,k] = cheby2(n,Astop,fstop);
[s,g] = zp2sos(z,p,k);%#创建二阶段
Hd = dfilt.df2sos(s,g);%#创建一个dfilt对象。

现在,如果你看看这个过滤器的特性,你会看到所有的极点在里面单位圆(因此稳定)并符合设计要求。