Метод углового спектра с использованием питона - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь численно распространить данное (электрическое) поле, используя метод углового спектра. Для этого я следую «Принципам и применениям фурье-оптики» (Роберт К. Тайсон), глава 3, страница 2

enter image description here

Я пытался воссоздатьматематика, использующая следующий код

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

Этот код должен создавать обычную дифракционную картину с двумя щелями, однако (как будет показано ниже) не будет производить и дифракцию вообще.

Code output

Я вполне уверен, что есть какие-то проблемы с моими значениями альфа и бета, однако я не могу найти это. Любая помощь высоко ценится.

ap.png:

ap.png

...