这是一个类似于我的数据的示例,它有一个尖峰,被一些小噪声所包围,并且在其他地方大部分都是恒定的,噪音很小。
find_peaks_cwt
和peakutils
都没有按照我希望的数据执行。
find_peaks_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
软件包似乎更强大,而且我已经尝试过实施它,但它有一些奇怪的问题。当我查看数据时(这里有一个明显的峰值),它会毫无理由地抛出异常,有时它甚至会产生负面索引,没有明显的原因!在使用它一段时间后,我得到了越野车的heeby jeebies。
即使在这个例子中,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)
有关识别这样的尖峰的任何建议吗?我考虑不使用峰值检测,只是编写自己的函数来识别它们。