Python检测替代峰值

bAN*_*bAN 5 python signal-processing

我有以下信号数据:

模式

信号为红色,滚动平均值为灰色.

我想找到一种方法来识别指数,其中在一个thresold值内的均值周围有连续的正负峰值.

例如,对于0,08的thresold,它将检测到22,35,36,第二个标记......

我不知道如何检测这些峰值.有人已经有这个用例吗?

小智 0

假设您有两个值列表,xy。您还有滚动平均值的值列表,但这也许不是必需的。如果要识别峰值,可以减去该y系列的前一个值以获得相邻值之间差异的大小:

spikes = [0.0] + [abs(y[i]-y[i-1]) for i in range(1, len(y))]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

那么您感兴趣的峰值的值大于 0.16(高于平均值 0.08,低于平均值 0.08)。你可以这样找到这些:

threshold = 0.08
spike_locations = [x[i] for i in range(len(spikes)) if spikes[i] > 2 * threshold]

[22.0, 35.0, 36.0]
Run Code Online (Sandbox Code Playgroud)