Apply Channel to Transmitted Signal

Forward error correction is used in 5G for correction of bits in error. 5G supports primarily three channel coders:

class toolkit5G.ChannelProcessing.ApplyChannel(isFrequencyDomain=True, enableInterTxInterference=False, memoryConsumptionLevel=0)[source]

This module implements the API to pass the beamformed signal/OFDM-grid (X) though the wireless channel H for a multicell MIMO system. The implementation supports both time and frequency domain processing (i.e. X and H can be both be either time domain or frequency domain reperesentation of transmit signal and wireless channel).

Parameters:
  • isFrequencyDomain (bool) – Set to True if the inputs are Frequency Domain (OFDM) vector/Matrices.

  • enableInterTxInterference (bool) – Set to True if the inter-transmitter interference to be considered while passing the input through the channel.

  • memoryConsumptionLevel (int) – This integer variable in {0,1,2,3,4} is used to find the trade-off between memory consumption and speed. If memoryConsumptionLevel=0, ==> Fastest implementation but most memory intensive! If memoryConsumptionLevel=4, ==> Slowest implementation but least memory intensive!

Input:
  • H (NumPy array, np.complex) – Represents the Channel Matrix. It has 8 dimensions namely (numBatches, numFrequencies, numSymbols(numSnapshots), numBSs, numUEs, numSamples/numFFTpoints, numRxAntennas, numTxAntennas).

  • X (Numpy array,np.complex) – Represents the transmission Grid. It has 6 dimensions namely (numBatches, numFrequencies, numSymbols(numSnapshots), numBSs, numSamples/numFFTpoints, numTxAntenna).

Notes

H and X can be either Time domain or Frequency Domain, for time domain “numSamples” is used and for frequency domain “numFFTPoints” is used. when Time Domain the numSymbols must be Equal to 1.

Output:

(shape) NumPy array, np.complex – Received Grid when Channel is applied onto the transmission Grid. It has 6 dimensions namely (numBatches, numFrequencies, numSymbols(numSnapshots), numUEs, numSamples/numFFTpoints, numRxAntennas)

Raises:
  • ValueError – “[ApplyChannel-Error]: ‘H’ must be a NumPy array of complex number!”

  • ValueError – “[ApplyChannel-Error]: ‘H’ must be a 8 dimensions= (numBatches, numFrequencies, numSymbols(numSnapshots), numBSs, numSamples/numFFTpoints, numRxAntennas, numTxAntennas)”

  • ValueError – “[[ApplyChannel-Error]: ‘X’ must be a NumPy array of complex number!”

  • ValueError – “[ApplyChannel-Error]: ‘X’ must be a 6 dimensions = (numBatches, numFrequencies, numSymbols(numSnapshots), numBSs,numSamples/numFFTpoints,numTxAntennas)”

  • ValueError – “[ApplyChannel-Error]: ‘H’ time-varying channel is not supported when ‘isFrequencyDomain’ is ‘False’”

  • ValueError – “[Error-ApplyChannel]: The ‘number of batches’ in ‘H’ and ‘X’ are inconsistent!”

  • ValueError – “[Error-ApplyChannel]: The ‘numFrequencies’ in ‘H’ and ‘X’ are inconsistent!”

  • ValueError – “[Error-ApplyChannel]: The ‘numBSs’ in ‘H’ and ‘X’ are inconsistent!”

  • ValueError – “[Error-ApplyChannel]: ‘memoryConsumptionLevel’ must be integer!”

  • ValueError – “[Error-ApplyChannel]: ‘memoryConsumptionLevel’ can take values only from interval {0,1,2,3,4}!”

  • ValueError – “[Error-ApplyChannel]: ‘enableInterTxInterference’ must be bool!”

  • ValueError – [Error-ApplyChannel]: ‘isFrequencyDomain’ must be bool!

property enableInterTxInterference

Set to True if the inter-transmitter interference to be considered while passing the input through the channel.

property isFrequencyDomain

Set to True if the inputs are Frequency Domain (OFDM) vector/Matrices.

property memoryConsumptionLevel

This integer variable in {0,1,2,3,4} is used to find the trade-off between memory consumption and speed. If memoryConsumptionLevel=0, ==> Fastest implementation but most memory intensive! If memoryConsumptionLevel=4, ==> Slowest implementation but least memory intensive!