5G/NR - PUSCH Home : www.sharetechnote.com |
||||||||||||||||||||||||||||||||||||||
PUSCH
This page is mainly for transport and physical layer process for PUSCH transmission. The overall procedure of the process are listed as below.
(1) Transport block CRC attachment
(3) Code block segmentation And Code Block CRC Attachment
i) Determine the max size of the code block (Kcb) : The max size of the code block depends on LDPC base graph type as follows.
ii) Determine the number of Codeblocks
if B(Transport block size) < Kcb(Max Codeblock size) L = 0 C (number of codeblocks) = 1 B' = B // this mean 'No Segmentation'. else L = 24 C = Ceiling(B/(Kcb - L)) B' = B + C * L
iii) Determine the number of bits in each code block
K'(the number of bits in each code block) = B'/C
iv) Determine Kb
For LDPC base graph type 1 Kb = 22
For LDPC base graph type 2 if B (Transport blocksize) > 640 Kb = 10 else if B (Transport blocksize) > 560 Kb = 9 else if B (Transport blocksize) > 192 Kb = 8 else Kb = 6
v) find the minimum value of Z in all sets of lifting sizes in [38.212-Table 5.3.2-1: Sets of LDPC lifting size] vi) denote Zc such that (Kb * Zc) >= K' vii) set K = 22 Zc for LDPC base graph 1 K = 10 Zc for LDPC base graph 2
viii) perform segmentation and add CRC bits s = 0 // s = bit position in B (transport block)
for r = 0 to C-1 for k = 0 to K'-L-1 crk = bs s = s + 1 end for
if C > 1 // Do this if the number of the code block is more than 1 Calculate pr0,pr1,pr2,...,pr(L-1) using the sequence cr0,cr1,cr2,...,cr(K'-L-1) and g_CRC24B(D) for k = K'-L to K'-1 // Append CRC bit crk = pr(k+L-K') end for end if for k = K' to K-1 // Insertion of filler bis crk = < NULL > end for end for
Perform LDPC as described in 38.212 - 5.3.2
(7) Data and control multiplexing
This is to convert the PUSCH data into the form of DFT-s-OFDM (a kind of SC-FDMA as in LTE PUSCH). This step is performed only transformprecoder in PUSCH-Config or msg3-transformPrecoding in RACH-ConfigCommon.
Mathemaically this step is pretty simple. Just mutiplying a matrix called Precoding matrix to the data from the previous step. But the problem is how to figure out the precoding matrix itself (i.e, how to determine the precoding matrix) is extremely complicated. Since this precoding matrix determination process is such a complicated, I had to create another page for the process. Refer to this page for the details of the process.
Just for the high level view, the precoding matrix is determined by two different method : codebook and non-codebook based.
In codebook based method, the matrix is determined by the information specified in DCI and some additional configurations in RRC message as follows.
There are many difference types of tables to be applied for the precoding. Which table should be used for a specific case ? As shown below, depending on the number of layers, the number of antenna ports and on waveform type (transform precoding enabled or disabled), a specific precoding table is selected.
In Non-codebook based method, the precoding matrix is determined by the measurement result of NZP-CSI-RS resource.
NOTE 1 : As illustrated above, simply put this step is a mater of selecting a specific matrix(W) and transform PUSCH data with the matrix. It would sound simple, but in reality it would not be as simple as it sound because the mechanism of selecting a specific matrix from huge tables of matrix sets. There are many factors and additional procedure involved in the matrix selection and this process is explained in a separate page here.
NOTE 2 : Once you understand the process of selecting(determining) a precoding matrix, the next step is to understand the exact meaning of those matrix. For this, you need to understand the mathemtical meaning of Precoding and the mathematical meaning of each elements in the matrix. I know not so many people (including me) likes math -:). But this is necessary step if you realy want to understand the exact meaning. For the meaning of Precoding itself, refer to Precoding page (LTE DL Precoding and 5G Downlink CSI RS Codebook) and my visual note www.slide4math.com (Go to [Engineering]->[1]->Matrix Complex).
< Non-Interleaved >
< Interleaved >
38.331 15.3 (2018-10)
PUSCH-Config ::= SEQUENCE { dataScramblingIdentityPUSCH INTEGER (0..1023) OPTIONAL, txConfig ENUMERATED {codebook, nonCodebook} dmrs-UplinkForPUSCH-MappingTypeA SetupRelease { DMRS-UplinkConfig } dmrs-UplinkForPUSCH-MappingTypeB SetupRelease { DMRS-UplinkConfig } pusch-PowerControl PUSCH-PowerControl frequencyHopping ENUMERATED {intraSlot, interSlot} frequencyHoppingOffsetLists SEQUENCE (SIZE (1..4)) OF INTEGER (1.. maxNrofPhysicalResourceBlocks-1) resourceAllocation ENUMERATED { resourceAllocationType0, resourceAllocationType1, dynamicSwitch}, pusch-TimeDomainAllocationList SetupRelease { PUSCH-TimeDomainResourceAllocationList } pusch-AggregationFactor ENUMERATED { n2, n4, n8 } mcs-Table ENUMERATED {qam256, qam64LowSE} mcs-TableTransformPrecoder ENUMERATED {qam256, qam64LowSE} transformPrecoder ENUMERATED {enabled, disabled} codebookSubset ENUMERATED {fullyAndPartialAndNonCoherent, partialAndNonCoherent, nonCoherent} maxRank INTEGER (1..4) rbg-Size ENUMERATED { config2} uci-OnPUSCH SetupRelease { UCI-OnPUSCH } tp-pi2BPSK ENUMERATED {enabled} ... }
UCI-OnPUSCH ::= SEQUENCE { betaOffsets CHOICE { dynamic SEQUENCE (SIZE (4)) OF BetaOffsets, semiStatic BetaOffsets } OPTIONAL, -- Need M scaling ENUMERATED { f0p5, f0p65, f0p8, f1 } }
dataScramblingIdentityPUSCH : Identifer used to initalite data scrambling (c_init) for both PUSCH. Corresponds to L1 parameter 'Data-scrambling-Identity'
txConfig : Whether UE uses codebook based or non-codebook based transmission. Corresponds to L1 parameter 'ulTxConfig'
dmrs-UplinkForPUSCH-MappingTypeA : DMRS configuration for PUSCH transmissions using PUSCH mapping type A (chosen dynamically via PUSCH-TimeDomainResourceAllocation)
dmrs-UplinkForPUSCH-MappingTypeB : DMRS configuration for PUSCH transmissions using PUSCH mapping type B (chosen dynamically via PUSCH-TimeDomainResourceAllocation)
pusch-PowerControl :
frequencyHopping : Configured one of two supported frequency hopping mode. If not configured frequency hopping is not configured. Corresponds to L1 parameter 'Frequency-hopping-PUSCH'. When the field is absent the UE applies the value Not configured
frequencyHoppingOffsetLists : Set of frequency hopping offsets used when frequency hopping is enabled for granted transmission (not msg3) and type 2. Corresponds to L1 parameter 'Frequency-hopping-offsets-set'
resourceAllocation : Configuration of resource allocation type 0 and resource allocation type 1 for non-fallback DCI. Corresponds to L1 parameter 'Resouce-allocation-config'
pusch-TimedomainAllocationList : List of PUSCH-TimeDomainResourceAllocation. If configured, the values provided herein override the values received in corresponding PDSCH-ConfigCommon. This information elements has an array structure as sown below. For each PUSCH scheduling, Time domain resource assignment of DCI 0_0 or DCI 0_1 specify a specific row number (row index) of the following table as stated in 38.214 - 6.1.2.1. When the UE is scheduled to transmit a transport block and no CSI report, or the UE is scheduled to transmit a transport block and a CSI report on PUSCH by a DCI, the Time domain resource assignment field of the DCI provides a row index of a higher layer configured table pusch-symbolAllocation, where the indexed row defines the slot offset K2, the start and length indicator SLIV, and the PUSCH mapping type to be applied in the PUSCH transmission.
pusch-AggregationFactor : Number of repetitions for data. Corresponds to L1 parameter 'aggregation-factor-UL' . When the field is absent the UE applies the value 1
mcs-Table : Indicates which MCS table the UE shall use for PUSCH without transform precoder. Corresponds to L1 parameter 'MCS-Table-PUSCH'. When the field is absent the UE applies the value 64QAM
mcs-TableTransformPrecoder : Indicates which MCS table the UE shall use for PUSCH with transform precoding. Corresponds to L1 parameter 'MCS-Table-PUSCH-transform-precoding'. When the field is absent the UE applies the value 64QAM
transformPrecoder : The UE specific selection of transformer precoder for PUSCH. When the field is absent the UE applies the value msg3-tp. Corresponds to L1 parameter 'PUSCH-tp'
codebookSubset : Subset of PMIs addressed by TPMI, where PMIs are those supported by UEs with maximum coherence capabilities. Corresponds to L1 parameter 'ULCodebookSubset'
maxRank : Subset of PMIs addressed by TRIs from 1 to ULmaxRank. Corresponds to L1 parameter 'ULmaxRank'
rbg-Size : Selection between config 1 and config 2 for RBG size for PUSCH. When the field is absent the UE applies the value config1. Corresponds to L1 parameter 'RBG-size-PUSCH'
uci-OnPUSCH : Selection between and configuration of dynamic and semi-static beta-offset. If the field is absent or released, the UE applies the value 'semiStatic'. Corresponds to L1 parameter 'UCI-on-PUSCH'
vrb-ToPRB-Interleaver : Interleaving unit configurable between 2 and 4 PRBs. Corresponds to L1 parameter 'VRB-to-PRB-interleaver'
PUSCH-ConfigCommon ::= SEQUENCE { groupHoppingEnabledTransformPrecoding ENUMERATED {enabled} OPTIONAL, -- Need R pusch-AllocationList SEQUENCE (SIZE(1..maxNrofUL-Allocations)) OF PUSCH-TimeDomainResourceAllocation OPTIONAL, -- Need R msg3-DeltaPreamble INTEGER (-1..6) OPTIONAL, -- Need R p0-NominalWithGrant INTEGER (-202..24) OPTIONAL, -- Need R ... }
msg3-DeltaPreamble : Power offset between msg3 and RACH preamble transmission in steps of 1dB. Corresponds to L1 parameter 'Delta-preamble-msg3'
Reference
[1]
|
||||||||||||||||||||||||||||||||||||||