微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

信号黄油带通错误:数字滤波器的临界频率必须为0 <Wn <1

如何解决信号黄油带通错误:数字滤波器的临界频率必须为0 <Wn <1

我一直在尝试使用scipy的butter函数,当我尝试获取低通系数时,它一直运行良好:

from scipy import signal
[b,a] = signal.butter(10,0.3)

我严格地希望创建一个0.5Hz-5Hz的带通,但是当我尝试在以下代码获取带通系数时,会给我一个错误ValueError: Digital filter critical frequencies must be 0 < Wn < 1

from scipy import signal

[b,a] = signal.butter(2,[0.5,5],btype='bandpass')

我确实发现了以下stackoverflow question,但是我仍然不确定这个问题,我遵循了文档中使用signal.butter函数的要求。

解决方法

默认情况下,对于数字滤波器,为Wn给定的值必须表示为Nyquist frequency的分数,即分数的一半。可以自己缩放值,也可以通过提供fs参数来指定采样率,如下面的示例

In [36]: from scipy import signal

In [37]: order = 2

In [38]: fs = 128.0  # Sample rate,in Hz                                             

In [39]: Wn = [0.5,5.0]  # Filter cutoff frequencies,in Hz                                      

In [40]: b,a = signal.butter(order,Wn,btype='bandpass',fs=fs)                                     

In [41]: b                                                                                                           
Out[41]: array([ 0.01051921,0.,-0.02103843,0.01051921])

In [42]: a                                                                                                           
Out[42]: array([ 1.,-3.67848002,5.09032297,-3.14352142,0.73170972])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。