我对 SciPy 中的巴特沃斯滤波器的模拟和数字版本有一个问题,我尝试了两件事来获得一个数字巴特沃斯滤波器:
通过scipy.signal.er
与og=True
获得一个模拟滤波器,然后使用scipy.signal.bilinear
将其转换为数字滤波器。
直接从函数scipy.signal.er
获取og=False
。
我从这两种方法得到了不同的结果。我应该期望这两种方法产生相同的结果吗?我的代码:
from scipy import signal
b1, a1 = signal.er(1, 1, 'high', og=True)
print("og filter: ", [b1, a1])
fs = 100
b2, a2 = signal.bilinear(b1, a1, fs)
print("digital filter from bilinear transformation of og filter: ", [b2, a2])
b, a = signal.er(1, 1*2/fs, 'high', og=False)
print("digital filter: ", [b, a])
输出:
og filter: [array([1., 0.]), array([1., 1.])]
digital filter from bilinear transformation of og filter: [array([ 0.99502488, -0.99502488]), array([ 1. , -0.99004975])]
digital filter: [array([ 0.96953125, -0.96953125]), array([ 1. , -0.93906251])]
我只是通过阅读一些关于数字滤波器的材料来得到这个问题的答案a note about digital filter
The bilinear transformation between ogue filter and digital filter gives us a non-linear relationship between the ogue frequency
and digital frequency
as introduced in the material.
因此,如果需要数字滤波器,最好直接从scipy.signal.er
设计它。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(9条)