Я использую библиотеку fftw3 для вычисления преобразования Фурье в C ++. Я должен неоднократно вызывать его с другим входным массивом каждый раз. Я инициализирую свой массив (называемый «вход» в коде) только один раз размером MAX_ELEMS, а затем использую его в качестве входных данных для функции fftw_plan (изменение содержимого и их размера) при каждом вызове. Однако я каждый раз меняю n_samples в соответствии с фактическим размером моего массива (количество допустимых выборок данных в массиве). Я хотел знать, не вызовет ли это каких-либо проблем в моей реализации — в плане исполнения / точности.
fftw_plan fftw_plan_dft_r2c_1d(int n_samples,
double *in, fftw_complex *out,
В идеале вы хотите выбрать конкретный размер БПФ и придерживаться его по двум причинам:
В идеале вы должны использовать фиксированный размер FFT, чтобы создать / уничтожить план только один раз.
Если ваш поток данных является непрерывным, тогда просто выберите подходящий размер FFT, N, и накапливайте выборки в буфере, пока у вас не будет N выборок для обработки, и сохраните оставшуюся часть, пока у вас снова не будет N выборок.
Если ваши данные не затем выберите разумный размер БПФ, N, а затем, когда вы получите < N образцов вы можете заполнить ввод нулями. Когда вы получите> N образцов, вы можете отказаться от дополнительных образцов.
Во всех случаях, конечно, вы должны применить подходящую оконную функцию до БПФ.
Других решений пока нет …