Я обнаружил разницу между выходами очень основных программ с использованием библиотеки FFTW в C ++ и библиотекой Pyfftw в Python.
Примером минимального воспроизводимого. />
Код: Выделить всё
import numpy as np
import pyfftw
K = pyfftw.empty_aligned(4, dtype='complex128')
X = pyfftw.empty_aligned(4, dtype='complex128')
ifftDoer = pyfftw.FFTW(K, X, direction='FFTW_BACKWARD')
K[:] = np.array([1, 2, 3, 4])
ifftDoer()
print(X)
> OUTPUT: [ 2.5+0.j -0.5-0.5j -0.5+0.j -0.5+0.5j]
int main() {
int N = 4;
fftw_complex *in, *out;
fftw_plan p;
in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
p = fftw_plan_dft_1d(N, in, out, FFTW_BACKWARD, FFTW_ESTIMATE);
for (int i = 0; i < 4; i++) {
in[0] = i+1;
in[1] = 0;
}
fftw_execute(p);
printFFTWComplexArr(out, N);
fftw_destroy_plan(p);
}
> OUTPUT: (10, 0), (-2, -2), (-2, 0), (-2, 2),
< /code>
Существует коэффициент 4 между результатами. Играя с кодом, это на самом деле фактор N, размер массива. Мне казалось бы странным включать тонкие нормализующие факторы с упоминанием 0. знаю.
Подробнее здесь: https://stackoverflow.com/questions/796 ... and-pyfftw