python中的简单峰值检测:find_peaks_cwt和peakutil的问题

python中的简单峰值检测:find_peaks_cwt和peakutil的问题,python,scipy,signal-processing,peakutils,Python,Scipy,Signal Processing,Peakutils,这是一个类似于我的数据的例子,有一个尖锐的峰值,周围有一些小的噪声,在其他地方几乎是恒定的小噪声 find_peaks_cwt和peakutils都没有像我希望的那样在这些数据上发挥作用 find\u peaks\u cwt: >>> x [0.1, 0.1, 0.1, 0.11, 0.1, 0.09, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.0, 0.0, 0.4, 0.7, 0.7, 0.2, 0.0, 0.005, 0.1, 0.1]

这是一个类似于我的数据的例子,有一个尖锐的峰值,周围有一些小的噪声,在其他地方几乎是恒定的小噪声

find_peaks_cwt
peakutils
都没有像我希望的那样在这些数据上发挥作用

find\u peaks\u cwt

>>> x
[0.1, 0.1, 0.1, 0.11, 0.1, 0.09, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.0, 0.0, 0.4, 0.7, 0.7, 0.2, 0.0, 0.005, 0.1, 0.1]
>>> peaks = scipy.signal.find_peaks_cwt(x, np.arange(1,5))
>>> peaks
[1, 2, 3, 9, 12, 16, 17]
16和17是正确的峰值,但是检测到1,2,3,9,12是怎么回事?此外,该程序缺乏将16/17识别为单峰的能力。这对我来说有点问题

findpeaks
包似乎更健壮,我也尝试过实现它,但它有一些奇怪的问题。当我查看数据时(有一个明显的峰值),它会抛出对我来说毫无意义的异常,有时它甚至会在没有明显原因的情况下生成负索引!我用了一段时间后得到了这辆四轮马车

即使在这个例子中,
peakutils
似乎也没有达到预期的效果:

>>> x
[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.0, 0.0, 0.4, 0.7, 0.7, 0.2, 0.0, 0.005, 0.1, 0.1]
>>> peakutils.indexes(x, thres=0.0) # I tried many values of thres
array([], dtype=int64)

对于识别像这样的尖峰有什么建议吗?我正在考虑不使用峰值检测,只编写我自己的函数来识别它们。

find_peaks_cwt的性能取决于您提供的小波宽度,例如,尝试给它一些arange(1,5)以外的东西,例如linspace(1,5100)--您可能需要阅读它所基于的论文才能正确使用它。我理解,是的,我刚刚尝试了
arange(1100)
,它在这个测试示例中正确地拾取了峰值。我将对此进行更多的实验,并查看论文。你应该把它贴出来作为答案。谢谢我自己并不完全理解这个算法——如果峰值的顶部相对平坦,它似乎并不总是返回准确的最大索引。不确定是否有bug,或者这是否是作为峰值中心位置的“最佳”估计的预期行为。我现在已经浏览了很多峰值检测库,它们似乎都有怪癖,并且获得真正一致的结果并不容易。特别是尖峰是有问题的,在这种情况下,我最终做了一个简单的启发式识别最大值并将附近的数据归零。它之所以有效,是因为峰值非常明显。我在另一种情况下使用了
findpeaks
,在这种情况下,数据有噪声,结果正常,但不是我所说的真正一致。find_peaks_cwt的性能取决于您提供的小波宽度,例如,尝试给它一些arange(1,5)以外的值,例如linspace(1,5100)---为了正确使用它,您可能需要阅读它所基于的论文。我理解,是的,我刚刚尝试了
arange(1100)
,它在这个测试示例中正确地拾取了峰值。我将对此进行更多的实验,并查看论文。你应该把它贴出来作为答案。谢谢我自己并不完全理解这个算法——如果峰值的顶部相对平坦,它似乎并不总是返回准确的最大索引。不确定是否有bug,或者这是否是作为峰值中心位置的“最佳”估计的预期行为。我现在已经浏览了很多峰值检测库,它们似乎都有怪癖,并且获得真正一致的结果并不容易。特别是尖峰是有问题的,在这种情况下,我最终做了一个简单的启发式识别最大值并将附近的数据归零。它之所以有效,是因为峰值非常明显。在另一种情况下,我使用了
findpeaks
,在这种情况下,数据是有噪声的,得到的结果是正常的,但不是我所说的真正一致的。