Как установить полосу частот моего массива после FFT

Как я могу установить диапазон частот для моего массива от KissFFT? Частота дискретизации составляет 44100, и мне нужно установить ее в свой массив realPartFFT. Понятия не имею, как это работает. Мне нужно построить график спектра, чтобы увидеть, правильно ли он рассчитывает. Когда я сейчас это делаю, у него все еще есть только 513 чисел на оси x без указанной частоты.

    int windowCount = 1024;
float floatArray[windowCount], realPartFFT[(windowCount / 2) + 1];

kiss_fftr_cfg cfg = kiss_fftr_alloc(windowCount, 0, NULL, NULL);

kiss_fft_cpx cpx[(windowCount / 2) + 1];

kiss_fftr(cfg, floatArray, cpx);

for (int i = 0; i < (windowCount / 2) + 1; ++)
realPartFFT[i] = sqrtf(powf(cpx[i].r, 2.0) + powf(cpx[i].i, 2.0));

0

Решение

Прежде всего: KissFFT ничего не знает об источнике данных. Вы передаете ему массив вещественных чисел заданного размера N, и вы получаете взамен массив комплексных значений размера N/2+1, Входной массив может быть прогнозом следующих N часов количества солнечных пятен за последние N дней. KissFFT не волнует.

Отображение обратно в реальный мир должно быть сделано вами, поэтому вы должны интерпретировать данные. Что касается фрагмента кода, вы передаете 1024 с плавающей запятой (я предполагаю, что floatArray содержит входные данные). Затем вы получите массив из 513 (= 1024/2 + 1) пар чисел с плавающей точкой.

Если вы производите выборку с частотой 44,1 кГц и пропускаете фрагменты KissFFT из 1024 сэмплов (размер вашего окна), вы получите наивысшую частоту 22,05 кГц и наименьшую частоту около 43 Гц (44 100/1024). Вы можете стать еще ниже, передав большие куски в KissFFT, но имейте в виду, что время обработки будет расти (с четвертой степенью N, IIRC)!

Кстати: вы можете рассмотреть возможность сделать ваш windowSize переменная const, чтобы позволить компилятору сделать некоторые оптимизации. Оптимизации очень важны при обработке чисел. В этом случае эффект может быть незначительным, но это хорошая отправная точка.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]