Matlab 实现切比雪夫二型任意阶高通滤波
时间: 2023-05-29 09:04:03 浏览: 110
以下是 Matlab 实现切比雪夫二型任意阶高通滤波的代码:
```matlab
function [b, a] = cheby2_highpass(n, Wn, Rp)
% Chebyshev Type II highpass filter
% n: filter order
% Wn: normalized cutoff frequency (0 < Wn < 1)
% Rp: passband ripple (dB)
% prewarp frequency
Wc = tan(pi*Wn/2);
% calculate analog lowpass filter prototype
epsilon = sqrt(10^(Rp/10)-1);
a_lp = 1;
b_lp = epsilon*sqrt(1-1/(epsilon^2));
% transform to analog highpass filter
s = tf('s');
H_lp = b_lp/(s^2 + b_lp*s + 1);
H_hp = 1/H_lp;
% bilinear transform to discrete-time filter
[z, p, k] = tf2zpk(H_hp.num{1}, H_hp.den{1});
[zd, pd, kd] = bilinear(z, p, k, 1/Wc);
[b, a] = zp2tf(zd, pd, kd);
```
该函数接受三个输入参数:滤波器阶数 `n`、归一化截止频率 `Wn` 和通带纹波 `Rp`。输出参数是滤波器的分子系数 `b` 和分母系数 `a`。
实现过程中,首先通过预弯频率将离散滤波器设计转换为模拟滤波器设计。然后,根据通带纹波 `Rp` 计算模拟低通滤波器的 $\epsilon$ 和 $b_{lp}$ 参数。接着,将低通滤波器原型转换为高通滤波器,并进行双线性变换将其转换为离散滤波器。
最后,使用 `zp2tf` 函数将零极点转换为分子系数 `b` 和分母系数 `a`。
阅读全文