Каково значение вывода этой функции БПФ? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть следующие периодические данные, которые имеют период ~ 2000: Periodic Data

Я пытаюсь определить период данных и смещение первого пика.У меня есть следующая функция 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) (ссылка содержит полный пример работы с основной функциейи пример данных)

Я понимаю, что преобразование Фурье преобразует данные временного ряда в данные частоты.Каждая частота имеет амплитуду и фазу.Тем не менее, мне трудно понять вывод этой функции.График вывода дает мне это: FFT Graphical Output

Я попытался построить график реального компонента, мнимого компонента и величины обоих компонентов.Каждая попытка дает очень похожий график.

Я ошибаюсь, если предположить, что должен быть скачок в ~ 2000?Я неправильно интерпретирую вывод этой функции?

1 Ответ

4 голосов
/ 20 сентября 2019

Неправильно ли я предположить, что должен быть скачок в ~ 2000?

Да, потому что 2000 - это период , который вас интересует, а не частота .Похоже, что вы используете FFT с 32 768 точками, поэтому вы должны ожидать, что пик в бин № 16 (16 циклов на 32 тыс. = Периоды примерно 2048 выборок), а не бин № 2000.

ЕслиВы хотите что-то, что сообщает непосредственно с точки зрения количества выборок, а не частоты, вы можете хотеть автокорреляцию, а не БПФ.Ваш сигнал будет иметь пики автокорреляции при задержках 2000, 4000 и т. Д.

...