FFTW 库:如何正确绘制输出?
FFTW libray: how to properly plot an output?
我在使用 FFTW 库时遇到一些问题,我正在使用高斯函数测试快速傅立叶变换算法,因此我希望在进行变换时得到另一个高斯函数,这就是我得到的结果:
代码如下(我用的是C):
你能帮我看看我哪里错了吗?
问题不在于您所做的计算,而在于您对数据所做的解释。重要的是要考虑你已经通过的高斯以及它是如何相对于原点定相的。如果你也通过了以原点为中心的高斯,你可以期待一个真正的高斯ONLY。你得到一个乘以 exp(i*phase*omega)
的高斯分布,因为原始数据很可能不是以原点为中心的。如果您检查虚数值,您会发现它们相对于实部也在振荡和移相 M_PI*0.25
。以零为中心的实函数的数据应该从 N/2
到 N-1
的负值(以补充 N 的方式),然后从 0
到 N/2-1
的负值阳性样本。很可能你将你的高斯集中在样本 N/2
周围(我刚刚检查过,你已经做到了这一点 :) )并且这在你的输出中产生了复杂的指数乘法。
此外,原点位于元素 0
,因此它在原点处得到了正确反映。只需将您的输入高斯集中到同一点,看看它如何不显示这种振荡结果。
我在使用 FFTW 库时遇到一些问题,我正在使用高斯函数测试快速傅立叶变换算法,因此我希望在进行变换时得到另一个高斯函数,这就是我得到的结果:
代码如下(我用的是C):
你能帮我看看我哪里错了吗?
问题不在于您所做的计算,而在于您对数据所做的解释。重要的是要考虑你已经通过的高斯以及它是如何相对于原点定相的。如果你也通过了以原点为中心的高斯,你可以期待一个真正的高斯ONLY。你得到一个乘以 exp(i*phase*omega)
的高斯分布,因为原始数据很可能不是以原点为中心的。如果您检查虚数值,您会发现它们相对于实部也在振荡和移相 M_PI*0.25
。以零为中心的实函数的数据应该从 N/2
到 N-1
的负值(以补充 N 的方式),然后从 0
到 N/2-1
的负值阳性样本。很可能你将你的高斯集中在样本 N/2
周围(我刚刚检查过,你已经做到了这一点 :) )并且这在你的输出中产生了复杂的指数乘法。
此外,原点位于元素 0
,因此它在原点处得到了正确反映。只需将您的输入高斯集中到同一点,看看它如何不显示这种振荡结果。