2017-10-20 1073 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)。