python中的低通线性滤波器

问题描述

我对过滤时间序列有很多了解,但我真的很难正确理解 scipy scipy.signal.filtfilt

特别是它的参数 a 和 b。 例如,我应该如何重现以下过滤器? 即使使用其他库,如果更容易。

enter image description here

谁能帮帮我?我给你一个起点:

np.random.seed(123)
N = 100
rng = pd.date_range('2019-01-01',freq='min',periods=N)
df = pd.DataFrame(np.random.rand(N,1),index=rng)

解决方法

您说您的绘图显示了低通线性滤波器。我假设该图显示了 FIR filter 的系数。如果是这样,您可以将这些系数作为 scipy.signal.lfilter(或 b,但将 scipy.signal.filtfilt 与 FIR 滤波器一起使用可能不是您想要的)的 filtfilt 参数传递。将 a 参数设置为 1。

您还可以将滤波器应用于具有卷积函数的信号,例如 numpy.convolvescipy.signal.convolvescipy.ndimage.convolve1d。看一下文章Applying a FIR Filter(但请注意,那里显示的性能结果不是最新的——NumPy 和 SciPy 都在不断发展,那里讨论的不同方法的相对性能可能会因版本而异) .