gpt4 book ai didi

c++ - 如果 n_samples 和 size_input 在 fftw 实现中不匹配怎么办

转载 作者:行者123 更新时间:2023-11-28 03:29:48 31 4
gpt4 key购买 nike

我正在使用 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 本身,创建/销毁计划需要花费大量时间,因此如果您为执行的所有 FFT 创建/销毁计划,您将失去使用 FFTW 的任何速度优势
  • 每个不同大小的 FFT 的频率分辨率都会不同,这可能会给连续输出数据的解释带来麻烦。

理想情况下,您应该使用固定的 FFT 大小,以便您只创建/销毁一个计划。

如果您的数据流是连续的,那么只需选择一个合适的 FFT 大小 N,并在缓冲区中累积样本,直到您有 N 个样本要处理,然后保存其余样本,直到您再次有 N 个样本。

如果您的数据是连续的,那么选择一个合理大小的 FFT,N,然后当您得到 < N 个样本时,您可以用零填充输入。当您获得 > N 个样本时,您可以丢弃多余的样本。

当然,在所有情况下,您都必须在 FFT 之前应用合适的窗函数。

关于c++ - 如果 n_samples 和 size_input 在 fftw 实现中不匹配怎么办,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12897003/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com