2012-04-24 2 views
14

Я пытался понять, как определить два пика из гистограммы. Может быть несколько, но мне нужно выбрать два самых высоких. В основном, что мне нужно, так это то, что, хотя у меня будут эти пики смещены влево или вправо, мне нужно их схватить. Их распространение может варьироваться, и их значения PEAK могут измениться, поэтому я должен найти способ заполучить эти два пика в Matlab.Обнаружение двух самых высоких пиков из гистограммы

Что я сделал до сих пор, так это создать 5-значное окно. Это окно заполняется значениями из гистограммы и выполняется сканирование. Каждый раз, когда я перемещаю 5 шагов вперед до следующего значения и сравниваю предыдущее значение окна с текущим. Что еще больше, сохраняется.

Есть ли лучший способ сделать это?

enter image description here

+0

Я думаю, что вы не можете обработать отдельный сигнал от программирования в этом вопросе. Если кто-то придумает ответ на основе статистики, что бы это было? Обработка сигналов или программирование? –

ответ

5

Возврат данных из Hist (или histc) функции на переменную (y = hist(x,bin);) и использовать PEAKFINDER представление FileExchange найти локальные максимумы.

Я также использовал PEAKDET функция из Eli Billauer. Прекрасно работает. Вы можете проверить мои answer здесь с примером кода.

+1

Я бы предложил выполнить оценку плотности ядра, прежде чем запускать на нем пиковый искатель. На рисунках примеров на странице fileexchange показаны несколько ложных срабатываний. Кроме того, почему этот второй вопрос перешел на dsp? o_O – abcd

+0

@Bringbackspy: Да, вы можете использовать функцию 'ksdensity' вместо' hist'. Что касается вопроса миграции на dsp, я понятия не имею. Он был изменен решением какого-то модератора, когда я работал над ответом. – yuk

+0

yuk, просто здорово! Спасибо выглядит многообещающим, поэтому я собираюсь иметь PEEK в нем :) –

6

Самый простой способ сделать это - сначала сгладить данные с помощью гауссового ядра, чтобы удалить высокочастотные вариации.

Для этого используйте функцию localmax, чтобы найти локальные максимумы.

+2

+1 Если вы знаете, что гистограмма «по сути» бимодальная, то я бы сгладил ее, пока она не будет иметь только два максимума. – leonbloy

+0

@slayton, гистограмма уже прошла через фазу сглаживания. –

+1

@Wajih, хорошо, но если вы хотите просто изолировать пики, вы можете сгладить его больше, чтобы отфильтровать вариации высокой частоты. Эти вариации затрудняют обнаружение пиков, потому что у вас много локальных максимумов. Если вы отфильтровываете их, то это потому, что довольно тривиально. – slayton