|
там взять реализацию Вашего сигнала и начать рассчитывать корреляционную функцию (КФ). Начать нужно с нуля. На основе этого отсчета, Вы найдете максимум КФ. А потом начинайте находить другие отсчеты КФ, двигаясь в сторону увеличения. В случае, если Ваш сигнал действительно периодический, то первый же сравнимый с нулевым по амплитуде отсчет дает Вам период. В конце расскажу, как можно поиск несколько оптимизировать при наличии некоторой априорной информации. А сейчас про главное.
После того, как Вы получили главный период T, Вы можете смело считать, что гармоники (сигнал-то у нас периодический) равны 1/T, 2/T, ... k/T. Дальше уже дело техники, как Вы будете находить амплитуды этих гармоник. Можете, например, найти корреляционную функцию для этих отсчетов и на ее основе сделать вывод об амплитудах (взяв корень квадратный из КФ точках Т, 2*Т, 3*Т...). Можете сгенерировать серию БИХ-фильтров, настроенных на частоты 1/T, 2/T, ... k/T или один КИХ-фильтр, который будет все частоты "рубить", кроме тех, о которых было упомянуто. Может, еще какой способ приемлемый найдете.
Теперь об оптимизации поиска периода. Если у Вас есть предположение, что период сигнала сосредоточен в некотором интервале [Tmin..Tmax], где Tmax < 2*Tmin, то можете применить бинарный поиск (см. метод дихотомии). Найдете максимум очень быстро и с желаемой точностью.