【发布时间】:2013-10-10 08:42:52
【问题描述】:
我对离散 fft 有一个奇怪的问题。我知道高斯函数 exp(-x^2/2) 的傅里叶变换又是同一个高斯函数 exp(-k^2/2)。我尝试在 MatLab 和 FFTW 中使用一些简单的代码对其进行测试,但得到了奇怪的结果。
首先,结果的虚部不应该是零(在 MatLab 中)。
其次,实部的绝对值是高斯曲线,但没有绝对值的一半模态具有负系数。更准确地说,每一秒的模式都有一个系数,它应该是负数。
第三,得到的高斯曲线的峰值(在取实部的绝对值之后)不是一而是高得多。它的高度与 x 轴上的点数成正比。但是,比例因子不是 1,而是接近 1/20。
谁能解释我做错了什么?
这是我使用的 MatLab 代码:
function [nooutput,M] = fourier_test
Nx = 512; % number of points in x direction
Lx = 50; % width of the window containing the Gauss curve
x = linspace(-Lx/2,Lx/2,Nx); % creating an equidistant grid on the x-axis
input_1d = exp(-x.^2/2); % Gauss function as an input
input_1d_hat = fft(input_1d); % computing the discrete FFT
input_1d_hat = fftshift(input_1d_hat); % ordering the modes such that the peak is centred
plot(real(input_1d_hat), '-')
hold on
plot(imag(input_1d_hat), 'r-')
【问题讨论】:
-
您可能将连续 FT 与离散 FT 混为一谈。高斯的连续 FT 是高斯的,但我不确定 DFT (FFT) 是否如此。
-
当然,离散性会使事情变得不精确,但离散 FT 是作为连续 FT 的近似值创建的。当点数和区间足够大时,也就是这里的情况,近似应该是好的。会有一些偏差,但绝对不应该那么大,那么系统。另外,当我增加 Nx 和 Lx 时,结果不会改变,这意味着达到了收敛。
-
我认为在您的 DFT 情况下也可能存在隐式时移,这会转化为频域中的相位旋转 - 我希望幅度是正确的,相位是一条直线(模 2π,如果你不打开它,即锯齿)。