2017-10-20 1079 views
0

我與圖書館「scipy.signal」在Python工作,我有下面的代碼:誤差Padlen在signal.filtfilt在Python

from scipy import signal 

b = [ 0.001016 0.00507999 0.01015998 0.01015998 0.00507999 0.001016 ] 

a = [ 1.   -3.0820186 4.04351697 -2.76126457 0.97291013 -0.14063199] 
data = [[ 1.] 
[ 1.] 
[ 1.] 
...] 
# length = 264 
y = signal.filtfilt(b, a, data) 

但是,當我執行的代碼,我得到一個錯誤信息:

The length of the input vector x must be at least padlen, which is 18. 

我該怎麼辦?

回答

1

看起來data是一個形狀(264,1)的二維陣列。默認情況下,filtfilt沿着輸入數組的最後一個軸進行過濾,因此在您的情況下,它將嘗試沿數據長度爲1的軸進行過濾,這對於默認的填充方法來說不夠長。

我假設你打算將data解釋爲一維數組。可以添加參數axis=0

y = signal.filtfilt(b, a, data, axis=0) 

沿着第一維度進行過濾(即向下列),在這種情況下,輸出y也將有形狀(264,1)。或者,可以通過將輸入平坦化爲np.ravel(data)或使用索引來選擇第一個(也是唯一)列,即data[:, 0],將輸入轉換爲一維數組。 (後者只有在data實際上是一個numpy數組而不是列表清單時才起作用。

y = signal.filtfilt(b, a, np.ravel(data)) 

在這種情況下,輸出y也將是一個一維陣列,與形狀(264)。