1

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

我对这些数据进行了多次试验——这些事件的速度有时比其他事件快得多。这个数据也有点嘈杂,所以如果我没有在“findpeaks”函数中设置“minpeakdistance”约束,有时会发现一些“错误的局部最大值”。

我试图找到一种方法来确保无论速度如何,我都能找到“真正的局部最大值”。我一直在目视检查每个试验,以确保我只识别出真正的峰值——如果我也识别出错误的峰值,我已经为那个特定的试验调整了 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 应用于所有试验,它将获取错误的局部最大值。

4

1 回答 1

0

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

于 2012-11-12T08:29:32.667 回答