【发布时间】:2019-10-14 10:06:59
【问题描述】:
我在Python中使用函数filtfilt如下
import numpy as np
from scipy.signal import filtfilt
a = np.array([1, -lambd]).T
b = np.array([-lambd,1]).T
delayed = filtfilt(b,a,sig)
其中 sig 的形状为 (6,)。结果,我收到以下错误:
ValueError:输入向量x的长度必须大于padlen,即6。
由 scipy.signal 生成。
如果 sig 的形状为 (7,) 或更长,则相同的代码可以正常工作,而对于小于 (6,) 的任何形状,它都会返回相同的错误。有什么想法吗?
【问题讨论】:
-
padlen - int or None, optional - The number of elements by which to extend x at both ends of axis before applying the filter. This value must be less than x.shape[axis] - 1. padlen=0 implies no padding. The default value is 3 * max(len(a), len(b)).(x 是第三个元素,即你的签名)。在您的情况下,padlen 的默认值为 3*2=6 - 但同时`此值必须小于 x.shape[axis] - 1`。来源 - docs.scipy.org/doc/scipy/reference/generated/… -
尝试使用 filtfilt(b,a,sig, axis=0)
-
试过axis=0,同样的错误信息
-
h4z3 - 看起来,根据 scipy.signal.filtfilt,这个错误与 filtfilt 函数本身有关,没有办法绕过它(除非我想使用更长的信号)。
-
我现在正在实现 scipy.signal.lfilter,它不会出错。