Подход к обнаружению пиков

24

Какие существуют алгоритмы обнаружения пиков? У меня есть зашумленные данные, и я хотел бы реализовать обнаружение пиков для этих данных. Данные в обратном порядке, на самом деле я пытаюсь определить дно.

Вот снимок данных в Excel. Мне нравится обнаруживать оба основания. Я подумал о том, чтобы передать данные через фильтр нижних частот и затем выполнить скользящее среднее, где я определяю пики, а в пределах скользящего среднего я делаю другой поиск. У меня нулевой фон DSP; это просто здравый смысл. Я хотел бы услышать, что рекомендуют эксперты.

Введите описание изображения здесь

Ktuncer
источник
2
Какие два основания вы хотите обнаружить? Я вижу только один очевидный. Вы знаете, какой у вас шум, или откуда он?
Джейсон Р
Я хотел бы знать, хотите ли вы реализовать его на каком-либо конкретном оборудовании (ресурсные ограничения), так как это повлияет на мою стратегию обнаружения пиков.
anasimtiaz
@JasonR фиолетовый - очевиден. Однако у острого края есть выброс. В идеале, я хочу, чтобы его сбрили, а потом вычислили нижнюю точку. (отсюда и LP-фильтр в моем подходе) Неочевидный на голубом - это минимальная точка справа от фиолетового пика. На самом деле фиолетовый цвет - это не проблема, а голубой. График Excel не справляется, но это от 12-битного АЦП, где 4096 2В.
Ktuncer
@anasimtiaz, верьте, хотите нет, это будет работать на iPhone / Android, так что, думаю, мы можем сказать, что это похоже на ПК. Нет аппаратных ограничений.
Ktuncer
@Ktuncer Я добавил несколько изображений, чтобы вы могли убедиться сами.
Спейси

Ответы:

12

Ktuncer, здесь можно использовать несколько методов. Один метод, который я бы порекомендовал, - это использовать дискретное вейвлет-преобразование (DWT) и, в частности, посмотреть на вейвлет Daubechies . Я бы выбрал, скажем, Daub-14 / Daub-Tetra.

По сути, вам действительно нужно «трендить» ваш сигнал, а затем отобрать минимальный или максимальный пик. Это избавит от ваших выбросов. Вейвлет-преобразование daub-14 / daub-tetra может помочь вам в этом, и это особенно помогает, поскольку вы не знаете природу своего сигнала. (Используя daub-14, вы можете точно представлять полиномиальные сигналы степени 14/2 = 7, и, похоже, вам больше не нужно).

Вычисление этого вейвлет-преобразования по существу «сжимает» вашу энергию в несколько признаков. Эти показатели представляют веса на основе векторов. Остальные веса (в идеале) будут близки к нулю. Когда у вас есть шум в вашем сигнале (как и у вас), те веса, которые обычно были нулевыми, теперь имеют некоторые веса, но вы можете просто обнулить их и «снять шум» с вашего сигнала. Как только это будет завершено, вы можете сделать простое определение максимума / мин.

Есть более подробная информация, вы можете отправить мне письмо, если вы хотите обсудить, как это реализовать. Я проделал подобную работу над этим раньше.

РЕДАКТИРОВАТЬ: Вот некоторые изображения, иллюстрирующие Daub-Tetra Denoiser:

введите описание изображения здесь введите описание изображения здесь введите описание изображения здесь введите описание изображения здесь

ошалевший
источник
1
Мне нравится это .. Есть ли справочная библиотека для этого в Matlab?
Ktuncer
@Ktuncer Стреляй мне по электронной почте.
Spacey
4

Я далеко не эксперт, но вот что я бы сделал:

У вас, кажется, есть медленно меняющийся сигнал, наложенный на колебания. Пики, которые вы ищете, представляют собой более сильные колебания, поэтому я бы обнаружил их, используя это.

  1. Икс(T)Y(T)

  2. Икс-YσИкс-Y

  3. |(Икс-Y)(T)|>α×σα

Превышение или отрицательное отклонение могут быть конкретно обнаружены путем удаления абсолютного значения и использования надлежащего теста. Это то, что вы ищете?

Жан-Ив
источник
1
Интересный подход. Что такое σ? (Стандартный дев?) Кроме того, кроме математики, что за этим стоит?
Ktuncer
σ
4σ
@ user4749 Это поможет вам получить пик выбросов, хотя я не уверен, что он получит общие пики, которые вы ищете (я предполагаю, что вы ищете «широкие» пики?)
Spacey
1
@ Жан-Ив Привет! :-) Вы предполагаете, что шум здесь, кстати, гассианский? (Вот почему мы можем использовать стандартный порог). Мне любопытно, что если шум раскрашен?
Спейси
4

Обнаружение пиков имеет довольно много применений, для одномерных или многомерных сигналов. Вот несколько примеров, показывающих, насколько различны эти сигналы и их интерпретации пика:

  • 1D данные оригинального плаката;

  • Несмотря на преобразование изображения, каждый пик соответствует линии в исходном изображении; введите описание изображения здесь

  • автокорреляция изображения, каждый пик соответствует частоте, раскрывающей «периодическую картину»; введите описание изображения здесь

  • «обобщенная» взаимная корреляция изображения и шаблона, каждый пик соответствует вхождению шаблона в изображение (нас может интересовать обнаружение только лучшего пика или нескольких пиков);

введите описание изображения здесь

  • В результате фильтрации изображения по углам Харриса каждый пик соответствует углу исходного изображения.

введите описание изображения здесь

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

Техника предварительной обработки включает сглаживание и удаление шума. Ответ @ Мухаммеда о вейвлетах, и вы можете увидеть их различное использование в документации к WaveletThreshold Mathematica (кстати, я также взял свои примеры).

Затем вы ищете максимумы. В зависимости от вашего приложения вам нужны только глобальные максимумы (например, регистрация изображений), несколько локальных максимумов (например, обнаружение линии) или множество локальных максимумов (определение ключевых точек): это можно сделать итеративно, ища наибольшее значение в данных затем стирают область вокруг выбранного пика и т. д. до тех пор, пока самое высокое оставшееся значение не станет ниже порогового значения. Кроме того, вы можете искать локальные максимумы в пределах определенного размера окрестности и сохранять только те локальные максимумы, значения которых превышают пороговое значение - некоторые рекомендуют сохранять локальные максимумы на основе их расстояния до остальных локальных максимумов (чем дальше лучшее). В арсенале также есть морфологические операции: расширенные максимумы и трансформация top-hat могут быть подходящими.

Посмотрите результаты трех из этих методов на изображении, отфильтрованном по углам Харриса:

введите описание изображения здесь

Кроме того, некоторые приложения пытаются найти пики с разрешением ниже субпикселя. Интерполяция, которая может быть специфичной для приложения, оказывается полезной.

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

Было бы очень приятно получить больше ответов, особенно исходя из других дисциплин.

Матиас Одисио
источник
Как вы извлекли данные тела вопроса для своего использования? Я не могу найти это в чистом виде.
Лео Леопольд Герц
1
Неужели я? Я использовал другие примеры. Глядя на вопрос сегодня снова, я не вижу, как извлечь из этого вопроса точные данные.
Матиас Одисио
-1

Я думаю, что один типичный алгоритм обнаружения пиков, как это, где refесть peak(bottom).

for i=1,N   {
       if i=1   {  ref=data(i) }
       else { if data(i)<=ref {ref =data(i) }}
}
Fumio Ueda
источник
3
Я не понизил ваш ответ, но думаю, что его сочли не по теме. Этот эскиз обнаруживает абсолютный минимум последовательности. ОП ищет пики, где нужно иметь дело с местностью и шумом.
Матиас Одисио
Увы, не было никакого ответа на щедрость «канонического ответа». В этом отношении все ответы одинаково «неактуальны»; Я получил награду за этот ответ, потому что он самый старый.
Матиас Одисио