我正在尝试获取此信号的所有大峰值:
正如你所看到的那样,有一个大的峰值后跟一个较小的峰值,我希望得到最大峰值的每个值。我已经尝试了这个[pks1,locs1] = findpeaks(y1,'MinPeakHeight',??);
,但我找不到我能写的东西而不是??知道每次信号都不一样(当然会有一个大的+更小的峰值模式,但时间间隔和幅度可能会改变)。我使用std(),mean(),max()尝试了很多东西,但没有一个组合正常工作。
关于如何解决问题的任何想法?
答案 0 :(得分:1)
您可以尝试使用'MinPeakDistance'
关键字,并输入两个峰之间的最小距离,该距离略高于大峰与下一个小峰之间的距离。例如:
[pks1,locs1] = findpeaks(y1,'MinPeakDistance',0.3);
修改强>: 如果峰值之间的时间(以及随后的较小值)变化很大,则可能需要进行一些后处理。首先找到所有的峰值,包括较小的第二个峰值。然后在你的峰值阵列中移除每个峰值,这个峰值明显低于它的两个邻居。
你也可以尝试摆弄'MinPeakProminence'
。
一般来说,这些问题需要对算法精度的最后几个百分比进行大量校准,并且没有通用的解决办法。
我还建议您查看documentation中的所有其他选项。