Expand description
MIMO detection on the generic model $y = H x + w$.
A detector recovers the $n_{t}$ symbols of $x$, drawn from a constellation, from the $n_{r}$ received samples $y$, given the channel $H$ ($n_{r} \times n_{t}$) and the noise variance $\sigma^{2} = \mathbb{E}|w_{i}|^{2}$:
| Detector | Principle | Complexity | Diversity ($n_{r} \ge n_{t}$, Rayleigh) |
|---|---|---|---|
Linear::mr | $\hat x_{k} = h_{k}^{H} y / \lVert h_{k}\rVert^{2}$ (matched filter) | $n_{r} n_{t}$ per vector | $n_{r}$ without interference; interference-limited |
Linear::zf | $\hat x = (H^{H} H)^{-1} H^{H} y$ | cubic in $n_{t}$ | $n_{r} - n_{t} + 1$ |
Linear::mmse | $\hat x = (H^{H} H + \frac{\sigma^{2}}{E_{s}} I)^{-1} H^{H} y$, unbiased | cubic | $n_{r} - n_{t} + 1$ at high SNR, better at low SNR |
Sic | ordered successive interference cancellation (V-BLAST) | $n_{t}$ linear filters | between linear and ML |
Ml | $\arg\min_{x} \lVert y - H x\rVert^{2}$ by exhaustive search | $M^{n_{t}}$ | $n_{r}$ |
Sphere | the same minimum by Schnorr–Euchner depth-first search | variable, exact ML | $n_{r}$ |
KBest | breadth-first tree search keeping $K$ paths | $K M n_{t}$ | close to ML |
Every detector returns the label (index) of the decided point of every transmit
stream (MimoDetector::detect); the linear detectors, Ml and KBest (and the
message-passing detectors of crate::message_passing) also give bit
log-likelihood ratios (MimoDetector::llr, positive for a 0, most significant bit
first, stream after stream; MimoDetector::has_soft_output), and the linear and
message-passing ones an estimate of every symbol with its noise variance
(MimoDetector::soft_estimate, an Estimates). Coherent binds a detector to
a channel matrix and implements the Detect trait on multi-stream containers.
§Model
The linear detectors filter with $W = (H^{H} H + \lambda I)^{-1} H^{H}$ ($\lambda = 0$ for ZF, $\sigma^{2}/E_{s}$ for MMSE). With $E = \sigma^{2} (H^{H} H + \lambda I)^{-1}$, the ZF estimate of stream $k$ has the noise variance $E_{kk}$; the MMSE estimate is divided by its bias $\beta_{k} = 1 - E_{kk}/E_{s}$, after which its noise variance is $E_{s} E_{kk} / (E_{s} - E_{kk})$ (the SINR is $E_{s}/E_{kk} - 1$). The MR detector filters with $W = D^{-1} H^{H}$, $D = \mathrm{diag}(\lVert h_{k}\rVert^{2})$: with $G = H^{H} H$, its estimate of stream $k$ is unbiased and the noise and interference of the other streams have the variance $(\sigma^{2} G_{kk} + E_{s} \sum_{j \ne k} |G_{kj}|^{2}) / G_{kk}^{2}$ (Ngo, Larsson and Marzetta 2013, eq. (15)). The soft outputs treat each estimate as one constellation symbol in Gaussian noise of that variance.
The max-log LLR of a tree or exhaustive search is
$$ L(b) = \frac{1}{\sigma^{2}}\Bigl(\min_{x:\, b = 1} \lVert y - H x \rVert^{2} - \min_{x:\, b = 0} \lVert y - H x \rVert^{2}\Bigr) $$
§Examples
use comnum_mimo::detection::{Linear, MimoDetector, Sphere};
use comnum_mapping::constellation::Constellation;
use comnum_math::{linalg::matvec, C64};
use ndarray::array;
let c = Constellation::qam(4)?.normalized();
let h = array![[C64::new(1.0, 0.2), C64::new(0.3, -0.5)], [C64::new(-0.4, 0.1), C64::new(0.9, 0.0)]];
let x = [c.points()[2], c.points()[1]];
let y = matvec(&h.view(), &x); // noiseless
assert_eq!(Linear::mmse(c.clone()).detect(&h.view(), &y, 1e-3)?, vec![2, 1]);
assert_eq!(Sphere::new(c).detect(&h.view(), &y, 1e-3)?, vec![2, 1]);§References
- P. W. Wolniansky, G. J. Foschini, G. D. Golden and R. A. Valenzuela, “V-BLAST: an architecture for realizing very high data rates over the rich-scattering wireless channel,” Proc. ISSSE, 1998.
- E. Agrell, T. Eriksson, A. Vardy and K. Zeger, “Closest point search in lattices,” IEEE Trans. Inf. Theory, 48(8), 2002.
- Z. Guo and P. Nilsson, “Algorithm and implementation of the K-best sphere decoding for MIMO detection,” IEEE J. Sel. Areas Commun., 24(3), 2006.
Structs§
- Coherent
- A detector bound to a channel matrix: the
Detectblock of a link whose receiver knows the channel; the decided points are those of the detector’s constellation. - Estimates
- The estimates $\hat x_{k}$ of the transmitted symbols and the variance of the noise
of each, $\hat x_{k} = x_{k} + n_{k}$, $\mathbb{E}|n_{k}|^{2}$ =
noise_var[k]: the output of a linear detector, of a message-passing detector (the decoupled channel) and of the decoder of a space-time block code. - KBest
- The K-best tree search: breadth first from the last stream, keeping the
kpaths of smallest partial distance at every level. - Linear
- A linear detector (MR, ZF or MMSE) followed by symbol-by-symbol decisions.
- Ml
- Maximum-likelihood detection by exhaustive search over the $M^{n_{t}}$ hypotheses.
- Sic
- Successive interference cancellation (V-BLAST): detect the stream of largest post-detection SINR with a linear filter, subtract it, repeat.
- Sphere
- Exact ML detection by the Schnorr–Euchner sphere decoder.
Enums§
- Criterion
- Maximum ratio, zero forcing or MMSE.
Constants§
- ML_
MAX_ HYPOTHESES - Largest number of hypotheses $M^{n_{t}}$ of the exhaustive search.
Traits§
- Mimo
Detector - A detector of the model $y = H x + w$.