在MATLAB中使用逻辑索引查找局部最大值

时间:2015-03-11 13:33:48

标签: matlab matrix-indexing

我之前在MATLAB向量中使用了逻辑索引,用于

之类的条件
X = X(X < 6);

现在我想找到使用相同想法的本地极值,但是有“本地”条件。我会对像

这样的东西感兴趣
X = X(X(i) > X(i-1) & X(i) > X(i + 1));

我知道这在向量的第一个和最后一个元素中不起作用,并且有更好的方法来找到局部极值。

这个问题与前一个问题(Getting FFT peaks from data)的不同之处在于我对找到最大值并不是特别感兴趣,而是能够使用逻辑索引与“本地”条件引用相邻元素矢量。

1 个答案:

答案 0 :(得分:5)

你不能像你描述的那样直接这样做。您将不得不创建其他数据,这些数据本身可以进行逻辑测试,其输出可用于索引您的向量。在您的情况下,最好的方法是计算近似导数,并找到该导数的向下过零点。

x = rand(1,50);
xDiff = diff(x);
xZeroCross = diff(sign(xDiff));
indexUp = find(xZeroCross>0)+1;
indexDown = find(xZeroCross<0)+1;
figure();
plot(1:50,x,'r',indexDown,x(indexDown),'b*',indexUp,x(indexUp),'go');

此代码生成以下图形,其中local-maxima是蓝色星形,local-minima是绿色圆圈。 enter image description here