Цитата(alexunder @ Jul 28 2015, 19:33)

хочется найти все локальные экстремумы такого сигнала. Пока что делаю так. Выбираю окно размером с период гармонической составляющей и уже в нем нахожу экстремумы. Зная закон изменения периода гарм. функции,
найдите первый, например, максимум, потом от него вправо одномерной минимизацией минимум, потом снова максимум. Идея примерно такая, делаете два мааааленьких шажка право, про длину который Вы точно будете уверены, что за экстремум не убежите, по ним считаете первую и вторую производную, и дальше бежите Ньютоном, возможно с релаксацией. Если нет дельта функций и очень не линейных зависимостей, то сойдетесь очень быстро.
Если у Вас функция - суть сумма двух-трех синусов и косинусов, с заранее неизвестными фазами, амплитудами и периодами, и шума нет, или почти нет, можно сделать еще элегантнее:
загоняете оцифрованную функцию в вектор v_1, сдвигаете этот вектор на 1 вниз, сохраняя в v_2, и так далее столько раз, сколько у Вас синусов.
Подрезаете сверху и снизу вектора, чтобы одинаковое количество элементов было, и строите матрицу. Находите у нее правый сингулярный вектор, соответствующий минимальному сингулярному числу. Записываете элементы этого вектора в виде коэффициентов полинома и находите корни. Они все - Ваши периоды деленные на шаг дискретизации. Зная периоды, наименьшими квадратами находите амплитуды и фазы. Дальше - аналитически ищите все корни и решение у Вас на ладони.
Выглядит страшно, но зная лапак + мапл или математику, можно за несколько часов сделать и запрограммировать. В МК, на который лапак не компилится, реализовать будет ужасно сложно, думаю, что практически невозможно, в этом случае, остается только первый, не элегантный, метод.