Определение, приближает ли набор данных к синусоиде - PullRequest
8 голосов
/ 14 июня 2009

Существует ли алгоритм, который можно использовать для определения того, соответствует ли выборка данных, взятых через фиксированные интервалы времени, синусоидальной?

Ответы [ 4 ]

16 голосов
/ 14 июня 2009

Возьмем преобразование Фурье, которое преобразует данные в таблицу частот (для реализации ищите fft, быстрое преобразование Фурье. Например, FFTW ). Если это синус или косинус, таблица частот будет содержать одно очень высокое значение, соответствующее искомой частоте, и некоторый шум на других частотах.

В качестве альтернативы, сопоставьте несколько синусенов на нескольких частотах и ​​попытайтесь сопоставить их, используя взаимную корреляцию: сумму квадратов разностей между вашим сигналом и синусом, который вы пытаетесь подогнать. Вы должны были бы сделать это для sinussen на диапазоне частот, конечно. И вам нужно будет сделать это при перемещении синуса вдоль оси X, чтобы найти фазу.

7 голосов
/ 14 июня 2009

Вы можете рассчитать преобразование Фурье и найти один шип. Это говорит о том, что набор данных приближается к синусоиде на этой частоте.

0 голосов
/ 14 июня 2009

Выстрел в синеву: вы можете воспользоваться тем, что интеграл от a*sin(t) равен a*cos(t). Отслеживание мин / макс ваших данных должно позволить вам знать a.

0 голосов
/ 14 июня 2009

Проверьте метод наименьших квадратов .

@ CookieOfFortune: Я согласен, но подгонка ряда Фурье оптимальна в смысле наименьших квадратов (как сказано в статье в Википедии).

Если вы хотите сначала поиграть с собственными входными данными, отметьте Дискретное преобразование Фурье (DFT) на Wolfram Alpha. Как отмечалось ранее, если вы хотите быструю реализацию, вы должны проверить одну из нескольких FFT-библиотек .

...