NR SA PUSCH Transform Precoding
The purpose of this tutorial is to show you how to configure and verify PUSCH Transform Precoding. In LTE, we use the different waveform for DL and UL by default in which OFDMA is for DL and SC-FDMA(Single Carrier-FDMA) is used for UL. However in NR, we use the same type of waveform OFDM for both DL and UL in most of the default configuration. The reason why we use SC-FDMA in LTE UL is to decrease PAPR (Peak to Average Power Ratio). It implies that UL PAPR would be larger in NR default configuration comparing to LTE UL. For some specific case where low PAPR is necessary in NR, NR support a specific parameter to use SC-FDMA for UL and it is called 'Transform Precoding'. You may think of Transform Precoding as another name for SC-FDMA. There are two stages of applying the Transform Precoding in NR as listed below.
- Apply Transform Precoding only for msg3. You can configure this in SIB1
- Apply Transform Precoding for all other UL except msg3. You can configure this in RRCSetup or RRCReconfiguration.
You can enable both of them or enable only one of the options as you like.
Table of Contents
- NR SA PUSCH Transform Precoding
Test Setup
Setup A
Test setup for this tutorial is as shown below.
Key Configuration Parameters
Followings are important configuration parameters for this tutorial. You may click on the items for the descriptions from Amarisoft documents.
Test 1 : Transform-Precoding enabled for both Msg3 and PUSCH afterwards
In this test I will show you how to apply transform precoding (SC-FDMA) to Msg3 and all the PUSCH after the msg3.
Configuration
An important thing in using UE sim is to do proper matching between UE sim configuration and Call box configuration In this tutorial, I used the ue.default.cfg and and enb.default.cfg without any change
If you use other Network (e.g, other network simulator or real network), you have to make it sure to configure UE sim according to the settings on network side
I used ue-nr-sa.cfg. as it is
I used gnb-sa-tf-precode.cfg which is copied from gnb-sa.cfg.
The configuration in gnb-sa-tf-precode.cfg (Callbox) is set as follows. In this test, TDD is used and one of the default TDD config (NR_TDD_CONFIG 2) is applied. And SRS is disabled (USE_SRS 0) for simplicity.
It doesn't matter whatever band and frequency is used for transform precoding. In this test, n78 (band :78) with SCS 30 Khz (subcarrier_spacing 30) is used.
These are the main configuration parameter for transform preconding. Transform Precoding is applied to msg3 by setting msg3_tf_precoding to true and applied to all the PUSCH by setting tf_precoding to true.
The configuration in ue-nr-sa.cfg (UEsim) is set as follows. TDD is used for UEsim to be aligned to Callbox (gNB) configuration. BANDWIDTH 20 and band :78, subcarrier_spacing:30 are configured to get aligned to gNB configuration.
Perform the Test
check if callbox confgiuration (gNB configuration) is properly set as you intended by the command 'cell phy' and 'cell'.
If gNB configuration is done as you desire, power on UE on UEsim.
Make it sure that call setup is properly established using 't' command.
Log Analysis
You can confirm that msg3 transform precoding is enabled by checking out msg3-transformPrecoder IE in SIB1.
Transform Precoding for PUSCH after msg3 can be confirmed by checking out transformPrecodingEnabled in RRC Setup. If transformPrecodingEnabled exists, it indicates transform precoding is enabled.
Make it sure that all the PUSCH are properly received and decoded by gNB. PUSCH log print itself does not print any specific information about transform precoding.
RRC / NAS Signaling
SIB1 (SA)
: This is the SIB1 message sent by gNB to enable transform precoding for msg1. (
{
message c1: systemInformationBlockType1: {
cellSelectionInfo {
...
},
cellAccessRelatedInfo {
...
},
connEstFailureControl {
...
},
servingCellConfigCommon {
downlinkConfigCommon {
frequencyInfoDL {
...
},
initialDownlinkBWP {
genericParameters {
locationAndBandwidth 13750,
subcarrierSpacing kHz30
},
pdcch-ConfigCommon setup: {
...
},
pdsch-ConfigCommon setup: {
...
}
},
bcch-Config {
...
},
pcch-Config {
...
}
},
uplinkConfigCommon {
frequencyInfoUL {
scs-SpecificCarrierList {
{
offsetToCarrier 0,
subcarrierSpacing kHz30,
carrierBandwidth 51
}
}
},
initialUplinkBWP {
genericParameters {
locationAndBandwidth 13750,
subcarrierSpacing kHz30
},
rach-ConfigCommon setup: {
rach-ConfigGeneric {
prach-ConfigurationIndex 160,
msg1-FDM one,
msg1-FrequencyStart 3,
zeroCorrelationZoneConfig 15,
preambleReceivedTargetPower -110,
preambleTransMax n7,
powerRampingStep dB4,
ra-ResponseWindow sl20
},
ssb-perRACH-OccasionAndCB-PreamblesPerSSB one: n8,
ra-ContentionResolutionTimer sf64,
prach-RootSequenceIndex l139: 1,
msg1-SubcarrierSpacing kHz30,
restrictedSetConfig unrestrictedSet,
msg3-transformPrecoder enabled
},
pusch-ConfigCommon setup: {
...
},
pucch-ConfigCommon setup: {
...
}
},
timeAlignmentTimerCommon infinity
},
ssb-PositionsInBurst {
...
},
ssb-PeriodicityServingCell ms20,
tdd-UL-DL-ConfigurationCommon {
...
},
...
},
ue-TimersAndConstants {
...
RrcSetup (SA)
: This is the RrcSetup message sent by gNB to enable transform precoding for PUSCH after msg1. (
{
message c1: rrcSetup: {
rrc-TransactionIdentifier 0,
criticalExtensions rrcSetup: {
radioBearerConfig {
...
},
masterCellGroup {
...
},
physicalCellGroupConfig {
...
},
spCellConfig {
spCellConfigDedicated {
initialDownlinkBWP {
pdcch-Config setup: {
...
},
pdsch-Config setup: {
...
},
firstActiveDownlinkBWP-Id 0,
uplinkConfig {
initialUplinkBWP {
pucch-Config setup: {
...
},
pusch-Config setup: {
txConfig codebook,
dmrs-UplinkForPUSCH-MappingTypeA setup: {
dmrs-AdditionalPosition pos1,
transformPrecodingEnabled {
}
},
pusch-PowerControl {
...
},
resourceAllocation resourceAllocationType1,
codebookSubset nonCoherent,
maxRank 1,
uci-OnPUSCH setup: {
...
}
},
srs-Config setup: {
...
}
},
firstActiveUplinkBWP-Id 0,
pusch-ServingCellConfig setup: {
}
},
pdcch-ServingCellConfig setup: {
},
pdsch-ServingCellConfig setup: {
...
},
csi-MeasConfig setup: {
...