Bit Loader (Detailed Documentation)

This page provides the complete documentation of the implemented bit loaders.

class BitLoader[source]

The Bit Loader Abstract Base Class (ABC).

A bit loader class is responsible for implementing a bit loading strategy and effectively allocating bits for each single data stream.

abstractmethod static compute(csi: ChannelStateInformation, F: ComplexArray, G: ComplexArray | None, c_configs: ConstConfig, Pt: float, B: float) tuple[IntArray, IntArray][source]

Implementation of the bit loading strategy.

The information bit rate (number of bits per symbol) for each data stream of each user terminal is computed based on the channel state information (the effective channel matrix and the SNR), the compound precoding matrix, and in case of coordinated beamforming the compound combiner matrix and according to a specific bit loading strategy.

In case of predefined bit allocations (e.g., for fixed modulation schemes), the constellation configurations c_configs provide the necessary information.

Parameters:
  • csi (ChannelStateInformation) – The channel state information.

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

  • G (ComplexArray | None, shape (K*Nr, K*Nr)) – The compound combiner matrix (only available in case of coordinated beamforming).

  • c_configs (ConstConfig) – The constellation configurations for the data streams of each user terminal.

  • Pt (float) – The total available transmit power.

  • B (float) – The bandwidth of the system.

Returns:

  • ibr (IntArray, shape (K*Nr,)) – The information bit rate (number of bits per symbol) for each data stream of each user terminal.

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

static apply(ibr: ndarray[tuple[Any, ...], dtype[integer]], M: int, Ns: ndarray[tuple[Any, ...], dtype[integer]]) tuple[list[list[ndarray[tuple[Any, ...], dtype[integer]]]], list[ndarray[tuple[Any, ...], dtype[integer]]]][source]

Apply the bit loader.

The bit loader allocates the right number of bits for each active data stream for each UT. Non-active data streams (i.e., data streams with ibr = 0) are not allocated any bits.

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

  • M (int) – The number of symbol vectors to be transmitted at once.

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

Returns:

  • tx_bits_list (list[list[BitArray]], shape (K, Ns[k], ibr[k][s]*M)) – The list of allocated bits for each data stream of each UT.

  • b (list[BitArray], shape (Ns_total, ibr[s]*M)) – The concatenated list of allocated bits for all data streams.

class NeutralBitLoader[source]

Bases: BitLoader

Neutral Bit Loader.

Acts as a ‘neutral element’ for bit loading. It always allocates one bit per symbol to each data stream, and creates as many data streams per UT as it has antennas.

static compute(csi: ChannelStateInformation, F: ComplexArray, G: ComplexArray | None, c_configs: ConstConfig, Pt: float, B: float) tuple[IntArray, IntArray][source]

Implementation of the bit loading strategy.

The information bit rate (number of bits per symbol) for each data stream of each user terminal is computed based on the channel state information (the effective channel matrix and the SNR), the compound precoding matrix, and in case of coordinated beamforming the compound combiner matrix and according to a specific bit loading strategy.

In case of predefined bit allocations (e.g., for fixed modulation schemes), the constellation configurations c_configs provide the necessary information.

Parameters:
  • csi (ChannelStateInformation) – The channel state information.

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

  • G (ComplexArray | None, shape (K*Nr, K*Nr)) – The compound combiner matrix (only available in case of coordinated beamforming).

  • c_configs (ConstConfig) – The constellation configurations for the data streams of each user terminal.

  • Pt (float) – The total available transmit power.

  • B (float) – The bandwidth of the system.

Returns:

  • ibr (IntArray, shape (K*Nr,)) – The information bit rate (number of bits per symbol) for each data stream of each user terminal.

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

class FixedBitLoader[source]

Bases: BitLoader

Fixed Bit Loader.

Allocates a predefined fixed number of bits to the data streams of each UT. Each UT gets assigned as many data streams as it has receive antennas, so every UTs gets assigned the same number of data streams as we assume each UT has the same number of receive antennas.

For example, c_configs tells us that the data streams of UT 1 use 2-PSK modulation and the data streams of all other UTs use 16-QAM modulation, then the fixed bit loader will allocate 2 bits per symbol to each data stream of UT 1 and 4 bits per symbol to all other data streams.

static compute(csi: ChannelStateInformation, F: ComplexArray, G: ComplexArray | None, c_configs: ConstConfig, Pt: float, B: float) tuple[IntArray, IntArray][source]

Implementation of the bit loading strategy.

The information bit rate (number of bits per symbol) for each data stream of each user terminal is computed based on the channel state information (the effective channel matrix and the SNR), the compound precoding matrix, and in case of coordinated beamforming the compound combiner matrix and according to a specific bit loading strategy.

In case of predefined bit allocations (e.g., for fixed modulation schemes), the constellation configurations c_configs provide the necessary information.

Parameters:
  • csi (ChannelStateInformation) – The channel state information.

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

  • G (ComplexArray | None, shape (K*Nr, K*Nr)) – The compound combiner matrix (only available in case of coordinated beamforming).

  • c_configs (ConstConfig) – The constellation configurations for the data streams of each user terminal.

  • Pt (float) – The total available transmit power.

  • B (float) – The bandwidth of the system.

Returns:

  • ibr (IntArray, shape (K*Nr,)) – The information bit rate (number of bits per symbol) for each data stream of each user terminal.

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

class AdaptiveBitLoader[source]

Bases: BitLoader

Adaptive Bit Loader.

Allocates a variable number of bits to the data streams of each UT based on the channel capacity that UT. More specifically, the bit loader computes the achievable rates (shannon capacity) for each stream of all UTs. Then it calculates the information bit rates for the data streams to each UT as a fraction of the achievable rates.

static compute(csi: ChannelStateInformation, F: ComplexArray, G: ComplexArray | None, c_configs: ConstConfig, Pt: float, B: float) tuple[IntArray, IntArray][source]

Implementation of the bit loading strategy.

The information bit rate (number of bits per symbol) for each data stream of each user terminal is computed based on the channel state information (the effective channel matrix and the SNR), the compound precoding matrix, and in case of coordinated beamforming the compound combiner matrix and according to a specific bit loading strategy.

In case of predefined bit allocations (e.g., for fixed modulation schemes), the constellation configurations c_configs provide the necessary information.

Parameters:
  • csi (ChannelStateInformation) – The channel state information.

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

  • G (ComplexArray | None, shape (K*Nr, K*Nr)) – The compound combiner matrix (only available in case of coordinated beamforming).

  • c_configs (ConstConfig) – The constellation configurations for the data streams of each user terminal.

  • Pt (float) – The total available transmit power.

  • B (float) – The bandwidth of the system.

Returns:

  • ibr (IntArray, shape (K*Nr,)) – The information bit rate (number of bits per symbol) for each data stream of each user terminal.

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

static _compute_achievable_rates(csi: ChannelStateInformation, F: ndarray[tuple[Any, ...], dtype[complexfloating]], G: ndarray[tuple[Any, ...], dtype[complexfloating]] | None, Pt: float, B: float) ndarray[tuple[Any, ...], dtype[floating]][source]

Compute the achievable rates (shannon capacity) for each stream of all UTs.

Parameters:
  • csi (ChannelStateInformation) – The channel state information.

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

  • G (ComplexArray | None, shape (K*Nr, K*Nr)) – The compound combiner matrix (only available in case of coordinated beamforming).

  • Pt (float) – The available total transmit power.

  • B (float) – The bandwidth of the system.

Returns:

abr – The achievable rates for each stream of all UTs.

Return type:

RealArray, shape (K*Nr,)