模拟与数字版本的Butterworth Filter在Scipy中
我有一个关于 SciPy 中巴特沃斯滤波器的模拟和数字版本的问题。我尝试了两件事来获得数字巴特沃斯滤波器:
- 通过
scipy.signal.butter
与analog=True
,然后使用scipy.signal.bilinear
将其转换为数字滤波器。 - 使用
analog=False
直接从函数scipy.signal.butter
获取。
我从这两种方法中得到了不同的结果。我应该期望这两种方法得到相同的结果吗?我的代码:
from scipy import signal
b1, a1 = signal.butter(1, 1, 'high', analog=True)
print("analog filter: ", [b1, a1])
fs = 100
b2, a2 = signal.bilinear(b1, a1, fs)
print("digital filter from bilinear transformation of analog filter: ", [b2, a2])
b, a = signal.butter(1, 1*2/fs, 'high', analog=False)
print("digital filter: ", [b, a])
输出:
analog filter: [array([1., 0.]), array([1., 1.])]
digital filter from bilinear transformation of analog filter: [array([ 0.99502488, -0.99502488]), array([ 1. , -0.99004975])]
digital filter: [array([ 0.96953125, -0.96953125]), array([ 1. , -0.93906251])]
I have a question about the analog and digital versions of the Butterworth filter in SciPy. I tried two things to get a digital Butterworth filter:
- Getting an analog filter by
scipy.signal.butter
withanalog=True
, and then usingscipy.signal.bilinear
to transform it into a digital filter. - Directly getting from the function
scipy.signal.butter
withanalog=False
.
I got different results from the two methods. Should I expect same result from these two approaches? My code:
from scipy import signal
b1, a1 = signal.butter(1, 1, 'high', analog=True)
print("analog filter: ", [b1, a1])
fs = 100
b2, a2 = signal.bilinear(b1, a1, fs)
print("digital filter from bilinear transformation of analog filter: ", [b2, a2])
b, a = signal.butter(1, 1*2/fs, 'high', analog=False)
print("digital filter: ", [b, a])
Output:
analog filter: [array([1., 0.]), array([1., 1.])]
digital filter from bilinear transformation of analog filter: [array([ 0.99502488, -0.99502488]), array([ 1. , -0.99004975])]
digital filter: [array([ 0.96953125, -0.96953125]), array([ 1. , -0.93906251])]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我只是通过阅读有关数字过滤器的一些材料有关数字过滤器的注释
双线性转换
模拟滤波器和数字滤波器之间都可以在我们之间建立非线性关系模拟频率
和数字频率
,如材料中所引入的。
因此,如果需要数字过滤器,请直接从
scipy.signal.butter.butter.butter.butter.butter.butter.butter.butter
更好。I just get the answer to this question by reading some materials about digital filters a note about digital filter
The bilinear transformation
between analogue filter and digital filter gives us a non-linear relationship between the analogue frequency
and digital frequency
as introduced in the material.
Thus, if a digital filter is needed, directly design it from
scipy.signal.butter
is better.