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 : numberOfSlots-TBoMS-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.

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.3.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-0and1-1
   ...,
   [[
   k0-v1710 INTEGER(33..128)         OPTIONAL -- Need S
   ]]
}

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.3.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
   numberOfSlots-TBoMS-r17     ENUMERATED {n1, n2, n4, n8, spare4, spare3, spare2, spare1}
                                          OPTIONAL, -- Need R
   extendedK2-r17              INTEGER (0..128) OPTIONAL -- Cond MultiPUSCH
   ]]
}

Reference