Remove peaks below a threshold using findpeaks function
    4 views (last 30 days)
  
       Show older comments
    
    Konstantinos Tsitsilonis
      
 on 8 Sep 2017
  
    
    
    
    
    Answered: Star Strider
      
      
 on 8 Sep 2017
            Hi all,
I know this topic has been discussed before to some extent, but I can't seem to figure out a way to do the following.
I am finding peaks in my kernel distribution function which is returned in terms of PDF and X, where PDF vs. X is plotted. To find the peaks I do the following:
 [Peaks, Locs] = findpeaks(PDF) ; %Find Y value of the peaks
 X_peakVal = X(Locs) ; %Find X value of the peaks
However, I would like to reject some values for some peaks that lie below a threshold:
 [Peaks, Locs] = findpeaks(PDF) ; %Find Y value of the peaks
 Peaks(Peaks < 0.01*max(Peaks)) = [] ; %Reject Y value of peaks below this threshold
 X_peakVal = X(Locs) ; %Find X value of the peaks
The above code does not reject the corresponding indices noted as Locs, such as the corresponding X_peakVal (or X values corresponding to the Y peaks) are also rejected.
What is a way to exclude the corresponding X values to the rejected Y?
Thanks in advance for your help,
KMT.
0 Comments
Accepted Answer
  Image Analyst
      
      
 on 8 Sep 2017
        You also need to remove those points from loc
smallPeakIndexes = Peaks < 0.01*max(Peaks);
Peaks(smallPeakIndexes) = [] ; %Reject Y value of peaks below this threshold
Locs(smallPeakIndexes) = [] ; %Reject Y value of peaks below this threshold
More Answers (1)
  Star Strider
      
      
 on 8 Sep 2017
        This tweak to your code should work:
X_peakVal = X(Peaks < 0.01*max(Peaks)) ; %Find X value of the peaks
If that worked for ‘Peaks’ it should work for ‘X’ as well, since it creates the same logical index vector.
0 Comments
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

