如何解决信号黄油带通错误:数字滤波器的临界频率必须为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 举报,一经查实,本站将立刻删除。