我在MATLAB中有一个三维数组,如下所示:
val(:,:,1) =
1.0000 + 1.0000i 2.0000 + 2.0000i
3.0000 + 3.0000i 4.0000 + 4.0000i
val(:,:,2) =
5.0000 + 5.0000i 6.0000 + 6.0000i
7.0000 + 7.0000i 8.0000 + 8.0000i
我在MATLAB中进行一维FFT,如下所示:
clear
close all
%3D ARRAY Init
A3D(:,:,1)=[1+1i,2+2i;3+3i,4+4i];
A3D(:,:,2)=[5+5i,6+6i;7+7i,8+8i];
n=size(A3D,1);
res=fft(A3D,n,1)
FFT的结果是:
val(:,:,1) =
4.0000 + 4.0000i 6.0000 + 6.0000i
-2.0000 - 2.0000i -2.0000 - 2.0000i
val(:,:,2) =
12.0000 +12.0000i 14.0000 +14.0000i
-2.0000 - 2.0000i -2.0000 - 2.0000i
我用C++写了一个程序,像下面这样转换输入到行主序格式,并发送到fftw_plan_dft_1d进行FFT,但我的结果与MATLAB的结果不同。有人能帮我解决这个问题吗?
#include <cstdio>
#include <fftw3.h>
int main()
{
fftw_complex *in, *out;
fftw_plan p;
int N = 8;
in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * N);
out = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * N);
for (int i=0;i<8;i++){
in[i][0]=i+1;
in[i][1]=i+1;
}
for(int i = 0; i < N; i++)
{
printf("%f\t%f\n", in[i][0],in[i][1]);
}
p = fftw_plan_dft_1d(8, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
fftw_execute(p); /* repeat as needed */
for(int i = 0; i < N; i++)
{
printf("%f\t%f\n", out[i][0],out[i][1]);
}
fftw_destroy_plan(p);
fftw_free(in); fftw_free(out);
return 0;
}
A1D(somthing) = [1+1i,2+2i;3+3i,4+4i],5+5i,6+6i;7+7i,8+8i]; res=fft(A1D);
),就像您在C++中所做的那样,那么它是否会产生与我上面所述相同的输出?如果是这样,您可能需要查看2d/3d fftw计划。 - Ted Lyngmo