2017-03-04 13 views
0

firwinのPythonで最小二乗フィルタ関数を使用していますが、シグナルライブラリにあり、関数を呼び出すときに値エラーが発生しています。signal.firwinを呼び出したときのPython関数の値取得エラー

マイコードスニペット:

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を見てみましょう。

関連する問題