的任何軸線根據SciPy的文檔爲lfilter施加初始條件:SciPy的lfilter沿着N-二d陣列
滋:array_like,用於過濾器的延遲可選 初始條件。它是長度爲max(len(a),len(b))-1
的矢量(或用於N維輸入的矢量陣列)。如果zi是無或沒有給出,則假定初始休息。有關更多信息,請參閱lfiltic。
以下代碼調用lfilter,並使用lfilter_zi傳遞zi,以使zi的最後一個維度的長度爲max(len(a),len(b))-1
。然而,它提出了一個錯誤,這取決於應用程序的軸:
import numpy as np
import scipy.signal as sig
def apply_filter(B, A, signal, axis=-1):
# apply filter, setting proper initial state (doesn't assume rest)
filtered, zf = sig.lfilter(B, A, signal,
zi=sig.lfilter_zi(B, A) * np.take(signal, 0, axis=axis)[..., np.newaxis], axis=axis)
return filtered
B, A = sig.butter(1, 0.5)
x = np.random.randn(12, 50)
apply_filter(B, A, x, axis=1) # works without error
apply_filter(B, A, x, axis=0) # raises ValueError
ValueError: The number of initial conditions must be max([len(a),len(b)]) - 1
如何避免錯誤,並應用沿任意軸的過濾器,而不假定初始休息嗎?
謝謝!爲什麼將索引從標量轉換爲列表可以訣竅? – user2561747 2015-02-24 18:11:26