Определение набора данных аппроксимация синусоиды
существует ли алгоритм, который можно использовать для определения того, аппроксимирует ли выборка данных, взятых на фиксированных временных интервалах, синусоидальную волну?
4 ответов
возьмите преобразование Фурье, которое преобразует данные в частотную таблицу (поиск fft, быстрое преобразование Фурье, для реализации. Например, библиотека FFTW). Если это синус или Косинус, таблица частот будет содержать одно очень высокое значение, соответствующее частоте, которую вы ищете, и некоторый шум на других частотах.
альтернативно, сопоставьте несколько sinussen на нескольких частотах и попробуйте сопоставить их с помощью перекрестной корреляции: сумма квадраты различий между вашим сигналом и синусом, который вы пытаетесь подогнать. Вам нужно будет сделать это для sinussen в диапазоне частот, конечно. И вам нужно будет сделать это, переводя синус вдоль оси x, чтобы найти фазу.
вы можете вычислить преобразование Фурье и искать один всплеск. Это скажет вам, что набор данных аппроксимирует синусоидальную кривую на этой частоте.
выстрел в синий: вы могли бы воспользоваться тем, что интеграл a*sin(t)
is a*cos(t)
. Отслеживание min / max ваших данных должно позволить вам знать a
.
Регистрация метод наименьших квадратов.
@CookieOfFortune: я согласен, но серия Фурье оптимальна в смысле наименьших квадратов (как сказано в статье Википедии).
Если вы хотите сначала поиграть с собственными входными данными, проверьте дискретное преобразование Фурье (DFT) на вольфрам Альфа. Как отмечалось ранее, если вы хотите быструю реализацию, Вы должны проверить один из нескольких FFT-библиотеки.