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


24

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

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

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


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) }}
}

3
Я не понизил ваш ответ, но думаю, что его сочли не по теме. Этот эскиз обнаруживает абсолютный минимум последовательности. ОП ищет пики, где нужно иметь дело с местностью и шумом.
Матиас Одисио

Увы, не было никакого ответа на щедрость «канонического ответа». В этом отношении все ответы одинаково «неактуальны»; Я получил награду за этот ответ, потому что он самый старый.
Матиас Одисио
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.