巨大矩阵的二维 FFT

2D FFT for Huge Matrix

我有 2533136*8 维度的二维向量,如下所示:

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

我想用最快的解决方案从这个向量中获取 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);

我的问题已解决 我非常感谢@G.M,He/She 正在考虑我的问题。 在我的问题中大部分时间花在 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 中的所有计划程序例程都接受一个整数标志参数,它是下面定义的零个或多个标志常量的按位或(‘|’)。这些标志控制规划过程的严格程度(和时间),还可以对所采用的变换算法类型施加(或取消)限制。

规划严谨性标志

FFTW_ESTIMATE 指定,而不是不同算法的实际测量,一个简单的启发式用于快速选择一个(可能是次优的)计划。使用此标志,input/output 数组在计划期间不会被覆盖。

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