1d r2c fft 2d matrice с использованием ftw3 - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь реализовать 1D БПФ 2D-матрицы с использованием 1D вещественных и сложных БПФ, пока только в первом столбце. Но после преобразования первого столбца получается, что мнимая часть комплексного результата помещается во второй столбец.

Мой код:

float in[] = {0, 0, 0,
          1, 1, 1,
          2, 2, 2,
          3, 3, 3,
          4, 4, 4,
          5, 5, 5,
          6, 6, 6,
          7, 7, 7,
          8, 8, 8};

fftwf_plan p1;
int rank = 1;
int n[]={8}; // Num of elements in column
int howmoney = 1; // Num of column
int idist=1, odist=1;
int istride = 3, ostride=3;
int *inembed=n, *onembed=n;
p1 = fftwf_plan_many_dft_r2c(rank, n, howmoney, in, inembed, istride, idist, (fftwf_complex*)in, onembed, ostride, odist, FFTW_ESTIMATE);
fftwf_execute(p1);

printf("\n");
for(int i=0; i<7; i++){
    printf("%2d ", i);
    for(int j=0; j<3; j++){
        printf("%10.5f", in[i*3+j]);
    }
    printf("\n");
}

fftwf_destroy_plan(p1);

Результат

0   28.00000   0.00000   0.00000
1    1.00000   1.00000   1.00000
2   -4.00000   9.65685   2.00000
3    3.00000   3.00000   3.00000
4   -4.00000   4.00000   4.00000
5    5.00000   5.00000   5.00000
6   -4.00000   1.65685   6.00000

Как сделать так, чтобы результат преобразования помещался в тот же столбец, что и исходные данные, и не портил результат в другихстолбцы? То есть

0   28.00000   0.00000   0.00000
1    0.00000   1.00000   1.00000
2   -4.00000   2.00000   2.00000
3    9.65685   3.00000   3.00000
4   -4.00000   4.00000   4.00000
5    4.00000   5.00000   5.00000
6   -4.00000   6.00000   6.00000
     1.65685
...