巨大矩阵的二维 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 是默认计划选项。
我有 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 是默认计划选项。