仅查找高于阈值的最高峰

时间:2013-07-23 09:26:43

标签: matlab

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)>阈) 但是现在它一直向我展示高于阈值而不是特定最高峰的所有峰值。

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

修改 如果具有相同值的多个峰值表面,我将采用中间的值并绘制。

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

我将在第5个位置取'4',所以情节将位于图表的中心你看

3 个答案:

答案 0 :(得分:3)

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

[C,I] = max(pbcg);
if C > threshold
    ... 
    %// I is the index of the maximal value, and C is the maximal value.
end

答案 1 :(得分:0)

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

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

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

修改

如果在定义的阈值上有多个峰值,我只需要调用max来计算最高峰值,如下所示

max(peaks);

答案 2 :(得分:0)

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

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

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