Part III β€Ί Chapter 9

MIMO & Water-Filling

Multiple-input multiple-output (MIMO) channels are decomposed via SVD into independent sub-channels, then power is allocated optimally using the water-filling algorithm.

9.1 The MIMO Channel Model

A MIMO system with \(n_T\) transmit and \(n_R\) receive antennas has the input-output relation:

\[ \mathbf{Y} = H\mathbf{X} + \mathbf{Z}, \qquad H \in \mathbb{C}^{n_R \times n_T} \]

where \(\mathbf{Z} \sim \mathcal{CN}(0, \sigma^2 I)\) is complex Gaussian noise and\(H\) is the channel matrix whose entries represent the complex gain from each transmit to each receive antenna.

The capacity with known \(H\) at both ends and power constraint\(\operatorname{tr}(Q) \le P\) where \(Q = E[\mathbf{X}\mathbf{X}^\dagger]\):

\[ C = \max_{Q \succeq 0,\;\mathrm{tr}(Q)\le P} \log_2\det\!\left(I + \frac{1}{\sigma^2}HQH^\dagger\right) \]

9.2 SVD Decomposition into Parallel Channels

The singular value decomposition of \(H\):

\[ H = U\Lambda V^\dagger, \qquad \Lambda = \operatorname{diag}(\lambda_1, \ldots, \lambda_r) \]

By transmitting along right singular vectors (columns of \(V\)) and receiving along left singular vectors (columns of \(U\)), the MIMO channel decomposes into\(r = \operatorname{rank}(H)\) independent scalar sub-channels:

\[ \tilde{Y}_i = \lambda_i \tilde{X}_i + \tilde{Z}_i, \quad i = 1,\ldots,r \]

Each sub-channel has gain \(\lambda_i\) (a singular value) and independent noise\(\tilde{Z}_i \sim \mathcal{CN}(0, \sigma^2)\). The capacity becomes:

\[ C = \sum_{i=1}^{r} \log_2\!\left(1 + \frac{P_i\lambda_i^2}{\sigma^2}\right) \]

subject to \(\sum_i P_i \le P\), \(P_i \ge 0\)

9.3 Water-Filling Algorithm

We must maximize \(\sum_i \log_2(1+P_i\gamma_i)\) where \(\gamma_i = \lambda_i^2/\sigma^2\)subject to \(\sum P_i \le P\). Using Lagrange multipliers with KKT conditions:

\[ P_i^* = \left(\mu - \frac{1}{\gamma_i}\right)^+, \qquad \text{where } (x)^+ = \max(0, x) \]

The water level \(\mu\) is chosen so that\(\sum_i P_i^* = P\). The β€œwater-filling” metaphor: imagine pouring water into vessels of different heights (noise floors \(1/\gamma_i\)) β€” water fills the lower vessels first, and the surface is the water level \(\mu\).

noiseP*Ch 1Ξ³=4noiseP*Ch 2Ξ³=1noiseP*Ch 3Ξ³=Β½noiseP*Ch 4Ξ³=ΒΌΞΌ(water level)Water-Filling: pour water until total = P

Python: Water-Filling Simulation

Implements the water-filling algorithm for 4 parallel channels with gain-to-noise ratios 4, 1, 0.5, 0.25. Four plots: the water-filling bar diagram, capacity vs total power budget (water-filling vs equal allocation), per-channel power vs budget, and a MIMO 4Γ—4 capacity distribution compared to SISO.

Python
script.py193 lines

Click Run to execute the Python code

Code will be executed with Python 3 on the server