Digital Back Propagation#

class DBP(N_spans: int = 1, *, L_span: float = 80, StPS: int = 1, fs: float = 1, fiber: FiberSpec = <factory>, step_type: Literal['linear', 'logarithmic']='linear', step_method: Literal['symmetric', 'asymetric']='symmetric', use_only_linear: bool = False, step_log_factor: float = 0.4, name: str = 'dbp')[source]#

Digital back-propagation (DBP) compensator for a multi-span fiber link.

Signal Model#

DBP inverts the deterministic part of the fiber propagation by integrating the nonlinear Schroedinger equation (NLSE) backwards (\(z \to -z\)) for the complex field envelope \(A(z, t)\):

\[\frac{\partial A(z, t)}{\partial z} = +\frac{\alpha}{2} A(z, t) + j \frac{\beta_2}{2} \frac{\partial^2 A(z, t)}{\partial t^2} - j \gamma |A(z, t)|^2 A(z, t)\]

where \(\alpha = \frac{\ln 10}{10} \alpha_{dB}\) is the attenuation (Np/km), \(\beta_2 = -10^3 D \lambda^2 / (2 \pi c)\) the group velocity dispersion (ps^2/km) and \(\gamma\) the Kerr coefficient (rad/W/km). For each of the N_spans spans, the signal is first divided by the EDFA amplitude gain \(\sqrt{G} = 10^{\alpha_{dB} L_{\mathrm{span}} / 20}\), then propagated backwards with StPS split steps taken in reverse order. With matching parameters and ASE noise disabled, DBP is the exact numerical inverse of FiberLink.

Two polarizations. Like FiberLink, a field shaped (..., 2, N) is back-propagated with the Manakov equation – the two polarizations share the total intensity and the coefficient carries the \(8/9\) factor. The two blocks read the model off the shape the same way, so a link and its compensator cannot end up integrating different equations.

Axes: declared axis – a full-field signal (N,) or (..., P, N) with P in {1, 2} polarizations. The leading axes are a batch: (B, P, N) propagates B realizations in one call, which is 1.8x faster than the same B calls at 12288 samples and 3.1x at 1024 – the split-step loop, the per-span amplifier and the parameter precomputation are paid once instead of B times. A batch of single-polarization fields is (B, 1, N); a bare (B, N) reads B as polarizations – refused for \(B \ge 3\), while (2, N) is read as one polarization pair by convention.

param N_spans:

Number of spans to back-propagate. Default is 1.

type N_spans:

int

param L_span:

Span length \(L_{\mathrm{span}}\) in km. Default is 80.

type L_span:

float, keyword-only

param StPS:

Number of split steps \(\delta z\) per span. Default is 1.

type StPS:

int, keyword-only

param fs:

Sampling frequency in Hz. Default is 1.

type fs:

float, keyword-only

param step_type:

Step-size distribution within a span. Default is "linear".

type step_type:

{“linear”, “logarithmic”}, keyword-only

param step_method:

Split-step scheme. Default is "symmetric".

type step_method:

{“symmetric”, “asymetric”}, keyword-only

param use_only_linear:

If True, only the linear effects (CD and attenuation) are compensated, in a single exact step per span. Default is False.

type use_only_linear:

bool, keyword-only

param fiber:

The physical fibre to invert (D46) – the same object handed to FiberLink, so the two cannot disagree. Default is a standard single-mode fibre, FiberSpec().

type fiber:

FiberSpec, keyword-only

param step_log_factor:

Adjustment factor of the logarithmic step-size distribution. Default is 0.4.

type step_log_factor:

float, keyword-only

param name:

Name of the compensator instance. Default is "dbp".

type name:

str, optional, keyword-only

raises ShapeError:

If the input is neither a full-field 1D signal (N,) nor a polarization pair (..., P, N) with P in {1, 2} (validated in prepare()): a pointwise Kerr step on a multi-channel array would silently produce SPM only (no XPM, no FWM).

References

  • O. V. Sinkin, R. Holzlohner, J. Zweck and C. R. Menyuk, “Optimization of the split-step Fourier method in modeling optical-fiber communications systems,” Journal of Lightwave Technology, vol. 21, no. 1, pp. 61-68, Jan. 2003, doi: 10.1109/JLT.2003.808628.

  • E. Ip and J. M. Kahn, “Compensation of dispersion and nonlinear impairments using digital backpropagation,” Journal of Lightwave Technology, vol. 26, no. 20, pp. 3416-3425, 2008.

  • C. Häger and H. D. Pfister, “Physics-based deep learning for fiber-optic communication systems,” IEEE Journal on Selected Areas in Communications, vol. 39, no. 1, pp. 280-294, 2021.

Examples

>>> from comnumpy.optical.links import FiberLink
>>> rng = np.random.default_rng(0)
>>> x = 1e-3 * (rng.normal(size=128) + 1j * rng.normal(size=128))
>>> link = FiberLink(2, L_span=80.0, StPS=4, fs=10e9, noise_scaling=0)
>>> dbp = DBP(2, L_span=80.0, StPS=4, fs=10e9)
>>> bool(np.allclose(dbp(link(x)), x))
True