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',所以情节将位于图表的中心你看
答案 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))
请注意,对于没有峰值的情况,您仍然可以使其更加稳健,并且可以在有两个中间峰值时调整它以提供不同的行为(现在它将采用第二个峰值)