MATLAB使用minpeakdistance找到峰值

时间:2012-11-12 02:45:47

标签: matlab find local mathematical-optimization

假设我有一个包含周期性事件的数据集,并且我正在确定一个阈值(峰值)来分隔每个事件(最终找到变异系数)。

我对这些数据进行了多次试验 - 这些事件的速度有时明显快于其他事件。这个数据也有点吵,所以如果我没有在'findpeaks'函数中设置'minpeakdistance'约束,有时会拾取一些'false local maximas'。

我正试图找到一种方法来确保无论速度如何,我都会发现'真正的局部最大值'。我一直在视觉检查每个试验,以确保我只确定了真正的峰值 - 如果我还发现了错误的峰值,我已经调整了特定试验的mpd值 - 但这实际上需要几天。

有什么建议吗?

示例:

对于我的集合的大多数试验,以下代码行仅标识真正的最大值:

mpd = 'minpeakdistance';

eval(['[t' num2str(a) '.Mspine.pks(:,1),t' num2str(a) '.Mspine.locs] = findpeaks(t' num2str(a) '.Mspine.xyz(:,1), mpd,25);']);

但是,对于试验11,他们的移动速度要快得多,因此必须将mpd调整为9;但是,如果我将mpd值9应用于所有试验,它将获取错误的局部最大值。

1 个答案:

答案 0 :(得分:0)

我会转到频域找到这个“周期性事件”。具体而言,如果您知道采样/生成数据的速率,则使用FFT将指示数据中所有周期性事件的相对强度。看看:http://www.mathworks.se/help/matlab/ref/fft.html