Datatypes (Detailed Documentation)

This page provides a complete documentation of the custom datatypes used in the simulation framework.

System Configuration

class BaseStationConfig(bit_loader: type[BitLoader], mapper: type[Mapper], precoder: type[Precoder])[source]

The configuration settings of a base station.

Parameters:
  • bit_loader (type[BitLoader]) – The type of the bit loader (the concrete bit loader class).

  • mapper (type[Mapper]) – The type of the mapper (the concrete mapper class).

  • precoder (type[Precoder]) – The type of the precoder (the concrete precoder class).

class ChannelConfig(channel_model: ChannelModel, noise_model: NoiseModel)[source]

The configuration settings of a channel.

Parameters:
  • channel_model (ChannelModel) – The channel model (an instance of the concrete channel model class).

  • noise_model (NoiseModel) – The noise model (an instance of the concrete noise model class).

class UserTerminalConfig(combiner: type[Combiner], equalizer: type[Equalizer], detector: type[Detector], demapper: type[Demapper])[source]

The configuration settings of a user terminal.

Parameters:
  • combiner (type[Combiner]) – The type of the combiner (the concrete combiner class).

  • equalizer (type[Equalizer]) – The type of the equalizer (the concrete equalizer class).

  • detector (type[Detector]) – The type of the detector (the concrete detector class).

  • demapper (type[Demapper]) – The type of the demapper (the concrete demapper class).

class SystemConfig(Pt: float, B: float, K: int, Nr: int, Nt: int, c_configs: ConstConfig, base_station_configs: BaseStationConfig, user_terminal_configs: UserTerminalConfig, channel_configs: ChannelConfig, name: str)[source]

The configuration settings of a MU-MIMO system.

Parameters:
  • Pt (float) – The total available transmit power (in Watt).

  • B (float) – The system frequency bandwidth (in Hertz).

  • K (int) – The number of user terminals.

  • Nr (int) – The number of receive antennas per user terminal.

  • Nt (int) – The number of transmit antennas at the base station.

  • c_configs (ConstConfig) – The constellation configuration settings for each UT.

  • base_station_configs (BaseStationConfig) – The configuration settings of the base station.

  • user_terminal_configs (UserTerminalConfig) – The configuration settings of the user terminals.

  • channel_configs (ChannelConfig) – The configuration settings of the channel.

  • name (str) – The name of the system configuration.

display()[source]

Display system configuration settings in a readable format.

Returns:

str_display – A formatted string summarizing the system configuration settings.

Return type:

str

class SimConfig(snr_dB_values: ndarray[tuple[Any, ...], dtype[floating]], num_channel_realizations: int, num_bit_errors: int, num_bit_errors_scope: Literal['system-wide', 'uts', 'streams'], M: int, name: str)[source]

The configuration settings of a simulation.

Parameters:
  • snr_dB_values (RealArray) – The SNR values in dB.

  • snr_values (RealArray) – The SNR values in linear scale. It is derived from snr_dB_values.

  • num_channel_realizations (int) – The minimum number of channel realizations per SNR value.

  • num_bit_errors (int) – The minimum number of bit errors per SNR value.

  • num_bit_errors_scope (Literal["system-wide", "uts", "streams"]) – The scope over which the minimum number of bit errors are considered.

  • M (int) – The number of symbol vector transmissions for each channel realization.

  • name (str) – The name of the simulation configuration.

display()[source]

Display simulation configuration settings in a readable format.

Returns:

str_display – A formatted string summarizing the simulation configuration settings.

Return type:

str

setup_sys_configs(ref_numbers: list[str], filepath: Path) dict[str, SystemConfig][source]

Set up the system configurations for the given reference numbers.

Parameters:
  • ref_numbers (list[str]) – A list of reference numbers for which to set up the system configurations.

  • filepath (Path) – The path to the JSON file containing the system configurations.

Returns:

system_configs – A dictionary mapping each reference number to its corresponding SystemConfig object.

Return type:

dict[str, SystemConfig]

setup_sim_configs(ref_numbers: list[str], filepath: Path) dict[str, SimConfig][source]

Set up the simulation configurations for the given reference numbers.

Parameters:
  • ref_numbers (list[str]) – A list of reference numbers for which to set up the simulation configurations.

  • filepath (Path) – The path to the JSON file containing the simulation configurations.

Returns:

sim_configs – A dictionary mapping each reference number to its corresponding SimConfig object.

Return type:

dict[str, SimConfig]

System State

class ChannelStateInformation(snr: float | None = None, H_eff: ndarray[tuple[Any, ...], dtype[complexfloating]] | None = None)[source]

The channel state information (CSI).

Parameters:
  • snr (float) – The signal-to-noise ratio. (optional, default None)

  • H_eff (ComplexArray, shape (K * Nr, Nt) or (Ns_total, Nt)) –

    The effective channel matrix. (optional, default None)

    In case of coordinated beamforming, the effective channel matrix equals the actual channel matrix. In case of non-coordinated beamforming, the effective channel matrix equals the the actual channel matrix followed by the compound combining matrix (G * H).

class ChannelState(snr: float | None = None, H: ndarray[tuple[Any, ...], dtype[complexfloating]] | None = None)[source]

The state of the channel.

Parameters:
  • snr (float) – The signal-to-noise ratio.

  • H (ComplexArray, shape (K * Nr, Nt)) – The channel matrix.

Notes

How does the channel state differ from the channel state information (CSI)?

The channel state contains the actual channel matrix and current SNR value. The channel state information (CSI), however, contains the effective channel matrix instead of the actual channel matrix. So, in case of coordinated beamforming, there is no difference. But in case of non-coordinated beamforming, the effective channel matrix is the actual channel matrix followed by the compound combining matrix (G * H).

class BaseStationState(F: ndarray[tuple[Any, ...], dtype[complexfloating]], C_eq: ndarray[tuple[Any, ...], dtype[complexfloating]], ibr: ndarray[tuple[Any, ...], dtype[integer]], Ns: ndarray[tuple[Any, ...], dtype[integer]], G: ndarray[tuple[Any, ...], dtype[complexfloating]] | None)[source]

The state of a base station (for a specific channel and SNR value).

Parameters:
  • F (ComplexArray, shape (Nt, K * Nr)) – The compound precoding matrix.

  • C_eq (ComplexArray, shape (K * Nr,)) – The equalization coefficients for each data stream.

  • ibr (IntArray, shape (K * Nr,)) – The information bit rates for each data stream of each UT.

  • Ns (IntArray, shape (K,)) – The number of data streams for each UT.

  • G (ComplexArray, shape (K * Nr, K * Nr) or None) – The compound combining matrix. It is None in case of non-coordinated beamforming.

class UserTerminalState(H_k: ndarray[tuple[Any, ...], dtype[complexfloating]], G_k: ndarray[tuple[Any, ...], dtype[complexfloating]], c_type_k: Literal['PAM', 'PSK', 'QAM'] | None, C_eq_k: ndarray[tuple[Any, ...], dtype[complexfloating]] | None, ibr_k: ndarray[tuple[Any, ...], dtype[integer]] | None)[source]

The state of a single user terminal (for a specific channel and SNR value).

Parameters:
  • H_k (ComplexArray, shape (Nr, Nt)) – The channel matrix of this UT.

  • G_k (ComplexArray, shape (Nr, Nr)) – The combining matrix of this UT.

  • c_type_k (ConstType) – The constellation type for the data streams to this UT.

  • C_eq_k (ComplexArray, shape (Nr,)) – The equalization coefficients for each data stream of this UT.

  • ibr_k (IntArray, shape (Nr,)) – The information bit rates for each data stream of this UT.

  • Ns_k (int) – The number of data streams for this UT.

Setup Messages

class TransmitPilotMessage[source]

The pilot message transmitted by the BS.

class ReceivePilotMessage(H_k: ndarray[tuple[Any, ...], dtype[complexfloating]])[source]

The pilot message received by the UT.

Normally, the received pilot message would contain the received pilot symbols. However, since we consider channel estimation out of scope for this framework, we directly include the channel matrix in the received pilot message.

Parameters:

H_k (ComplexArray, shape (Nr, Nt)) – The channel matrix of this UT.

class TransmitFeedbackMessage(ut_id: int, H_eff_k: ndarray[tuple[Any, ...], dtype[complexfloating]])[source]

The feedback message transmitted by the UT.

Parameters:
  • ut_id (int) – The ID of the UT that transmits this feedback message.

  • H_eff_k (ComplexArray, shape (Nr, Nt)) – The effective channel matrix of this UT.

class ReceiveFeedbackMessage(csi: ChannelStateInformation)[source]

The feedback message received by the BS.

Parameters:

csi (ChannelStateInformation) – The channel state information (CSI).

class TransmitFeedforwardMessage(c_type: list[Literal['PAM', 'PSK', 'QAM']], C_eq: ndarray[tuple[Any, ...], dtype[complexfloating]], ibr: ndarray[tuple[Any, ...], dtype[integer]], G: ndarray[tuple[Any, ...], dtype[complexfloating]] | None)[source]

The feedforward message transmitted by the BS.

Parameters:
  • c_type (list[ConstType]) – The constellation types for the data streams to each UT.

  • C_eq (ComplexArray, shape (K * Nr,)) – The equalization coefficients for each data stream of each UT.

  • ibr (IntArray, shape (K * Nr,)) – The information bit rates for each data stream of each UT.

  • G (ComplexArray, shape (K * Nr, K * Nr)) – The compound combining matrix. It is None in case of non-coordinated beamforming.

class ReceiveFeedforwardMessage(ut_id: int, c_type_k: Literal['PAM', 'PSK', 'QAM'], C_eq_k: ndarray[tuple[Any, ...], dtype[complexfloating]], ibr_k: ndarray[tuple[Any, ...], dtype[integer]], G_k: ndarray[tuple[Any, ...], dtype[complexfloating]] | None)[source]

The feedforward message received by the UT.

Parameters:
  • ut_id (int) – The ID of the UT that receives this feedforward message.

  • c_type_k (ConstType) – The constellation type for the data streams to this UT.

  • C_eq_k (ComplexArray, shape (Nr,)) – The equalization coefficients for each data stream of this UT.

  • ibr_k (IntArray, shape (Nr,)) – The information bit rates for each data stream of this UT.

  • G_k (ComplexArray, shape (Nr, Nr)) – The combining matrix of this UT. It is None in case of non-coordinated beamforming.