【问题标题】:Finding the highest peak above threshold only仅查找高于阈值的最高峰
【发布时间】:2013-07-25 15:48:12
【问题描述】:
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

此代码以前在查找峰值时没有任何问题.. 它找到唯一峰值的主要因素是 如果 (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​​”,因此绘图将位于您看到的图表的中心

【问题讨论】:

  • 如果你有所有的峰,那么findmax 大小的峰应该不会太难。
  • 我想从我发布的代码中知道,如何解决峰值相同的问题?如果有 4 个峰值在相同的值上,则“IF”代码将不会运行,因为它不符合要求。在最大尺寸函数中只允许最高的峰值,对吗?或者我看错了

标签: matlab


【解决方案1】:

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

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

【讨论】:

  • 如果有 4 个峰值相同的值怎么办?
  • 我想从我发布的代码中知道,如何解决峰值相同的问题?如果有 4 个峰值在相同的值上,则“IF”代码将不会运行,因为它不符合要求
  • @myfriday13 如果有多个具有相同值的峰,您希望发生什么?目前I 将包含最大值的第一次出现。
  • @DennisJaheruddin 如果多个峰值具有相同的值表面,我将取中间的值并绘制.. 我的意思是例如 1,1,1,4,4,4 ,2,2,2...我将在第 5 个位置取“4”.. 所以情节将在您看到的图表的中心..
  • @myfriday13 当你问它时,这应该是你的问题。我现在已经为您更新并尝试给出答案。
【解决方案2】:

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

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

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

编辑

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

max(peaks);

【讨论】:

  • 如果有 4 个峰值相同的值怎么办?
  • @myfriday13:你如何定义最高峰?
  • 如你所见,我在这里放的代码,如果值 'k' 大于 'k+1' 和 'k-1' 那么 'k' 大于阈值设置..但这将不再起作用..在接近峰值区域,可能会有峰值,因此最终会有很多峰值..如果您使用中值滤波器,您甚至可能会导致峰值具有相同的值..
【解决方案3】:

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

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

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

【讨论】:

  • 谢谢@DennisJaheruddin!
猜你喜欢
  • 1970-01-01
  • 2022-08-23
  • 2017-07-19
  • 1970-01-01
  • 2018-03-14
  • 2020-06-23
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多