调用signal.firwin时,在python函数中获取值错误



我在python中使用最小平方滤波器函数, firwin 在信号库中,当我调用该函数时,它正在增加值误差。/p>

我的代码片段:

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)

错误:

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.

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

firls需要奇数的水龙头,因此您必须确保filter_order是奇数。


如果firwin实际上是您要使用的功能,则再看一下docstring。特别是:

  • firwin没有对理想响应进行论证。仅在cutoff参数中给出频段边缘。
  • cutoff参数的描述专门说该参数不得包含0和Nyquist频率。
  • 您似乎正在创建带通滤波器。在Docstring中有一个例子:

    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

最新更新