我有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);
答案 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是默认的计划选项。