Modulation and Detection (Detailed Documentation)

This page provides the complete documentation of the implemented modulation and detection techniques.

Modulation

class Mapper[source]

Mapper Abstract Base Class.

abstractmethod static apply(b: list[ndarray[tuple[Any, ...], dtype[integer]]], ibr: ndarray[tuple[Any, ...], dtype[integer]], c_types: list[Literal['PAM', 'PSK', 'QAM']], Ns: ndarray[tuple[Any, ...], dtype[integer]]) ndarray[tuple[Any, ...], dtype[complexfloating]][source]

Apply the mapper operation to the bitstreams.

For each active data stream of each user terminal, the mapper converts the bitstream into a data symbol stream according to the information bit rate (number of bits per symbol or thus the constellation size in bits).

Parameters:
  • b (list[BitArray], shape (Ns_total, ibr[s] * M)) – The compound bitstream vector.

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

  • c_types (list[ConstType], shape (K,)) – The constellation types for the data streams to each UT.

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

Returns:

a – The compound data symbol vector.

Return type:

ComplexArray, shape (Ns_total, M)

class NeutralMapper[source]

Bases: Mapper

Neutral Mapper.

Acts as a ‘neutral element’ for mapping.It simply converts the bitstream into a data symbol stream by interpreting the bits as integers, without applying any modulation scheme. So in practice, the bitstreams pass through the mapper without any change. A requirement for this mapper is that the information bit rate equals one bit per symbol for each data stream (neutral bit allocation)!

static apply(b: list[ndarray[tuple[Any, ...], dtype[integer]]], ibr: ndarray[tuple[Any, ...], dtype[integer]], c_types: list[Literal['PAM', 'PSK', 'QAM']], Ns: ndarray[tuple[Any, ...], dtype[integer]]) ndarray[tuple[Any, ...], dtype[complexfloating]][source]

Apply the mapper operation to the bitstreams.

For each active data stream of each user terminal, the mapper converts the bitstream into a data symbol stream according to the information bit rate (number of bits per symbol or thus the constellation size in bits).

Parameters:
  • b (list[BitArray], shape (Ns_total, ibr[s] * M)) – The compound bitstream vector.

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

  • c_types (list[ConstType], shape (K,)) – The constellation types for the data streams to each UT.

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

Returns:

a – The compound data symbol vector.

Return type:

ComplexArray, shape (Ns_total, M)

class GrayCodeMapper[source]

Bases: Mapper

Gray Code Mapper.

static apply(b: list[ndarray[tuple[Any, ...], dtype[integer]]], ibr: ndarray[tuple[Any, ...], dtype[integer]], c_types: list[Literal['PAM', 'PSK', 'QAM']], Ns: ndarray[tuple[Any, ...], dtype[integer]]) ndarray[tuple[Any, ...], dtype[complexfloating]][source]

Apply the mapper operation to the bitstreams.

For each active data stream of each user terminal, the mapper converts the bitstream into a data symbol stream according to the information bit rate (number of bits per symbol or thus the constellation size in bits).

Parameters:
  • b (list[BitArray], shape (Ns_total, ibr[s] * M)) – The compound bitstream vector.

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

  • c_types (list[ConstType], shape (K,)) – The constellation types for the data streams to each UT.

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

Returns:

a – The compound data symbol vector.

Return type:

ComplexArray, shape (Ns_total, M)

Detection

class Equalizer[source]

Equalization Class.

static apply(z_k: ndarray[tuple[Any, ...], dtype[complexfloating]], C_eq_k: ndarray[tuple[Any, ...], dtype[complexfloating]], ibr_k: ndarray[tuple[Any, ...], dtype[integer]]) ndarray[tuple[Any, ...], dtype[complexfloating]][source]

Apply the equalization operation to the combined signal.

Each data stream of this user terminal is multiplied by its corresponding equalization coefficient to rescale the received symbols before the decoding process.

Parameters:
  • z_k (ComplexArray, shape (Ns_k, M)) – The combined signal for 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 rate for each data stream of this UT.

Returns:

u_k – The decision variable streams for this UT.

Return type:

ComplexArray, shape (Ns_k, M)

class Detector[source]

Detector Abstract Base Class.

abstractmethod static apply(u_k: ndarray[tuple[Any, ...], dtype[complexfloating]], ibr_k: ndarray[tuple[Any, ...], dtype[integer]], c_type_k: Literal['PAM', 'PSK', 'QAM']) ndarray[tuple[Any, ...], dtype[integer]][source]

Apply the detector operation to the decision variable streams.

For each data stream of this user terminal, the detector converts the decision variable stream into a stream of constellation point indices (decimal integers), based on the used modulation scheme. The indices correspond to the constellation points that are most likely transmitted by the base station.

The desicion of which constellation points that are most likely depends on the type of the detector and might be suboptimal for certain detector types.

Parameters:
  • u_k (ComplexArray, shape (Ns_k, M)) – The decision variable streams of this user terminal.

  • ibr_k (IntArray, shape (Nr,)) – The information bit rate for each data stream of this user terminal.

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

Returns:

cpi_k_hat – The indices of the constellation points (decimal integers) corresponding to the reconstructed data symbols, for each data stream of this user terminal.

Return type:

IntArray, shape (Ns_k, M)

class NeutralDetector[source]

Bases: Detector

Neutral Detector.

Acts as a ‘neutral element’ for detection.It simply converts the decision variable stream into a stream of constellation point indices by interpreting the decision variables as integers, without applying any detection scheme. So in practice, the decision variable streams pass through the detector without any change.

static apply(u_k: ndarray[tuple[Any, ...], dtype[complexfloating]], ibr_k: ndarray[tuple[Any, ...], dtype[integer]], c_type_k: Literal['PAM', 'PSK', 'QAM']) ndarray[tuple[Any, ...], dtype[integer]][source]

Apply the detector operation to the decision variable streams.

For each data stream of this user terminal, the detector converts the decision variable stream into a stream of constellation point indices (decimal integers), based on the used modulation scheme. The indices correspond to the constellation points that are most likely transmitted by the base station.

The desicion of which constellation points that are most likely depends on the type of the detector and might be suboptimal for certain detector types.

Parameters:
  • u_k (ComplexArray, shape (Ns_k, M)) – The decision variable streams of this user terminal.

  • ibr_k (IntArray, shape (Nr,)) – The information bit rate for each data stream of this user terminal.

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

Returns:

cpi_k_hat – The indices of the constellation points (decimal integers) corresponding to the reconstructed data symbols, for each data stream of this user terminal.

Return type:

IntArray, shape (Ns_k, M)

class MDDetector[source]

Bases: Detector

Minimum Distance (MD) Detector.

static apply(u_k: ndarray[tuple[Any, ...], dtype[complexfloating]], ibr_k: ndarray[tuple[Any, ...], dtype[integer]], c_type_k: Literal['PAM', 'PSK', 'QAM']) ndarray[tuple[Any, ...], dtype[integer]][source]

Apply the detector operation to the decision variable streams.

For each data stream of this user terminal, the detector converts the decision variable stream into a stream of constellation point indices (decimal integers), based on the used modulation scheme. The indices correspond to the constellation points that are most likely transmitted by the base station.

The desicion of which constellation points that are most likely depends on the type of the detector and might be suboptimal for certain detector types.

Parameters:
  • u_k (ComplexArray, shape (Ns_k, M)) – The decision variable streams of this user terminal.

  • ibr_k (IntArray, shape (Nr,)) – The information bit rate for each data stream of this user terminal.

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

Returns:

cpi_k_hat – The indices of the constellation points (decimal integers) corresponding to the reconstructed data symbols, for each data stream of this user terminal.

Return type:

IntArray, shape (Ns_k, M)

class Demapper[source]

Demapper Abstract Base Class.

abstractmethod static apply(cpi_k_hat: ndarray[tuple[Any, ...], dtype[integer]], ibr_k: ndarray[tuple[Any, ...], dtype[integer]]) list[ndarray[tuple[Any, ...], dtype[integer]]][source]

Apply the demapper operation to the reconstructed symbol streams.

For each data stream of this user terminal, the demapper converts the reconstructed data symbol stream into a bitstream, based to the used modulation scheme (constellation typpe and sizes) and the constellation point indices of the reconstructed data symbols.

Parameters:
  • cpi_k_hat (IntArray, shape (Ns_k, M)) – The indices of the constellation points (decimal integers) corresponding to the reconstructed data symbols, for each data stream of this user terminal.

  • ibr_k (IntArray, shape (Nr,)) – The information bit rate for each data stream of this user terminal.

Returns:

b_k_hat – The list of reconstructed bitstreams of this user terminal.

Return type:

BitArray, shape (Ns_k, ibr_k[s] * M)

class NeutralDemapper[source]

Bases: Demapper

Neutral Demapper.

Acts as a ‘neutral element’ for demapping.It simply converts the constellation point indices into a bitstream by interpreting the indices of the constellation points as bits, without applying any demodulation scheme. So in practice, the constellation point indices pass through the demapper without any change.

static apply(cpi_k_hat: ndarray[tuple[Any, ...], dtype[integer]], ibr_k: ndarray[tuple[Any, ...], dtype[integer]]) list[ndarray[tuple[Any, ...], dtype[integer]]][source]

Apply the demapper operation to the reconstructed symbol streams.

For each data stream of this user terminal, the demapper converts the reconstructed data symbol stream into a bitstream, based to the used modulation scheme (constellation typpe and sizes) and the constellation point indices of the reconstructed data symbols.

Parameters:
  • cpi_k_hat (IntArray, shape (Ns_k, M)) – The indices of the constellation points (decimal integers) corresponding to the reconstructed data symbols, for each data stream of this user terminal.

  • ibr_k (IntArray, shape (Nr,)) – The information bit rate for each data stream of this user terminal.

Returns:

b_k_hat – The list of reconstructed bitstreams of this user terminal.

Return type:

BitArray, shape (Ns_k, ibr_k[s] * M)

class GrayCodeDemapper[source]

Bases: Demapper

Gray Code Demapper.

static apply(cpi_k_hat: ndarray[tuple[Any, ...], dtype[integer]], ibr_k: ndarray[tuple[Any, ...], dtype[integer]]) list[ndarray[tuple[Any, ...], dtype[integer]]][source]

Apply the demapper operation to the reconstructed symbol streams.

For each data stream of this user terminal, the demapper converts the reconstructed data symbol stream into a bitstream, based to the used modulation scheme (constellation typpe and sizes) and the constellation point indices of the reconstructed data symbols.

Parameters:
  • cpi_k_hat (IntArray, shape (Ns_k, M)) – The indices of the constellation points (decimal integers) corresponding to the reconstructed data symbols, for each data stream of this user terminal.

  • ibr_k (IntArray, shape (Nr,)) – The information bit rate for each data stream of this user terminal.

Returns:

b_k_hat – The list of reconstructed bitstreams of this user terminal.

Return type:

BitArray, shape (Ns_k, ibr_k[s] * M)