Неправильный результат при использовании kiss_fftnd на 3D матрице?

Я пытаюсь использовать Kiss FFT на некоторых 3D матрицах, но мои результаты не соответствуют тем, которые я получаю при использовании Matlab. Мне было интересно, может ли кто-нибудь помочь мне определить, правильно ли я использую библиотеку.

Если делать fftn на следующей матрице 2x3x2 в Matlab

    A2 =

ans(:,:,1) =

1   2   3
4   5   6

ans(:,:,2) =

7    8    9
10   11   12

Я получаю этот результат

ans(:,:,1) =

78.00000 +  0.0i   -6.0 +  3.46410i   -6.0 -  3.46410i
-18.0 +  0.0i    0.0 +  0.0i    0.0 +  0.0i

ans(:,:,2) =

-36    0    0
0    0    0

При выполнении FFT с использованием kiss_fftnd я получаю этот результат (при форматировании результата вручную). Обратите внимание на разницу во втором ряду, втором столбце.

78 + 0i  -6 + 0i        -12 + 6.9282i
0 + 0i   -12 -6.9282i   0 + 0i

-36    0    0
0      0    0

Я использую порядок следования строк при представлении матрицы в C ++, поэтому входной массив выглядит следующим образом

[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0]

Вот код, который я использую для выполнения БПФ с Kiss FFT:

int ni = 2;
int nj = 3;
int nk = 2;

std::vector<double> values = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 };
int *dims = new int[3];
dims[0] = ni;
dims[1] = nj;
dims[2] = nk;

int total = ni * nj * nk;

kiss_fftnd_cfg cfg = kiss_fftnd_alloc(dims, 3, false, NULL, NULL);
kiss_fft_cpx *in = new kiss_fft_cpx[total];
kiss_fft_cpx *out = new kiss_fft_cpx[total];

for (int i = 0; i < total; ++i) {
in[i].r = values[i];
in[i].i = 0.0;
}

kiss_fftnd(cfg, in, out);

Вывод, который я получаю, следующий (с добавлением i отметить сложную часть):

[78 + 0i,  -6 + 0i,  -12 + 6.9282i, 0 + 0i, -12 + -6.9282i, 0 + 0i, -36 + 0i, 0 + 0i, 0 + 0i, 0 + 0i, 0 + 0i, 0 + 0i]

Я делаю что-то не так при использовании библиотеки? Я думаю, что Kiss FFT использует упорядочение по основным рядам (я пробовал с упорядочением по основным столбцам, но я получаю неправильные результаты по сравнению с Matlab)

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]