Ну вот попробовал простой подход к оценке частоты единственного синусоидального компонента. Вторая производная от синусоиды это синусоида тех же частоты и фазы, но амплитуда домножена на величину, зависящую от частоты. Поскольку у нас s(t) задан дискретно, то используем аппроксимацию производной разностями, что для второй производной выглядит, как
Строим линейную регрессию s(t) на d(t), свободный член даёт искомую постоянную составляющую, коэффициент при d(t) очевидным образом связан с частотой (если честно - мне лень выписывать, но там действительно несложно).
Затем, зная частоту f, строим регрессию на
и
Получаем оценки двух амплитуд (синфазной и квадратурной, щегольну умным словом) составляющих, и, если надо, получаем фазу и амплитуду сигнала в целом.
Результат на графике (синее - исходный сигнал, красное - оценка)
Видно, что не всё так хорошо, разница мала, но систематически отличается слева и справа от центра рисунка, что, надо думать, продукт неточности оценки частоты ("фаза плывёт", на величину разности оцененной и истинной частоты за секунду). Тут можно дошлифовать каким-либо способом (для Левенберга-Марквардта найти отклонения по точкам и построить регрессию на производную оцененного сигнала по частоте, коэффициент этой регрессии даст поправку к частоте, или же использовать другой предложенный здесь приём, рассматривать частоту, как параметр нелинейной оптимизационной задачи, строя регрессию s(t) на синусы и косинусы, как функции t).
Подход обобщаем на большее, но известное число составляющих. На каждую добавляется по две разности (т.е. для двух синусоид надо брать s(t-2), s(t-1), s(t), s(t+1), s(t+2); симметрия точек не обязательна, можно брать точки вообще по одну сторону от t, получится некая авторегрессия). Расчёт частот несколько усложнится, но тоже возможен.