现有的峰值检测算法是什么?我有嘈杂的数据,我想对该数据进行峰值检测。数据是相反的,实际上我正在尝试确定底部。

这是Excel中数据的快照。我喜欢同时探底。我考虑过将数据通过低通滤波器,然后做一个移动平均,确定峰值,然后在移动平均内进行另一个搜索。我的DSP背景为零;这只是一个常识方法。我想听听专家的建议。



评论

您要检测的两个底部是什么?我只看到一个明显的。你知道你有什么样的噪音,或它来自哪里吗?

我想知道您是否要在任何特定的硬件(资源限制)上实现它,因为这会影响我的峰值检测策略。

@JasonR紫色是显而易见的。但是,尖锐的边缘存在异常值。理想情况下,我希望将其剃光并计算出最低点。 (因此,在我的方法中使用LP滤波器)浅蓝色上不明显的一个是紫色峰的最小点右侧。紫色不是真正的问题,但浅蓝色是。 Excel图无法正常工作,但这是来自4096为2V的12位ADC。

@anasimtiaz信不信由你,它可以在iPhone / Android上运行,所以我想我们可以说,它就像一台PC。没有硬件限制。

@Ktuncer我添加了一些图像供您自己查看。

#1 楼

Ktuncer,您可以在此处使用多种方法。我建议的一种方法是使用离散小波变换(DWT),尤其是查看Daubechies小波。我会选择Daub-14 / Daub-Tetra。

基本上,您真正需要做的是“趋势”您的信号,然后从那里进行最小或最大选择。那将摆脱您的异常值。 daub-14 / daub-tetra小波变换可以帮助您完成此操作,这特别有用,因为您不知道信号的性质。 (使用daub-14,您可以准确地表示14/2 = 7的多项式信号,并且看起来您将不需要更多的东西了)。

该小波变换的计算实质上将您的能量“压缩”为几个指标。这些指标代表基于基向量的权重。其余权重(理想情况下)将接近零。当您的信号中有噪声时(如您所愿),那些通常为零的权重现在具有一些权重,但是您可以简单地将它们归零并“消噪”您的信号。完成后,您就可以进行简单的最大/最小检测。

还有更多细节,如果您想讨论如何实现,可以给我发电子邮件。

编辑:这是一些说明Daub-Tetra Denoiser降噪器的图像:



评论


$ \ begingroup $
我喜欢这个。.matlab中是否有一个参考库?
$ \ endgroup $
– Ktuncer
2012年2月3日在8:24

$ \ begingroup $
@Ktuncer给我发送电子邮件。
$ \ endgroup $
–太空
2012年2月4日在16:49

#2 楼

我远不是专家,但是我会做的是:

您似乎有一个缓慢变化的信号,并伴随波动。您搜索的峰是一些较强的波动,因此我将使用这些波动来检测它们。


让$ X(T)$成为您的原始信号。对适当数量的样本进行移动平均,以创建平滑的载体Y(t)$。
如果成功,$ X-Y $必须为零均值。计算$ X-Y $的标准偏差$ \ sigma $。
当$ |(X-Y)(t)| > \ alpha \ times \ sigma $,其中$ \ alpha $通常为2、3、4。那是您要找的东西吗?

评论


$ \ begingroup $
有趣的方法。什么是σ? (标准开发人员?)。此外,除数学外,其背后的逻辑是什么?
$ \ endgroup $
– Ktuncer
2012年2月2日,15:36

$ \ begingroup $
@ user4749:有趣的名称:)好的。是的,$ \ sigma $是标准偏差。我们将其用作波动幅度的度量。在您的数据上,随着时间的推移,它看起来相当稳定,因此表明这是正确的方法。逻辑上说,当峰大于这些波动时,就会检测到峰,因此我们的检测能力很强。你做MATLAB吗?如果我们收到您的信号,我们至少可以非常轻松地标记峰。
$ \ endgroup $
–让·伊夫
2012年2月2日,19:19



$ \ begingroup $
@ user4749基本上发生了什么,您的Y(t)将成为“仅趋势”信号。也表示平均值。因此,现在您要从信号中减去信号的平均值。那就是X(t)-Y(t)部分。所以现在剩下的就是您的声音。现在,(假设您的噪声是高斯噪声),​​则采用std&\ sigma&。现在查看abs(X(t)-Y(t))> $ 4 \ sigma $的所有值。为什么?这基本上用英语表示:“丢弃所有可能是噪音的值的99.99%,仅保留不是由于噪音引起的值”。
$ \ endgroup $
–太空
2012年2月3日在5:21



$ \ begingroup $
@ user4749这将帮助您获得离群峰,尽管我不确定它是否会得到您想要的整体峰(我假设您正在寻找“宽”峰)?
$ \ endgroup $
–太空
2012年2月3日,下午5:22

$ \ begingroup $
@ Jean-Yves你好! :-)您是否假设这里的噪声是高斯噪声? (这就是为什么我们可以标准阈值)。我很好奇,如果噪声被着色怎么办?
$ \ endgroup $
–太空
2012年2月3日,下午5:23

#3 楼

峰值检测在1D或多维信号方面有很多应用。以下是一些示例,显示了这些信号及其对峰的解释有多大变化:


原始海报的一维数据;
对图像进行Hough变换,每个峰对应到原始图像中的一条线;

图像的自相关,每个峰值对应于一个频率,该频率揭示了“周期性模式”;
“广义”互相关图像和模板的每个峰对应于图像中模板的出现(我们可能只希望检测最佳峰或几个峰);




对Harris角的图像进行过滤的结果,每个峰对应于原始图像中的一个角。



这些是我遇到过的峰-肯定还有其他一些我忘记或不知道的峰,希望其他答案能涵盖它们。

预处理技术包括平滑和去噪。 @Mohammad的答案是关于小波的,您可以在Mathematica的WaveletThreshold的文档中看到它们的各种用法(顺便说一下,我也从中获取了示例)。根据您的应用程序,您只需要全局最大值(例如,图像配准),一些局部最大值(例如,行检测)或许多局部最大值(关键点检测):
这可以反复进行,以寻求最高数据中的最大值,然后擦除所选峰附近的区域,等等,直到最高残留值低于阈值。
或者,您可以在某个邻域大小内查找局部最大值,并仅保留那些局部最大值其值高于阈值-有些人建议根据其与其余局部最大值的距离来保持局部最大值(越远越好)。
该军械库还具有形态学操作:扩展的最大值和高帽转换都可以使用。 >

此外,某些应用程序试图在亚像素分辨率下找到峰值。插值(可以针对特定应用程序)非常方便。

据我所知,没有灵丹妙药,数据可以证明哪种技术最有效。

特别是,有更多答案会很好。来自其他学科。

评论


$ \ begingroup $
您是如何提取问题正文的数据以供使用的?我找不到干净的表格。
$ \ endgroup $
–LéoLéopoldHertz준영
16年5月18日在18:29

$ \ begingroup $
是吗?我用其他例子。今天再次查看问题,我看不到如何从问题中干净地提取数据。
$ \ endgroup $
–马特西亚·奥迪西奥(Matthias Odisio)
16-09-23在21:46

#4 楼

我认为一种典型的峰值检测算法就是这样,其中refpeak(bottom)

for i=1,N   {
       if i=1   {  ref=data(i) }
       else { if data(i)<=ref {ref =data(i) }}
}


评论


$ \ begingroup $
我没有拒绝您的回答,但我认为这样做的人认为它是题外话。该草图检测序列的绝对最小值。 OP正在寻找峰值,需要处理局部性和噪声的峰值。
$ \ endgroup $
–马特西亚·奥迪西奥(Matthias Odisio)
2012年2月2日,19:29

$ \ begingroup $
A,对“规范答案”的悬赏根本没有任何回应。在这方面,所有答案都同样“无关紧要”;我为这个答案提供了赏金,因为它是最古老的。
$ \ endgroup $
–马特西亚·奥迪西奥(Matthias Odisio)
2012-2-9 14:40