Optical Propagation Methods

Janssen implements several propagation methods for simulating light propagation through optical systems. This guide covers the mathematical foundations and when to use each method.

Scalar Diffraction Theory

The Helmholtz Equation

In free space, monochromatic light satisfies the Helmholtz equation:

$$ (\nabla^2 + k^2) E(\mathbf{r}) = 0 $$

where $k = 2\pi/\lambda$ is the wavenumber. Solutions describe how the electric field propagates from one plane to another.

The Angular Spectrum

Any field $E(x, y, z=0)$ can be decomposed into plane waves:

$$ E(x, y, 0) = \iint A(k_x, k_y) e^{i(k_x x + k_y y)} , dk_x , dk_y $$

where $A(k_x, k_y) = \mathcal{F}{E(x, y, 0)}$ is the angular spectrum.

Propagation Regimes

The Fresnel Number

The Fresnel number determines which propagation regime applies:

$$ N_F = \frac{a^2}{\lambda z} $$

where $a$ is the aperture size and $z$ is the propagation distance.

Propagation regimes diagram

Propagation regimes as a function of Fresnel number. Near-field (Fresnel) diffraction applies when $N_F > 1$, while far-field (Fraunhofer) diffraction applies when $N_F \ll 1$.

Regime

Fresnel Number

Method

Near-field

$N_F > 1$

Angular spectrum, Fresnel

Intermediate

$N_F \approx 1$

Angular spectrum

Far-field

$N_F \ll 1$

Fraunhofer, angular spectrum

Angular Spectrum Method

Mathematical Foundation

After propagation by distance $z$, the angular spectrum becomes:

$$ A(k_x, k_y; z) = A(k_x, k_y; 0) \cdot e^{i k_z z} $$

where $k_z = \sqrt{k^2 - k_x^2 - k_y^2}$ for propagating waves.

The propagated field is:

$$ E(x, y, z) = \mathcal{F}^{-1}\left{ \mathcal{F}{E(x,y,0)} \cdot H(k_x, k_y) \right} $$

where $H(k_x, k_y) = e^{i k_z z}$ is the transfer function.

Angular spectrum propagation

Angular spectrum propagation. The field is transformed to k-space, multiplied by the transfer function $H(k_x, k_y)$, then transformed back.

Implementation

from janssen.prop import angular_spectrum

# Propagate field by 1 mm
output = angular_spectrum(
    input_wavefront,
    propagation_distance=1e-3,
)

Evanescent Wave Handling

For $k_x^2 + k_y^2 > k^2$, the wave is evanescent with:

$$ k_z = i\sqrt{k_x^2 + k_y^2 - k^2} $$

Janssen automatically handles evanescent waves by setting them to zero (they decay exponentially and don’t contribute at macroscopic distances).

Fresnel Propagation

The Fresnel Approximation

For paraxial beams where $k_x, k_y \ll k$:

$$ k_z \approx k - \frac{k_x^2 + k_y^2}{2k} $$

This gives the Fresnel transfer function:

$$ H_F(k_x, k_y) = e^{ikz} \exp\left(-i\frac{z}{2k}(k_x^2 + k_y^2)\right) $$

Convolution Form

The Fresnel integral can also be written as a convolution:

$$ E(x, y, z) = E(x, y, 0) * h(x, y, z) $$

where the impulse response is:

$$ h(x, y, z) = \frac{e^{ikz}}{i\lambda z} \exp\left(\frac{ik(x^2+y^2)}{2z}\right) $$

Fresnel number and validity

Validity of Fresnel approximation. Errors become significant when $N_F < 0.1$ (transition to Fraunhofer) or when aperture angles exceed the paraxial limit.

Implementation

from janssen.prop import fresnel_propagation

output = fresnel_propagation(
    input_wavefront,
    propagation_distance=10e-3,
)

Fraunhofer Propagation

The Far-Field Limit

When $N_F \ll 1$, the field becomes a scaled Fourier transform:

$$ E(x, y, z) = \frac{e^{ikz}}{i\lambda z} e^{ik(x^2+y^2)/2z} \mathcal{F}{E}\left(\frac{x}{\lambda z}, \frac{y}{\lambda z}\right) $$

Relationship to Lens Focusing

A lens performs a Fourier transform at its focal plane. For focal length $f$:

$$ E(x_f, y_f) \propto \mathcal{F}{E_{\text{pupil}}} \left(\frac{x_f}{\lambda f}, \frac{y_f}{\lambda f}\right) $$

Lens Propagation

Thin Lens Model

A thin lens introduces a quadratic phase:

$$ t_{\text{lens}}(x, y) = \exp\left(-\frac{ik(x^2+y^2)}{2f}\right) $$

Lens propagation model

Thin lens propagation model. Light propagates to the lens (distance $d_1$), passes through (quadratic phase), then propagates to the image plane (distance $d_2$).

Implementation

from janssen.prop import lens_propagation

output = lens_propagation(
    input_wavefront,
    focal_length=10e-3,
    object_distance=20e-3,
)

Choosing the Right Method

Decision Guide

  1. Angular Spectrum: Most general, works at all distances

    • Best for: near-field, high-NA systems, tight focusing

    • Limitation: requires sufficient sampling (Nyquist)

  2. Fresnel: Efficient for moderate distances

    • Best for: paraxial systems, imaging

    • Limitation: breaks down at high NA

  3. Fraunhofer: Fastest for far-field

    • Best for: focal plane calculations, far-field patterns

    • Limitation: only valid when $N_F \ll 1$

Sampling Requirements

The angular spectrum method requires:

$$ \Delta x < \frac{\lambda z}{L} $$

where $L$ is the field of view. Janssen automatically checks sampling and warns if insufficient.

Numerical Considerations

Periodic Boundary Conditions

FFT-based methods assume periodic boundaries. To avoid wraparound artifacts:

  • Pad arrays to at least $2\times$ the feature size

  • Use absorbing boundaries for long propagations

Precision

Janssen uses 64-bit complex arithmetic by default for phase accuracy. For short propagations, 32-bit may suffice.

References

  1. Goodman, J. W. “Introduction to Fourier Optics” (2017)

  2. Born, M. & Wolf, E. “Principles of Optics” (1999)

  3. Voelz, D. G. “Computational Fourier Optics: A MATLAB Tutorial” (2011)