2016-11-03 3 views
0

Я хочу найти наивысшие точки пика на приведенной ниже гистограмме. Например, как показано на рисунке, я должен выбрать 4 пиковых значения, но я получаю эту 4-х очную информацию после просмотра гистограммы, поэтому мне нужно найти ее по кодированию. Есть ли какой-либо метод или алгоритм для решения этой проблемы?Найти наивысшее неизвестное количество точек пика в Matlab

enter image description here

Если я выбираю вручную, я мог бы решить эту проблему. Тем не менее, я не знаю количество наивысших точек пика. На самом деле основной проблемой является определение порога.

[pks,locs] = findpeaks(difference) 
[sortedX,sortingIndices] = sort(difference,'descend'); 
locsize=size(locs,2); 
counter=1; 
peak_order=[]; 
while counter<5 
    for j=1:locsize 
     if sortingIndices(counter)==locs(j)    
      peak_order(counter)=sortingIndices(counter); 
      counter=counter+1; 
     end 
    end 
end 

sorted_peak_order=sort(peak_order)enter code here 
+0

так просто добавить порог нет? – obchardon

+0

сортируйте свой массив, уменьшив размер, затем возьмите первые 4 элемента ... – Hoki

+0

Но проблема в том, что я не знаю значения «4» или любого порогового значения. – user951487

ответ

2

findpeaks имеет a series of options улучшить ваши результаты. В вашем случае опция «MinPeakProminence» должна работать; это пороговое значение в соответствии с преобладанием пика для его соседей.

[pks,locs] = findpeaks(difference,'MinPeakProminence',0.25*max(difference)) 
+0

Это работает благодаря @Laure – user951487