Savitzky-Golay过滤的延迟

时间:2019-04-08 11:11:52

标签: python scipy filtering signal-processing

我正在使用scipy函数将Savitzky-Golay滤波器应用于信号。

我需要计算滤波后的信号的滞后时间,它比原始信号落后多少。

有人可以阐明这件事吗?我该如何计算scipy?我应该如何正确解释结果?

我将非常感谢!

2 个答案:

答案 0 :(得分:0)

函数savgol_filter设计为具有零滞后。这是通过在mode"interp"(默认值)时使用多项式插值来显式处理边,或者在mode不是"interp"时通过填充来实现的。

在此示例中,对单位脉冲x进行了滤波。请注意,滤波后的信号y与脉冲对齐-没有滞后。

In [110]: x = np.zeros(51)

In [111]: x[25] = 1

In [112]: y = savgol_filter(x, 25, 7)

In [113]: plot(x, label='x')
Out[113]: [<matplotlib.lines.Line2D at 0x1276b1ba8>]

In [114]: plot(y, '.-', markersize=5, label='y')
Out[114]: [<matplotlib.lines.Line2D at 0x1276cc358>]

In [115]: grid()

In [116]: legend()
Out[116]: <matplotlib.legend.Legend at 0x1276db9e8>

plot

答案 1 :(得分:0)

您在问数字滤波器的延迟/延迟:实时滤波器的唯一可能答案是延迟完全由滤波器的窗口大小决定。

非实时过滤器(例如,将完整的样本集提供给过滤器,例如scipy Savitsky-Golay过滤器)可以在当前样本的“时间”假装/模拟过滤,但只能通过展望整个窗口。

有些人可能会抗议说这是显而易见的,例如可靠的Savitzky-Goay过滤器可以正常工作,这是完全正确的,但是,如果您要询问过滤器的延迟,那只能表示实时真实世界过滤器将应用于实时样本的延迟,这是唯一的可能的答案是:这是唯一且不可否认地由窗口大小决定的。