comnum.mimo_detect#
- comnum.mimo_detect(h, y, constellation, noise_var, method='mmse', *, k=Ellipsis, iterations=Ellipsis)#
Detect the transmitted symbols of a MIMO link
y = H x + w.Methods:
"mr"(matched filter),"zf","mmse"(linear, unbiased),"zf_sic","mmse_sic"(ordered successive interference cancellation, V-BLAST),"ml"(exhaustive search),"sphere"(exact ML by the Schnorr–Euchner sphere decoder),"kbest"(K-best tree search keepingkpaths),"amp"(LAMA, the complex Bayesian AMP of Jeon et al.) and"oamp"(OAMP-LMMSE of Ma & Ping), both for large systems.- Parameters:
h (array_like) – the channel,
(n_rx, n_tx)for every vector or(n, n_rx, n_tx).y (array_like) – the received streams,
(n_rx, n)(or one vector(n_rx,)).constellation (Constellation) – the alphabet of every stream.
noise_var (float) – noise variance per receive antenna
E|w_i|².method (str) – the detector.
k (int) – paths kept by
"kbest"(8, as themimo_rxblock).iterations (int) – iterations of
"amp"and"oamp".
- Returns:
the labels of the decided points,
(n_tx, n)(or(n_tx,)).- Return type:
- Raises:
ValueError – for an invalid parameter or input (the message names it).
Examples
>>> import comnum, numpy as np >>> c = comnum.Constellation("qam", 4).normalized() >>> h = comnum.mimo_channel(4, 2, comnum.Rng(3)) >>> x = c.points[[1, 2]] >>> comnum.mimo_detect(h, h @ x, c, 1e-3, "sphere").tolist() [1, 2]