5G/NR  -  PDSCH/PUSCH

 

 

 

PDSCH/PUSCH Aggregation Factor / Repetition

 

The term Aggregation Factor in this context refers to the aggregation in time domain, more specifically the PDSCH and PUSCH over multiple consecutive slots. Those multiple PDSCH and PUSCH in this mechanism carries the same user data but with different redundancy version. It means those multiple PDSCH or PUSCH is basically the repetative transmission of a same data like the repetition mechanism you saw in TTI bundling and repetion in LTE and LTE CatM.

PDSCH Aggregation Factor/RepetitionSchemeConfig

PDSCH Aggregation is a kind of PDSCH repetition mechanism for reliable transmission (of course at the sacrifice of throughput). Overall concept would be similar to TTI Bundling in LTE (in LTE TTI bundling is for Uplink. You may take PDSCH Aggregation is downlink version of TTI bundling) or it can be comparable to PDSCH repetition in Cat M or NBIot in LTE.  Overall mechanism of PDSCH Aggregation can be illustrated as below.

In Release 15, 3GPP allows three types of repeition (n2, n4, n8) and you may apply the specific number of repetition depending on use case as listed below. This is just examples and the decision is supposed to be made by network operators (carriers)

  • eMBB data with high data throughput requirement : a single PDSCH transmission, meaning No Aggregation.
  • Critical IoT data with medium reliability requirement : a few PDSCH repetitions
  • Critical IoT data with high reliability requirement : using many PDSCH repetitions
  • Critical IoT data with low latency requirement : using only one or two PDSCH repetitions

PDSCH AggregationFactor is a mechanism that one DCI can schedule multiple consecutive downlink slots for PDSCH. The number of the consecutive slots can be 2 or 4 or 8. The number of slots can be determined by the RRC parameter pdsch-AggregationFactor.

When this IE is configured, the number of allocated symbol (SLIV) for all the consecutive slots are same as the first slot.

The RV_id (Redundancy Version) for each slot varies depending on following table.

< 38.214 - Table 5.1.2.1-2: Applied redundancy version when aggregationFactor is present >

 

< 38.214 - Table 5.1.2.1-3: Applied redundancy version for the second TCI state when sequenceOffsetforRV ispresent >

rvs : sequenceOffsetforRV

PUSCH AggregationFactor/RepetitionSchemeConfig

PUSCH repetition is the uplink half of the same idea, and the shape of it is close enough to PDSCH that the differences are what matter. The offset from the DCI to the first transmission is k2 rather than k0. The repetitions travel from UE to gNB, and RRC sets how many of them there are. The overview diagram traces one DCI through the repetitions it schedules.

PUSCH aggregation factor timing diagram from DCI to the repeated PUSCH transmissions

Two tables from 38.214 decide what the repetitions carry. The first sets how many there are when the repetition count is signalled through the MCS field, which is the Msg3 case. The second sets which redundancy version each occasion uses.

 

< 38.214 - Table 6.1.2.1-1A: Number of repetition K as a function of 2 MSBs of MCS information field >

38.214 Table 6.1.2.1-1A mapping the two MSBs of the MCS field to the number of Msg3 repetitions

The table has two halves, and which one applies depends on whether numberOfMsg3Repetitions is configured. When it is, the two bits select one of the four configured values. When it is not, the same two bits mean K of 1, 2, 3 and 4 directly, so a UE that never receives the configuration still has a usable repetition count.

 

< 38.214 - Table 6.1.2.1-2: Redundancy version for PUSCH transmission >

38.214 Table 6.1.2.1-2 giving the redundancy version applied to each PUSCH repetition

N : numberOfSlotsTBoMS-r17 = number of slots N used for TBS determination

The row is chosen by the redundancy version the DCI indicates, and the column by the position of the occasion in the sequence. The four rows are the cyclic orders 0,2,3,1 and 2,3,1,0 and 3,1,0,2 and 1,0,2,3, so every starting point walks the same cycle from a different place. Starting at 0 matters because rv 0 is the only self-decodable version, and the receiver needs it before combining helps.

N is the number of slots the transport block spans, so with TBoMS the redundancy version advances once per group of N slots rather than once per slot.

Msg4 Aggregation Factor in Release 19

Everything above has one assumption hidden in it. The field pdsch-AggregationFactor sits in PDSCH-Config, and PDSCH-Config is dedicated RRC. So the UE gets it only after the RRC connection is set up. Then what about Msg4 itself ? Msg4 is the PDSCH that carries the UE contention resolution identity and RRCSetup. It is sent before the UE has any dedicated configuration at all. Release 19 adds a separate aggregation factor just for this PDSCH.

Why do we need repetition for Msg4 ? The UE capability for this feature applies only to the bands in 38.101-5 Table 5.2.2-1. 38.101-5 is the satellite access RF specification, so this is an NTN feature. In NTN, the link budget during initial access is the weak point. Release 17 already added Msg3 PUSCH repetition, which is the case of Table 6.1.2.1-1A in the PUSCH section. Release 18 added PUCCH repetition for the HARQ-ACK of Msg4, with numberOfMsg4HARQ-ACK-Repetitions-r18 in NTN-CovEnh-r18. After those two, the Msg4 PDSCH was left as a single transmission. Release 19 fills this gap.

Then you may ask how the gNB knows whether the UE can receive a repeated Msg4. At Msg4 time, the gNB has not seen UECapabilityInformation yet. The UE has not seen any dedicated RRC either. So both sides have to learn about each other through the messages that already exist before Msg4. The solution uses three of them.

The sequence diagram below follows one random access procedure from SIB1 to the HARQ-ACK of Msg4. The blue messages are where the support information is exchanged, SIB1 in one direction and Msg3 in the other. The red messages are the Msg4 PDSCH itself, sent over four consecutive slots in this example. The redundancy versions on the red arrows assume that the DCI indicates rvid 0.

UE gNB SIB1 : pdsch-AggregationFactor-r19 = n4 UE learns that the cell supports Msg4 repetition Msg1 : PRACH preamble Msg2 : RAR Msg3 : CCCH with LX = 1 LCID (PDSCH repetition of Msg4) gNB learns that the UE supports Msg4 repetition PDCCH : DCI 1_0, TC-RNTI, MSB of MCS = 1 repetition is turned on for this Msg4 only Msg4 PDSCH : n = 0, rv = 0 Msg4 PDSCH : n = 1, rv = 2 Msg4 PDSCH : n = 2, rv = 3 Msg4 PDSCH : n = 3, rv = 1 rv from 38.214 Table 5.1.2.1-2 with rvid 0 in the DCI pdsch-AggregationFactor-r19 = n4 consecutive slots same symbol allocation single transmission layer PUCCH : HARQ-ACK for Msg4

Msg4 PDSCH repetition needs two indications before the DCI. SIB1 tells the UE that the cell supports it, and Msg3 tells the gNB that the UE supports it. Only after that can the MCS field of the DCI turn the repetition on.

  • SIB1 : pdsch-AggregationFactor-r19 in PDSCH-ConfigCommon gives the number of consecutive slots, n2 or n4. The UE may indicate support in Msg3 only if SIB1 provides this field.
  • Msg3 : The UE indicates support through the LCID of the CCCH SDU. It uses the extended LCID space, with the LX field set to 1 (38.321 Table 6.2.1-2c). So no new MAC CE or RRC field is needed for it.
  • DCI format 1_0 with TC-RNTI : The MSB of the MCS field set to 1, with IMCS less than 29, turns on the repetition for this Msg4.
  • Msg4 PDSCH : The same symbol allocation is applied across pdsch-AggregationFactor-r19 consecutive slots, and the PDSCH is limited to a single transmission layer. The rv of each occasion follows 38.214 Table 5.1.2.1-2, the same table as the PDSCH section.

The LCID part needs a little more explanation. 38.321 Table 6.2.1-2c has a separate codepoint for each combination of three things. The first is the CCCH size, 48 or 64 bits. The second is the UE type, RedCap, eRedCap or other UE. The third is whether PUCCH repetition of Msg4 HARQ-ACK is requested as well. So one LCID can carry both Msg4 requests at once. The MAC entity may use a codepoint only if the network indicates support for that feature.

The trick in the DCI is the most interesting part, I think. DCI format 1_0 has no field for repetition. Adding one would change the size of a DCI that every UE monitors. So 38.214 reuses the MSB of the 5 bit MCS field instead. If the UE has indicated support in Msg3, the MSB is 1 and IMCS is less than 29, the UE applies the repetition. Then the UE assumes the MSB to be 0 and looks up Table 5.1.3.1-1 with the result.

Let's work through the numbers. With the MSB set to 1, IMCS is between 16 and 31. The condition of less than 29 leaves 16 to 28. After the MSB is cleared, they become MCS 0 to 12. That is QPSK up to MCS 9, and 16QAM for MCS 10 to 12. So a repeated Msg4 can use only the lower part of the MCS table. This is not a real loss, because a UE that needs repetition would not decode a high MCS anyway. IMCS 29 to 31 are left out of the rule, so they keep their usual meaning. My understanding is that this keeps them for retransmission, where the DCI signals only the modulation order.

One thing you would notice is that the repetition is decided per DCI, not per cell. SIB1 sets only how many slots a repetition uses. The gNB can still send a normal single slot Msg4 to a UE that indicated support, by keeping the MSB at 0. Following is the RRC side of it.

< PDSCH-ConfigCommon >

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

PDSCH-ConfigCommon ::=                  SEQUENCE {
                    pdsch-TimeDomainAllocationList          PDSCH-TimeDomainResourceAllocationList          OPTIONAL,   -- Need R
                    ...,
                    [[
                    pdsch-AggregationFactor-r19             ENUMERATED {n2,n4}                              OPTIONAL    -- Need R
                    ]]
                }

Compare this with pdsch-AggregationFactor in PDSCH-Config. The dedicated one allows n2, n4 and n8, but the Msg4 one allows only n2 and n4. The dedicated one is Need S, and the Msg4 one is Need R. The field description gives only the number of consecutive repetition slots for Msg4 PDSCH. The rest of the behaviour is in 38.214 clause 5.1.2.1, and the diagram above follows that clause.

On the UE side, pdsch-RepetitionMsg4-r19 is a per-band capability in BandNR. It indicates that the UE supports reception of Msg4 PDSCH repetition with repetition factors 2 and 4. It is FR1 only. A UE that reports it shall also report pdsch-RepetitionMultiSlots, the capability for the ordinary aggregation factor in the UE Capability Information section.

< BandNR >

Following is based on 38.331 v19.4.0 (Release 19). Only the field for Msg4 PDSCH repetition is shown; the rest of the IE is elided with ....

BandNR ::= SEQUENCE {
                    ...
                    -- R1 65-1-5: Msg4 PDSCH repetition
                    pdsch-RepetitionMsg4-r19                ENUMERATED {supported}                          OPTIONAL,
                    ...
                }

The gNB cannot use this capability for Msg4 itself, because UECapabilityInformation arrives long after Msg4. This is why the Msg3 LCID exists. The capability is what the network reads later, after the RRC connection is set up.

  • Msg4 gets its own aggregation factor : pdsch-AggregationFactor-r19 in PDSCH-ConfigCommon is broadcast in SIB1, because there is no dedicated PDSCH-Config yet at Msg4.
  • Support is exchanged before the DCI : SIB1 tells the UE about the cell, and the LCID of the Msg3 CCCH tells the gNB about the UE.
  • The DCI decides each time : The MSB of the MCS field in DCI format 1_0 turns the repetition on, and the usable MCS range drops to 0 to 12.
  • The rv rule is shared : A repeated Msg4 uses the same 38.214 Table 5.1.2.1-2 as the dedicated aggregation factor.

UE Capability Information

This is an optional configuration and it is not guaranteed that all the UE support this capability. If a UE support this capability, it should inform it to Network via the IE : pdsch-RepetitionMultiSlots in Phy-ParametersCommon of UE CapabilityInformation.  

The capability sits in Phy-ParametersCommon rather than in a band-specific list, so a UE that reports it reports it once for every band it supports. A network that configures pdsch-AggregationFactor without seeing the capability relies on behaviour the UE never claimed. The failure is also silent. The UE decodes the first slot and ignores the rest, so the transport block fails rather than the configuration being rejected.

  • Check the capability before configuring repetition : Repetition costs slots whether or not the UE uses them, so configuring it blindly loses throughput and gains nothing.
  • Uplink and downlink are reported separately : Support for PDSCH repetition says nothing about PUSCH repetition, and the two are configured by different IEs.

The uplink counterpart is pusch-RepetitionMultiSlots, and both fields are declared the same way. Each is an ENUMERATED with the single value supported, and each is OPTIONAL, so the field is either present or absent and there is no value meaning not supported. Reading a capability message therefore means checking for presence rather than for a value.

Release 16 added its own variants alongside the original fields, pdsch-RepetitionMultiSlots-r16 and pusch-RepetitionMultiSlots-r16, with pusch-RepetitionMultiSlots-v1650 following. The older fields were not withdrawn, so a capability message can carry more than one of them and the network reads whichever matches the release it is operating.

RRC Parameters

Both listings below are cut down to the fields this page is about, because PDSCH-Config and PUSCH-Config are each far too long to read whole. Two things are worth noticing as you read them. The aggregation factor itself is a single enumerated field with three values, and everything else here exists to describe repetition schemes that arrived later and are configured separately from it.

< PDSCH-Config and the IEs it refers to >

Following is based on 38.331 v19.4.0 (Release 19). Only the fields related to aggregation and repetition are shown; the rest of each IE is elided with ....

PDSCH-Config ::= SEQUENCE {
   ...
   pdsch-AggregationFactor                ENUMERATED { n2, n4, n8 } OPTIONAL, -- Need S
   ...
   pdsch-TimeDomainAllocationList-r16    SetupRelease { PDSCH-TimeDomainResourceAllocationList-r16}
                                              OPTIONAL, -- Need M
   repetitionSchemeConfig-r16         SetupRelease { RepetitionSchemeConfig-r16} OPTIONAL--Need M
   ]],
   [[
   repetitionSchemeConfig-v1630     SetupRelease { RepetitionSchemeConfig-v1630} OPTIONAL--Need M
   ]],
   ...
}

PDSCH-TimeDomainResourceAllocation-r16 ::= SEQUENCE {
   k0-r16                            INTEGER(0..32) OPTIONAL, -- Need S
   mappingType-r16                   ENUMERATED {typeA, typeB},
   startSymbolAndLength-r16          INTEGER (0..127),
   repetitionNumber-r16              ENUMERATED {n2, n3, n4, n5, n6, n7, n8, n16}
                                                              OPTIONAL,--Cond Formats1-0_1-1_4-0_4-1_4-2
   ...,
   [[
   k0-v1710 INTEGER(33..128)         OPTIONAL -- Need S
   ]],
   [[
   repetitionNumber-v1730            ENUMERATED {n2, n3, n4, n5, n6, n7, n8, n16}
                                                              OPTIONAL -- Cond Format1-2
   ]]
}

RateMatchPatternGroup ::=     SEQUENCE (SIZE (1..maxNrofRateMatchPatternsPerGroup)) OF CHOICE {
   cellLevel                   RateMatchPatternId,
   bwpLevel                    RateMatchPatternId
}

MinSchedulingOffsetK0-Values-r16 ::= SEQUENCE (SIZE (1..maxNrOfMinSchedulingOffsetValues-r16))
                                         OF INTEGER (0..maxK0-SchedulingOffset-r16)
MinSchedulingOffsetK0-Values-r17 ::= SEQUENCE (SIZE (1..maxNrOfMinSchedulingOffsetValues-r16))
                                         OF INTEGER (0..maxK0-SchedulingOffset-r17)
MaxMIMO-LayersDL-r16 ::= INTEGER (1..8)


RepetitionSchemeConfig-r16 ::= CHOICE {
   fdm-TDM-r16                 SetupRelease { FDM-TDM-r16 },
   slotBased-r16               SetupRelease { SlotBased-r16 }
}

RepetitionSchemeConfig-v1630 ::= SEQUENCE {
   slotBased-v1630             SetupRelease { SlotBased-v1630 }
}

FDM-TDM-r16 ::= SEQUENCE {
   repetitionScheme-r16        ENUMERATED {fdmSchemeA, fdmSchemeB,tdmSchemeA },
   startingSymbolOffsetK-r16   INTEGER (0..7) OPTIONAL -- Need R
}

SlotBased-r16 ::= SEQUENCE {
   tciMapping-r16              ENUMERATED {cyclicMapping, sequentialMapping},
   sequenceOffsetForRV-r16     INTEGER (1..3)
}

SlotBased-v1630 ::= SEQUENCE {
   tciMapping-r16              ENUMERATED {cyclicMapping, sequentialMapping},
   sequenceOffsetForRV-r16     INTEGER (0)
}

< PUSCH-Config and the IEs it refers to >

Following is based on 38.331 v19.4.0 (Release 19). Only the fields related to aggregation and repetition are shown.

PUSCH-Config ::= SEQUENCE {
   ...
   pusch-AggregationFactor                    ENUMERATED { n2, n4, n8 } OPTIONAL, -- Need S
   ...
   pusch-RepTypeIndicatorDCI-0-1-r16          ENUMERATED { pusch-RepTypeA, pusch-RepTypeB}
                                                      OPTIONAL, -- Need R
   ...
   availableSlotCounting-r17                  ENUMERATED { enabled }        OPTIONAL,  -- Need S
   ...
}

PUSCH-TimeDomainResourceAllocationList-r16 ::= SEQUENCE (SIZE(1..maxNrofUL-Allocations-r16))
                                                    OF PUSCH-TimeDomainResourceAllocation-r16

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

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

Release 19 also extends PUSCH-Allocation-r16. The new occ-Length-r19 gives the inter-slot OCC length, n2 or n4, for a dynamic grant or a Type 2 CG. The OCC is applied on top of PUSCH repetitions. The other new field, ul-MutingIndicator-r19, enables the semi-statically configured UL muting symbols for the PUSCH of that row. Inter-slot OCC for PUSCH belongs to the same Release 19 NTN feature group as the Msg4 aggregation factor, R1 65-3-1 against R1 65-1-5.

Reference