峰值检测Matlab

时间:2016-05-27 11:08:20

标签: matlab

我正在尝试获取此信号的所有大峰值:

enter image description here

正如你所看到的那样,有一个大的峰值后跟一个较小的峰值,我希望得到最大峰值的每个值。我已经尝试了这个[pks1,locs1] = findpeaks(y1,'MinPeakHeight',??);,但我找不到我能写的东西而不是??知道每次信号都不一样(当然会有一个大的+更小的峰值模式,但时间间隔和幅度可能会改变)。我使用std(),mean(),max()尝试了很多东西,但没有一个组合正常工作。

关于如何解决问题的任何想法?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用'MinPeakDistance'关键字,并输入两个峰之间的最小距离,该距离略高于大峰与下一个小峰之间的距离。例如:

[pks1,locs1] = findpeaks(y1,'MinPeakDistance',0.3);

修改: 如果峰值之间的时间(以及随后的较小值)变化很大,则可能需要进行一些后处理。首先找到所有的峰值,包括较小的第二个峰值。然后在你的峰值阵列中移除每个峰值,这个峰值明显低于它的两个邻居。

你也可以尝试摆弄'MinPeakProminence'

一般来说,这些问题需要对算法精度的最后几个百分比进行大量校准,并且没有通用的解决办法。

我还建议您查看documentation中的所有其他选项。