【问题标题】:signal.butter bandpass error: Digital filter critical frequencies must be 0 < Wn < 1signal.butter 带通误差:数字滤波器临界频率必须为 0 < Wn < 1
【发布时间】:2020-12-26 02:31:55
【问题描述】:

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

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

我非常想为 0.5Hz - 5Hz 创建一个带通,但是当我尝试在以下代码中获取带通系数时,它给了我一个错误:ValueError: Digital filter critical frequencies must be 0 &lt; Wn &lt; 1

from scipy import signal

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

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

【问题讨论】:

    标签: python scipy bandpass-filter


    【解决方案1】:

    默认情况下,对于数字滤波器,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.        ,  0.01051921])
    
    In [42]: a                                                                                                           
    Out[42]: array([ 1.        , -3.67848002,  5.09032297, -3.14352142,  0.73170972])
    

    【讨论】:

      猜你喜欢
      • 2018-10-13
      • 2020-11-28
      • 1970-01-01
      • 2016-02-08
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 2014-03-18
      • 2013-08-22
      相关资源
      最近更新 更多