Что если n_samples и size_input не совпадают в реализации fftw

Я использую библиотеку fftw3 для вычисления преобразования Фурье в C ++. Я должен неоднократно вызывать его с другим входным массивом каждый раз. Я инициализирую свой массив (называемый «вход» в коде) только один раз размером MAX_ELEMS, а затем использую его в качестве входных данных для функции fftw_plan (изменение содержимого и их размера) при каждом вызове. Однако я каждый раз меняю n_samples в соответствии с фактическим размером моего массива (количество допустимых выборок данных в массиве). Я хотел знать, не вызовет ли это каких-либо проблем в моей реализации — в плане исполнения / точности.

fftw_plan fftw_plan_dft_r2c_1d(int n_samples,
double *in, fftw_complex *out,

0

Решение

В идеале вы хотите выбрать конкретный размер БПФ и придерживаться его по двум причинам:

  • создание / уничтожение планов занимает много времени относительно самого БПФ, поэтому вы теряете любое преимущество в скорости от использования БПФ, если вы создаете / уничтожаете план для преобразования БПФ, которое вы выполняете
  • разрешение по частоте будет различным для каждого отдельного размера БПФ, что может затруднить интерпретацию последовательных выходных данных.

В идеале вы должны использовать фиксированный размер FFT, чтобы создать / уничтожить план только один раз.

Если ваш поток данных является непрерывным, тогда просто выберите подходящий размер FFT, N, и накапливайте выборки в буфере, пока у вас не будет N выборок для обработки, и сохраните оставшуюся часть, пока у вас снова не будет N выборок.

Если ваши данные не затем выберите разумный размер БПФ, N, а затем, когда вы получите < N образцов вы можете заполнить ввод нулями. Когда вы получите> N образцов, вы можете отказаться от дополнительных образцов.

Во всех случаях, конечно, вы должны применить подходящую оконную функцию до БПФ.

2

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

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

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