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 AggregationFactor/RepetitionSchemeConfig
- PUSCH AggregationFactor/RepetitionSchemeConfig
- UE Capability Information
- RRC Parameters
- Reference
- Get the Test Procedure and Log / Amarisoft TechAcademy
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 repetitionsCritical IoT data with high reliability requirement : using many PDSCH repetitionsCritical IoT data with low latency requirement : using only one or two PDSCH repetitions
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.

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 >

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 >

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
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
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
- PDSCH dynamic repetition: Setting a new standard for supporting dynamic radio conditions and traffic profiles - Erricson (2022)