Ваше решение зависит от того, что вы хотите сделать с данными.Если вы хотите делать очень серьезные вещи, тогда вам, скорее всего, следует использовать (быстрое) преобразование Фурье и извлечь из него как фазу, так и частоту.Но это очень интенсивно в вычислительном отношении и требует много времени для программирования. Если вы просто хотите сделать что-то простое , которое не требует больших вычислительных ресурсов, то вот предложение:
Для этой конкретной задачи я реализовал приведенный ниже алгоритм несколькочасов назад. Я сам изобрел алгоритм, поэтому я не знаю, есть ли у него имя, но он отлично работает с очень шумными данными.
Вам нужно определить среднее значение от пика к пикурасстояние и назовите это PtP.Делайте это измерение как угодно.Судя по графику в вашем случае, он составляет около 35. В моем коде у меня есть другой алгоритм, который я изобрел, чтобы сделать это автоматически.
Затем выберите случайный начальный индекс на графике.С этого момента опрашивайте каждый новый набор данных и ждите, пока график не поднимется или не упадет с начального уровня индекса примерно на 70% от PtP.Если это было падение, то это так.Если это был подъем, то это галочка.Сохраните этот уровень как последний тик или высоту токов.Создайте событие 'tick' или 'tock' с этим индексом.
Продолжайте движение вперед в данных.После тиков, если данные продолжают расти после этой точки, сохраните этот уровень как новую 'высоту тика', но не создайте новое событие тика.После того, как после tocks, если данные продолжают падать после этой точки, сохраните этот уровень как новую 'глубину tock', но не создайте новое событие tock.
Если последнее событие было tock, тогда подождитегалочка, если последнее событие было галочкой, тогда ждите токка.
Каждый раз, когда вы обнаруживаете галочку, это должно быть пиком!Удачи.