Я унаследовал старый код fortran с подпрограммой fft, и я не могу отследить источник этой программы. Единственное, что я знаю, это вызов ff2prp() и вызов fft2() для выполнения 2D прямого и обратного DFT. Чтобы узнать, что делает код, я беру DFT 2D-матрицы (матрицы) 4x4, и результаты сильно отличаются от результатов Matlab и FFTW.FFT: FFTW Matlab FFT2 mystery
Вопрос: Может ли кто-нибудь сказать, что делает код, глядя на выход. Вход и выход оба реальные массивы
Входной массив
0.20000 0.30000 1.00000 1.20000
0.00000 12.00000 5.00000 1.30000
0.30000 0.30000 1.00000 1.40000
0.00000 0.00000 0.00000 1.50000
После прямого преобразования Фурье с fft2() Fortran подпрограмма
0.16875 -0.01875 -0.05000 0.05625
0.00000 12.00000 5.00000 1.30000
0.30000 0.30000 1.00000 1.40000
0.00000 0.00000 0.00000 1.50000
Matlab выход выполнения ДКП: dct2 (вход)
6.3750 -0.8429 -3.4250 -2.4922
2.4620 0.6181 -2.6356 -0.9887
-4.2750 -0.9798 4.2250 2.2730
-4.8352 -1.2387 5.0695 3.4819
Вывод кода C++ с использованием библиотеки FFTW. DCT от FFTW
(6.3750, 0.00) (-0.8429, 0.00) (-3.4250, 0.00) (-2.4922, 0.00)
(2.4620, 0.00) (0.6181, 0.00) (-2.6356, 0.00) (-0.9887, 0.00)
(-4.2750, 0.00) (-0.9798, 0.00) (4.2250, 0.00) (2.2730, 0.00)
(-4.8352, 0.00) (-1.2387, 0.00) (5.0695, 0.00) (3.4819, 0.00)
вперед FFT с Matlab - fft2 (вход)
25.5000 + 0.0000i -6.5000 - 7.2000i -10.5000 + 0.0000i -6.5000 + 7.2000i
-0.3000 -16.8000i -12.3000 + 4.8000i 0.1000 + 6.8000i 12.1000 + 5.2000i
-14.1000 + 0.0000i 3.5000 +11.2000i 9.1000 + 0.0000i 3.5000 -11.2000i
-0.3000 +16.8000i 12.1000 - 5.2000i 0.1000 - 6.8000i -12.3000 - 4.8000i
вперед FFT с FFTW
(25.50, 0.00) (-6.50, -7.20) (-10.50, 0.00) (-6.50, 7.20)
(-0.30, -16.80) (-12.30, 4.80) (0.10, 6.80) (12.10, 5.20)
(-14.10, 0.00) (3.50, 11.20) (9.10, 0.00) (3.50, -11.20)
(-0.30, 16.80) (12.10, -5.20) (0.10, -6.80) (-12.30, -4.80)
Как вы тростниковый видите выход Matlab и FFTW согласуется с друг друга, но не с выходом кода fortran. Я хотел бы использовать FFTW, но результаты отличаются от FFT. Я не могу понять, что делает FFT программа fortran. Может кто-нибудь сказать, глядя на выход.
Мы не можем даже начать диагностировать, где вы ошибаетесь ** без вашего кода **. Как мы можем воспроизвести ваши результаты и выяснить, что не так, без кода для этого? – rayryeng