У меня есть следующие периодические данные, которые имеют период ~ 2000:
Я пытаюсь определить период данных и смещение первого пика.У меня есть следующая функция FFT для выполнения преобразования Фурье:
typedef double _Complex cplx;
void _fft(cplx buf[], cplx out[], int n, int step){
if (step < n) {
_fft(out, buf, n, step*2);
_fft(out+step, buf+step, n, step*2);
for(int i=0; i<n; i+=step*2) {
cplx t = cexp(-I * M_PI * i / n) * out[i + step];
buf[i / 2] = (out[i] + t);
buf[(i + n)/2] = (out[i] - t);
}
}
}
void fft(cplx* buf, int n){
cplx* out = (cplx*)malloc(sizeof(cplx) * n);
memcpy(out, buf, sizeof(cplx)*n);
_fft(buf, out, n, 1);
for(int i=0; i<n; i++){ buf[i] /= n; }
free(out);
}
, которая была адаптирована отсюда: Быстрое преобразование Фурье (C) (ссылка содержит полный пример работы с основной функциейи пример данных)
Я понимаю, что преобразование Фурье преобразует данные временного ряда в данные частоты.Каждая частота имеет амплитуду и фазу.Тем не менее, мне трудно понять вывод этой функции.График вывода дает мне это:
Я попытался построить график реального компонента, мнимого компонента и величины обоих компонентов.Каждая попытка дает очень похожий график.
Я ошибаюсь, если предположить, что должен быть скачок в ~ 2000?Я неправильно интерпретирую вывод этой функции?