2013-05-29 122 views
1

我想要查找使用MATLAB绘制的数据集中的第一个,第二个和第三个峰。有人可以帮我弄这个吗?这里是链接到的情节,我已经上传在图中找到第一个,第二个和第三个最大值

enter image description here

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

+2

首先定义一个最大值。有几个局部最大值大于你的第二个圆圈点 – Rasman

+0

@Rasman我知道有更多的最大值,但我只需要那些已标记的峰值。我还从图表中发现,如果我的第一个波形峰值位于2530处,那么我的下一个波形峰值将在第一个波形峰值之后大约180-200毫秒。所以我的下一个高峰会在2710到2730之间。 – maverick

+0

那么为什么3350没有高峰呢? – Rasman

回答

2

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

所以,如果你有矢量y的数据,下面应该工作:

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

[max2, max_ind2] = max(y); 
+0

上面给出的解决方案的问题是假设我有一个值不是我图中标记的峰值,但是它是max_ind-delta和max_ind + delta的最大值。所以这个值也得到保存,但实际上它必须被忽略。 – maverick

+0

@maverick:一旦你在'max_ind'找到了主峰,这段代码就会擦除周围窗口中的任何次要峰值。你不应该保存任何邻近的峰值。 –

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; 
+0

是的大卫上面的代码工作正常,但有一些波形,我只有一个单峰,所以实际上我应该停止执行那里,只存储一个值。 – maverick

+0

@maverick你也会遇到nimrodm解决方案的问题。对于任何一种情况,您都可以设置一个阈值,如果您发现阈值以上没有峰值,则停止查找。 –

0

findpeaks功能会给你在矢量所有的山峰,但需要做更多的工作来筛选,你不关心峰值。可以在findpeaks之前应用低通滤波器来完成此操作。

相关问题