5G/NR - PUSCH DMRS

 

 

 

PUSCH DMRS(DeModulation Reference Signal)

PUSCH DMRS is a special type of physical layer signal which functions as a reference signal for decoding PUSCH. Most of the fundamental paramters of PUSCH DMRS are same as in PDSCH DMRS. I would not explain much of those parameters on this note and strongly suggest you to go through PDSCH DMRS first if you are new to PDSCH/PUSCH DMRS. If frequency hoping is disabled and transform precoding is not enabled, PUSCH DMRS and PDSCH DMRS is almost same. The difference arises when frequency hoping is enabled or transform precoding is enabled.

Another important difference between PDSCH DMRS and PUSCH DMRS arises from the precoding. In PDSCH, there is no Precoding step in channel processing, but there is Precoding stage in PUSCH channel coding process. PUSCH DMRS undergoes this procoding procedure like PUSCH user data.

In this note, I am just trying to collect all the informations about PUSCH DMRS without much of the descriptions assuming that you are familiar to PDSCH DMRS and know how to interprete those parameters and tables in this note by yourselves.

Basic questions.

DMRS configuration sometimes is pretty confusing unless you have some type of big picture. If you frequently refresh yourself with the following questions, it will be helpful when you read further details in this page.

What is the difference between Mapping Type A and  B in terms of resource allocation ?

Type A can start only at symbol 2 or 3 within a slot, meaning that SLIV that start from symbol 4 or higher cannot use this type of DMRS.

Type B starts always at the first symbols of scheduled SLIV.

What is the difference between configuration type 1 and 2 in terms of resource allocation ?

In Configuration type 1, the minimum resource element group in frequency domain is one RE. In Configuration type 2, the minimum resource element group in frequency domain is two consecutive REs. See the pictures in Resource Element Mapping.

What is the effect of port number on DMRS resource element position ?

The port index is not only a label. It picks a row in Tables 6.4.1.1.3-1 and 6.4.1.1.3-2, and that row fixes three things at once: the CDM group, the frequency offset Δ, and the pair of cover codes. Two ports in the same CDM group therefore sit on the same resource elements, and only the cover codes keep them apart.

As antenna port number changes, the location of DMRS position in frequency domain changes.  Check out this note for the details.

How many DMRS symbol can be put into a slot ?

Minimum number is 1, but it can be more than 1 depending on dmrs-AdditionalPosition in RRC. Max number is 4. See 38.211 - Table 6.4.1.1.3-3 and 38.211 - Table 6.4.1.1.3-4 for the details.

Reading the single symbol table gives that answer its shape. Take mapping type A with a 14 symbol allocation. The pos0 setting gives one DMRS symbol, at l0, and pos1 gives two, at l0 and 11. The pos2 setting gives three, at l0, 7 and 11, and pos3 gives four, at l0, 5, 8 and 11. A short allocation cannot reach four. At ld = 4 every one of the four columns collapses to l0 on its own, so the setting stops making any difference.

Parameters

The table below pairs the symbols used in 38.211 with the RRC fields that carry them. The left column is the notation from the specification, and the middle column is the name to search for in a configuration dump. Several rows list two names, because the parameter was called something else before 38.331 settled on its current field names. Searching current 38.331 for UL-DMRS-config-type or UL-DMRS-max-len returns nothing.

38.211-7.4.1.1

Higher Layer Parameter

Value

Comment

n subscript SCID

UL-DMRS-Scrambling-ID

{0,1}

Sequence Generation

N subscript ID superscript n bar SCID

DMRS-Scrambling-ID

{0,1,..,65535}

Sequence Generation

Configuration Type

UL-DMRS-config-type

dmrs-Type

type1, type2

RE Mapping

l subscript zero

UL-DMRS-typeA-pos

dmrs-TypeA-Position

pos2, pos3

RE Mapping

 

UL-DMRS-add-pos

dmrs-AdditionalPosition

pos0, pos1, pos2, pos3

RE Mapping

 

UL-DMRS-max-len

 

RE Mapping

single or double symbol

 

 

RE Mapping

 

 

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

MIB ::=                             SEQUENCE {
    ...
    dmrs-TypeA-Position                 ENUMERATED {pos2, pos3},
    ...
}

 

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

PUSCH-TimeDomainResourceAllocation ::=  SEQUENCE {
    k2                                      INTEGER(0..32)                                  OPTIONAL,   -- Need S
    mappingType                             ENUMERATED {typeA, typeB},
    startSymbolAndLength                    INTEGER (0..127)
}

 

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

PUSCH-TimeDomainResourceAllocation-r16 ::=  SEQUENCE {
    k2-r16                                     INTEGER(0..32)          OPTIONAL,   -- Need S
    puschAllocationList-r16                    SEQUENCE (SIZE(1..maxNrofMultiplePUSCHs-r16)) OF PUSCH-Allocation-r16,
...
}

 

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

PUSCH-Allocation-r16 ::=  SEQUENCE {
    mappingType-r16                           ENUMERATED {typeA, typeB}                     OPTIONAL,   -- Cond NotFormat01-02-Or-TypeA
    startSymbolAndLength-r16                  INTEGER (0..127)                              OPTIONAL,   -- Cond NotFormat01-02-Or-TypeA
    startSymbol-r16                           INTEGER (0..13)                               OPTIONAL,   -- Cond RepTypeB
    length-r16                                INTEGER (1..14)                               OPTIONAL,   -- Cond RepTypeB
    numberOfRepetitions-r16                   ENUMERATED {n1, n2, n3, n4, n7, n8, n12, n16} OPTIONAL,   -- Cond Format01-02
    ...,
    [[
    numberOfRepetitionsExt-r17                ENUMERATED {n1, n2, n3, n4, n7, n8, n12, n16, n20, n24, n28, n32, spare4, spare3, spare2,
                                                          spare1}                           OPTIONAL,   -- Cond Format01-02-For-TypeA
    numberOfSlotsTBoMS-r17                    ENUMERATED {n1, n2, n4, n8, spare4, spare3, spare2, spare1}  OPTIONAL,   -- Need R
    extendedK2-r17                            INTEGER (0..128)                              OPTIONAL    -- Cond MultiPUSCH
    ]],
    [[
    ul-MutingIndicator-r19                   ENUMERATED {enabled}                           OPTIONAL,   -- Need S
    occ-Length-r19                           ENUMERATED {n2, n4}                            OPTIONAL    -- Need R
    ]]
}

 

k2 : Corresponds to L1 parameter 'K2'. It is marked -- Need S, so a default applies when the field is absent

mappingType : PUSCH mapping type. Corresponds to L1 parameter 'Mapping-type' (See SLIV page)

startSymbolAndLength : An index into a table/equation in RAN1 specs capturing valid combinations of start symbol and length (jointly encoded). Corresponds to L1 parameter 'Index-start-len' (See SLIV page)

 

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

PUSCH-Config ::=                        SEQUENCE {
    ...
    dmrs-UplinkForPUSCH-MappingTypeA        SetupRelease { DMRS-UplinkConfig }                              OPTIONAL,   -- Need M
    dmrs-UplinkForPUSCH-MappingTypeB        SetupRelease { DMRS-UplinkConfig }                              OPTIONAL,   -- Need M
    ...,
    [[
    -- Start of the parameters for DCI format 0_2 introduced in V16.1.0
    ...
    dmrs-UplinkForPUSCH-MappingTypeA-DCI-0-2-r16            SetupRelease { DMRS-UplinkConfig }            OPTIONAL,   -- Need M
    dmrs-UplinkForPUSCH-MappingTypeB-DCI-0-2-r16            SetupRelease { DMRS-UplinkConfig }            OPTIONAL,   -- Need M
    ...
    ]]
}

 

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

dmrs-Type : Selection of the DMRS type to be used for UL. If the field is absent, the UE uses DMRS type 1.

dmrs-AdditionalPosition : Position for additional DM-RS in UL. The uplink IE offers three values, pos0, pos1 and pos3, which represent 1+0, 1+1 and 1+1+1+1 non-adjacent OFDM symbols. If the field is absent, the UE applies the value pos2, which is the 1+1+1 case.

maxLength : The maximum number of OFDM symbols for UL front loaded DMRS. 'len1' corresponds to value 1. 'len2 corresponds to value 2. If the field is absent, the UE applies value len1. Corresponds to L1 parameter 'UL-DMRS-max-len'

scramblingID0 : UL DMRS scrambling initalization. Corresponds to L1 parameter 'n_SCID 0'. When the field is absent the UE applies the value Physical cell ID (physCellId) configured for this serving cell

scramblingID1 : UL DMRS scrambling initalization. Corresponds to L1 parameter 'n_SCID 1'. When the field is absent the UE applies the value Physical cell ID (physCellId) configured for this serving cell  

phaseTrackingRS : Configures uplink PTRS. If absent or released, the UE assumes that uplink PTRS are not present  

It would be almost impossible for you to get the practical meaning of these parameters just by looking into the specification unless you are the person who designed this algorithm or create your own program to implement this specification and plot it in graphics. I am not the person who desgined the algorithm and I don't have my own program to implement it. So it was so difficult for me to get any intuitive understandings on these parameters and algorithm. Fortunately, I got a chance to try with Matlab 5G library. Followings are the examples in graphics that I created using Matlab 5G library. I posted Matlab code and more examples here. The subcarrier spacing used in this example is 30 Khz and for the simplicity I assigned only one RB for the PUSCH.

Sequence Generation

PUSCH DMRS has two sequence generators rather than one, and transform precoding decides which of them runs. With transform precoding disabled the sequence is the pseudo-random sequence that PDSCH also uses. With it enabled the sequence is a low-PAPR sequence instead, because keeping the peak to average power ratio down is the whole reason transform precoding is there.

Transform Precoding Not Enabled

This is the branch that matches PDSCH. The generator is the length 31 Gold sequence, initialised once per OFDM symbol from cinit. The figure traces that initialisation from the scrambling identity at the top down to the symbol that is finally mapped. Start at the top left, because the three cases there decide which identity feeds everything below them.

 

PUSCH DMRS sequence generation when transform precoding is not enabled, from the scrambling identity down to the mapped symbol

  • The identity has three sources : scramblingID0 and scramblingID1 in DMRS-UplinkConfig, the msgA-ScramblingID0 and msgA-ScramblingID1 pair in msgA-DMRS-Configuration for a msgA PUSCH, and the physical cell identity when none of them is configured.
  • The second identity needs a Release 16 field : the figure takes n barSCID as nSCID for CDM group 0 or 2 and as 1 − nSCID for group 1, but only when dmrs-Uplink is provided. That field is dmrs-Uplink-r16 in the listing above. Without it the figure uses its last line, in which the CDM group index does not appear.
  • cinit is rebuilt every symbol : the slot number and the symbol index l both enter it, so no two OFDM symbols in a slot carry the same sequence.
  • The last line is where the tables enter : wf(k’) and wt(l’) are read from Tables 6.4.1.1.3-1 and 6.4.1.1.3-2, and that is what ties one sequence to one antenna port.

Transform Precoding Enabled

No figure covers this branch, and the reason is that it does not reduce to a single chain of equations. 38.211 sends it to clause 6.4.1.1.1.2, which builds the DMRS from a low-PAPR sequence of clause 5.2.2 rather than from the Gold sequence above. A low-PAPR sequence is a base sequence with a cyclic shift applied to it, so the reference signal is a rotation of a known waveform instead of a random looking one.

Two hopping mechanisms sit on top of that base sequence, and the RRC fields for both are already in the DMRS-UplinkConfig listing above. Group hopping changes which sequence group is drawn from as the slot advances. Sequence hopping changes which sequence inside the group is used. 38.211 rules out running them together, and states it directly: The UE is not expected to handle the case of combined sequence hopping and group hopping.

Which mechanism applies depends on how the grant arrived. For a PUSCH scheduled by a RAR uplink grant, or by DCI format 0_0 with the CRC scrambled by TC-RNTI, 38.211 fixes sequence hopping to disabled and lets groupHoppingEnabledTransformPrecoding decide group hopping. For all other transmissions the two are set by sequenceHopping and sequenceGroupHopping, and when neither parameter is provided the UE uses the same hopping mode as for Msg3.

The third field in that branch of DMRS-UplinkConfig is nPUSCH-Identity, an INTEGER (0..1007). It gives the sequence a root that is configured rather than derived from the physical cell identity, which is the equivalent of what scramblingID0 does on the disabled branch.

  • Transform precoding switches the generator : the Gold sequence is replaced by a low-PAPR sequence from 38.211 clause 5.2.2, which is a base sequence with a cyclic shift.
  • Only one hopping mode runs at a time : the specification says the UE is not expected to handle group hopping and sequence hopping in combination.
  • The grant decides the rule : a RAR grant, or DCI format 0_0 with TC-RNTI, disables sequence hopping and leaves group hopping to groupHoppingEnabledTransformPrecoding.
  • Msg3 is the fallback : when neither sequenceHopping nor sequenceGroupHopping is provided, the UE uses the hopping mode it used for Msg3.
  • nPUSCH-Identity replaces the cell identity : the sequence root becomes a configured value between 0 and 1007.

Resource Element Mapping

Resource Mapping of PUSCH DMRS is done as following equation. For simplicity, let's think of the location of resource element only (i.e, let's think only of k and l). k represents frequency domain location and l represents time domain location.

With this in mind, the first thing you can notice would be

  • Configuration type changes the location pattern in frequency domain
    • Configurataion Type 1 :  3 pairs(6 Resource Elements:RE) of DMRS are dispersed in one OFDM symbol/one RB at the interval of 4 REs (4n). The two RE in each pare are apart at the interval of 2 RE(2k'). In short, 6 REs of DMRS symbols are dispersed at every other REs in frequency domain. This supports 8 DMRS ports in case of double-symbol DMRS(port 0~7) and 4 DMRS ports in case of single symbol DMRS(port 0~3). See Table 6.4.1.1.3-1 and Table 6.4.1.1.3-2 for further details.
    • Configuration Type 2 : 2 pairs(4 Resource Elements:RE) of DMRS are dispersed in one OFDM symbol/one RB at the interval of 6 REs (6n). The two RE in each pare are apart at the interval of  1 RE(k'), meaning that the two REs in each pair are contiguous. This supports 12 DMRS ports in case of double-symbol DMRS(port 0~11) and 6 DMRS ports in case of single symbol DMRS(port 0~5). See Table 6.4.1.1.3-1 and Table 6.4.1.1.3-2 for further details for further details.
  • PUSCH mapping type changes the location pattern in time domain
    • PUSCH Mapping Type A : In this type, the DMRS symbol can start only at symbol 2 or 3 regardless of PUSCH start and length. It implies this cannot be used when PUSCH start symbol is greater than 3. This is related to the row 'Type A' in PUSCH SLIV table. This type is used for slot based scheduling.
    • PUSCH Mapping Type B : In this type, the DMRS symbol can start at the first PUSCH symbol regardless of PUSCH start. This is related to the row 'Type B'  in PUSCH SLIV table. This type is used for mini-slot based scheduling

Another points you would notice would be

  • frequency domain location(k) is determined by equation(formula) as shown below
  • time domain location(l) is determined by a predefined table and predefined value.

When Transform Preconding is not enabled

The equation below is the general case, with both configuration types and more than one layer. Two details are worth holding on to before reading the enabled case. The port index p~j runs from 0 to υ−1, and k has two lines, one for each configuration type.

PUSCH DMRS resource element mapping equation when transform precoding is not enabled, with k for configuration type 1 and type 2

When Transform Preconding is enabled

Compare this equation against the one above rather than reading it fresh. Two things have gone from it. Only one port is left, p~0, and only one line for k is left, the configuration type 1 line. Transform precoding therefore fixes the transmission to a single layer and to configuration type 1.

PUSCH DMRS resource element mapping equation when transform precoding is enabled, single port and configuration type 1 only

Resource Element Mapping after Precoding

Regardless of whether Transformed Precoding is enabled or not, the DMRS goes through scaling and Precoding procedure as below. W is precoding matrix which is same matrix for PUSCH data. This Procoding step itself is a pretty complicated process and explained in a separate note here.

PUSCH DMRS precoding equation mapping the DMRS of each layer onto the antenna ports through the precoding matrix W

Tables

Six tables carry most of the detail on this page, and they divide into three jobs. Two of them map an antenna port onto a CDM group, a frequency offset and a pair of orthogonal cover codes. Three of them give the symbol positions, for the single symbol case, the double symbol case and the frequency hopping case. The last one is a two row summary that is easier to remember than any of the others.

Followings are various tables that are used in Sequence Generation and Resource Element Mappaing shown above.

< 38.211 - Table 6.4.1.1.3-1: Parameters for PUSCH DM-RS configuration type 1.>

38.211 Table 6.4.1.1.3-1, CDM group, delta and the frequency and time OCC for PUSCH DMRS configuration type 1

 

< 38.211 - Table 6.4.1.1.3-2: Parameters for PUSCH DM-RS configuration type 2. >

38.211 Table 6.4.1.1.3-2, CDM group, delta and the frequency and time OCC for PUSCH DMRS configuration type 2

 

< 38.211 - Table 6.4.1.1.3-3: PUSCH DM-RS positions l bar within a slot for single-symbol DM-RS and intra-slot frequency hopping disabled.>

38.211 Table 6.4.1.1.3-3, DMRS symbol positions for single-symbol DMRS with frequency hopping disabled

 

< 38.211 - Table 6.4.1.1.3-4: PUSCH DM-RS positions l bar within a slot for double-symbol DM-RS and intra-slot frequency hopping disabled. >

38.211 Table 6.4.1.1.3-4, DMRS symbol positions for double-symbol DMRS with frequency hopping disabled

 

< 38.211 - Table 6.4.1.1.3-5: PUSCH DM-RS time index l' >

38.211 Table 6.4.1.1.3-5, DMRS time index l prime and the supported antenna ports for each configuration type

 

< 38.211 - Table 6.4.1.1.3-6: PUSCH DM-RS positions l bar within a slot for single-symbol DM-RS and intra-slot frequency hopping enabled. >

38.211 Table 6.4.1.1.3-6, DMRS symbol positions for single-symbol DMRS with intra-slot frequency hopping enabled

  • Tables -1 and -2 answer where in frequency : they give the CDM group, the offset Δ and the two cover codes for each port, and Δ is what separates one CDM group from the next.
  • Tables -3, -4 and -6 answer where in time : single symbol with hopping disabled, double symbol with hopping disabled, and single symbol with hopping enabled.
  • Table -5 is the one to remember : single-symbol DMRS supports ports 0 to 3 on configuration type 1 and 0 to 5 on type 2. Double-symbol DMRS doubles both, to 0 to 7 and to 0 to 11.
  • Frequency hopping has no double symbol table : Table 6.4.1.1.3-6 covers the single symbol case only, and its rows stop at ld = 7 because each hop is half a slot.
  • A short allocation rules out mapping type A : the first row of Tables 6.4.1.1.3-3 and 6.4.1.1.3-4 is a dash under mapping type A, so fewer than four symbols cannot carry type A DMRS.

Reference

[1] Wireless Technology Evolution - Transition from 4G to 5G : 5G Americas   

[2] 38.211 v19.4.0 : NR - Physical channels and modulation. Clause 6.4.1.1 defines PUSCH DMRS, and clause 5.2.2 defines the low-PAPR sequence used when transform precoding is enabled.

[3] 38.331 v19.3.0 : NR - Radio Resource Control (RRC) protocol specification. Every ASN.1 listing on this page is quoted from it.