巨大矩阵的2D FFT

时间:2019-11-10 12:21:40

标签: c++ c++11 fft fftw

我有2D Vector,其尺寸为2533136 * 8,如下所示:

vector<vector<double>> DataChannel1(2533136, vector<double>(8));

我想以最快的解决方案从此Vector中获取FFT,但我不怎么做!

您能帮我吗?

除了我使用了FFTW库外,我的尺寸(ROW = 2533136和COL = 8)也要花很长时间计算。

const auto ROWS = 2533136;
const auto COLS = 8;
fftw_complex in[ROWS][COLS], out[ROWS][COLS];
fftw_plan g;


g = fftw_plan_dft_2d(ROWS, COLS, *in, *out, FFTW_FORWARD, FFTW_MEASURE);

1 个答案:

答案 0 :(得分:0)

我的问题解决了,@ G.M。非常感谢,他/她正在考虑我的问题。 在我的问题中,大部分时间都花在fftw_plan_dft_2d上,我看到了FFTW文档,并了解了此函数的最后输入是Planner Flags

fftw_plan fftw_plan_dft_2d(int n0, int n1,
                       fftw_complex *in, fftw_complex *out,
                       int sign, unsigned flags)

FFTW中的所有计划程序例程均接受整数标志参数,该参数是以下定义的零个或多个标志常量的按位OR(“ |”)。这些标志控制着计划过程的严格性(和时间),并且还可以对所采用的变换算法的类型施加(或提升)限制。

计划严格性标志

FFTW_ESTIMATE指定,使用一种简单的启发式方法来快速选择(可能是次优的)计划,而不是对不同算法进行实际测量。使用此标志,在计划期间不会覆盖输入/输出阵列。

FFTW_MEASURE告诉FFTW通过实际计算几个FFT并测量其执行时间来找到优化的计划。根据您的计算机,这可能需要一些时间(通常是几秒钟)。 FFTW_MEASURE是默认的计划选项。