在图中找到第一个,第二个和第三个最大值

时间:2013-05-29 11:26:41

标签: matlab filtering

我想找到我使用MATLAB绘制的数据集中的第一,第二和第三个峰。有人可以帮我弄这个吗?这是我上传的情节的链接

enter image description here

中心思想是找到在一定时间间隔后出现的峰值。第二个条件是存储前四个峰值然后打破条件。所以我在图中找到了第一个最大值。我在X轴上看到时间值为2530。然后,我不会在邻近区域寻找,而是寻找在X轴上180-200之后出现的峰值。我得到峰2,然后存储。然后我又跳了180-200并再次搜索附近的山峰。在获得前四个最大值后,我停止搜索峰值

3 个答案:

答案 0 :(得分:2)

在这些情况下我通常做的是搜索最大值,然后擦除该最大点周围的小邻域中的所有点并重复这些过程。当然,邻域大小取决于应用程序。

因此,如果您有向量y中的数据,则以下内容应该有效:

 [max1, max_ind] = max(y);
 y(max_ind-delta:max_ind+delta) = 0;

 [max2, max_ind2] = max(y);

答案 1 :(得分:1)

作为nimrodm答案的替代方案,您可以利用已知的时间延迟来获得优势。找到您的第一个最大值,然后跳过您已知的延迟并在较小的窗口内搜索最大值。这样做时你必须调整索引,但效果很好。

使用向量y中的数据:

[max1,max_ind1] = max(y);
next_ind = max_ind + 190;

[max2,max_ind2] = max(y(next_ind-20:next_ind+20));
max_ind2 = max_ind2 + next_ind-21;

答案 2 :(得分:0)

findpeaks函数将为您提供向量中的所有峰值,但它需要做更多的工作来过滤您不关心的峰值。可以在findpeaks之前应用低通滤波器来执行此操作。