简体   繁体   中英

Finding the highest peak above threshold only

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

this code previously doesn't have any issue on finding the peak.. the main factor for it to find the only peak is this if (pbcg(k+M) > pbcg(k-1+M) && pbcg(k+M) > pbcg(k+1+M) && pbcg(k+M) > threshold) but right now it keep show me all the peak that is above the threshold instead of the particular highest peak..

UPDATE: what if the highest peaks have 4nodes that got the same value?

EDIT: If multiple peaks with the same value surface, I will take the value at the middle and plot.

What I mean by that is for example [1,1,1,4,4,4,2,2,2]

I will take the '4' at the 5th position, so the plot will be at the center of the graph u see

It will be much faster and much more readable to use the built-in max function, and then test if the max value is larger than the threshold.

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

As alternative solution, you may evaluate the idea of using the built-in function findpeaks , which encompasses several methods to ascertain the existance of peaks within a given signal. Within thos methods you may call

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

The only limit I see is that findpeaks is only available with the Signal Processing Toolbox .

EDIT

In case of multiple peaks over the defined threshold, I would just call max to figure the highest peak, as follows

max(peaks);

Assuming you have a vector with peaks pbcg Here is how you can get the middle one:

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

Note that you can still make it more robust for cases where you have no peaks, and can adjust it to give different behavior when there are two middle peaks (now it will take the second one)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM