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_spansections; 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 fromrngif 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
propagatewithout 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:
- 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:
- 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:
- Returns:
the field at the end of the link,
(2, n)(complex128).- Return type:
- Raises:
ValueError – for an invalid parameter or input (the message names it).