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_spansspans, the signal is first divided by the EDFA amplitude gain \(\sqrt{G} = 10^{\alpha_{dB} L_{\mathrm{span}} / 20}\), then propagated backwards withStPSsplit steps taken in reverse order. With matching parameters and ASE noise disabled, DBP is the exact numerical inverse ofFiberLink.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)withPin{1, 2}polarizations. The leading axes are a batch:(B, P, N)propagatesBrealizations in one call, which is 1.8x faster than the sameBcalls at 12288 samples and 3.1x at 1024 – the split-step loop, the per-span amplifier and the parameter precomputation are paid once instead ofBtimes. A batch of single-polarization fields is(B, 1, N); a bare(B, N)readsBas 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)withPin{1, 2}(validated inprepare()): 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