如果在fftw实现中n_样本和size_输入不匹配怎么办 我使用FFWT3LIB计算C++中的傅立叶变换。每次我都要用不同的输入数组反复调用它。我用size MAX_元素初始化数组(在代码中称为“input”)一次,然后在每次调用时将其用作fftw_plan函数的输入(更改内容及其大小)。但是,我每次都会根据数组的实际大小(数组中有效数据样本的数量)更改n_样本。我想知道这是否会在我的实现中造成任何问题-执行/准确性方面 fftw_plan fftw_plan_dft_r2c_1d(int n_samples, double *in, fftw_complex *out,

如果在fftw实现中n_样本和size_输入不匹配怎么办 我使用FFWT3LIB计算C++中的傅立叶变换。每次我都要用不同的输入数组反复调用它。我用size MAX_元素初始化数组(在代码中称为“input”)一次,然后在每次调用时将其用作fftw_plan函数的输入(更改内容及其大小)。但是,我每次都会根据数组的实际大小(数组中有效数据样本的数量)更改n_样本。我想知道这是否会在我的实现中造成任何问题-执行/准确性方面 fftw_plan fftw_plan_dft_r2c_1d(int n_samples, double *in, fftw_complex *out,,c++,fftw,C++,Fftw,理想情况下,您希望选择特定大小的FFT并坚持使用它,原因有两个: 相对于FFT本身,创建/销毁计划需要花费大量时间,因此,如果您为执行的evert FFT创建/销毁计划,那么您就失去了使用FFTW的任何速度优势 对于每个不同大小的FFT,频率分辨率将不同,这可能会使连续输出数据的解释变得麻烦 理想情况下,您应该使用固定的FFT大小,以便只创建/销毁一次计划 如果您的数据流是连续的,则只需选取适当的FFT大小N,并在缓冲区中累积样本,直到有N个样本要处理,然后保存其余样本,直到再次有N个样本

理想情况下,您希望选择特定大小的FFT并坚持使用它,原因有两个:

  • 相对于FFT本身,创建/销毁计划需要花费大量时间,因此,如果您为执行的evert FFT创建/销毁计划,那么您就失去了使用FFTW的任何速度优势
  • 对于每个不同大小的FFT,频率分辨率将不同,这可能会使连续输出数据的解释变得麻烦
理想情况下,您应该使用固定的FFT大小,以便只创建/销毁一次计划

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

如果您的数据不连续,则选择一个合理大小的FFT,N,然后当您获得N个样本时,可以丢弃额外的样本


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

Paul R:但是我的数组内容在每次迭代中都会发生变化,fftw\U计划将数组作为输入?我该如何解决这个问题。与我第一次(也是唯一一次)初始化计划时一样,我要传递什么输入数组?您只需重复使用相同的缓冲区-每次执行FFT时内容是否已更改并不重要。Ok。我做到了。初始化了我的类的头文件中的所有数组。然后,当我初始化该类的对象时,我分配空间、定义大小并制定ffftw计划。然后每次我需要傅里叶变换时,我都执行计划(启用度量标志)。现在我得到以下分段错误。知道我哪里出错了吗。这是在初始化期间发生的,甚至在我调用execute methods.Solved之前。谢谢我犯了一个很小的错误,将尺寸0传递给了计划。忽视了3个小时!:(