MATLAB:计算峰值数

时间:2016-04-04 09:59:33

标签: matlab

我有一个这样的图表,我想确定峰值的数量。因为它是一个波函数,所以整个图有很多峰值,这就是为什么我在下面的图表中使用findpeaks等函数找到峰值的数量不成功的原因,它返回了3000左右的峰数,而我希望得到7号 enter image description here

我的想法是做一个for或while循环来计算平均值大于0.5的实例数。所以最终我想要一个在图形上迭代的函数返回峰值的数量和出现此峰值的y索引值的范围(我认为最好的方法是将它们保存为零矩阵)。 / p>

文件数据链接:https://www.dropbox.com/s/vv8vqv28mqzfr9l/Example_data.mat?dl=0

1 个答案:

答案 0 :(得分:1)

你的意思是说你正试图计算' on'部分数据?

您使用findpeaks走上了正确的轨道。如果您滚动到documentation的底部,您将看到您可以通过各种方式实际调整例程,例如指定峰值之间的最小距离,或者之前点与其邻居之间的最小差异它被认为是一个高峰。

通过定义峰之间的最小距离,我检测到以下7个峰。代码包含在下面。或者,您可以使用可以传递到findpeaks的其他参数。

唯一需要注意的是我获取了数据的绝对值。

Peaks

load('Example_data.mat')
indx = 1:numel(number11);
[pks, locs] = findpeaks(abs(number11), indx, 'MinPeakDistance', 0.25e4);
hold on
plot(number11)
plot(locs,pks, 'rx')
disp(numel(pks))