我有一个奇怪的问题与离散fft。我知道高斯函数exp(-x^2/2)的傅里叶变换又是相同的高斯函数exp(-k^2/2)。我试图用MatLab和FFTW中的一些简单代码来测试,但我得到了奇怪的结果。FFTW和fft与MatLab
首先,结果的虚部不是零(在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-')
您可能将* continuous * FT与* discrete * FT混合在一起。高斯的连续FT是高斯函数,但我不确定DFT(FFT)是如此。 –
当然,离散性使得事物不精确,但离散FT被创建为连续FT的近似值。当点数和间隔足够大时,这里就是这种情况,近似值应该是好的。会有一些偏差,但他们绝对不应该那么大,如此系统。另外,当我增加Nx和Lx时,结果不会改变,这意味着收敛是可以实现的。 –
我认为在你的DFT情况下可能会出现一个隐含的时间偏移,这就意味着频域的相位旋转 - 我认为幅度是正确的,相位是一条直线(如果你是模2π不解开它,即锯齿)。 –