模拟与数字版本的Butterworth Filter在Scipy中

发布于 2025-01-19 10:24:08 字数 1206 浏览 2 评论 0原文

我有一个关于 SciPy 中巴特沃斯滤波器的模拟和数字版本的问题。我尝试了两件事来获得数字巴特沃斯滤波器:

  • 通过scipy.signal.butteranalog=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 with analog=True, and then using scipy.signal.bilinear to transform it into a digital filter.
  • Directly getting from the function scipy.signal.butter with analog=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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

余罪 2025-01-26 10:24:08

我只是通过阅读有关数字过滤器的一些材料有关数字过滤器的注释

双线性转换“模拟滤波器和数字滤波器之间都可以在我们之间建立非线性关系模拟频率“公式”和数字频率“公式”,如材料中所引入的。

“公式”

因此,如果需要数字过滤器,请直接从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 formula between analogue filter and digital filter gives us a non-linear relationship between the analogue frequency formula and digital frequency formula as introduced in the material.

formula

Thus, if a digital filter is needed, directly design it from scipy.signal.butter is better.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文