我在FFTW库中遇到了一些问题,我正在用高斯函数测试快速傅里叶变换算法,因此我希望在进行变换时得到另一个高斯函数,这就是我得到的结果:
代码如下(我正在使用C):
你能帮我告诉我哪里错了吗?
最佳答案
问题不在于你的计算,而在于你对数据的解释。很重要的一点是要考虑你已经通过的高斯函数,以及它相对于原点的相位。只有当你也通过了以原点为中心的高斯函数时,你才能得到真正的高斯函数。你得到了高斯乘以exp(i*phase*omega)
的结果,因为原始数据很可能不是以原点为中心的。如果你检查虚值,你会发现它们也在振荡,并且相对于实部去相位M_PI*0.25
。零中心实函数的数据应该从N/2
到N-1
为负值(以N的形式补足),然后从0
到N/2-1
为阳性样本。很可能你把高斯分布集中在样本上(我刚刚检查过,你做的正是这个:))这就产生了输出的复指数倍增。
此外,原点在元素N/2
处,因此它在原点处正确反映。只需将输入高斯点居中到同一点,看看它怎么不会显示这样的振荡结果。