comnum.adaptive_equalizer#
- comnum.adaptive_equalizer(x, constellation, *, algorithm=None, n_taps=Ellipsis, sps=Ellipsis, mu=None, passes=Ellipsis, reference=None, kikuchi=None, update_rule=None)#
The
n×nbutterfly adaptive equaliser (OptiCommPymimoAdaptEqualizer).Output symbol
kof modemisΣ_N Σ_t h_{m,N}[t] x_N[k·sps + t](input padded with⌊n_taps/2⌋zeros at both ends, diagonal centre taps initialised at 1); the taps followh ← h + μ e x*with the error of the current algorithm: CMA(R - |y|²) y, RDE(R̂² - |y|²) y, NLMS(s - y)/‖x‖²(needsreference), DD-LMSŝ - y.- Parameters:
x (array_like) – input of shape
(modes, samples)(a 1-D array is one mode).constellation (Constellation) – the alphabet (normalised inside).
algorithm (str | list[tuple[str, int]] | None) – one algorithm (
"cma"by default), or a schedule of(algorithm, output symbols)whose last entry runs to the end of every pass.n_taps (int) – taps per filter.
sps (int) – input samples per symbol (the output is at 1 sample per symbol).
mu (float | list[float] | None) – step size, or one per stage of the schedule (the last one holds for the following stages); 1e-3 by default.
passes (int) – passes over the block (the taps carry over).
reference (array_like, optional) – transmitted symbols
(modes, symbols).kikuchi (int, optional) – Kikuchi’s two-stage initialisation of a 2 × 2 equaliser against the singularity: output 0 adapts alone during this number of symbols, then output 1 starts as its unitary complement.
update_rule (str, optional) – the update rule of every stage instead of that of its algorithm:
"lms","nlms"or"sign"(the sign of the error).
- Returns:
the symbols
(modes, symbols), the final taps(modes², n_taps)with rowm + N·modesthe filter from inputNto outputm, and the squared errors(modes, symbols).- Return type:
- Raises:
ValueError – for an invalid parameter or input (the message names it).