Optical#

This module provides layers and functions that implement channel models for (fiber) optical communications. The currently only available model is the split-step Fourier method (SSFM, for dual- and single-polarization) that can be combined with an Erbium-doped amplifier (EDFA).

The following code snippets show how to setup and simulate the transmission over a single-mode fiber (SMF) by using the split-step Fourier method.

# init fiber
span = sionna.phy.channel.optical.SSFM(
                              alpha=0.046,
                              beta_2=-21.67,
                              f_c=193.55e12,
                              gamma=1.27,
                              length=80,
                              n_ssfm=200,
                              n_sp=1.0,
                              t_norm=1e-12,
                              with_amplification=False,
                              with_attenuation=True,
                              with_dispersion=True,
                              with_nonlinearity=True,
                              dtype=torch.complex64)
# init amplifier
amplifier = sionna.phy.channel.optical.EDFA(
                              g=4.0,
                              f=2.0,
                              f_c=193.55e12,
                              dt=1.0e-12)

@torch.compile
def simulate_transmission(x, n_span):
      y = x
      # simulate n_span fiber spans
      for _ in range(n_span):
            # simulate single span
            y = span(y)
            # simulate amplifier
            y = amplifier(y)

      return y

Running the channel model is done as follows:

# x is the optical input signal, n_span the number of spans
y = simulate_transmission(x, n_span)

For further details, the tutorial “Optical Channel with Lumped Amplification” provides more sophisticated examples of how to use this module.

For the purpose of the present document, the following symbols apply:

\(T_\text{norm}\)

Time normalization for the SSFM in \((\text{s})\)

\(L_\text{norm}\)

Distance normalization the for SSFM in \((\text{m})\)

\(W\)

Bandwidth

\(\alpha\)

Attenuation coefficient in \((1/L_\text{norm})\)

\(\beta_2\)

Group velocity dispersion coeff. in \((T_\text{norm}^2/L_\text{norm})\)

\(f_\mathrm{c}\)

Carrier frequency in \(\text{(Hz)}\)

\(\gamma\)

Nonlinearity coefficient in \((1/L_\text{norm}/\text{W})\)

\(\ell\)

Fiber length in \((L_\text{norm})\)

\(h\)

Planck constant

\(N_\mathrm{SSFM}\)

Number of SSFM simulation steps

\(n_\mathrm{sp}\)

Spontaneous emission factor of Raman amplification

\(\Delta_t\)

Normalized simulation time step in \((T_\text{norm})\)

\(\Delta_z\)

Normalized simulation step size in \((L_\text{norm})\)

\(G\)

Amplifier gain

\(F\)

Amplifier’s noise figure

\(\rho_\text{ASE}\)

Noise spectral density

\(P\)

Signal power

\(\hat{D}\)

Linear SSFM operator (Agrawal)

\(\hat{N}\)

Non-linear SSFM operator (Agrawal)

\(f_\textrm{sim}\)

Simulation bandwidth

See [A2012] for the definition of the linear and non-linear SSFM operators.

Remark: Depending on the exact simulation parameters, the SSFM algorithm may require dtype=torch.complex128 for accurate simulation results. However, this may increase the simulation complexity significantly.

SSFM([alpha, beta_2, f_c, gamma, ...])

Block implementing the split-step Fourier method (SSFM)

EDFA([g, f, f_c, dt, ...])

Block implementing a model of an Erbium-Doped Fiber Amplifier

utils.time_frequency_vector(num_samples, ...)

Compute the time and frequency vector for a given number of samples and duration per sample in normalized time unit.