峰值检测算法

时间:2019-12-03 19:52:42

标签: python matplotlib scipy

数据:http://www.sharecsv.com/s/3a7dd199f2ecf08bcfce0de26376fe9a/data.csv

我正在尝试编写峰值检测算法。我一直在尝试使用此答案Intelligent Peak Detection Method中的示例。我不确定如何更改他们的示例数据。

代码:

    data = data.iloc[:, 0].tolist()    
    dy_lim = 0.001
    di_lim = 5
    targets = []
    in_lock = False
    i_l, d_l = 0, data[0]
    for i, d in enumerate(data[1:]):
        if abs(d_l - d) > dy_lim:
            if in_lock:
                in_lock = False
                if i - i_l > di_lim:
                    # here we check whether the start of the period was a peak
                    if abs(d_l - data[i_l]) > dy_lim:
                        # assure minimal distance if previous target exists
                        if targets:
                            if i_l - targets[-1] > di_lim:
                                targets.append(i_l)
                        else:
                            targets.append(i_l)
                    # and here whether the end is a peak
                    if abs(d - data[i]) > dy_lim:
                        targets.append(i + 1)
            i_l, d_l = i, d
        else:
            in_lock = True
    plt.plot(range(len(data)), data)
    plt.scatter(targets, [data[t] for t in targets], c='red')
    plt.show()

此数据生成此图。红色圆圈是代码生成的峰值。我试图找到与该线总体趋势不同的最剧烈的峰值。这些最剧烈的峰值的例子是黑圈。

Graph

我还找到了这个示例Peak detection algorithm in Python。我喜欢它们如何使用阈值线,但是对于我的示例,我不确定如何做到这一点。我无法定义明确的上限和下限阈值指标,因为我有成千上万张图表。每个图都有对应于该图的峰。

例如:

数据:http://www.sharecsv.com/s/ca69f125f2ad41a9a70b8d959bfce02b/data.csv

此数据将生成图形:

Graph2

任何提示或指导将不胜感激!非常感谢。

0 个答案:

没有答案