2D БПФ для огромной матрицы - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть 2d Vector с размером 2533136 * 8, как показано ниже:

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

Я хочу взять БПФ из этого вектора с самым быстрым решением, но я не знаю Как!

Вы можете помочьme Как я могу это сделать?

В дополнение к тому, что я использовал библиотеку 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 голосов
/ 11 ноября 2019

Моя проблема решена И я очень благодарен @GM, он / она рассматривает мою проблему. В моей проблеме большую часть времени, потраченную на 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 указывает, что вместо реальных измерений различных алгоритмов используется простая эвристика для быстрого выбора (возможно, неоптимального) плана. С этим флагом массивы ввода / вывода не перезаписываются во время планирования.

FFTW_MEASURE говорит FFTW найти оптимизированный план, фактически вычисляя несколько FFT и измеряя время их выполнения. В зависимости от вашей машины это может занять некоторое время (часто несколько секунд). FFTW_MEASURE - опция планирования по умолчанию.

...