【发布时间】:2020-02-20 00:16:09
【问题描述】:
我正在尝试使用角谱法以数值方式传播给定的(电场)场。为此,我遵循“傅里叶光学原理和应用”(罗伯特·泰森)第 3 章,第 2 页
我尝试使用以下代码重新创建数学
import numpy as np
import imageio
U = imageio.imread("ap.png")[:,:, 0] # load circular aperture
_lambda = 800e-9
def propagate2(self,z):
A = np.fft.fft2(U, norm="ortho") # 2D FFT
alpha = np.fft.fftfreq(U.shape[0])*_lambda # direction cosine in x direction
beta = np.fft.fftfreq(U.shape[1])*_lambda # direction cosine in x direction
gamma = np.zeros([alpha.shape[0], beta.shape[0]])
k = 2*np.pi/_lambda # wavevector
for i,j in itertools.product(range(alpha.shape[0]), range(beta.shape[0])): # determine phase value for each (i,j)
if alpha[i]**2+beta[j]**2 < 1:
gamma[i,j] = np.sqrt(1-alpha[i]**2-beta[j]**2)
else:
gamma[i,j] = 1j*np.sqrt(np.abs(1-alpha[i]**2-beta[j]**2))
phi = np.exp(1j*k*z*gamma)
field = np.fft.ifft2(A*phi, norm="ortho") # 2D IFFT
return field
此代码应该产生通常的双缝衍射图案,但是(如下所示)根本不会产生和衍射。
我相当确定我的 alpha 和 beta 值存在一些问题,但我似乎找不到。 非常感谢任何帮助。
ap.png:
【问题讨论】:
标签: python math fft physics numerical-methods