我试图通过在C++中使用FFTW3来计算高斯函数的傅立叶变换。这是我的代码的主要部分

main(int argc, char** argv)
{
   fftw_plan p;
   complex<double> *in,*out;
   long N=8;

   //allocation of in and the fftw plan called
   in=(complex<double>*) calloc(N,sizeof(complex<double>));
   p=fftw_plan_dft_1d(N,(fftw_complex*)in,(fftw_complex*)in,FFTW_BACKWARD,FFTW_ESTIMATE);

   //initialize the array in with the values of a Gaussian function
   gaussianf(in,N);
   //Fourier transform in
   fftw_execute(p);
   //write the result into a file
   writeft(in,N);
   fftw_destroy_plan(p);
}

由于已使用高斯的值初始化了数组,因此我希望输出也是高斯的,但实际上只有包络具有高斯形状。正如我在以下数据中所示,可以看到一些负值出现了。
#input values
#x       real part     imag part

-10     3.72008e-44     0
-7.5    3.72336e-25     0
-5      1.38879e-11     0
-2.5    0.00193045      0
0       1       0
2.5     0.00193045      0
5       1.38879e-11     0
7.5     3.72336e-25     0

#output
#x       real part     imag part
-10     1.00386 0
-7.5    -1.00273        0
-5      1       0
-2.5    -0.99727        0
0       0.996139        0
2.5     -0.99727        0
5       1       0
7.5     -1.00273        0

谁能告诉我我在做什么错?我将衷心感谢您的帮助。非常感谢。

最佳答案

就C编程或FFTW调用而言,您没有做任何错:这些是正确的值。高斯曲线的FFT的实部确实在零附近振荡。如果绘制绝对值,则可能看起来更像您期望的那样。

关于c++ - 使用FFTW3和C++评估高斯的傅立叶变换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20251068/

10-14 08:26