使用双线性变换的一阶模拟滤波器的数字实现

信息处理 matlab 过滤器 低通滤波器 频率响应
2022-01-28 22:15:04

和时间常数的一阶模拟滤波器创建一个数字滤波器 ,并且采样率

H(s)=11+τs
τ=.1sfs=1000Hz

然而,在 Matlab 中应用双线性变换似乎会产生一个与预期不同的 3dB 点的滤波器。我希望 3dB 点位于,但它似乎在左右。知道我可能做错了什么吗? 1τ=10Hz1.6Hz低通滤波器的频率响应

Matlab代码:

fs = 1000;
tau = .1;

num = 1;
den = [tau, 1];
[numd,dend]=bilinear(num,den,fs);

[h, f] = freqz(numd,dend,4096, fs);

figure(1); clf();
subplot(211); semilogx(f,20*log10(abs(h))); hold on
plot([.1, 1000], [-3 -3],'r'); 
grid on; ylim([-40,1]); ylabel('gain (db)'); xlim([.1, fs/2]);
subplot(212); semilogx(f, angle(h)*180/pi); 
grid on; ylabel('phase(rad)'); xlim([.1, fs/2]); xlabel('frequency(Hz)');
3个回答

由于弧度转换,预期的 3dB 频率是错误的。时, 但是,所以 使用与原始图相同。s=jω

H(jω)=11+τjω
20log10|H(jω)|3ω=ω3dB=1τω=2πf
f3dB=ω3dB2π=12πτ.
τ=0.1s f3dB=1.59Hz

我能够使用频率扭曲参数来获得接近您正在寻找的结果。参数值并没有达到我的预期,但无论如何我得到了一个不错的形状:

[numd,dend]=bilinear(num,den,fs, 470);

在此处输入图像描述

对于那些不使用 Matlab 的人,我是否可以建议一种完全不同的方法。

从 H(s) 的一阶和/或二阶系数获得二阶 IIR 滤波器系数非常简单。此链接显示了低通、高通、带通和陷波 IIR 滤波器的推导。最终的结果非常简单。

http://www.iowahills.com/A4IIRBilinearTransform.html