Skip to content

MMSE Equalizer

Wiseung Jang edited this page Jul 7, 2026 · 1 revision

MMSE Equalizer (PDSCH)

The primary equalization engine in this repository handles 2x2 MIMO Spatial Multiplexing (e.g., LTE TM3/TM4) using the Minimum Mean Square Error (MMSE) algorithm.

Mathematical Model

For a $2 \times 2$ equivalent channel matrix $\mathbf{H}{eq}$, the MMSE weight matrix is: $$\mathbf{W}{MMSE} = \mathbf{H}{eq}^H (\mathbf{H}{eq}\mathbf{H}_{eq}^H + \sigma^2 \mathbf{I})^{-1}$$

Hardware-Level Optimizations (CPU)

In src/mmse_avx2.cpp, we have completely eliminated generic matrix libraries (like Eigen or cuBLAS) for these tiny $2 \times 2$ matrices to avoid launch overhead.

  1. Explicit Cramer's Rule: We analytically expand the $2 \times 2$ inversion.
  2. Division Assassin (Newton-Raphson): Standard floating-point division (/) stalls the CPU pipeline for dozens of cycles. We compute the reciprocal of the determinant using:
    • _mm256_rcp_ps (hardware approx reciprocal)
    • Followed by a FMA-based Newton-Raphson iteration for FP32 precision recovery.
  3. Branchless Fallback: Deep fades can cause singular matrices (determinant $\approx 0$). We use _mm256_max_ps to clamp the determinant to a noise floor, entirely avoiding pipeline-breaking if-else branches.

LLR & Post-SINR

The equalizer does not just output symbols ($\hat{X}$). It calculates the post-equalization equivalent gain $G$ and outputs the SINR ($\frac{G}{1-G}$). This is critical for scaling the downstream Log-Likelihood Ratios (LLR) for the Turbo Decoder.

Clone this wiki locally