【发布时间】:2018-01-31 00:10:48
【问题描述】:
我正在 Matlab 中测试 FFT 和 IFFT 函数的有效性。
我可以将这些函数的输出与一个众所周知的数学事实进行比较:偶实函数(如以 0 为中心的高斯)的傅里叶变换是另一个偶实函数(FFT[real, 0-中心高斯] = 实数,0 中心高斯)。这个事实应该适用于 FFT 和 IFFT。
首先我制作我的网格:
nx = 256; % grid total pixel count
X = 500; % grid size (um)
dx = X/nx; % grid spacing (um)
x = linspace(-nx/2,nx/2-1,nx)*dx; % x grid (um)
df = 1/(nx*dx); % spectral grid spacing (1/um)
f = linspace(-nx/2,nx/2-1,nx)*df; % f grid (1/um)
我让我的高斯:
A = 1; % magnitude (arbitrary units)
x_fwhm = 7; % Full width at half maximum diameter (um)
x0 = x_fwhm/sqrt(2*log(2)); % 1/e^2 radius (um)
y = A*exp(-2*x.^2./(x0)^2); % Gaussian (arbitrary units)
并使用 FFT 应用傅里叶变换:
yFFT = fftshift(fft(fftshift(y)));
或者,使用 IFFT:
yIFFT = fftshift(ifft(fftshift(y)));
IFFT 做得很完美:yIFFT 是一个纯正高斯。然而,FFT 产生一个复数:存在一个非常小的虚部。这很好,因为在傅立叶变换算法中应该会出现错误,而且无论如何都可以忽略不计。让我困惑的是为什么在IFFT中完全没有错误? FFT 和 IFFT 算法有那么大的不同吗?
*** 注意:fftshift 和 ifftshift 在这里是等价的,因为我的数组有偶数个元素。
【问题讨论】: