我有个很奇怪的问题。我目前正在处理时间序列数据,数据集中有几个峰值。这些数据是用中子密度测井仪收集的,它描述了传感器连续记录一段时间的事件。当这台机器沿着钻孔向下移动时,数据中的峰值对应于一些有趣的间隔。所以,峰值很重要。然而,重要的不仅仅是峰值。它是整个时间间隔(或者至少如我所描述的,请参阅我的附图)。现在我的问题是,有没有一种信号处理方法(最好是Python)我可以使用或研究,它可以让我把这个信号分成不同的区间,每个区间对应于局部最小值/最大值?你知道吗
我最初的方法是使用Kleinberg 2002描述的突发检测算法,但是我没有成功,所以我想听听其他人对此的看法。你知道吗
这是原始数据:
这就是我想做的:
由于原始数据不可用,我生成了一些测试数据。方法如下。如果数据是一组有跳跃的平台,检查移动窗口上的标准偏差,将给出跳跃处的峰值。用阈值隔离峰。在应用移动平均值后,通过查看数据得到跳跃的估计值。这为装配提供了一个良好的起点。作为fit函数,我再次使用我最喜欢的
tanh
。你知道吗结果如下:
它给出了以下图表:
一些较小的跳跃没有被检测到,但应该很清楚,这是意料之中的。而且,整个过程也不是很快。由于阈值的原因,初始猜测越大越糟糕
x
出现的跳跃越多。最后,不检测到一系列小跳跃,因此数据中产生的斜率被拟合为一个具有明显大误差的大平台。我们可以引入一个额外的检查,并添加相应的跳跃位置。你知道吗还请注意,窗口大小的选择决定了两个跳转作为单个跳转检测到的距离。你知道吗
我从散点图中提取数据进行分析,这是我第一次切入问题,并使用示例代码进行构建。这样做的目的是将三阶多项式拟合到所有数据作为基线,然后在标记为“矩形化部分”的代码部分中,在基线曲线上方或下方的截止距离处查找数据点。我希望这至少能为解决这个问题提供一条途径。想到的一个增强是在“矩形化”代码中实现最小宽度。你知道吗
相关问题 更多 >
编程相关推荐