MU-MIMO¶
This module provides a simulation framework for multi-user MIMO digital communication systems, designed to evaluate and compare different precoding strategies and channel models in a structured way.
Simulation Model Architecture¶
The simulation is built around a modular class hierarchy that separates the core system components from the interchangeable processing algorithms. The simulation runner orchestrates the simulation loop, driving a MU-MIMO system that encapsulates a base station (BS), a set of user terminal (UT) instances, and a channel. Each core component delegates its signal processing to abstract processing classes, which can be swapped out independently to test different algorithms, as shown in the class diagram below.
Figure: class diagram of the simulation model.¶
Each simulation run iterates over a range of SNR values, with multiple channel realizations per SNR point. Every iteration progresses through three phases:
Reset: The system state is cleared and a new channel realization is generated.
Configuration: Precoding and combining matrices are computed from the current channel state, alongside the resource allocation according to the specified strategy.
Data Transmission: The base station transmits data, the channel propagates it, and each user terminal detects and decodes its received signal.
After every single iteration, performance metrics are computed and stored for analysis later on.
These phases are illustrated in the sequence diagram, in which the interactions between the different components become clear as well.
Example Usage¶
from mu_mimo import *
SIM_CONFIG_PATH = Path(__file__).parent / 'sim_configs.json'
SYSTEM_CONFIG_PATH = Path(__file__).parent / 'system_configs.json'
# Define the simulation configurations.
sim_ref_numbers = ["1.0"]
sim_configs = setup_sim_configs(sim_ref_numbers, SIM_CONFIG_PATH)
# Define the system configurations.
system_ref_numbers = ["1.1.1.1"]
system_configs = setup_sys_configs(system_ref_numbers, SYSTEM_CONFIG_PATH)
# Create and run the simulation.
runner = SimulationRunner(sim_config=sim_configs[sim_ref_numbers[0]], system_config=system_configs[system_ref_numbers[0]])
results = runner.run()
Documentation¶
The complete documentation of the MU-MIMO module is found in the following sections.