消除非周期性信号

fra*_*sco 3 python plot signal-processing

我正在处理一组(x={time},y={measure})来自仪器的数据,但有时源会导致数据出现峰值,从而导致绘图不正确,并可能导致计算max和min等特征时出错.

所以我需要从我的数据中删除这些尖峰,例如图像中红色圆圈包围的尖峰:

图像链接

我发现这个示例用于去尖峰但我不知道如何反转信号(如果它在非对称信号上是正确的)我认为它只是用于检测尖峰而我需要通过像装修等......

我需要帮助才能知道是否有更好的方法来完成我的任务,或者我是否只是根据我的情况调整上面的例子(在这种情况下我需要帮助,因为我不知道如何去做).

Mad*_*ist 5

您可以按照以下步骤估算峰的位置:

  1. 平滑数据.可以使用任意数量的过滤器.一个很好的起点是scipy cookbook中smooth描述的功能.您可以选择适当的参数,如窗口大小:

    baseline = smooth(data, ...)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将平滑后的数据视为基线,在没有已知拟合函数的情况下,类似于最佳拟合线.从数据中减去基线:

    noise = data - baseline
    
    Run Code Online (Sandbox Code Playgroud)
  3. 结果基本上是对伪拟合噪声的粗略估计.设置噪声过大的部分的阈值和斩波:

    threshold = 3.0 * np.std(noise)
    mask = np.abs(noise) > threshold
    
    Run Code Online (Sandbox Code Playgroud)

这里有很多配置选项:平滑过滤器类型和窗口大小,阈值因子甚至公制.例如,您可以使用IQR或完全不同的标准偏差.你对掩盖点的处理也完全取决于你.常见选项是完全丢弃或替换基线值.