5G/NR - PUSCH Transmission Mode

 

 

 

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.

Parameters for Transmission Mode Determination

Followings are the major factors (configuration) to determine the PUSCH Transmission Mode and Precoding Matrix. Depending on the combinations (permutations) of these parameters, a specific transmission mode/precoding matrix is determined, but the detailed procedure is pretty complicated (confusing to me). Basically most of this page is all about how a specific transmission mode/precoding matrix is determined by combination of these three parameters.

Good thing would be that the precoding matrix is always 1 when the number of layer is 1 and the number of antenna port is also 1. I think (hope) the number of UL layer would ramain as 1 for a long time -:).

The port count is the part to watch. A single layer on two antenna ports still picks one of the six matrices in Table 6.3.1.5-1, and a single layer on four ports picks one of twenty eight. Rank 1 removes the choice of how many streams to send, and it does not remove the choice of how to weight them across the ports.

decoded pusch-Config showing txConfig, codebookSubset and maxRank with their permitted values

  • txConfig is the switch : its two values, codebook and nonCodebook, choose which of the two schemes on this page applies, and leaving it out chooses the third.
  • Two of the three are conditional : the figure marks codebookSubset and maxRank as OPTIONAL, -- Cond codebookBased, so neither is present unless txConfig says codebook.
  • codebookSubset narrows the table, maxRank narrows the layer count : together they decide how much of a codebook a given UE is allowed to be sent.
  • The three sit inside pusch-Config : the figure shows them under initialUplinkBWP, so they are configured per bandwidth part rather than per cell.

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.

precoding equation mapping the layer vector through W onto the antenna port vector

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

Case 1 : txConfig in RRC = Non-codebook

This is the one case where 38.211 gives W without sending you to a table. The rule is a single line, and the note below it records why that line reads oddly. One thing to hold on to while reading both: this W is the matrix applied at the precoding step of 38.211, and that step is not the only place a precoder can enter the transmission.

    W = Identity Matrix

 

NOTE : This is a little bit confusing to me. 38.211-6.3.1.5 says "For non-codebook-based transmission, the precoding matrix , equals the identity matrix.". This sounds like 'No precoding' to me. But this reference (5G NR Physical Layer | Chapter 12| Uplink Transmission Schemes | Codebook & Non-Codebook Based) says 'Even in non-codebook based transmission, precoding DO happens, but the precoding matrix is created by UE algorithm based on CSI-RS based channel estimation, not picking up a matrix from a predefined list of codebook'. To me, the YouTube reference make more sense, but not sure exactly what 3GPP implies.

Case 2 : txConfig in RRC = codebook

This is the branch where a table is actually consulted. The network sends a TPMI, the UE looks it up in one of the seven tables at the foot of this page, and the matrix it finds there is W. Which table applies is decided by three things, and the summary below the diagram lists them.

    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)

      precoding matrix selected by the precoding information and number of layers field in DCI 0_1, listing 38.211 Tables 6.3.1.5-1 to 6.3.1.5-7

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

1

2

 

Table 6.3.1.5-1

1

4

enabled

Table 6.3.1.5-2

1

4

disabled

Table 6.3.1.5-3

2

2

disabled

Table 6.3.1.5-4

2

4

disabled

Table 6.3.1.5-5

3

4

disabled

Table 6.3.1.5-6

4

4

disabled

Table 6.3.1.5-7

Case 3 : txConfig in RRC : Not configured

Leaving txConfig out is not the same as setting it to either value. The UE falls back to a single antenna port, so there is nothing to weight and no table to consult. This is the state a UE is in before the network has configured PUSCH at all, which is why DCI 0_0 is the only format that works here.

    W = 1

NonCodebook based Transmission  

Non-codebook based UL transmission in mobile communication refers to a method where the UE determines its transmission strategy without relying on a predefined codebook. The precoder is determined directly from measurements by the UE rather than from an indicated codebook/TPMI index. In this mode, UE calculate Precoder matrix as follows (based on 38.214-6.1.1.2)

    i) figure out "SRS Resource Indicator" in DCI_0_0DCI 0_1 and semistatically ( srs-ResourceIndicator in RRC if configured)

    • the UE determines the precoder(s) and rank based on one or two SRI fields in the DCI.
    • These point to one or two SRS resources Sets configured by higher layers.
    • Only one SRS port per SRS resource can be configured.

    ii) figure out wideband SRI based on step i)

    iii) figure out transmission rank and PUSCH Precoder

    • The UE can calculate the SRS precoder based on measurements of an associated NZP CSI-RS resource:
      • For aperiodic SRS, the NZP CSI-RS is indicated in the SRS request field of the DCI. The association between SRS Resource Sets and NZP CSI-RS resources is configured by higher layers.
      • For periodic/semi-persistent SRS, the associated NZP CSI-RS resource is configured by higher layers.
      • The UE calculates the precoder for SRS transmission based on the measurement of an associated NZP CSI-RS resource.
      • Different configurations (aperiodic, periodic, semi-persistent) dictate how the NZP-CSI-RS resources and SRS resource sets are associated and triggered
    • The UE maps the SRI(s) to DM-RS ports in increasing order and transmits the PUSCH using the same antenna ports as the indicated SRS resources. The UE maps SRIs to DM-RS ports and corresponding PUSCH layers, transmitting PUSCH using the same antenna ports as the SRS ports indicated by SRIs.

Codebook based Transmission

Codebook-based UL transmission in mobile communications involves a method where the UE determines its transmission strategy using a predefined set of precoding vectors, known as a codebook. Codebook based UL transmission relies on an indicated SRS resource to determine the codebook, and TPMI values to indicate which precoder to use from that codebook for the transmission. The number of layers is also indicated. In this mode, the precoding matrix is determined as follows (based on 38.214-6.1.1.1).

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

    ii) figure out following settings

    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 (Further details are as follows)

    • Codebook Subsets:
      • The UE determines its codebook subsets based on TPMIs and the reception of the higher layer parameter codebookSubset in pusch-Config.
    • Transmission Rank and Power Transmission:
      • The maximum transmission rank may be set by the higher layer parameter maxRank in pusch-Config.
      • Different configurations and UE capabilities influence whether the transmission is fullyAndPartialAndNonCoherent, partialAndNonCoherent, or nonCoherent.
    • Antenna Port Usage:
      • The UE transmits PUSCH using the same antenna ports as the SRS ports indicated in the DCI format or configuredGrantConfig as per 38.214-6.1.2.3.
    • DM-RS Antenna Ports:
      • The DM-RS antenna ports are determined according to the ordering of DM-RS ports in 38.212.

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

Codebook vs Non-Codebook based Transmission

The two schemes answer the same question from opposite ends. Codebook based transmission has the gNB choose the precoder and tell the UE which one it picked. Non-codebook based transmission has the UE choose, from its own measurement of a downlink reference signal, and the gNB only confirms the choice by pointing at an SRS resource.

Following is a comparative table between Codebook vs Non-Codebook based UL Transmission

Parameter

Codebook Based

Non-Codebook Based

Precoder Determination

Based on SRS-ResourceSet configuration which determines codebook, and indicated TPMI index choosing precoder from codebook

Based on measurements of indicated SRS/CSI-RS resources

Scheduling Options

DCI formats 0_0, 0_1, 0_2 or semi-static configuration

DCI formats 0_0, 0_1, 0_2 or semi-static configuration

Rank Determination

Indicated in number of layers field in DCI

Determined from measurements by UE

Number of Configured SRS Resources

Up to 2 (4 in fullpowerMode2)

Up to 4

DCI Contents

SRS Resource Indicator (SRI) and Precoding and Number of Layers (TPMI + rank)

SRS Resource Indicator (SRI) only

UE Processing

Applies configured codebook subset; uses TPMI to select precoder

Calculates precoder from measurements

Transmission Ports

Same ports as indicated SRS resource

Same ports as indicated SRS resource

Codebook Configuration

Codebook subset configuration based on UE capabilities

No codebook configuration

CSI-RS Association

Periodic/semi-persistent SRS associated with configured NZP CSI-RS

Aperiodic SRS associated with triggered NZP CSI-RS, periodic/semi-persistent SRS associated with configured NZP CSI-RS

UE capability report vs applicable codebookSubset

A codebook subset is a restriction, not a feature. The three values name how coherently the UE can drive its own transmit chains. A UE that cannot hold a stable phase relationship between two power amplifiers must not be handed a precoder that assumes one. The network therefore has to keep its configuration inside what the UE reported.

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

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

The reason for the restriction is visible in the codebook itself. Look at Table 6.3.1.5-1, which holds the six matrices for one layer on two ports. The first two are 1/√2 [1;0] and 1/√2 [0;1], and each of them drives one port and leaves the other silent. The remaining four drive both ports at once, with a relative phase of 1, −1, j or −j.

Driving both ports with a fixed relative phase only works if the UE can hold that phase between two separate power amplifiers. A UE that cannot is a nonCoherent UE, and the only entries it can honour are the first two. The three enumeration values name nested sets for that reason, and the names say so: fullyAndPartialAndNonCoherent contains partialAndNonCoherent, which contains nonCoherent.

The restriction therefore runs one way. A UE may always be configured with a subset smaller than it reported, because a coherent UE can still transmit on one port at a time. It must never be configured with a larger one, because the matrices in the larger set assume hardware the UE does not have.

  • The three values are nested, not parallel : each one contains the ones named after it, which is why the rule reads as a ceiling rather than a match.
  • Non-coherent means antenna selection : the usable entries are the ones that excite a single port, and Table 6.3.1.5-1 puts those first.
  • The capability is hardware, the configuration is policy : the UE reports what its transmit chains can do, and the network chooses anything at or below it.
  • A wrong configuration is a specification violation : 38.214-6.1.1.1 says the UE shall not expect it, rather than describing what the UE should do about it.

Number of  configurable SRS

The SRS resource count is where the two schemes differ most sharply in configuration. Codebook based transmission needs the gNB to measure one uplink beam and then select from a fixed table, so a small number of resources is enough. Non-codebook based transmission needs the UE to try several candidate precoders, so it needs more.

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

For codebook based (38.214-6.1.1.1)

  •   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 thattwo SRS antenna ports are configured.
  •   For codebook based transmission, the UE may be configured with a single SRS-ResourceSet set to 'codebook' and only one 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-6.1.1.2)

  •   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

The DCI format and the transmission scheme are not independent choices. A DCI carries the fields the scheme needs, so a format without a precoding field cannot schedule a precoded transmission. The rules below are the consequence of that, rather than four separate decisions taken by 3GPP.

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 (6.1.1.1,6.1.1.2)
  •   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)

One pattern runs through all four rules. DCI format 0_0 is the fallback format, and it carries neither an SRS resource indicator nor a precoding information field. A transmission scheduled by it therefore has nothing to select a precoder with, which is why the specification pins it to a single antenna port instead of leaving the matrix undefined.

  • DCI 0_0 cannot carry a precoder : it has no SRI and no precoding information field, so single port is the only transmission it can describe.
  • txConfig absent means DCI 0_0 only : with no scheme configured there is nothing for the larger format to indicate.
  • DCI 0_1 is where both schemes live : it carries the SRI for non-codebook based transmission and the SRI plus TPMI for codebook based.
  • FR2 adds a beam condition : without a PUCCH resource carrying PUCCH-SpatialRelationInfo on the carrier, the UE has no spatial reference to transmit against.

RRC Parameters

Every listing below is quoted from 38.331 v19.3.0 (Release 19). The page previously carried these at v15.3 from October 2018, and the release extension groups added since are the reason several of them are now much longer.

 

Following is based on 38.331 v19.3.0 (Release 19)

PUSCH-Config ::=                        SEQUENCE {
    dataScramblingIdentityPUSCH             INTEGER (0..1023)                                                   OPTIONAL,   -- Need S
    txConfig                                ENUMERATED {codebook, nonCodebook}                                  OPTIONAL,   -- Need S
    dmrs-UplinkForPUSCH-MappingTypeA        SetupRelease { DMRS-UplinkConfig }                                  OPTIONAL,   -- Need M
    dmrs-UplinkForPUSCH-MappingTypeB        SetupRelease { DMRS-UplinkConfig }                                  OPTIONAL,   -- Need M
    pusch-PowerControl                      PUSCH-PowerControl                                                  OPTIONAL,   -- Need M
    frequencyHopping                        ENUMERATED {intraSlot, interSlot}                                   OPTIONAL,   -- Need S
    frequencyHoppingOffsetLists             SEQUENCE (SIZE (1..4)) OF INTEGER (1.. maxNrofPhysicalResourceBlocks-1)
                                                                                                                OPTIONAL,   -- Need M
    resourceAllocation                      ENUMERATED { resourceAllocationType0, resourceAllocationType1, dynamicSwitch},
    pusch-TimeDomainAllocationList          SetupRelease { PUSCH-TimeDomainResourceAllocationList }             OPTIONAL,   -- Need M
    pusch-AggregationFactor                 ENUMERATED { n2, n4, n8 }                                           OPTIONAL,   -- Need S
    mcs-Table                               ENUMERATED {qam256, qam64LowSE}                                     OPTIONAL,   -- Need S
    mcs-TableTransformPrecoder              ENUMERATED {qam256, qam64LowSE}                                     OPTIONAL,   -- Need S
    transformPrecoder                       ENUMERATED {enabled, disabled}                                      OPTIONAL,   -- Need S
    codebookSubset                          ENUMERATED {fullyAndPartialAndNonCoherent, partialAndNonCoherent,nonCoherent}
                                                                                                          OPTIONAL, -- Cond codebookBased
    maxRank                                 INTEGER (1..4)                                                OPTIONAL, -- Cond codebookBased
    rbg-Size                                ENUMERATED { config2}                                         OPTIONAL, -- Need S
    uci-OnPUSCH                             SetupRelease { UCI-OnPUSCH}                                   OPTIONAL, -- Need M
    tp-pi2BPSK                              ENUMERATED {enabled}                                          OPTIONAL, -- Need S
    ...,
    [[
    -- Release 16, the DCI format 0_2 counterparts of the two fields above
    ...
    codebookSubsetDCI-0-2-r16               ENUMERATED {fullyAndPartialAndNonCoherent, partialAndNonCoherent,nonCoherent}
                                                                                                          OPTIONAL,   -- Cond codebookBased
    maxRankDCI-0-2-r16                                      INTEGER (1..4)                                OPTIONAL,   -- Cond codebookBased
    ...
    ul-FullPowerTransmission-r16            ENUMERATED {fullpower, fullpowerMode1, fullpowerMode2}         OPTIONAL,   -- Need R
    ...
    ]],
    [[
    -- Release 17
    ...
    mappingPattern-r17                      ENUMERATED {cyclicMapping, sequentialMapping}                 OPTIONAL,  -- Cond SRSsets
    ...
    ]],
    [[
    -- Release 18, where the uplink rank passes four
    maxRank-v1810                           INTEGER (5..8)                                                 OPTIONAL,  -- Need R
    sTx-2Panel-r18                          ENUMERATED {enabled}                                           OPTIONAL,  -- Need R
    multipanelSchemeSDM-r18                 SDM-Scheme-r18                                                 OPTIONAL,  -- Need R
    multipanelSchemeSFN-r18                 SFN-Scheme-r18                                                 OPTIONAL,  -- Need R
    codebookTypeUL-r18                      SetupRelease { CodebookTypeUL-r18 }                            OPTIONAL,  -- Need M
    ...
    ]],
    [[
    -- Release 19
    ...
    ]]
}

CodebookTypeUL-r18 ::=      CHOICE {
    codebook1-r18               ENUMERATED {ng1n4n1, ng1n2n2},
    codebook2-r18               ENUMERATED {ng2},
    codebook3-r18               ENUMERATED {ng4},
    codebook4-r18               ENUMERATED {ng8}
}

 

Following is based on 38.331 v19.3.0 (Release 19)

UCI-OnPUSCH ::=                         SEQUENCE {
    betaOffsets                             CHOICE {
        dynamic                             SEQUENCE (SIZE (4)) OF BetaOffsets,
        semiStatic                          BetaOffsets
    }                                                                                                 OPTIONAL, -- Need M
    scaling                                 ENUMERATED { f0p5, f0p65, f0p8, f1 }
}

 

Following is based on 38.331 v19.3.0 (Release 19)

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-RequestDCI-1-2-r16                  INTEGER (1..2)                                                          OPTIONAL, -- Need S
    srs-RequestDCI-0-2-r16                  INTEGER (1..2)                                                          OPTIONAL, -- Need S
    srs-ResourceSetToAddModListDCI-0-2-r16  SEQUENCE (SIZE(1..maxNrofSRS-ResourceSets)) OF SRS-ResourceSet          OPTIONAL, -- Need N
    srs-ResourceSetToReleaseListDCI-0-2-r16 SEQUENCE (SIZE(1..maxNrofSRS-ResourceSets)) OF SRS-ResourceSetId        OPTIONAL, -- Need N
    ...                                                                     -- the positioning SRS members are omitted here
    ]],
    [[
    dci-TriggeringPosResourceSetLink-r18    ENUMERATED { enabled }                                                  OPTIONAL  -- Need R
    ]],
    [[
    srs-TwoSeparatePowerControlAdjustmentStates-r19   ENUMERATED {enabled}                                          OPTIONAL, -- Need R
    tpc-OfSRS-ClosedLoopIndexInDCI-1-1-r19            ENUMERATED {enabled}                                          OPTIONAL, -- Need R
    srs-ClosedLoopIndexIndicatorInDCI-1-1-r19         ENUMERATED {enabled}                                          OPTIONAL  -- Need R
    ]]
}

 

Following is based on 38.331 v19.3.0 (Release 19)

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            SEQUENCE (SIZE(1..maxNrofSRS-TriggerStates-2))
                                                            OF INTEGER (1..maxNrofSRS-TriggerStates-1)     OPTIONAL  -- Need M
            ]]
        },
        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                     PathlossReferenceRS-Config                                     OPTIONAL, -- Need M
    srs-PowerControlAdjustmentStates        ENUMERATED { sameAsFci2, separateClosedLoop}                   OPTIONAL, -- Need S
    ...,
    [[
    pathlossReferenceRSList-r16             SetupRelease { PathlossReferenceRSList-r16}                    OPTIONAL  -- Need M
    ]],
    [[
    usagePDC-r17                            ENUMERATED {true}                                              OPTIONAL, -- Need R
    availableSlotOffsetList-r17             SEQUENCE (SIZE(1..4)) OF AvailableSlotOffset-r17               OPTIONAL, -- Need R
    followUnifiedTCI-StateSRS-r17           ENUMERATED {enabled}                                           OPTIONAL  -- Need R
    ]],
    [[
    applyIndicatedTCI-State-r18             ENUMERATED {first, second}                                     OPTIONAL  -- Cond FollowUTCI
    ]],
    [[
    symbolType-r19                          ENUMERATED {sbfd, non-sbfd}                                    OPTIONAL, -- Need R
    associatedCSI-RS-Set-r19                NZP-CSI-RS-ResourceSetId                                       OPTIONAL, -- Need R
    srs-PortGrouping-r19                    ENUMERATED {enabled}                                           OPTIONAL, -- Need R
    fourPortSRS-3Tx-r19                     ENUMERATED {enabled}                                           OPTIONAL  -- Need R
    ]]
}

 

Following is based on 38.331 v19.3.0 (Release 19)

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

 

Following is based on 38.331 v19.3.0 (Release 19)

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),
    freqHopping                             SEQUENCE {
        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
    ...,
    [[
    resourceMapping-r16                     SEQUENCE {
        startPosition-r16                       INTEGER (0..13),
        nrofSymbols-r16                         ENUMERATED {n1, n2, n4},
        repetitionFactor-r16                    ENUMERATED {n1, n2, n4}
    }                                                                                                      OPTIONAL    -- Need R
    ]],
    [[
    -- Release 17 and later members are omitted here
    ...
    ]]
}

 

Following is based on 38.331 v19.3.0 (Release 19)

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
        }
    }
}

 

Following is based on 38.331 v19.3.0 (Release 19)

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

 

Following is based on 38.331 v19.3.0 (Release 19)

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)
}

 

Following is based on 38.331 v19.3.0 (Release 19)

ConfiguredGrantConfig ::= SEQUENCE {
    frequencyHopping                 ENUMERATED {intraSlot, interSlot}                          OPTIONAL,   -- Need S
    cg-DMRS-Configuration            DMRS-UplinkConfig,
    mcs-Table                        ENUMERATED {qam256, qam64LowSE}                            OPTIONAL,   -- Need S
    mcs-TableTransformPrecoder       ENUMERATED {qam256, qam64LowSE}                            OPTIONAL,   -- Need S
    uci-OnPUSCH                      SetupRelease { CG-UCI-OnPUSCH }                            OPTIONAL,   -- Need M
    resourceAllocation               ENUMERATED { resourceAllocationType0, resourceAllocationType1, dynamicSwitch },
    rbg-Size                         ENUMERATED {config2}                                       OPTIONAL,   -- Need S
    powerControlLoopToUse            ENUMERATED {n0, n1},
    p0-PUSCH-Alpha                   P0-PUSCH-AlphaSetId,
    transformPrecoder                ENUMERATED {enabled, disabled}                             OPTIONAL,   -- Need S
    nrofHARQ-Processes               INTEGER(1..16),
    repK                             ENUMERATED {n1, n2, n4, n8},
    repK-RV                          ENUMERATED {s1-0231, s2-0303, s3-0000}                     OPTIONAL,   -- Need R
    periodicity                      ENUMERATED { ... },
    configuredGrantTimer             INTEGER (1..64)                                            OPTIONAL,   -- Need R
    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)                                         OPTIONAL,   -- Need R
        precodingAndNumberOfLayers       INTEGER (0..63),
        srs-ResourceIndicator            INTEGER (0..15)                                        OPTIONAL,   -- Need R
        mcsAndTBS                        INTEGER (0..31),
        frequencyHoppingOffset           INTEGER (1.. maxNrofPhysicalResourceBlocks-1)          OPTIONAL,   -- Need R
        pathlossReferenceIndex           INTEGER (0..maxNrofPUSCH-PathlossReferenceRSs-1),
        ...
    }                                                                                           OPTIONAL,   -- Need R
    ...                                                     -- the release extension groups are omitted here
}

 

Following is based on 38.331 v19.3.0 (Release 19)

DMRS-UplinkConfig ::=               SEQUENCE {
    dmrs-Type                           ENUMERATED {type2}                                                  OPTIONAL,   -- Need S
    dmrs-AdditionalPosition             ENUMERATED {pos0, pos1, pos3}                                       OPTIONAL,   -- Need S
    phaseTrackingRS                     SetupRelease { PTRS-UplinkConfig }                                  OPTIONAL,   -- Need M
    maxLength                           ENUMERATED {len2}                                                   OPTIONAL,   -- Need S
    transformPrecodingDisabled          SEQUENCE {
        scramblingID0                       INTEGER (0..65535)                                              OPTIONAL,   -- Need S
        scramblingID1                       INTEGER (0..65535)                                              OPTIONAL,   -- Need S
        ...,
        [[
        dmrs-Uplink-r16                     ENUMERATED {enabled}                                            OPTIONAL    -- Need R
        ]]
    }                                                                                                       OPTIONAL,   -- Need R
    transformPrecodingEnabled           SEQUENCE {
        nPUSCH-Identity                     INTEGER(0..1007)                                                OPTIONAL,   -- Need S
        sequenceGroupHopping                ENUMERATED {disabled}                                           OPTIONAL,   -- Need S
        sequenceHopping                     ENUMERATED {enabled}                                            OPTIONAL,   -- Need S
        ...,
        [[
        dmrs-UplinkTransformPrecoding-r16   SetupRelease {DMRS-UplinkTransformPrecoding-r16}                OPTIONAL    -- Need M
        ]]
    }                                                                                                       OPTIONAL,   -- Need R
    ...,
    [[
    dmrs-TypeEnh-r18                    ENUMERATED {enabled}                                                OPTIONAL    -- Need R
    ]]
}

 

Following is based on 38.331 v19.3.0 (Release 19)

DMRS-UplinkTransformPrecoding-r16  ::=  SEQUENCE {
    pi2BPSK-ScramblingID0                   INTEGER(0..65535)                                               OPTIONAL,   -- Need S
    pi2BPSK-ScramblingID1                   INTEGER(0..65535)                                               OPTIONAL    -- Need S
}

 

Following is based on 38.331 v19.3.0 (Release 19)

PTRS-UplinkConfig ::=                   SEQUENCE {
    transformPrecoderDisabled               SEQUENCE {
        frequencyDensity                    SEQUENCE (SIZE (2)) OF INTEGER (1..276)                 OPTIONAL,   -- Need S
        timeDensity                         SEQUENCE (SIZE (3)) OF INTEGER (0..29)                  OPTIONAL,   -- Need S
        maxNrofPorts                        ENUMERATED {n1, n2},
        resourceElementOffset               ENUMERATED {offset01, offset10, offset11 }              OPTIONAL,   -- Need S
        ptrs-Power                          ENUMERATED {p00, p01, p10, p11}
    }                                                                                               OPTIONAL,   -- Need R
    transformPrecoderEnabled                SEQUENCE {
        sampleDensity                           SEQUENCE (SIZE (5)) OF INTEGER (1..276),
        timeDensityTransformPrecoding           ENUMERATED {d2}                                     OPTIONAL    -- Need S
    }                                                                                               OPTIONAL,   -- Need R
    ...,
   [[
   maxNrofPorts-SDM-r18                     ENUMERATED {n1, n2}                                     OPTIONAL    -- Need R
   ]]
}

Tables

These seven tables are the codebook itself. Every entry is one W, and the TPMI carried in DCI is simply the index into the row. Reading them once in order shows the pattern. The entry count falls as the layer count rises, because a matrix that fills more layers has fewer useful shapes to take.

 

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

38.211 Table 6.3.1.5-1, six precoding matrices for single-layer transmission on two antenna ports

 

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

38.211 Table 6.3.1.5-2, twenty eight precoding matrices for single-layer transmission on four antenna ports with transform precoding enabled

 

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

38.211 Table 6.3.1.5-3, twenty eight precoding matrices for single-layer transmission on four antenna ports with transform precoding disabled

 

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

38.211 Table 6.3.1.5-4, three precoding matrices for two-layer transmission on two antenna ports

 

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

38.211 Table 6.3.1.5-5, twenty two precoding matrices for two-layer transmission on four antenna ports

 

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

38.211 Table 6.3.1.5-6, seven precoding matrices for three-layer transmission on four antenna ports

 

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

38.211 Table 6.3.1.5-7, five precoding matrices for four-layer transmission on four antenna ports

  • The entry count falls as the layer count rises : on four ports it runs 28 for one layer, 22 for two, 7 for three and 5 for four. A matrix that fills more layers has fewer useful shapes to take.
  • Transform precoding gets its own single-layer table : Tables 6.3.1.5-2 and 6.3.1.5-3 cover the same four ports and the same 28 TPMI values, and they are separate because the entries differ.
  • Two ports have only two tables : six matrices for one layer and three for two, which is the whole codebook a two port UE ever sees.
  • The v15.5 label is not a staleness warning : the seven table titles are word for word the same in 38.211 v19.4.0, so these screenshots still match the current release.

What Release 18 and Release 19 added

The seven tables above are the whole codebook as Release 15 defined it, and they were enough while the uplink stayed at four ports and four layers. Release 18 moved both ceilings. Clause 6.3.1.5 of 38.211 now runs to fifty tables rather than seven, and the RRC that chooses between them is new as well.

The rank ceiling moved in a way worth noticing. PUSCH-Config still carries maxRank INTEGER (1..4), exactly as the listing above shows it. Release 18 added maxRank-v1810 INTEGER (5..8) beside it in a later extension group, rather than widening the original field. Widening it would have changed the encoding of a field that every existing decoder already reads, so the new range travels in a second field.

Eight antenna ports need more than one codebook, and Release 18 defined four of them. The choice is carried by codebookTypeUL-r18, and its four alternatives line up one for one with blocks of tables in 38.211.

codebookTypeUL-r18

Value

38.211 tables

codebook1-r18

ng1n4n1

6.3.1.5-9 to 6.3.1.5-16

codebook1-r18

ng1n2n2

6.3.1.5-17 to 6.3.1.5-24

codebook2-r18

ng2

6.3.1.5-29 to 6.3.1.5-36, with submatrices in 6.3.1.5-25 to 6.3.1.5-28

codebook3-r18

ng4

6.3.1.5-39 to 6.3.1.5-46, with submatrices in 6.3.1.5-37 and 6.3.1.5-38

codebook4-r18

ng8

6.3.1.5-47

Each of the first three blocks holds eight tables, one per layer count from one to eight. Table 6.3.1.5-47 is the exception, because codebook4 fits in a single table. 38.211 describes it as supporting up to 8 layers ... with transform precoding disabled and up to one layer with transform precoding enabled. Table 6.3.1.5-8 sits ahead of all of them and gives the port mapping function for eight ports.

Release 19 then added a case that is about fewer chains rather than more ports. Tables 6.3.1.5-48 to 6.3.1.5-50 give W for one, two and three layers on three antenna ports with fourPortSRS-3Tx configured. The matching RRC field is fourPortSRS-3Tx-r19 in SRS-ResourceSet, and 38.211 applies it to an SRS resource set whose usage is codebook or antennaSwitching. It covers a UE that sounds on four ports but can only transmit on three.

Two other fields belong in the same picture. The first is ul-FullPowerTransmission-r16, which takes fullpower, fullpowerMode1 or fullpowerMode2. It decides whether the UE may reach its full power budget when the chosen precoder does not drive every port. The second is sTx-2Panel-r18, which extends the scheme to a UE transmitting from two panels at once, and it works with multipanelSchemeSDM-r18 and multipanelSchemeSFN-r18.

  • The uplink rank ceiling is now eight : maxRank still stops at 4, and maxRank-v1810 carries 5 to 8 in a later extension group.
  • Four uplink codebooks, not one : codebookTypeUL-r18 is a CHOICE between codebook1, codebook2, codebook3 and codebook4, and each owns its own block of tables.
  • Clause 6.3.1.5 grew from seven tables to fifty : the seven on this page are the two and four port cases, and everything from 6.3.1.5-8 onward is eight port or three port.
  • codebook4 is the compact one : one table covers up to eight layers with transform precoding disabled, and one layer with it enabled.
  • Release 19 handles three transmit chains : fourPortSRS-3Tx-r19 selects Tables 6.3.1.5-48 to 6.3.1.5-50.
  • The path described above is unchanged : a UE with two or four ports still uses Tables 6.3.1.5-1 to 6.3.1.5-7, and none of this replaces that.

Reference

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

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

[3] 38.211 v19.4.0 : NR - Physical channels and modulation. Clause 6.3.1.5 holds every precoding matrix quoted on this page, and it now runs to fifty tables.

[4] 38.331 v19.3.0 : NR - Radio Resource Control (RRC) protocol specification. Every listing in the RRC Parameters section is quoted from it.