python - Python 中 signal.filtfilt 中的 Padlen 错误

标签 python numpy filter scipy signal-processing

我正在Python中使用库“scipy.signal”,我有下一个代码:

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.

我能做什么?

最佳答案

看来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,)。

关于python - Python 中 signal.filtfilt 中的 Padlen 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46849290/

相关文章:

python - 将功能分解为被动(算法)和主动(执行)对象

python - Matlab/Python : Power spectral density of non-uniform time series

api - Twitter Streaming API(过滤器方法)- 限制

c# - 如何在 C# 中过滤 JSON 数组

python - 可以在tinydb上输入文档ID吗? upsert 是可能的吗?

python - 有没有一种有效的方法来获取 pyshark 中的字段偏移量

python - 在没有 docker 的情况下将 tensorflow 模型部署到 GCP

python - 给定一个单位向量,找出使该向量与轴对齐的两个旋转角度

numpy - 如何将numpy.timedelta64转换为分钟

android - 如何在 android 中使用 managedQuery() 过滤超过 2 种文件类型?