2017-03-04 353 views
0

我在Python中使用最小二乘滤波器函数,它是firwin它在信号库中,当我调用函数时会引发值错误。在调用signal时获取Python函数中的值错误.firwin

我的代码段:

Fs = 100 

epochs = n/Fs 

nyquist = Fs/2 

lower_filter_bound = 7; 

upper_filter_bound = 13; 

transition_width = 0.7; 

filter_order = np.round((Fs/lower_filter_bound)) 

idealresponse = [ 0, 0, 1, 1, 0, 0 ]; 

filterName = 'Band pass filtered'; 

F = [0, (((1-transition_width)*lower_filter_bound)/nyquist), 
(lower_filter_bound/nyquist),(upper_filter_bound/nyquist),(((1+transition_width)*upper_filter_bound)/nyquist), nyquist/nyquist]; 

filterweights = sig.firwin(filter_order, F, idealresponse) 

错误:SciPy的

Traceback (most recent call last): 
    File "File.py", line 34, in <module> 
    filterweights = sig.firwin(filter_order, F, idealresponse) 

raise ValueError("Invalid cutoff frequency: frequencies must be " 
ValueError: Invalid cutoff frequency: frequencies must be greater than 0 and less than nyq. 

回答

1

最小二乘FIR滤波器的设计功能是scipy.signal.firls(不scipy.signal.firwin)。

firls需要奇数抽头,所以你必须确保filter_order是奇数。


如果firwin实际上是你想用的功能,然后 再看看的docstring。特别是:

  • firwin没有采取理想的响应参数。它仅在cutoff参数中给出带边。
  • cutoff参数的描述特别说该参数必须不包含0和奈奎斯特频率。
  • 您似乎正在创建一个带通滤波器。有这样的文档字符串一个例子:

    Band-pass: 
    
    >>> f1, f2 = 0.1, 0.2 
    >>> signal.firwin(numtaps, [f1, f2], pass_zero=False) 
    array([ 0.06301614, 0.88770441, 0.06301614]) 
    
  • firwin第一个参数必须是整数,而不是一个浮子。

这里是你使用firwin如何实现你的过滤器:

lower = lower_filter_bound/nyquist 
upper = upper_filter_bound/nyquist 
filterweights = sig.firwin(int(filter_order), [lower, upper], pass_zero=False) 

如果您需要在您的FIR滤波器的设计更具灵活性,看看scipy.signal.firwin2

相关问题