MIMO Waterfilling Visualizer

ECE 420 · Wireless Communications · NC State University

Background: In a MIMO (Multiple-Input Multiple-Output) wireless link — a system using multiple antennas at both transmitter and receiver — the channel between Nt transmit and Nr receive antennas is described by a complex channel matrix H (size Nr×Nt). Decomposing H with the singular value decomposition (SVD), H = UΣVH, turns the MIMO channel into a set of parallel, non-interfering "eigen-layers" (eigen-modes), each with its own power gain σi², where σi are the singular values of H. Given a fixed total transmit power P, information theory shows that channel capacity C (measured in bit/s/Hz, i.e. bits per second per Hz of bandwidth) is maximized not by splitting power equally across these layers, but through "waterfilling": strong layers (large σi²) get more power, weak layers get less — or none at all if they are too weak relative to the noise floor 1/σi² to be worth using.

Description of This Web Application: This app lets you build a random MIMO channel with a chosen number of transmit/receive antennas (Nt, Nr) and channel rank r = rank(H), then visualizes the antenna array and the resulting channel-magnitude matrix |H| together with the singular value decomposition (SVD) that diagonalizes it. Adjusting the total transmit SNR (Signal-to-Noise Ratio, in dB) triggers a live waterfilling solve, showing the power pi allocated to each eigen-layer relative to the water level μ, the resulting per-layer data rates, and the total capacity C = Σlog₂(1+piσi²) compared against naive equal-power allocation. By experimenting with the controls, you will see why waterfilling outperforms equal-power allocation, how spatial rank limits the number of usable layers, and how SNR determines how many layers are worth activating.

Configuration

Legend

Link opacity/width ∝ |hij|
Power allocated per eigen-layer
Layer excluded (zero power)
Hover an antenna to highlight its links · hover a link or heat cell for the exact hij value.
Antenna Array & Channel Links Nt → Nr, one line per hij
Channel Magnitude Matrix |H| rows = Rx, columns = Tx
Singular Value Decomposition H = UΣVH
Waterfilling Power Allocation pi = max(0, μ − 1/σi²)
Noise floor 1/σi² Allocated power pi Water level μ Excluded layer
Per-Layer Results