Python 信号带通误差:数字滤波器临界频率必须为0<;Wn<;1.
我一直在尝试使用scipy的butter函数,当我尝试获得低通系数时,它工作得很好:Python 信号带通误差:数字滤波器临界频率必须为0<;Wn<;1.,python,scipy,bandpass-filter,Python,Scipy,Bandpass Filter,我一直在尝试使用scipy的butter函数,当我尝试获得低通系数时,它工作得很好: from scipy import signal [b, a] = signal.butter(10, 0.3) 我严格地想为0.5Hz-5Hz创建一个带通,但当我尝试在以下代码中获得带通系数时,它给了我一个错误:ValueError:数字滤波器临界频率必须为0
from scipy import signal
[b, a] = signal.butter(10, 0.3)
我严格地想为0.5Hz-5Hz创建一个带通,但当我尝试在以下代码中获得带通系数时,它给了我一个错误:ValueError:数字滤波器临界频率必须为0
from scipy import signal
[b, a] = signal.butter(2, [0.5,5], btype='bandpass')
我确实发现了以下stackoverflow,但我仍然不确定该问题,并且我遵循了文档中关于使用signal.butter函数的要求。默认情况下,对于数字滤波器,
Wn
的值必须表示为采样率的分数,即采样率的一半。您可以自己缩放这些值,也可以通过提供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. , 0.01051921])
In [42]: a
Out[42]: array([ 1. , -3.67848002, 5.09032297, -3.14352142, 0.73170972])