[巨大矩阵的2D FFT

问题描述 投票:0回答:1

我有一个二维矢量,其尺寸为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);
c++ c++11 fft fftw
1个回答
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是默认计划选项。

© www.soinside.com 2019 - 2024. All rights reserved.