PDSCH Upper Phy Configurations

The PDSCH Upper Phy Configuration class receives any existing parameters for PDSCH upper Phy chain, based on which the rest of the parameters required to invoke PDSCH Upper Phy chain are generated as per 3GPP standards.


The Upper Phy config can be called with no arguments or all the parameters set to none, causing the class to generate all the parameters from scratch as shown below.

pdschParamGen = PDSCHUpperPhyConfiguration(verbose = True)
******** PDSCH Parameters *********

       pdschMappingType: PDSCH-mapping-type-B
            startSymbol: 9
             numSymbols: 4
               betaDMRS: 1
                   rank: 8
      configurationType: Configuration-type-2
              maxLength: len1
      dmrsTypeAPosition: pos2
 dmrsAdditionalPosition: pos2
           Duration, ld: 4
       Start symbol, l0: 9
     Start symbol-1, l1: 11
          num of Layers: 8

****************************************
****************************************
 number of Layer-0: 4
   numTargetBits-1: 30672
 number of Layer-0: 4
   numTargetBits-2: 30672
          tbsize-1: 9480
          tbsize-2: 9480

            numTBs: 2
            numCBs: 2
         numLayers: 8 | LayerperTB: [4 4]
             numRB: 213
          coderate: 0.306640625
          modOrder: 1
additionalOverhead: 0
numberTargetBits: 61344
****************************************

It can also be called with certain parameters already assigned around which the unassigned parameters are built.

numTBs   = 2
numRB    = 216
rank     = 6
mcsTable = 'pdschTable2'

pdschParamGen = PDSCHUpperPhyConfiguration(numTBs = numTBs, numRB=numRB ,rank = rank, mcsTable = mcsTable, verbose = True )
******** PDSCH Parameters *********

       pdschMappingType: PDSCH-mapping-type-B
            startSymbol: 0
             numSymbols: 4
               betaDMRS: 1
                   rank: 6
      configurationType: Configuration-type-1
              maxLength: len1
      dmrsTypeAPosition: pos3
 dmrsAdditionalPosition: pos1
           Duration, ld: 4
       Start symbol, l0: 0
     Start symbol-1, l1: 11
          num of Layers: 6

****************************************
****************************************
 number of Layer-0: 3
   numTargetBits-1: 186624
 number of Layer-0: 3
   numTargetBits-2: 186624
          tbsize-1: 129128
          tbsize-2: 129128

            numTBs: 2
            numCBs: 16
         numLayers: 6 | LayerperTB: [3 3]
             numRB: 216
          coderate: 0.6943359375
          modOrder: 8
additionalOverhead: 0
numberTargetBits: 373248
****************************************

Tip

The Upper Phy config class calls Lower phy config within it.


class toolkit5G.Configurations.PDSCHUpperPhyConfiguration(pdschMappingType=None, configurationType=None, dmrsTypeAPosition=None, maxLength=None, dmrsAdditionalPosition=None, l0=None, ld=None, l1=None, startSymbol=None, numSymbols=None, rank=None, scalingField=None, mcsTable=None, mcsIndex=None, additionalOverhead=None, numTBs=None, numRB=None, verbose=True)[source]

To accept existing Upper Phy parameters and Generate the rest of parameters required to invoke the PDSCH upper Phy Chain

Parameters:
  • pdschMappingType (str) – Defines PDSCH mapping type \(\in \{\) ‘PDSCH-mapping-type-A’, ‘PDSCH-mapping-type-B’ \(\}\).

  • configurationType (str) – Defines configuration type for PDSCH \(\in \{\) ‘Configuration-type-1’, ‘Configuration-type-2’ \(\}\).

  • dmrsTypeAPosition (str) – Defines dmrsTypeAPosition parameter of PDSCH-DMRS \(\in \{\) ‘pos2’, ‘pos3’ \(\}\).

  • maxLength (int) – Defines the maxLength parameter of PDSCH-DMRS \(\in \{\) ‘len1’, ‘len2’ \(\}\).

  • dmrsAdditionalPosition (str) – Defines dmrsTypeAPosition parameter of PDSCH-DMRS \(\in \{\) “pos0”, “pos1”, “pos2”, “pos3” \(\}\).

  • l0 (int) – Defines \(l_0\) parameter of PDSCH-DMRS \(\in \{1, 2, 3, 4, 5, 6\}\).

  • ld (int) – Defines \(l_d\) parameter of PDSCH-DMRS. It takes values \(\in \{2,3,4,5,6,7,8,9,10,11,12,13\}\) based on pdschMappingType and maxLength.

  • l1 (int) – Defines \(l_1\) parameter of PDSCH-DMRS \(\in \{11, 12\}\). Default value is 11.

  • pdschStartSymbol (int) – Defines the first symbols from where PDSCH is supported to be loaded.

  • numSymbols (int) – Defines the number of PDSCH symbols that are to be transmitted.

  • rank (int) – Defines rank/num of layers/streams to be transmitted. It must match number of ports \(\in \{1,2,\dots,8\}`for 'Configuration-type-1' and :math:\)in {1,2,dots,12}` for ‘Configuration-type-2’.

  • scalingField (int) – Transport Block Scaling Field. It accepts a string. Valid Strings are ‘00’, ‘01’, ‘10’.

  • mcsTable (str) – The Lookup table to be used for the selection of Modulation Order and code Rate It can take the strings ‘pdschTable1’, ‘pdschTable2’, ‘pdschTable3’, ‘pdschTable4’, ‘puschTable1’, ‘puschTable2’ ,’cqiTable1’, ‘cqiTable2’, ‘cqiTable3’, ‘cqiTable4’

  • .. Note:: – The chain uses the argument name pdschTable while config returns the argument name mcsTable. Check correctly to maintain consistency

  • mcsIndex (str) – Refers to the Modulation and Coding Scheme (MCS) Index. It takes Either a Scalar or a numpy array based on the argument passed as pdschTable

    -If pdschTable is passed as none, mcsIndex expects a numpy array of [modulation order, code Rate]

    -If pdschTable argument is passed , Based on it the following Table lowerbound and upperbound for mcs Index is followed

    Table

    LowerBound

    Upperbound

    PDSCH Table 1

    0

    28

    PDSCH Table 2

    0

    27

    PDSCH Table 3

    0

    28

    PDSCH Table 4

    0

    26

    PUSCH Table 1

    0

    27

    PUSCH Table 2

    0

    27

    CQI Table 1

    1

    15

    CQI Table 2

    1

    15

    CQI Table 3

    1

    15

    CQI Table 4

    1

    15

  • additionalOverhead (int) – Additional Overheads that results in reduced number of available Resource Elements for data transfer. It takes a scalar or numpy integer.Valid values are 0, 6, 12 or 18.

  • numTBs (int) – The Physical layer processes either 1 or 2 Transport Blocks for each resource allocation. So it represents number of Transport Blocks to be processed.

  • numRB (int) – Number of Physical Resource Blocks allocated. It takes a positive scalar or numpy integer.