MU-MIMO System

Overview

The MuMimoSystem class represents the complete MU-MIMO downlink digital communication system. It acts as the central coordinator between the three core components:

  • A BaseStation (BS) — responsible for bit allocation, mapping and precoding.

  • A Channel — responsible for propagating signals and control messages between the BS and the UTs.

  • A set of UserTerminal (UT) instances — each responsible for combining, equalizing, detecting and demapping the received signal.

The system is driven by the SimulationRunner, which calls the three methods of this class in the following order for each channel realization:

reset()  →  configure()  →  communicate()

System Phases

Reset

mu_mimo_system.reset(csi)

Clears the state of all components and prepares the system for a new channel realization. Concretely:

  1. The BS state (state) is cleared.

  2. Each UT state (state) is cleared.

  3. The channel state is reset: the SNR is set (or defaults to \(\infty\)) and a new channel matrix \(\mathbf{H}\) is generated by the channel model if not provided.

Configuration

mu_mimo_system.configure()

Exchanges control messages between the BS and the UTs to determine bit allocation, precoding matrix and combining matrix for the current channel realization. It proceeds in three phases:

1. Pilot phase
The BS transmits pilot signals. Each UT estimates its channel matrix \(\mathbf{H}_k\) from the received pilot signals. Because channel estimation is not the focus of this work, we assume perfect channel state information (CSI) at the UTs, so the channel estimation step is skipped and each UT directly receives its true channel matrix from the pilot messages.
In case of non-coordinated beamforming, the UTs compute their own (suboptimal) combining matrices \(\mathbf{G}_k\) based on their channel matrices.
In case of coordinated beamforming, the combining matrices are computed at the BS alongside the precoding matrix.
2. Feedback phase
Each UT sends its effective channel matrix \(\mathbf{H}_{\text{eff},k}\) back to the BS. The effective channel matrix is the channel matrix as seen by the BS.
In case of non-coordinated beamforming, the effective channel matrix is the channel matrix followed by the UT’s combining matrix: \(\mathbf{H}_{\text{eff},k} = \mathbf{G}_k \mathbf{H}_k\).
In case of coordinated beamforming, the effective channel matrix is the same as the true channel matrix: \(\mathbf{H}_{\text{eff},k} = \mathbf{H}_k\).
At the BS, this feedback message is processed to compute the precoding matrix \(\mathbf{P}\) and, in case of coordinated beamforming, the combining matrices \(\mathbf{G}_k\) as well. The bit allocation and the equalization factors are also computed at the BS.
3. Feedforward phase
The BS broadcasts the computed parameters back to each UT, so that each UT can correctly combine, equalize and decode its received signal during the data transmission phase.

Data Transmission

tx_bits_list, rx_bits_list = mu_mimo_system.communicate(M)

A simulation of the complete data transmission for \(M\) symbol vectors. It consists of three steps:

1. BS transmit chain
Bits are allocated, mapped to constellation symbols and precoded into the transmitted signal \(\mathbf{x}\).
2. Channel propagation
Noise is generated and added to the channel-distorted signal, yielding the per-UT received signals \(\mathbf{y}_k\).
3. UT receive chain
Each UT applies combining, equalization, detection and demapping to recover the transmitted bitstreams.

The method returns the transmitted and reconstructed bitstreams for all UTs, which are used by the SimulationRunner to compute the performance metrics (BER, IBR, …).

Documentation

class MuMimoSystem(system_config: SystemConfig)[source]

Represents a MU-MIMO downlink digital communication system.

reset(cs: ChannelState) ChannelState[source]

Resets the MU-MIMO system.

After resetting, the system is ready for configuration. For more datail on the reset phase, we refer to the reset_state() methods of the BS, UTs and channel.

Parameters:

cs (ChannelState) – The channel state to reset to.

configure() None[source]

Configuration the MU-MIMO system.

Make sure the system has been reset first. After configuration, the system is ready for communication. For more datails on the configuration phase, we refer to the receive, propagate and transmit methods of the pilot signals, feedback messages and feedforward messages of the BS, UTs and channel.

Returns:

capacity – The capacity of each stream of each UT for the current channel realization, SNR value and system configurations.

Return type:

RealArray, shape (K, Nr)

communicate(M: int) tuple[list[list[ndarray[tuple[Any, ...], dtype[integer]]]], list[list[ndarray[tuple[Any, ...], dtype[integer]]]]][source]

Communication of the MU-MIMO system.

Make sure the system has been configured first. After communication, performance evaluation can be performed. For more datails on the communication phase, we refer to the transmit method of the BS, the propagate method of the channel and the receive method of the UTs.

Parameters:

M (int) – The number of symbol vector transmissions for this channel realization and SNR.

Returns:

  • tx_bits_list (list[list[BitArray]], shape (K, Ns_k, ibr_k_s * M)) – The list of bitstreams for each UT k and each data stream s that were transmitted by the BS.

  • rx_bits_list (list[list[BitArray]], shape (K, Ns_k, ibr_k_s * M)) – The list of bitstreams for each UT k and each data stream s that were received by the UTs.

See Also