首页 > 解决方案 > 具有 0 步或更多步的数据集的步检测

问题描述

我试图找出一种方法来检测我的数据集中的步骤而不设置阈值(至少避免设置任意阈值)。我有一个数据集,它是我希望我的代码可以处理的真实数据的一个示例,以及一个组成的数据集。

这是只有一步的真实示例数据集

这是一个具有多个步骤的假想数据集

这是操作前数据的图表

    d = clockDiff
    
    dary = np.array([*map(float, d)])

    dary -= np.average(dary)
    
    step = np.hstack((np.ones(len(dary)), -1*np.ones(len(dary))))
    
    dary_step = np.convolve(dary, step, mode='valid')
            
    step_indx =  np.where(abs(np.diff(np.diff(dary_step))) > 0)[0]  
            
    plt.plot(dary)
    
    plt.plot(dary_step/10)
    
    for step in step_indx:
        plt.plot((step, step), (dary_step[step]/10, 0), 'r')

取自:一维数据中的步长检测

但我似乎无法为不止一步的数据设置它

到目前为止,我已经尝试过:

scipy.signal.find_peaks(array) 但它只找到最高峰

来自原始代码的 np.argmax() 但具有多个峰值的相同问题

当前的方法是计算变化率并找到二阶导数不为零的位置,但实际数据图不是一条完美的直线,因此存在斜率差异,我试图避免设置任意阈值来解释这一点因为我希望程序能够处理广泛的数据集

标签: pythonsignal-processing

解决方案


推荐阅读