Вопрос или проблема
Я пытаюсь написать программу, которая постоянно отслеживает местоположение пика. Для этого мне нужен очень хороший алгоритм обнаружения пиков. Он должен не только определять местоположение пика, но и отсутствие его.
Мой текущий подход к обнаружению пиков:
-
Вычтенный уровень фона (учитывать различные фоновые сигналы)
-
Разделенный на стандартное отклонение сглаженного сигнала (учитывать различные фоновые сигналы)
-
Я наложил все данные кандидатных пиков из всех спектров (локальные минимумы после гауссового сглаживания) и выполнил гауссовую смесь в одном измерении (ось Y; 2 кластера; 100 спектров; 3000 точек данных)
Желтый – кластер “пиков”; синий – кластер “шума”.
Проблемная область: между 1 и 3 по оси Y (не удается различить мелкие пики из спектров без пика).
Как мне подойти к этой проблеме, чтобы сделать обнаружение пиков достаточно чувствительным, но в то же время иметь возможность определить, что пика нет? Есть ли лучший способ нормализовать данные? Какой алгоритм неконтролируемого обучения был бы подходящим для этого (мои данные не маркированы)? Пожалуйста, дайте знать, если у вас есть какие-либо предложения. Это будет очень признательно.
Примеры:
Формы и размеры пиков, а также уровень шума сильно варьируются:
Очень мелкие и широкие
Очень узкие и острые
Частотная характеристика вышла за пределы окна сканирования (нужно определить, что пик отсутствует)
иногда меняющийся уровень фона
Как получаются данные:
Пик можно рассматривать как реакцию гармонического осциллятора в ходе частотного сканирования.
Один пример гармонического осциллятора – это качели. (или шарик на пружине; шарик в колодце). Все они характеризуются периодическим движением, связанным с естественным положением. В примере с качелями натуральным положением является середина, когда девочка впервые села на качели.
Представьте, что кто-то начал периодически толкать ее сзади, когда она качается, ее амплитуда качания может увеличиться. Однако, если человек толкает ее в неподходящее время, например, оттолкнув ее, когда ее спина идет к нему, она замедлится и не сможет качаться выше. Это происходит потому, что частота толчка (входная частота) не совпадает с периодическим движением качелей (естественная частота). Представьте, что человек постепенно увеличивает частоту толчка от очень редкого до очень частого (частотное сканирование), частота толчка в какой-то момент совпадет с естественной частотой качелей (приходит в резонанс). Другими словами, каждый толчок человека будет в нужный момент и будет поднимать ее всё выше и выше.
Представьте, что вы светите очень сильным прожектором на натуральное положение качелей (самую нижнюю позицию). Количество времени, которое девочка проводит в свете, будет зависеть от того, как высоко она качается. Чем выше она качается, тем меньше времени она проводит в свете. Вернемся к моему графику, сигнал (ось Y) зависит от того, насколько далеко качается гармонический осциллятор, а впадина графика указывает, при какой входной частоте он приходит в резонанс (входная частота совпадает с природной частотой, так что он качается очень далеко, уменьшая сигнал).
Изменяющийся уровень фона обусловлен дрейфом яркости самого прожектора
Надеюсь, это прояснит некоторые моменты.
Это проблема, обычно называемая обнаружением аномалий во временных рядах / обнаружением выбросов. Большинство систем начинается с комбинаций статического и динамического порогов. Динамический порог, например, может использовать процентильное значение в качестве порога. Один из распространенных алгоритмов – Лес Изоляции, где признаки могут включать в себя окна скользящих средних различной длины.
Одним из лучших способов справиться с иногда меняющимся уровнем фона является применение байесовского подхода. Генерируйте постериорную оценку, которая обновляется онлайн по мере изменения распределения данных.
Ответ или решение
Подход к обнаружению пиков с разнообразными формами, размерами, уровнями шума и изменяющимся базовым уровнем
Обнаружение пиков в сигнале, особенно при наличии широкого спектра форм, размеров и шумов, представляет собой сложную задачу. Ваш текущее решение включает несколько этапов обработки, однако, чтобы улучшить его эффективность, необходимо рассмотреть более полное использование методов анализа сигналов, статистики и машинного обучения.
1. Предобработка сигналов
Перед тем как обратиться к алгоритмам обнаружения, важно выполнить ряд этапов предобработки:
- Сглаживание сигнала: Используйте фильтры, такие как общий или центрированный фильтр с ядерной регрессией или фильтры Савицкого-Голея. Это поможет уменьшить шум, сохраняя при этом характерные формы пиков.
- Нормализация данных: Рассмотрите возможность использования методов нормализации на основе алгоритмов, таких как Z-преобразование (приведение к стандартному нормальному виду) или Min-Max масштабирование для приведения данных к общему диапазону. Это поможет различать пики более детально.
2. Обработка базового уровня
Проблема с изменяющимся базовым уровнем важна, и для ее решения можно использовать:
- Методы адаптивного вычитания базового уровня: Примените алгоритмы, такие как медианная фильтрация или адаптивные полиномиальные регрессии, которые динамически обновляют оценки базового уровня, адаптируясь к изменениям во времени.
- Анализ временных рядов: Использование методов, таких как ARIMA или экспоненциальное сглаживание, поможет спрогнозировать изменения в базовом уровне и устранить их влияние.
3. Обнаружение пиков
Для эффективного обнаружения пиков в условиях шума и изменяющегося базового уровня, рассмотрите следующие методы:
- Пороговые методы: Установите как статические, так и динамические пороги, адаптирующиеся на основе стохастических свойств сигнала. Например, использование процентилей сигнала в качестве динамического порога может быть полезным.
- Алгоритмы машинного обучения: Применение методов, таких как Isolation Forest или кластеризация (например, K-Means, DBSCAN), может помочь в различении пиков от шума. Необходимо выделить параметры, такие как форма, высота и ширина пиков для обучения модели.
4. Алгоритмы для непрерывного отслеживания
Для вашего сценария непрерывного отслеживания пиков, рекомендую следующее:
- Метод Баесовского обновления: Хорошим подходом является использование байесовских методов, которые позволяют обновлять оценки параметров модели по мере поступления новых данных. Это поможет учитывать динамику изменения базового уровня и адаптироваться к изменениям сигналов.
- Недетерминированные методы: Рассмотрите использование подходов, таких как HMM (Скрытые марковские модели) или алгоритмы временных рядов, которые могут обрабатывать временные зависимости и предсказывать изменения в данных.
5. Заключение
Комбинируя данные методы обработки, вы сможете улучшить чувствительность вашего алгоритма обнаружения пиков, а также минимизировать количество ложных срабатываний в условиях низкого сигнала. Не забывайте про возможность оптимизации работы с данными путем экспериментов с различными методами – каждый набор данных уникален, и то, что работает для одного, может не сработать для другого.
Если у вас есть дополнительные вопросы или потребность в более конкретной информации по каждому из предложенных методов, не стесняйтесь обращаться.