MIMO Detection

The MIMO Detection Problem

In MIMO, the receiver must separate NtN_t spatially multiplexed streams from the mixed received signals. The challenge is that the channel mixes all transmitted signals together: y=Hx+n\mathbf{y} = \mathbf{H}\mathbf{x} + \mathbf{n}. Detection algorithms trade complexity for performance.

Definition:

MIMO System Model

The NrΓ—NtN_r \times N_t MIMO system model is:

y=Hx+n\mathbf{y} = \mathbf{H}\mathbf{x} + \mathbf{n}

where x∈SNt\mathbf{x} \in \mathcal{S}^{N_t} (each entry from constellation S\mathcal{S}), H∈CNrΓ—Nt\mathbf{H} \in \mathbb{C}^{N_r \times N_t}, and n∼CN(0,N0I)\mathbf{n} \sim \mathcal{CN}(\mathbf{0}, N_0\mathbf{I}).

def mimo_channel(H, x, N0, rng=None):
    if rng is None: rng = np.random.default_rng()
    Nr = H.shape[0]
    n = np.sqrt(N0/2) * (rng.standard_normal(Nr) + 1j*rng.standard_normal(Nr))
    return H @ x + n

Definition:

Zero-Forcing (ZF) MIMO Detection

ZF detection applies the pseudoinverse of H\mathbf{H}:

x^ZF=(HHH)βˆ’1HHy=H†y\hat{\mathbf{x}}_{\text{ZF}} = (\mathbf{H}^H\mathbf{H})^{-1}\mathbf{H}^H\mathbf{y} = \mathbf{H}^\dagger\mathbf{y}

then quantizes each entry to the nearest constellation point.

def zf_detect(y, H, constellation):
    G = np.linalg.pinv(H)
    x_hat = G @ y
    # Quantize each stream
    det = np.array([constellation[np.argmin(np.abs(xi - constellation))] for xi in x_hat])
    return det

ZF eliminates inter-stream interference but amplifies noise, especially when H\mathbf{H} is ill-conditioned.

Definition:

MMSE MIMO Detection

MMSE detection balances interference suppression and noise:

x^MMSE=(HHH+N0EsI)βˆ’1HHy\hat{\mathbf{x}}_{\text{MMSE}} = (\mathbf{H}^H\mathbf{H} + \frac{N_0}{E_s}\mathbf{I})^{-1} \mathbf{H}^H\mathbf{y}

The regularization term N0EsI\frac{N_0}{E_s}\mathbf{I} prevents noise amplification.

def mmse_detect(y, H, constellation, N0, Es=1.0):
    Nt = H.shape[1]
    G = np.linalg.inv(H.conj().T @ H + (N0/Es)*np.eye(Nt)) @ H.conj().T
    x_hat = G @ y
    det = np.array([constellation[np.argmin(np.abs(xi - constellation))] for xi in x_hat])
    return det

Definition:

Maximum Likelihood (ML) MIMO Detection

ML detection searches over all MNtM^{N_t} possible transmit vectors:

x^ML=arg⁑min⁑x∈SNtβˆ₯yβˆ’Hxβˆ₯2\hat{\mathbf{x}}_{\text{ML}} = \arg\min_{\mathbf{x} \in \mathcal{S}^{N_t}} \|\mathbf{y} - \mathbf{H}\mathbf{x}\|^2

This is optimal but has complexity O(MNt)O(M^{N_t}) β€” exponential in the number of antennas.

from itertools import product

def ml_detect(y, H, constellation):
    Nt = H.shape[1]
    best_dist = np.inf
    best_x = None
    for x_cand in product(constellation, repeat=Nt):
        x_vec = np.array(x_cand)
        dist = np.sum(np.abs(y - H @ x_vec)**2)
        if dist < best_dist:
            best_dist = dist
            best_x = x_vec
    return best_x

For Nt=4N_t = 4 with 16-QAM, ML searches 164=6553616^4 = 65536 vectors per symbol interval β€” often impractical for real-time systems.

Definition:

Sphere Decoding

The sphere decoder finds the ML solution efficiently by searching only within a sphere of radius rr around y\mathbf{y}:

βˆ₯yβˆ’Hxβˆ₯2≀r2\|\mathbf{y} - \mathbf{H}\mathbf{x}\|^2 \le r^2

Using QR decomposition H=QR\mathbf{H} = \mathbf{Q}\mathbf{R}, the search becomes a tree-search problem that prunes branches exceeding the radius. Average complexity is polynomial (roughly O(MNt/2)O(M^{N_t/2})) for typical SNR.

Theorem: ZF Noise Enhancement

The post-ZF noise covariance on stream kk is:

Οƒk2=N0[(HHH)βˆ’1]kk\sigma_k^2 = N_0 [(\mathbf{H}^H\mathbf{H})^{-1}]_{kk}

The noise is amplified by [(HHH)βˆ’1]kkβ‰₯1/Οƒmin⁑2(H)[(\mathbf{H}^H\mathbf{H})^{-1}]_{kk} \ge 1/\sigma_{\min}^2(\mathbf{H}), where Οƒmin⁑\sigma_{\min} is the smallest singular value of H\mathbf{H}.

When H\mathbf{H} is nearly rank-deficient (high condition number), ZF amplifies noise enormously on weak streams.

Theorem: MMSE Post-Detection SINR

The post-MMSE SINR on stream kk is:

SINRk=EsN0[(I+EsN0HHH)βˆ’1]kkβˆ’1βˆ’1\text{SINR}_k = \frac{E_s}{N_0}\left[\left(\mathbf{I} + \frac{E_s}{N_0}\mathbf{H}^H\mathbf{H}\right)^{-1}\right]_{kk}^{-1} - 1

This is always β‰₯\ge the post-ZF SNR, with the gap largest at low SNR.

MMSE accepts some residual inter-stream interference to avoid noise amplification. At high SNR, MMSE converges to ZF.

Theorem: Optimality of ML Detection

ML detection minimizes the symbol/bit error rate among all detectors. For equal-energy constellations with equal priors:

P(error∣ML)≀P(error∣anyΒ detector)P(\text{error} | \text{ML}) \le P(\text{error} | \text{any detector})

However, ML complexity is O(MNt)O(M^{N_t}), making it impractical for large NtN_t or MM.

ML considers all possible transmit vectors and picks the most likely given the received signal. Linear detectors (ZF, MMSE) are suboptimal approximations with polynomial complexity.

Example: Comparing ZF, MMSE, and ML for 2x2 MIMO

Simulate a 2x2 MIMO system with QPSK and compare BER of ZF, MMSE, and ML detectors.

Example: Effect of Channel Condition Number on ZF

Show that ZF detection fails when the channel matrix is ill-conditioned.

Example: V-BLAST with SIC

Implement V-BLAST (ordered successive interference cancellation) for a 4x4 MIMO system.

MIMO Detection BER Comparison

Compare BER of ZF, MMSE, and ML detectors for different MIMO configurations.

Parameters

Channel Condition Number vs BER

Explore how channel correlation affects the condition number and detection performance.

Parameters

MIMO Detection: ZF vs MMSE vs ML

Watch the detected constellation improve with SNR for different detectors.

Parameters

MIMO Detector Complexity vs Performance

MIMO Detector Complexity vs Performance
Performance-complexity trade-off of MIMO detection algorithms.

Quick Check

What is the complexity of ML detection for 4x4 MIMO with 64-QAM?

O(256)O(256)

O(644)β‰ˆ1.7Γ—107O(64^4) \approx 1.7 \times 10^7

O(4Γ—64)=O(256)O(4 \times 64) = O(256)

O(43)=O(64)O(4^3) = O(64)

Quick Check

When does MMSE detection significantly outperform ZF?

At high SNR

When Nr≫NtN_r \gg N_t

At low SNR with correlated channels

When the constellation is BPSK

Common Mistake: ZF with Nr<NtN_r < N_t

Mistake:

Applying ZF detection when Nr<NtN_r < N_t (more TX antennas than RX), where HHH\mathbf{H}^H\mathbf{H} is singular.

Correction:

ZF requires Nrβ‰₯NtN_r \ge N_t. For Nr<NtN_r < N_t, use MMSE (which always works due to regularization) or reduce the number of streams.

Key Takeaway

MIMO detection algorithms span a wide complexity-performance trade-off: ZF (O(Nt3)O(N_t^3)) is simple but noise-amplifying; MMSE (O(Nt3)O(N_t^3)) is better at low SNR; ML (O(MNt)O(M^{N_t})) is optimal but exponentially complex. SIC (V-BLAST) offers a middle ground.

Key Takeaway

MMSE detection always outperforms or matches ZF. The gap is largest at low SNR and with correlated channels. Use MMSE as the default linear detector.

Why This Matters: MIMO Detection in 5G NR

5G NR supports up to 8-layer spatial multiplexing (8 streams) in the downlink. Base stations typically use MMSE-IRC (interference rejection combining) detection with SIC for multi-user MIMO. ML detection is used in research but not in commercial systems due to complexity.

See full treatment in Chapter 24

Historical Note: V-BLAST: The First Spatial Multiplexing Demo

1998

V-BLAST (Vertical Bell Labs Layered Space-Time) was demonstrated by Foschini et al. in 1998, achieving 40 bps/Hz spectral efficiency in a laboratory setting with 8 TX and 12 RX antennas. This landmark experiment proved that MIMO spatial multiplexing was practical.

Historical Note: Sphere Decoding for Communications

1999

Sphere decoding was introduced to communications by Viterbo and Boutros (1999), adapting the lattice reduction algorithm of Fincke and Pohst (1985) to MIMO detection. It achieves ML performance with polynomial average complexity.

Zero-Forcing Detection

A linear MIMO detector that applies the pseudoinverse H†\mathbf{H}^\dagger to separate spatial streams, eliminating inter-stream interference.

Related: MMSE Detection

MMSE Detection

A linear MIMO detector that minimizes mean-square error, balancing inter-stream interference suppression with noise enhancement.

ML Detection

The optimal MIMO detector that exhaustively searches all possible transmit vectors for the one closest to the received signal.

Successive Interference Cancellation

A detection strategy that detects one stream at a time, subtracting its contribution before detecting the next.

Condition Number

The ratio of the largest to smallest singular value of H\mathbf{H}; indicates how much ZF detection amplifies noise.

MIMO Detection Algorithm Comparison

PropertyZFMMSEMLV-BLAST/SIC
ComplexityO(Nt3)O(N_t^3)O(Nt3)O(N_t^3)O(MNt)O(M^{N_t})O(Nt4)O(N_t^4)
Requires Nrβ‰₯NtN_r \ge N_t?YesNo (but helps)NoYes
Noise enhancementHighLowNoneModerate
BER performanceWorstGoodOptimalNear-ML
Practical for large NtN_t?YesYesNoYes