我正在使用scipy函数将Savitzky-Golay滤波器应用于信号。
我需要计算滤波后的信号的滞后时间,它比原始信号落后多少。
有人可以阐明这件事吗?我该如何计算scipy?我应该如何正确解释结果?
我将非常感谢!
答案 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>
答案 1 :(得分:0)
您在问数字滤波器的延迟/延迟:实时滤波器的唯一可能答案是延迟完全由滤波器的窗口大小决定。
非实时过滤器(例如,将完整的样本集提供给过滤器,例如scipy Savitsky-Golay过滤器)可以在当前样本的“时间”假装/模拟过滤,但只能通过展望整个窗口。
有些人可能会抗议说这是显而易见的,例如可靠的Savitzky-Goay过滤器可以正常工作,这是完全正确的,但是,如果您要询问过滤器的延迟,那只能表示实时真实世界过滤器将应用于实时样本的延迟,这是唯一的可能的答案是:这是唯一且不可否认地由窗口大小决定的。