fraunhofer_propagation
- colibri.optics.functional.fraunhofer_propagation(field, M, N, pixel_size, wavelengths, distance, device=device(type='cpu'))[source]
The Fraunhofer approximation of \(U_0(x',y')\) is its Fourier transform, \(\mathcal{F}\{U_0\}\) with an additional phase factor that depends on the distance of propagation, \(z\). The Fraunhofer approximation is given by the following equation:
\[U(x,y,z) \approx \frac{e^{jkz}e^{\frac{jk\left(x^2+y^2\right)}{2z}}}{j\lambda z} \mathcal{F}\left\{U_0(x,y)\right\}\left(\frac{x}{\lambda z}, \frac{y}{\lambda z}\right)\]where \(U(x,y,z)\) is the field at distance \(z\) from the source, \(U_0(x,y)\) is the field at the source, \(\mathcal{F}\) is the Fourier transform operator, \(k\) is the wavenumber, \(\lambda\) is the wavelength, \(\frac{x}{\lambda z}\) and \(\frac{y}{\lambda z}\) are the spatial frequencies, and \(z\) is the distance of propagation.
- Parameters:
field (torch.Tensor) – Input field.
M (int) – Resolution at Y axis in pixels.
N (int) – Resolution at X axis in pixels.
pixel_size (float) – Pixel pixel_size in meters.
wavelengths (torch.Tensor) – Wavelengths in meters.
distance (float) – Distance in meters.
device (torch.device) – Device, for more see torch.device().
- Returns:
Propagated field.
- Return type:
torch.Tensor