Python / SciPy的峰值查找算法
我可以通过查找一阶导数或其他东西的零交叉来自己编写一些东西,但它似乎是一个通用的函数,可以包含在标准库中。 谁知道一个?
我的特定应用是2D阵列,但通常它将用于在FFT等中查找峰值。
具体来说,在这些类型的问题中,有多个强峰,然后是许多较小的峰#34; 这只是应该被忽略的噪音引起的。 这只是例子; 不是我的实际数据:
一维峰值:
二维峰值:
峰值寻找算法将找到这些峰值的位置(不仅仅是它们的值),理想情况下会找到真正的样本间峰值,而不仅仅是具有最大值的索引,可能使用二次插值等。
通常,您只关心几个强峰,因此它们要么被选中,要么是因为它们高于某个阈值,要么是因为它们是按幅度排序的有序列表的前n个峰。
正如我所说,我知道如何自己写这样的东西。 我只是想知道是否有一个已知的功能或包可以很好地运作。
更新:
我翻译了一个MATLAB脚本,它适用于1-D案例,但可能更好。
更新更新:
sixtenbe为1-D案例创造了更好的版本。
8个解决方案
43 votes
我正在研究类似的问题,并且我发现一些最好的参考资料来自化学(来自质谱数据中的峰值)。 有关峰值查找算法的详细审查,请阅读此内容。 这是我发现的最佳峰值发现技术最清晰的评论之一。 (小波最适合在噪声数据中找到此类峰值。)