0
if (pbcg(k+M) > pbcg(k-1+M) && pbcg(k+M) > pbcg(k+1+M) && pbcg(k+M) > threshold)

    peaks_y(Counter) = pbcg(k+M);

    peaks_x(Counter) = k + M;

    py = peaks_y(Counter);
    px = peaks_x(Counter);


    plot(px,py,'ro');
    Counter = (Counter + 1)-1;

    fid = fopen('y1.txt','a');
    fprintf(fid, '%d\t%f\n', px, py);
    fclose(fid);
  end
end

此代码以前在找到峰值时没有任何问题.. 它找到唯一峰值的主要因素是 if (pbcg(k+M) > pbcg(k-1+M) && pbcg(k+M) ) > pbcg(k+1+M) && pbcg(k+M) > threshold) 但现在它一直向我显示所有高于阈值的峰值而不是特定的最高峰..

更新:如果最高峰有 4 个节点的值相同怎么办?

编辑: 如果多个峰值具有相同的值表面,我将取中间的值并绘制。

我的意思是例如 [1,1,1,4,4,4,2,2,2]

我将在第 5 个位置取“4”,因此该图将位于您看到的图表的中心

4

3 回答 3

3

使用内置的max函数会更快,更易读,然后测试最大值是否大于阈值。

[C,I] = max(pbcg);
if C > threshold
    ... 
    %// I is the index of the maximal value, and C is the maximal value.
end
于 2013-07-23T09:33:40.377 回答
0

作为替代解决方案,您可以评估使用内置函数的想法,该函数findpeaks包含几种确定给定信号中是否存在峰值的方法。在您可以调用的那些方法中

findPeaks = findpeaks(data,'threshold',threshold_resolution);

我看到的唯一限制findpeaks是仅适用于Signal Processing Toolbox.

编辑

如果有多个峰值超过定义的阈值,我会调用max来计算最高峰,如下所示

max(peaks);
于 2013-07-23T16:32:23.970 回答
0

假设您有一个带峰的向量pbcg 以下是如何获得中间的向量:

highestPeakValue = max(pbcg)
f = find(pbcg == highestPeakValue);
middleHighestPeakLocation = f(ceil(length(f)/2))

请注意,对于没有峰值的情况,您仍然可以使其更加稳健,并且可以调整它以在有两个中间峰值时提供不同的行为(现在它将采用第二个)

于 2013-07-25T07:36:54.640 回答