5G/NR - PUSCH Transmission Mode                                           Home : www.sharetechnote.com





PUSCH Tansmission Mode/Transmission Scheme



There are roughly three different types of UL transmission scheme : not-configured, codebook based and non-codebook based. This scheme is determined by a RRC paramter txConfig.





Determination of W matrix


Basically PUSCH transmission mode is a parameter that determines Precoding matrix during the PUSCH channel processing(See here for the Precoding step in the whole PUSCH transport process) and the transmission mode is determined by several factors in RRC as shown below. Simply put, this is all about determining W matrix in following equation.



According to 38.211 -, we can determine W matrix as follows.



Case 1 : txConfig in RRC = Non-codebook

    W = Identity Matrix


Case 2 : txConfig in RRC = codebook

    When number of layer = 1, number of antenna port = 1

      W = 1


    When number of layer >= 2 and number of antenna port >=2 (See Codebook based transmission for details)


The Precoding matrix is determined by the number of layers and physical antenna, and Transform Precoding as summarized below.


Number of Layers

Number of Antenna

Transform Precoding

Precoding Matrix
































Case 3 : txConfig in RRC : Not configured

    W = 1




NonCodebook based Transmission  


In this mode, UE calculate Precoder matrix as follows (based on 38.214-

    i) figure out "SRS Resource Indicator" in DCI and srs-ResourceIndicator in RRC if configured

    ii) figure out wideband SRI based on step i)

    iii) figure out transmission rank and PUSCH Precoder




Codebook based Transmission


In this mode, the precoding matrix is determined as follows (based on 38.214-

    i) figure out "SRS resource indicator(SRI)" and "Precoding information(TMPI) and number of layers" in DCI 0_1  

    ii) figure out following settings

      • Codebook Subset(PUSCH-Config.codebookSubset)
      • Number of Antenna Ports
      • PUSCH Transform Precoding(PUSCH-Config.transformPrecoder)
      • PUSCH Max Rank (PUSCH-Config.maxRank)
      • DMRS Config Type (DMRS-UplinkConfig.dmrs-Type)
      • UL PTRS Configuration (PUSCH-Config.DMRS-UplinkConfig.PTRS-UplinkConfig)

    iii) Select a specific TPMI table using all the information from step i) and ii), and the mapping tables summarized as below.

    iv) Figure out TPMI from the selected table 


NOTE : When the UE is configured with the higher layer parameter txConfig set to 'codebook', the UE is configured with at least one SRS resource




UE capability report vs applicable codebookSubset


Depending on UE capability, there are restrictions on the type of applicable codebookSubset as specified in 38.214-

  • When UE capability report 'partialAndNonCoherent',  'fullyAndPartialAndNonCoherent' cannot be used. '
  • When UE capability report 'NonCoherent', fullyAndPartialAndNonCoherent' or with 'partialAndNonCoherent' cannot be used  




Number of  configurable SRS


The number of SRS that can be configured is described as follows in 38.214- and


For codebook based (38.214-

  • A UE shall not expect to be configured with the higher layer parameter codebookSubset set to 'partialAndNonCoherent' when higher layer parameter nrofSRS-Ports in an SRS-ResourceSet with usage set to 'codebook' indicates that two SRS antenna ports are configured.
  • For codebook based transmission, the UE may be configured with a single SRS-ResourceSet set to 'codebook' and onlyone SRS resource can be indicated based on the SRI from within the SRS resource set. The maximum number of configured SRS resources for codebook based transmission is 2. If aperiodic SRS is configured for a UE, the SRS request field in DCI triggers the transmission of aperiodidc SRS resources.
  • When multiple SRS resources are configured by SRS-ResourceSet with usage set to 'codebook', the UE shall expect that higher layer parameters nrofSRS-Ports in SRS-Resource in SRS-ResourceSet shall be configured with the same value for all these SRS resources.


For non-codebook based (38.214-

  • The UE shall use one or multiple SRS resources for SRS transmission, where the number of SRS resources which can be configured to the UE for simultaneously transmission in the same RBs is a UE capability. Only one SRS port for each SRS resource is configured. Only one SRS resource set can be configured with higher layer parameter usage in SRS-ResourceSet set to 'nonCodebook'. The maximum number of SRS resources that can be configured for non-codebook based uplink transmission is 4




txConfig and DCI type


According to 38.214-6.1.1, there is some relationship between applicable DCI 0_x type and txConfig as summarized below.

  • When txConfig is not configured, only DCI 0_0 can be used (6.1.1).
  • When txConfig is configured, DCI format 0_0, DCI format 0_1 or semi-static configuration can be used (,
  • If DCI 0_0 is used, PUSCH transmission is based on single antenna port(6.1.1)
  • In FR2, DCI 0_0 cannot be used in a component carrier without configured PUCCH resource with PUCCH-SpatialRelationInfo(6.1.1)




RRC Parameters



38.331 15.3 (2018-10)



    dataScramblingIdentityPUSCH                 INTEGER (0..1023) OPTIONAL,

    txConfig                                    ENUMERATED {codebook, nonCodebook}

    dmrs-UplinkForPUSCH-MappingTypeA            SetupRelease { DMRS-UplinkConfig }

    dmrs-UplinkForPUSCH-MappingTypeB            SetupRelease { DMRS-UplinkConfig }

    pusch-PowerControl                          PUSCH-PowerControl

    frequencyHopping                            ENUMERATED {intraSlot, interSlot}

    frequencyHoppingOffsetLists                 SEQUENCE (SIZE (1..4)) OF

                                                     INTEGER (1.. maxNrofPhysicalResourceBlocks-1)

    resourceAllocation                          ENUMERATED { resourceAllocationType0,



    pusch-TimeDomainAllocationList              SetupRelease {



    pusch-AggregationFactor                     ENUMERATED { n2, n4, n8 }

    mcs-Table                                   ENUMERATED {qam256, qam64LowSE}

    mcs-TableTransformPrecoder                  ENUMERATED {qam256, qam64LowSE}

    transformPrecoder                         ENUMERATED {enabled, disabled}

    codebookSubset                              ENUMERATED {fullyAndPartialAndNonCoherent,



    maxRank                                     INTEGER (1..4)

    rbg-Size                                    ENUMERATED { config2}

    uci-OnPUSCH                                 SetupRelease { UCI-OnPUSCH }

    tp-pi2BPSK                                  ENUMERATED {enabled}





    betaOffsets CHOICE {

        dynamic                                 SEQUENCE (SIZE (4)) OF BetaOffsets,

        semiStatic                              BetaOffsets

    } OPTIONAL, -- Need M

    scaling                                     ENUMERATED { f0p5, f0p65, f0p8, f1 }




SRS-Config ::= SEQUENCE {

   srs-ResourceSetToReleaseList        SEQUENCE (SIZE(1..maxNrofSRS-ResourceSets))

                                          OF SRS-ResourceSetId OPTIONAL, -- Need N

   srs-ResourceSetToAddModList         SEQUENCE (SIZE(1..maxNrofSRS-ResourceSets))

                                          OF SRS-ResourceSet OPTIONAL, -- Need N

   srs-ResourceToReleaseList           SEQUENCE (SIZE(1..maxNrofSRS-Resources))

                                          OF SRS-ResourceId OPTIONAL, -- Need N

   srs-ResourceToAddModList            SEQUENCE (SIZE(1..maxNrofSRS-Resources))

                                          OF SRS-Resource OPTIONAL, -- Need N

   tpc-Accumulation                    ENUMERATED {disabled} OPTIONAL, -- Need S





SRS-ResourceSet ::= SEQUENCE {

   srs-ResourceSetId          SRS-ResourceSetId,

   srs-ResourceIdList         SEQUENCE (SIZE(1..maxNrofSRS-ResourcesPerSet))

                                  OF SRS-ResourceId OPTIONAL, -- Cond Setup

   resourceType CHOICE {

      aperiodic SEQUENCE {

         aperiodicSRS-ResourceTrigger        INTEGER (1..maxNrofSRS-TriggerStates-1),

         csi-RS                              NZP-CSI-RS-ResourceId OPTIONAL, -- Cond NonCodebook

         slotOffset                          INTEGER (1..32) OPTIONAL, -- Need S



         aperiodicSRS-ResourceTriggerList-v1530     SEQUENCE (SIZE(1..maxNrofSRS-TriggerStates-2))

                                                       OF INTEGER (1..maxNrofSRS-TriggerStates-1)



      semi-persistent SEQUENCE {

         associatedCSI-RS                    NZP-CSI-RS-ResourceId OPTIONAL, -- Cond NonCodebook



      periodic SEQUENCE {

         associatedCSI-RS                    NZP-CSI-RS-ResourceId OPTIONAL, -- Cond NonCodebook




   usage                   ENUMERATED {beamManagement, codebook, nonCodebook, antennaSwitching},

   alpha                   Alpha OPTIONAL, -- Need S

   p0                      INTEGER (-202..24) OPTIONAL, -- Cond Setup

   pathlossReferenceRS CHOICE {

      ssb-Index            SSB-Index,

      csi-RS-Index         NZP-CSI-RS-ResourceId

   } OPTIONAL, -- Need M

   srs-PowerControlAdjustmentStates        ENUMERATED { sameAsFci2, separateClosedLoop} OPTIONAL,





SRS-ResourceSetId ::= INTEGER (0..maxNrofSRS-ResourceSets-1)


SRS-Resource ::= SEQUENCE {

   srs-ResourceId               SRS-ResourceId,

   nrofSRS-Ports                ENUMERATED {port1, ports2, ports4},

   ptrs-PortIndex               ENUMERATED {n0, n1 } OPTIONAL, -- Need R

   transmissionComb    CHOICE {

      n2 SEQUENCE {

         combOffset-n2          INTEGER (0..1),

         cyclicShift-n2         INTEGER (0..7)


      n4 SEQUENCE {

         combOffset-n4          INTEGER (0..3),

         cyclicShift-n4         INTEGER (0..11)



   resourceMapping     SEQUENCE {

      startPosition             INTEGER (0..5),

      nrofSymbols               ENUMERATED {n1, n2, n4},

      repetitionFactor          ENUMERATED {n1, n2, n4}


   freqDomainPosition           INTEGER (0..67),

   freqDomainShift              INTEGER (0..268),

      c-SRS                     INTEGER (0..63),

      b-SRS                     INTEGER (0..3),

      b-hop                     INTEGER (0..3)


   groupOrSequenceHopping       ENUMERATED { neither, groupHopping, sequenceHopping },

   resourceType CHOICE {

      aperiodic SEQUENCE {



      semi-persistent SEQUENCE {

         periodicityAndOffset-sp         SRS-PeriodicityAndOffset,



      periodic SEQUENCE {

         periodicityAndOffset-p          SRS-PeriodicityAndOffset,




   sequenceId INTEGER (0..1023),

   spatialRelationInfo                   SRS-SpatialRelationInfo OPTIONAL, -- Need R




SRS-SpatialRelationInfo ::= SEQUENCE {

   servingCellId                   ServCellIndex OPTIONAL, -- Need S

   referenceSignal CHOICE {

      ssb-Index                    SSB-Index,

      csi-RS-Index                 NZP-CSI-RS-ResourceId,

      srs SEQUENCE {

         resourceId                SRS-ResourceId,

         uplinkBWP                 BWP-Id





SRS-ResourceId ::= INTEGER (0..maxNrofSRS-Resources-1)


SRS-PeriodicityAndOffset ::= CHOICE {

   sl1 NULL,

   sl2 INTEGER(0..1),

   sl4 INTEGER(0..3),

   sl5 INTEGER(0..4),

   sl8 INTEGER(0..7),

   sl10 INTEGER(0..9),

   sl16 INTEGER(0..15),

   sl20 INTEGER(0..19),

   sl32 INTEGER(0..31),

   sl40 INTEGER(0..39),

   sl64 INTEGER(0..63),

   sl80 INTEGER(0..79),

   sl160 INTEGER(0..159),

   sl320 INTEGER(0..319),

   sl640 INTEGER(0..639),

   sl1280 INTEGER(0..1279),

   sl2560 INTEGER(0..2559)




ConfiguredGrantConfig ::= SEQUENCE {

    frequencyHopping                 ENUMERATED {intraSlot, interSlot},

    cg-DMRS-Configuration            DMRS-UplinkConfig,

    mcs-Table                        ENUMERATED {qam256, qam64LowSE},

    mcs-TableTransformPrecoder       ENUMERATED {qam256, qam64LowSE},

    uci-OnPUSCH                      SetupRelease { CG-UCI-OnPUSCH },

    resourceAllocation               ENUMERATED { resourceAllocationType0,


                                                  dynamicSwitch },

    rbg-Size                         ENUMERATED {config2},

    powerControlLoopToUse            ENUMERATED {n0, n1},

    p0-PUSCH-Alpha                   P0-PUSCH-AlphaSetId,

    transformPrecoder                ENUMERATED {enabled, disabled},

    nrofHARQ-Processes               INTEGER(1..16),

    repK                             ENUMERATED {n1, n2, n4, n8},

    repK-RV                          ENUMERATED {s1-0231, s2-0303, s3-0000},

    periodicity                      ENUMERATED {

                                            sym2, sym7, sym1x14, sym2x14, sym4x14, sym5x14,

                                            sym8x14, sym10x14, sym16x14, sym20x14,sym32x14,

                                            sym40x14, sym64x14, sym80x14, sym128x14, sym160x14,

                                            sym256x14, sym320x14, sym512x14,sym640x14, sym1024x14,

                                            sym1280x14, sym2560x14, sym5120x14, sym6, sym1x12,

                                            sym2x12, sym4x12, sym5x12,sym8x12,sym10x12,sym16x12,

                                            sym20x12, sym32x12,sym40x12, sym64x12, sym80x12,

                                            sym128x12, sym160x12, sym256x12, sym320x12, sym512x12,

                                            sym640x12,sym1280x12, sym2560x12


    configuredGrantTimer             INTEGER (1..64),

    rrc-ConfiguredUplinkGrant        SEQUENCE {

        timeDomainOffset                 INTEGER (0..5119),

        timeDomainAllocation             INTEGER (0..15),

        frequencyDomainAllocation        BIT STRING (SIZE(18)),

        antennaPort                      INTEGER (0..31),

        dmrs-SeqInitialization           INTEGER (0..1),

        precodingAndNumberOfLayers       INTEGER (0..63),

        srs-ResourceIndicator            INTEGER (0..15),

        mcsAndTBS                        INTEGER (0..31),

        frequencyHoppingOffset           INTEGER (1.. maxNrofPhysicalResourceBlocks-1),

        pathlossReferenceIndex           INTEGER (0..maxNrofPUSCH-PathlossReferenceRSs-1),











< 38.211 v15.5 - Table Precoding matrix W for single-layer transmission using two antenna ports. >



< 38.211 v15.5 - Table Precoding matrix W for single-layer transmission using four antenna ports with transform precoding enabled. >



< 38.211 v15.5 - Table Precoding matrix W for single-layer transmission using four antenna ports with transform precoding disabled. >



< 38.211 v15.5 - Table Precoding matrix W for two-layer transmission using two antenna ports with transform precoding disabled. >



< 38.211 v15.5 - Table Precoding matrix W for two-layer transmission using four antenna ports with transform precoding disabled. >



< 38.211 v15.5 - Table Precoding matrix W for three-layer transmission using four antenna ports with transform precoding disabled. >



< 38.211 v15.5 - Table Precoding matrix W for four-layer transmission using four antenna ports with transform precoding disabled. >






[1] 5G NR Physical Layer | Chapter 12| Uplink Transmission Schemes | Codebook & Non-Codebook Based

[2] Ericsson 5G New Radio (NR) MIMO Key Features