我必须设计 2 个具有以下规格的 IIR 带通滤波器:
采样频率 1000 Hz 通带 50 Hz 至 200 Hz 6 阶,使用双线性变换和脉冲不变性以及巴特沃斯原型模拟滤波器。
我很困惑,因为我用来制作过滤器的两种方法有不同的结果。
fs = 1000;
fNq = fs/2;
f1 = 50/fNq;
f2 = 200/fNq;
[z,p,k] = buttap(6);
[A,B,C,D] = zp2ss(z,p,k);
[zd,pd,kd] = bilinear(z,p,k,fs);
Bw = f2-f1;
Wo = sqrt(f1*f2);
[At,Bt,Ct,Dt] = lp2bp(A,B,C,D,Wo,Bw);
[b,a] = ss2tf(At,Bt,Ct,Dt);
[Ad,Bd,Cd,Dd] = bilinear(At,Bt,Ct,Dt,fs);
[bz, az] = ss2tf(Ad,Bd,Cd,Dd);
fvtool(bz,az);
(我认为)上面的代码创建了一个模拟原型,转换为状态空间形式,应用双线性转换,将低通滤波器转换为带通滤波器,转换为传递函数并绘制它。
我的问题是它与以下内容明显不同:
[num,den] = butter(6, [f1, f2], 's');
[B,A] = bilinear(num, den, fs);
fvtool(B, A);
我对脉冲不变性方法有类似的问题。
有人可以给我一个提示我做错了什么吗?