comnum.ManakovPmd#

class comnum.ManakovPmd(fiber, *, pmd_ps_sqrt_km=0.0, sections_per_span=10, rng=None)#

Dual-polarisation propagation by the Manakov equation with polarisation-mode dispersion (coarse-step model).

Every span is cut into sections_per_span sections; a section applies the loss and the dispersion, a random rotation and a differential group delay (the PMD), then the averaged Kerr phase (8/9) γ L_eff (|A_x|² + |A_y|²). The amplification after every span is an EDFA (ASE from rng if given).

Parameters:
  • fiber (FiberParams) – the link.

  • pmd_ps_sqrt_km (float) – PMD coefficient (ps/√km); 0 for none.

  • sections_per_span (int) – sections per span.

  • rng (Rng, optional) – draws the PMD realisation (needed when the PMD is not 0).

Raises:

ValueError – for an invalid parameter (the message names it).

backpropagate_with_pmd(u, fs)#

Back-propagation with the known PMD realisation (inverts propagate without noise).

Parameters:
  • u (array_like) – the received field, (2, n) (√W).

  • fs (float) – sampling rate (Hz).

Returns:

the back-propagated field, (2, n) (complex128).

Return type:

numpy.ndarray

Raises:

ValueError – for an input that is not an array of numbers of the expected shape.

equalize_pmd(u, fs)#

Undo the lumped PMD of the link (inverse of its frequency response), leaving the dispersion and the nonlinearity.

Parameters:
  • u (array_like) – the field, (2, n) (√W).

  • fs (float) – sampling rate (Hz).

Returns:

the field without the PMD, (2, n) (complex128).

Return type:

numpy.ndarray

Raises:

ValueError – for an input that is not an array of numbers of the expected shape.

propagate(u, fs, *, rng=None)#

Propagate the two polarisations.

Parameters:
  • u (array_like) – the field, (2, n): the two polarisations (√W).

  • fs (float) – sampling rate (Hz).

  • rng (Rng, optional) – the generator of the ASE (noiseless without one).

Returns:

the field at the end of the link, (2, n) (complex128).

Return type:

numpy.ndarray

Raises:

ValueError – for an invalid parameter or input (the message names it).

rms_dgd_s#

RMS differential group delay of the PMD realisation (s).

Type:

float