У меня есть ряд данных, и мне нужно обнаружить пиковые значения в серии в пределах определенного количества показаний (размер окна) и исключая определенный уровень фонового «шума». Мне также нужно зафиксировать начальные и конечные точки заметных кривых (то есть, когда он начинает подниматься, а затем, когда он прекращает снижаться).
Данные являются поплавками высокой точности.
Вот быстрый набросок, который фиксирует наиболее распространенные сценарии, с которыми я сталкиваюсь визуально:
Один из методов, которые я попытался, состоял в том, чтобы пропустить окно размера X вдоль кривой, идущей назад, чтобы обнаружить пики. Это начало работать хорошо, но я пропустил много условий, которые изначально не ожидались. Еще один метод, который я начал разрабатывать, - это растущее окно, которое обнаружит кривые большей продолжительности. Еще один подход использовал подход, основанный на более исчислении, который отслеживает некоторые аспекты скорости / градиента. Похоже, ни один из них не попал в точку, вероятно, из-за отсутствия у меня опыта статистического анализа.
Может быть, мне нужно использовать какой-то пакет статистического анализа, чтобы покрыть мои основы по сравнению с написанием моего собственного алгоритма? Или будет эффективный метод для непосредственного решения этой проблемы с помощью SQL с использованием каких-то локальных методов max? Я просто не уверен, как подойти к этому эффективно. Каждый метод, который я пробую, кажется, что я пропускаю различные пороги, обнаруживая слишком много пиковых значений или не фиксируя целые события (сообщая о пиковом назначении данных слишком рано в процессе чтения).
В конечном счете, это реализовано в Ruby, и поэтому, если бы вы могли посоветовать наиболее эффективный и правильный способ решения этой проблемы с Ruby, который был бы признателен, однако Я открыт для алгоритмического алгоритмического подхода подход также. Или есть определенная библиотека, которая решает различные проблемы, с которыми я сталкиваюсь в этом сценарии определения максимальных пиков?