编辑:我想我搞砸了坐标. Num 缺少多个. 假设我对 DFT 的解释没有错。
我目前正在使用 FFT 来运行 Fresnel Diffraction,如下所示:

但是,由于使用傅立叶变换会将方程放入“频率空间”,我需要使用 iFFT 将其恢复为原始坐标。然而,剧情我在 FFT 和 iFFT 之后得到了与我的 z 值缩放的网格线(线条的粗细和间距与 z 缩放)。例如:
- 没有 FFT 的原始图
- z=1 绘图
- z=20 绘图
我可以理解 DFT 意味着信息丢失,但为什么它会随着我的变量 z 缩放?还有没有办法缓解这种情况?还是我做错了什么?下面的代码:
def Fresnel1(E, z, x_space, y_space):
ii = len(x_space)
kk = len(y_space)
num = np.array(range(ii))
U1 = np.zeros((ii, kk), dtype=complex)
for i in range(ii):
for k in range(kk):
U1[i,k] = E[i,k]*np.exp(1j*np.pi*(x_space[i]**2+y_space[k]**2)/(lamb*z))
F1 = fft.fft2(U1)
D1 = np.zeros((ii, kk), dtype=complex)
for i in range(ii):
for k in range(kk):
D1[i,k] = np.exp(1j*konst*z)/(1j*lamb*z)*np.exp(1j*np.pi*lamb*z*(num[i]**2+num[k]**2))*F1[i,k]
F2 = fft.ifft2(D1)
return F2
def find_int(E):
I1 = np.zeros((len(X1),len(Y1)))
for i in range(len(X1)):
for k in range(len(Y1)):
I1[i,k] = np.real(E[i,k] * np.conj(E[i,k]))
return np.round(I1, decimals=16)
E2 = Fresnel1(E0, 20, X1, Y1)
intensity_a = find_int(E2)
intensity_a1 = intensity_a/np.max(intensity_a)
fig, ax = plt.subplots(constrained_layout=True)
cs = ax.contourf(X1, Y1, intensity_a1, 100)
cbar = fig.colorbar(cs)


