Topic hub

MIMO and beamforming

How multiple antennas make links more reliable, faster and more directional. Diversity, spatial multiplexing, precoding and channel state feedback, massive MIMO, and analogue, digital and hybrid beamforming.

Updated 15 Nov 2026 · MIMO, diversity, spatial multiplexing, precoding, CSI, massive MIMO, beamforming, hybrid beamforming

Overview

Adding antennas at either end of a link gives it new dimensions to work with. The same hardware can be used three ways. Diversity uses the antennas to make fading less likely to wipe out the signal. Spatial multiplexing sends several data streams at once over the same bandwidth. Beamforming focuses energy towards a user and away from others. Every current cellular and Wi-Fi standard relies on all three, and in millimetre-wave bands beamforming is what makes the link budget close at all.

This hub is for engineers who need to understand what a MIMO rank, a precoder or a beam report means, how many antennas buy how much, and why base station arrays are built the way they are.

Key ideas

Diversity

If two antennas are far enough apart, usually half a wavelength or more in a rich scattering environment, their fading is close to independent. The chance that both fade at once is much smaller than the chance that one does. Receive diversity with maximum ratio combining weights each branch by its conjugate channel gain and adds them, which gives an array gain on average SNR and a diversity gain that steepens the error-rate curve. With L independent branches the error rate at high SNR falls roughly as SNR to the power −L.

Transmit diversity needs a trick because the transmitter does not know the channel. Alamouti’s 1998 scheme sends two symbols over two antennas and two time slots in a pattern that lets a simple linear receiver recover full second-order diversity without channel knowledge at the transmitter.

Spatial multiplexing

With Nt transmit and Nr receive antennas and a well-conditioned channel, the link can carry up to min(Nt, Nr) parallel streams, called layers. Each layer is a spatial degree of freedom, so capacity at high SNR grows linearly with their number rather than logarithmically with power. The papers by Foschini and Gans and by Telatar below set out this result. The condition matters. In line-of-sight or poorly scattering channels the channel matrix is close to rank 1, and the extra streams carry little. The receiver separates the layers with linear MMSE detection, successive interference cancellation or near-maximum-likelihood search.

In 3GPP TS 38.300 (Release 19 version), NR supports up to 8 downlink layers per UE for single-user spatial multiplexing. In the uplink a UE supports up to 4 or up to 8 layers, depending on capability, and DFT-s-OFDM is limited to a single layer. The UE’s capability and the channel’s rank decide how many layers a link actually uses.

Precoding and channel knowledge

Precoding shapes the transmitted signal to the channel: it steers layers onto the strongest spatial directions and, in multi-user MIMO, keeps users’ signals apart. It needs channel state information (CSI) at the transmitter. There are two ways to get it. With feedback, the base station sends CSI reference signals and the UE reports a rank, a precoder from a codebook and a channel quality indicator. TS 38.214 defines Type I codebooks with coarse beam selection and Type II codebooks that describe the channel in more detail. With reciprocity, used in TDD, the UE sends sounding reference signals and the base station estimates the downlink channel from the uplink, after calibrating its transmit and receive chains. Classic linear precoders are zero forcing, which removes inter-user interference at the cost of noise enhancement, and regularised zero forcing, which balances the two.

Massive MIMO and beamforming architectures

Massive MIMO uses base stations with very many antennas to serve many users at once. Marzetta’s 2010 paper on cells with unlimited numbers of base station antennas is the usual starting point. As the array grows, channels to different users become nearly orthogonal and small-scale fading averages out, so simple linear processing works well. The limiting factor becomes pilot contamination between cells that reuse the same pilot sequences. The glossary and the 5G NR hub cover how the idea is used in cellular networks.

How an array is driven depends on cost and power. Fully digital beamforming gives each element its own RF chain and converters, which gives the most flexibility and the most power draw. Analogue beamforming uses one RF chain and a network of phase shifters, so it forms one beam at a time. Hybrid beamforming, shown below, sits between them: a small digital precoder feeds a few RF chains, each driving many elements through phase shifters. It is the usual choice at millimetre wave, where arrays are large and converters at those bandwidths are expensive in power. Beam management procedures in NR sweep beams over synchronisation signal blocks and CSI reference signals so the UE can report the best one.

basebandRF chainsanalogue phase shifterss1s2digitalprecoderDAC, RFDAC, RFφφφφφφφφarchitecturesanalogue: one chain, one beamdigital: one chain per elementhybrid: few chains, big array8 antenna elements
Hybrid beamforming with two data streams, two RF chains and eight antenna elements. A digital precoder mixes the streams across the RF chains. Each RF chain feeds four elements through analogue phase shifters, so the digital stage chooses how streams combine and the analogue stage steers each sub-array's beam.

Where to start

The beginner track builds the background: /learn/beginner/07-fading-channels/ for the fading that diversity fights, and /learn/beginner/08-ofdm-from-scratch/ because MIMO in LTE, NR and Wi-Fi runs per subcarrier. Intermediate lessons on MIMO detection, precoding and beamforming are in preparation. Keep /reference/capacity-and-spectral-efficiency/ and the glossary open.

Tools and platforms

Tool What it is for Licence Platform
Sionna MIMO detection and precoding with TR 38.901 channel models in a link-level simulator Apache-2.0 /platforms/opensource/
CommPy MIMO Rayleigh and Rician channels for quick experiments BSD-3-Clause /platforms/opensource/
NumPy linalg SVD, QR and least squares for precoders and detectors BSD-3-Clause /platforms/opensource/
UHD Driver for USRP radios, including multi-channel configurations GPL-3.0 by default /platforms/ni-ettus/
OpenAirInterface Open 5G RAN and UE stack for over-the-air MIMO experiments CSSL v1.0, per the repository /platforms/openairinterface/
Keysight 89600 VSA Custom OFDM analysis option that covers MIMO signals Commercial /platforms/keysight/

Specifications for multi-channel radios are on /reference/hardware/.

Common mistakes

  • Assuming N antennas give N times the throughput. The channel’s rank and conditioning decide.
  • Simulating MIMO with independent Rayleigh entries and expecting the same rank in a line-of-sight lab.
  • Using channel state that is older than the coherence time. Fast-moving users break CSI-based precoding.
  • Forgetting reciprocity calibration in TDD. The over-the-air channel is reciprocal, the transceiver chains are not.
  • Running multi-channel radios without a shared reference clock and LO, then blaming the algorithm for random phase drift.

Going deeper