在我最近的工作中,我遇到了一个问题,我需要在快速振荡的数据中找到某些点。让我们使用合成数据而不是实际测量值,暂时忽略噪声。这些点称为固定相点(简称 SPP)。对于人眼来说,它们很容易发现:振荡在局部减慢。一个例子:
需要注意的一些重要事项:
它始终是局部最大值或最小值(因此可靠的峰值检测算法可以提供很大帮助,我最近一直在研究)
该图理想地归一化为 [-1, 1],在实际测量中它有点失真
通常在数据的边界处不满足Nyquist-Shannon 采样定理,并且振荡被平均化。(在我创建的合成数据中,它很满意,请参阅下面的真实数据集。)
SPP的一般数量是1或2,3或4确实很少见,但存在。
一个 SPP 可以随着条件的变化在 x 方向上不断移动,可以在 x 轴的边界处消失,并且一个 SPP 可以分成两个彼此远离的不同 SPP。
主要目标是可靠地监控这些点的移动(理想情况下是实时的,但首先从 xy 数据检测 SPP 是目标)。还有一些其他生成的图表指示 SPP,最后一个来自真实数据。
为了解决这个问题,我的第一个想法是检测数据中的所有极值点,然后生成它们的连续距离,当距离超过某个阈值时,它就是 SPP。但是设置一个好的阈值,正确识别极值点对于每个图来说似乎都非常困难和独特。
我的问题是: 你认为在那里使用机器学习工具是否值得,如果是,哪种算法最合适?作为一名物理学家,我经验不足,我只有基本的机器学习知识(但愿意学习!)一般来说,你能想到任何有用的算法或想法来解决这种情况吗?
注意:我主要是在 Python 中使用 numpy/scipy。
就局部最大值和最小值检测而言,我使用scipy.signal.find_peaks和scipy.signal.find_peaks_cwt以及scipy.signal.savgol_filter.




