Какие существуют алгоритмы обнаружения пиков? У меня есть зашумленные данные, и я хотел бы реализовать обнаружение пиков для этих данных. Данные в обратном порядке, на самом деле я пытаюсь определить дно.
Вот снимок данных в Excel. Мне нравится обнаруживать оба основания. Я подумал о том, чтобы передать данные через фильтр нижних частот и затем выполнить скользящее среднее, где я определяю пики, а в пределах скользящего среднего я делаю другой поиск. У меня нулевой фон DSP; это просто здравый смысл. Я хотел бы услышать, что рекомендуют эксперты.
filters
peak-detection
Ktuncer
источник
источник
Ответы:
Ktuncer, здесь можно использовать несколько методов. Один метод, который я бы порекомендовал, - это использовать дискретное вейвлет-преобразование (DWT) и, в частности, посмотреть на вейвлет Daubechies . Я бы выбрал, скажем, Daub-14 / Daub-Tetra.
По сути, вам действительно нужно «трендить» ваш сигнал, а затем отобрать минимальный или максимальный пик. Это избавит от ваших выбросов. Вейвлет-преобразование daub-14 / daub-tetra может помочь вам в этом, и это особенно помогает, поскольку вы не знаете природу своего сигнала. (Используя daub-14, вы можете точно представлять полиномиальные сигналы степени 14/2 = 7, и, похоже, вам больше не нужно).
Вычисление этого вейвлет-преобразования по существу «сжимает» вашу энергию в несколько признаков. Эти показатели представляют веса на основе векторов. Остальные веса (в идеале) будут близки к нулю. Когда у вас есть шум в вашем сигнале (как и у вас), те веса, которые обычно были нулевыми, теперь имеют некоторые веса, но вы можете просто обнулить их и «снять шум» с вашего сигнала. Как только это будет завершено, вы можете сделать простое определение максимума / мин.
Есть более подробная информация, вы можете отправить мне письмо, если вы хотите обсудить, как это реализовать. Я проделал подобную работу над этим раньше.
РЕДАКТИРОВАТЬ: Вот некоторые изображения, иллюстрирующие Daub-Tetra Denoiser:
источник
Я далеко не эксперт, но вот что я бы сделал:
У вас, кажется, есть медленно меняющийся сигнал, наложенный на колебания. Пики, которые вы ищете, представляют собой более сильные колебания, поэтому я бы обнаружил их, используя это.
Превышение или отрицательное отклонение могут быть конкретно обнаружены путем удаления абсолютного значения и использования надлежащего теста. Это то, что вы ищете?
источник
Обнаружение пиков имеет довольно много применений, для одномерных или многомерных сигналов. Вот несколько примеров, показывающих, насколько различны эти сигналы и их интерпретации пика:
1D данные оригинального плаката;
Несмотря на преобразование изображения, каждый пик соответствует линии в исходном изображении;
автокорреляция изображения, каждый пик соответствует частоте, раскрывающей «периодическую картину»;
«обобщенная» взаимная корреляция изображения и шаблона, каждый пик соответствует вхождению шаблона в изображение (нас может интересовать обнаружение только лучшего пика или нескольких пиков);
Это определения и методы обнаружения пиков, с которыми я сталкивался - конечно, есть и другие, которые я либо забыл, либо не знаю, и, надеюсь, другие ответы их охватят.
Техника предварительной обработки включает сглаживание и удаление шума. Ответ @ Мухаммеда о вейвлетах, и вы можете увидеть их различное использование в документации к WaveletThreshold Mathematica (кстати, я также взял свои примеры).
Затем вы ищете максимумы. В зависимости от вашего приложения вам нужны только глобальные максимумы (например, регистрация изображений), несколько локальных максимумов (например, обнаружение линии) или множество локальных максимумов (определение ключевых точек): это можно сделать итеративно, ища наибольшее значение в данных затем стирают область вокруг выбранного пика и т. д. до тех пор, пока самое высокое оставшееся значение не станет ниже порогового значения. Кроме того, вы можете искать локальные максимумы в пределах определенного размера окрестности и сохранять только те локальные максимумы, значения которых превышают пороговое значение - некоторые рекомендуют сохранять локальные максимумы на основе их расстояния до остальных локальных максимумов (чем дальше лучшее). В арсенале также есть морфологические операции: расширенные максимумы и трансформация top-hat могут быть подходящими.
Посмотрите результаты трех из этих методов на изображении, отфильтрованном по углам Харриса:
Кроме того, некоторые приложения пытаются найти пики с разрешением ниже субпикселя. Интерполяция, которая может быть специфичной для приложения, оказывается полезной.
Насколько я знаю, серебряной пули нет, и данные покажут, какие методы работают лучше всего.
Было бы очень приятно получить больше ответов, особенно исходя из других дисциплин.
источник
Я думаю, что один типичный алгоритм обнаружения пиков, как это, где
ref
естьpeak(bottom)
.источник