我想在我使用 MATLAB 绘制的数据集中找到第一个、第二个和第三个峰值。有人可以帮我弄这个吗?这是我上传的情节的链接
中心思想是找到在特定时间间隔后出现的峰值。第二个条件只是存储前四个峰值,然后打破条件。所以我在图中找到了第一个最大值。我在 X 轴上看到了 2530 的时间值。然后,我不会在附近寻找,而是在 X 轴上寻找 180-200 之后的峰值。我得到峰值 2,然后存储。然后我又跳了 180-200 并再次寻找附近的高峰。最后在获得前四个最大值后,我停止搜索峰值
在这些情况下,我通常做的是搜索最大值,然后擦除该最大值点周围一个小邻域中的所有点并重复这些过程。当然,邻域大小取决于应用程序。
因此,如果您有 vector 中的数据y
,则以下内容应该有效:
[max1, max_ind] = max(y);
y(max_ind-delta:max_ind+delta) = 0;
[max2, max_ind2] = max(y);
作为 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;
findpeaks函数将为您提供向量中的所有峰值,但它需要做更多的工作来过滤您不关心的峰值。在此之前可能会应用低通滤波器findpeaks
。