Чтобы показать одну длину волны, сначала сканируйте вперед во времени, пока не найдете неотрицательную точку данных. (Это произошло бы сразу, с самой первой записью, с данными в коде № 1.)
Затем продолжите сканирование вперед во времени и сохраните дельту между последовательными выборками. Первоначально дельта (или дискретная производная) будет положительной, когда кривая приближается к своему максимуму, затем станет отрицательной до достижения минимума, а затем снова станет положительной.
Прекратите сканирование вперед во время, когда вы встретите неотрицательную точку данных и дельта будет положительной. В этот момент у вас есть полная длина волны.
EDIT:
Если у вас много данных, тогда можно пропустить некоторые образцы данных преамбулы. Ключевым моментом здесь является то, что мы хотим найти пересечение нуля с положительной производной, а затем продолжать, пока не найдем еще одно пересечение нуля с положительной производной. Таким образом, это первое решение должно искать неотрицательную точку данных и настаивать на положительной дельте.
При наличии шума мы могли бы видеть изменения знака на дельте чаще, чем период сигнала. Таким образом, начальный шаг может заключаться в том, чтобы найти минимальные и максимальные значения для набора выборок (подразумевая диапазон), затем выбрать произвольные пороговые значения, такие как диапазон min + .25 * и диапазон min + .75 *, записать первое положительное пересечение нуля, подождать чтобы сигнал превысил верхний порог, подождите, пока он опустится ниже нижнего порога (после пересечения отрицательного нуля), затем запишите следующее положительное пересечение нуля. Это дает вам оценку длины волны. Сделайте повторные оценки, если вы находите это полезным, и возьмите некоторую удобную совокупность, такую как среднее или (лучше) медиана.
Вооружившись оценкой длины волны, вы в лучшем положении, чтобы оценить, является ли пара положительных пересечений нуля «правильной» или из-за шума. Отклоните пары, которые находятся намного ближе друг к другу, чем можно предположить. Также может оказаться удобным вычислить сглаженную производную, поэтому вместо дельты последних двух видимых точек (K = 2) вы осредняете последние K точек, возможно, полдюжины из них. Функция усреднения - это фильтр нижних частот, который подавляет высокочастотный шум.