Amarisoft

NR SA UL TxSwitching

The purpose of this tutorial is to show you how to configure and test UL Tx Switching. The fundamental idea behind UL Tx Switching is can be illustrated below. The basic Idea can be summarized as below

Image Source : Sharetechnote

Table of Contents

Introduction

Uplink (UL) Tx Switching is a critical feature in advanced wireless communication systems, particularly within the 5G New Radio (NR) framework, designed to optimize uplink transmission in scenarios where User Equipment (UE) is constrained by hardware limitations, notably the number of available transmit (Tx) antennas. In modern NR deployments, network configurations may require simultaneous transmissions across multiple uplink carriers to maximize throughput, enhance spectral efficiency, and support carrier aggregation. However, most commercial UEs are equipped with a maximum of two Tx antennas, which restricts their ability to fully exploit these multi-carrier configurations. UL Tx Switching addresses this limitation by enabling the UE to dynamically switch its transmit resources among different uplink carriers, ensuring compliance with hardware constraints while still achieving optimal utilization of available spectrum and network resources. This mechanism plays a significant role in scenarios such as dual connectivity, carrier aggregation, and uplink MIMO, where the efficient allocation and switching of transmission paths are essential for maintaining high data rates and robust connectivity. Understanding UL Tx Switching is pivotal for engineers and practitioners working with 5G NR, as it directly impacts system performance, device capability negotiation, and overall network planning in heterogeneous deployment environments.

Summary of the Tutorial

This tutorial covers a series of test cases for NR UL Tx Switching (switchedUL mode) across multiple 3GPP releases (Rel-16, Rel-17, Rel-18), focusing on the configuration, execution, and log validation steps for each scenario. The main objective is to validate and demonstrate UL Tx switching behavior between different carrier combinations, antenna configurations, and user-specified switching controls.

Across all tests, the methodology involves:

Key configuration parameters critical to these procedures include:

The step-by-step approach ensures comprehensive validation of different UL Tx switching scenarios, covering both scheduler-driven and user-defined switching triggers, contiguous and non-contiguous carrier arrangements, and progressive feature sets across 3GPP releases.

Test Setup

Test setup for this tutorial is as shown below.

The gNB runs on one Callbox PC and each cell uses its own rf_port. The two-cell tests (Test 1 and Test 2) use rf_port 0 and 1. The three-cell tests (Test 3, 4 and 5) add rf_port 2. The DUT is a commercial UE over the air. If your UE does not support UL Tx switching, you can use Amarisoft UEsim with the UE configuration file given in each Configuration section.

Callbox PC with SDR boards and antennas and a commercial UE as DUT

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 : 1TX -> 2TX Switching, switchedUL (Rel 16)

This test is to test and show the concept of a simplest cases of UL Tx Switching. It is the case where (according to the scheduling by gNB) UE switches from 1Tx carrier to 2Tx carrier with switchedUL mode.

The specific scenation implemented in this test is illustrated as below

The FDD carrier (n7) is the carrier1 side and is limited to max rank 1. It has UL opportunities all the time. The TDD carrier is the carrier2 side with max rank 2. Its UL slots come after five DL slots and one special slot.

When UL moves to the TDD UL slots, the UE switches its antennas to the TDD carrier. The FDD UL in those slots is not used. So each UL transmission uses the Tx antennas on only one carrier at a time: 1 layer on n7, or 2 layers on the TDD carrier.

Test 1 scenario with FDD n7 at max rank 1 switching to TDD at max rank 2

Configuration

I used the enb-ul-tx-switching-CA-rel16.cfg on gNB (NOTE : If you use Amarisoft UEsim as a DUT instead of commercial UE, use ue-ul-tx-switching-CA-rel16.cfg for UEsim configuration)

config directory listing with enb.cfg linked to enb-ul-tx-switching-CA-rel16.cfg

In enb-ul-tx-switching-CA-rel16.cfg, followings are configured.

First note that two antenna is configured for DL for both carriers (N_NR_ANTENNA_DL = 2) and for UL for both carriers (N_ANTENNA_UL = 2). In this test, N_ANTENNA_UL = 2 does not necessarily mean 2 layer(rank 2). The number of layer(max rank) will be specified to 1 or 2  depending on the situation. (NOTE : In this test, the max rank of carrier 2 will be configured to 1).  The mode of TX switching operation can be configured to various different way with two flags UL_TX_SWITCH_OPT and UL_TX_SWITCH_ACT).

In this file N_CELL is 2 and NR_TDD is 0, so the first cell is FDD. NR_BANDWIDTH is 20. USE_SRS and NR_SRS_PERIODIC are both 1. These two settings affect the max rank and the number of UL layers in this tutorial. The ul_quality activation measures UL rank and CQI on the SRS of carrier 2.

The three switching flags are UL_TX_SWITCH_OPT 1 (switchedUL), UL_TX_SWITCH_SLOTS 0 (all UL slots allowed) and UL_TX_SWITCH_ACT 1 (UL quality). UL_TX_SWITCH_OPT 0 gives dualUL. UL_TX_SWITCH_ACT 0 activates switching immediately when the SCell is activated. Set UL_TX_SWITCH_SLOTS to 1 if you want to limit the UL slots of each carrier with active_slots. Test 5 does this.

Test 1 defines with N_CELL 2 and the three UL_TX_SWITCH flags underlined

This configuration defines the first NR cell on rf_port: 0 and sets it up as an FDD cell (with subcarrier_spacing: 15 and ssb_subcarrier_spacing: 15). It then adds secondary cells for carrier aggregation using scell_list, and enables UL carrier aggregation on those SCells by setting ul_allowed: true. Finally, it enables NR UL TX switching for this cell with priority: 15, which assigns the UL Tx switching priority for the band (lower value means higher priority); in a 2-cell setup, priority: 15 corresponds to the carrier1 role, while priority: 0 corresponds to carrier2.

The first cell is cell_id 0x01 with n_id_cell 500, in band 7 at dl_nr_arfcn 526500. The scell_list contains cell_id 2 with ul_allowed: true. The cell_id 0x03 entry is inside #if N_CELL == 3. It is not used in this test because N_CELL is 2.

The uplink_tx_switch object holds only priority: 15. The comment says this is equivalent to role: "carrier1". Every cell that takes part in UL Tx switching needs its own uplink_tx_switch object, so the second cell has one too.

First cell n7 FDD with scell_list and uplink_tx_switch priority 15 for Test 1

This second nr_cell_list entry configures a TDD NR cell on rf_port: 1 (with subcarrier_spacing: 30 and ssb_subcarrier_spacing: 30) and defines its TDD timing using tdd_ul_dl_config.pattern1 (e.g., dl_slots, dl_symbols, ul_slots, ul_symbols), because UL TX switching decisions matter on UL-capable slots/symbols. UL TX Switching is enabled with uplink_tx_switch.priority: 0, which gives this band the highest UL TX switching priority (and in a 2-cell setup corresponds to the “carrier2” role). The switching behavior is further controlled by uplink_tx_switch.activation (e.g., "ul_quality"), optionally constrained by uplink_tx_switch.preferred_option (e.g., "switchedUL"), and time-gated by uplink_tx_switch.active_slots, which acts like the carrier-specific slot mask (the equivalent of carrier2_slots) telling the scheduler which slots are eligible for UL scheduling on this carrier when switching is triggered.

In most of the use case, the max rank of carrier 2 is set to 2. The mode of UL Tx Activation is set to 'ulquality'. In this mode, UL Tx Switching happens based on the quality of UL channel. UL Tx Switching will be activated when the signal on carrier 2 (as measured by SRS) has an UL rank greater than 1 and an UL CQI above ul_quality_ri2_cqi_threshold

The second cell is cell_id 0x02 on rf_port 1 with n_id_cell 501. It is in band 78 at dl_nr_arfcn 632628. The TDD pattern has period 5 ms with dl_slots 5, dl_symbols 6, ul_slots 4 and ul_symbols 6. With 30 kHz SCS, a 5 ms period holds 10 slots. So slots 6 to 9 are the full UL slots, and UL can switch to this carrier only there. The prach block (prach_config_index 160) is the usual one for this TDD cell and has nothing specific to UL Tx switching.

The pusch block sets max_rank: 2. This later appears as maxRank 2 in the SCC pusch-Config. The uplink_tx_switch object sets priority: 0, the equivalent of role "carrier2". activation: "ul_quality" is enabled by UL_TX_SWITCH_ACT 1, and preferred_option: "switchedUL" is enabled by UL_TX_SWITCH_OPT 1. ul_quality_ri2_cqi_threshold is not set, so its default value 5 is used.

active_slots : [0, 0, 0, 0, 0, 0, 0, 1, 1, 1] is inside #if UL_TX_SWITCH_SLOTS == 1. UL_TX_SWITCH_SLOTS is 0 in this test, so this line is not used. UL can be scheduled in all UL slots.

Second cell n78 TDD with tdd_ul_dl_config pattern1 for Test 1

Second cell pusch max_rank 2 and uplink_tx_switch block for Test 1

Perform the Test

Check if the cell is configured as intended. Check out the output of 'cell phy' and cell command.

cell phy lists 0x001 as NR n7 on port 0, with DL ARFCN 526500, UL ARFCN 502500 and 15 kHz SCS. This is the FDD carrier1. 0x002 is NR n78 on port 1 at ARFCN 632628 with 30 kHz SCS. This is the TDD carrier2.

The UL ANT and NL columns show 2 and 2 for both cells. These values do not tell you the UL rank in use. The rank per carrier is set later by maxRank in the RRC reconfiguration.

cell phy output with n7 FDD carrier1 and n78 TDD carrier2, UL ANT 2 NL 2

Now power on UE and wait until it completes attach and establishment of 2CC CA for both uplink and downlink.

In the t trace, the C column is 2 in both the DL part and the UL part. This means 2CC CA is up in both directions. In this run DL shows cqi 15, ri 2 and mcs around 23, with a bitrate of about 225 Mbps. UL shows mcs around 25.6 and a bitrate of about 100 Mbps.

t trace with C column 2 for DL and UL showing 2CC CA in Test 1

Log Analysis

Sample Log

The gNB sends UECapabilityEnquiry and sets ue-CapabilityEnquiryExt -> ue-CapabilityRequestFilterCommon -> uplinkTxSwitchRequest-r16: true. This explicitly requests the UE to include its NR UL TX Switching (Rel-16) capability information in the subsequent UECapabilityInformation, so the gNB can decide whether UL TX switching can be enabled and how it should be configured for the UE.

The frequencyBandListFilter asks for bandNR 7 and bandNR 78, the two bands of this test. rrc-SegAllowed-r16 is also enabled. The UE capability information comes back at 09:12:24.689, 48 ms later. The WebGUI then lists NR band combinations and UplinkTxSwitch band combinations right after it.

UE capability enquiry with uplinkTxSwitchRequest-r16 true for bands 7 and 78

This UE capability view shows that the UE reports a dedicated “UL Tx Switch” band combination, meaning it supports UL Tx switching between two UL-capable NR carriers under a specific CA setup. In the example, UL Tx Switch → Comb. 1 indicates a configuration like DL n7A + UL n7A together with DL n78A + UL n78A, where the UE can keep the overall CA band combination active but select which UL carrier actually gets the UE transmitter (switching UL between n7 and n78 according to the gNB’s UL Tx switching control).

The UE Caps window reports NR bands 7 and 78. The NR CA list has four combinations. Two of them carry UL on n7 only or on n78 only, and the other two are single band. None of them has UL on both bands. The only combination with UL on both n7 and n78 is the one under UL Tx Switch.

UE caps window with UL Tx Switch combination DL N7A + UL N7A and DL N78A + UL N78A

This is more detailed information about UL Tx Switching. This UplinkTxSwitch band combinations capability report tells the gNB that the UE supports an UL Tx switching CA combination with bands: ["DL N7A + UL N7A", "DL N78A + UL N78A"], and it describes the UL Tx switching behavior via uplink_tx_switch.band_pairs where band_1: 7 and band_2: 78 are paired with option: "switchedUL" and twoT: false (i.e., UL is switched between the two carriers rather than transmitting UL on both at the same time). The presence of release: 16 indicates this is the UE’s Rel-16 UL Tx switching capability set that the gNB can use when deciding whether to activate UL Tx switching and how to schedule UL on n7 vs n78.

features_dl and features_ul both show MIMO 2 at 20 MHz, with SCS 15 kHz on n7 and SCS 30 kHz on n78. twoT is false in this Rel-16 report. In the Rel-17 and Rel-18 tests later in this tutorial it is true.

UplinkTxSwitch band combinations with band pair 7 and 78, switchedUL, twoT false

This UE capability information shows that the UE supports UL Tx switching for a specific NR CA pair under supportedBandCombinationList-uplinkTxSwitch-r16. In supportedBandPairListNR-r16, the UE reports bandIndexUL1-r16: 1 and bandIndexUL2-r16: 2, and it also provides uplinkTxSwitchingPeriod-r16: n140us, which is the minimum time gap the UE needs to switch its UL transmitter between the two UL bands. The UE further confirms the supported switching mode via uplinkTxSwitching-OptionSupport-r16: switchedUL, meaning UL is performed on one carrier at a time with switching, rather than simultaneous UL transmission on both carriers

The bandList of this combination has bandNR 7 and bandNR 78, each with ca-BandwidthClassDL-NR a and ca-BandwidthClassUL-NR a. ca-ParametersNR reports simultaneousRxTxInterBandCA supported and diffNumerologyWithinPUCCH-GroupSmallerSCS supported. The second one matters here because n7 uses 15 kHz SCS and n78 uses 30 kHz SCS.

UE capability information with supportedBandPairListNR-r16 and n140us period

In this RRC reconfiguration, the gNB configures the PCC (carrier1) UL MIMO limit by setting pusch-Config.setup.maxRank: 1. This means the UE is only allowed to transmit rank-1 (single-layer) PUSCH on this carrier, so even when NR UL TX switching selects this carrier for UL in a given slot, the scheduler must keep UL transmission to one layer (no rank-2/4 UL) while this carrier is the active UL leg.

maxRank 1 is under spCellConfig, uplinkConfig and initialUplinkBWP. That is how you know it applies to the PCC. The same pusch-Config uses txConfig codebook, codebookSubset nonCoherent and mcs-Table qam256.

RRC reconfiguration with maxRank 1 in the PCC pusch-Config

In this RRC reconfiguration, the gNB enables the UL Tx switching configuration by setting uplinkTxSwitching-r16.setup.uplinkTxSwitchingPeriodLocation-r16: TRUE, and it assigns the UL Tx switching “carrier1” role to this cell via uplinkTxSwitching-r16.setup.uplinkTxSwitchingCarrier-r16: carrier1. This means the PCC is explicitly labeled as the carrier1 side of the UL Tx switching pair, so when switching is triggered the scheduler treats this cell as the carrier1 leg and applies the UL Tx switching timing/slot rules accordingly.

The uplinkTxSwitching-r16 block sits in the PCC serving cell configuration, just before pdsch-ServingCellConfig. The PCC is the n7 cell in this test. This matches priority: 15 on cell 0x01 in the gNB configuration.

RRC reconfiguration with uplinkTxSwitching-r16 setting the PCC as carrier1

In this RRC reconfiguration, the gNB adds an SCC using sCellToAddModList with sCellIndex: 1, and it defines that SCC as a TDD carrier in band n78 via frequencyBandList: 78. The SCC’s carrier numerology is set through scs-SpecificCarrierList.subcarrierSpacing: kHz30 (with its own absoluteFrequencyPointA / SSB frequency parameters), so this SCC becomes the n78 TDD leg that can participate in NR UL TX switching together with the other UL-capable carrier.

The new SCC has physCellId 501, which is cell 0x02 in the gNB configuration. absoluteFrequencySSB is 632544 and absoluteFrequencyPointA is 632016. carrierBandwidth is 51 at kHz30, which is the 20 MHz bandwidth of this cell.

RRC reconfiguration adding SCC sCellIndex 1 in TDD band 78

In this RRC reconfiguration, the gNB configures the SCC (the UL Tx switching “carrier2” side) to allow higher UL MIMO by setting pusch-Config.setup.maxRank: 2. This means that when UL Tx switching selects this SCC for UL transmission in a given slot, the UE may transmit up to rank-2 (two layers) on PUSCH on this carrier, unlike the PCC case where maxRank: 1 limited it to single-layer UL.

maxRank 2 is under uplinkConfig and initialUplinkBWP of the SCC entry. The other pusch-Config fields here match the PCC: txConfig codebook, codebookSubset nonCoherent and mcs-Table qam256. This maxRank 2 comes from max_rank: 2 in the pusch block of cell 0x02.

RRC reconfiguration with maxRank 2 in the SCC pusch-Config

In this RRC reconfiguration, the gNB assigns this cell the UL Tx switching “carrier2” role by setting uplinkTxSwitching-r16.setup.uplinkTxSwitchingCarrier-r16: carrier2. It also sets uplinkTxSwitching-r16.setup.uplinkTxSwitchingPeriodLocation-r16: FALSE, meaning the configuration does not indicate that the UL Tx switching period information is provided via the “period location” signaling, so this cell is mainly being identified as the carrier2 leg of the UL Tx switching pair for subsequent UL scheduling and switching control.

NOTE : uplinkTxSwitchingPeriodLocation-r16: FALSE tells UE where to place the UL Tx switching gap when UE switches UL Tx from carrier1 to carrier2. UE needs a switching period (e.g., 35 µs or 140 µs) to retune RF, so UE cannot transmit UL during this time. When it is FALSE, UE applies the gap with a specific alignment, so the gap is typically absorbed on one side of the switching boundary (often on the source carrier just before the switch) rather than being shared between the source and target carriers.

This uplinkTxSwitching-r16 block is in the SCC part of the message, so it applies to the n78 cell. The PCC is carrier1 and this SCC is carrier2. The UE now knows both ends of the switching pair.

RRC reconfiguration with uplinkTxSwitching-r16 setting the SCC as carrier2

uplinkTxSwitchingOption-r16: switchedUL tells UE that UL Tx switching is done by switching the UE transmitter between the two UL carriers. UE transmits UL on only one carrier at a time, and it moves the UL transmission to the other carrier when switching is triggered. As a result, the scheduler should not expect simultaneous UL transmission on both carriers, and it must account for the switching gap when changing the active UL carrier.

uplinkTxSwitchingOption-r16 comes at the end of the cell group configuration, after the SCC settings. It is set once for the switching pair and not per cell. It matches preferred_option: "switchedUL" in the gNB configuration and the switchedUL support that the UE reported.

RRC reconfiguration with uplinkTxSwitchingOption-r16 switchedUL

This Resource Block Allocation view shows how the gNB is using NR UL Tx Switching across two carriers. The PCC UL view is dominated by PUSCH (red) and it is scheduled as 1 layer, which matches the earlier pusch-Config.maxRank: 1 setting on the PCC. The SCC (TDD) DL/UL view shows alternating PDSCH (blue) and PUSCH (red), and the UL part is scheduled as 2 layer, which matches pusch-Config.maxRank: 2 on the SCC. With uplinkTxSwitchingOption-r16: switchedUL, the UL transmission is effectively placed on one carrier at a time, so you see UL activity concentrated on the PCC (rank1) in some intervals and on the SCC (rank2) in other intervals, aligned with the SCC’s UL-capable TDD slots.

There are three rows: #1 DL and #1 UL for the PCC, and #2 DL/UL for the TDD SCC. The time axis starts at 09:12:26.024 and covers frames 948 and 949.

The gaps in the PCC UL row line up with the PUSCH groups on the SCC. When the SCC has PUSCH, the PCC has none. When the SCC is in its DL slots, PUSCH comes back to the PCC. This is the switchedUL behavior of this test.

RB allocation with 1 layer PUSCH on PCC and 2 layer PUSCH on TDD SCC

Test 2 : 2TX -> 2TX Switching, switchedUL  (Rel 17)

This test is to test and show the concept of a simplest cases of UL Tx Switching. It is the case where (according to the scheduling by gNB) UE switches from 1Tx carrier to 2Tx carrier with switchedUL mode.

The specific scenation implemented in this test is illustrated as below

In this test both carriers have max rank 2. The FDD carrier is n7 and the TDD carrier is n38. When UL moves to the TDD UL slots, the UE switches its antennas and the FDD UL in those slots is not used. Each UL transmission uses 2 layers, whichever carrier is active.

Test 2 scenario with FDD n7 and TDD n38 both at max rank 2

Configuration

I used the gnb_tx_switch_fdd_2tx_tdd_2tx_slot0.cfg on gNB (NOTE : If you use Amarisoft UEsim as a DUT instead of commercial UE, use ue_tx_switch_fdd_2tx_tdd_2tx.cfg for UEsim configuration)

NOTE : The contents of this configuration file is indentical to the contents of the configuration file for Test 1 (Release 16 test). This test is for Release 17 UL Tx Switching test. Then where the difference comes from ? The difference comes from UE capability information message. So make it sure that your DUT sends UE capability Information properly configured for Release 17 UL Tx Switching as shown in Log Analysis.

config directory listing with enb.cfg linked to gnb_tx_switch_fdd_2tx_tdd_2tx_slot0.cfg

In gnb_tx_switch_fdd_2tx_tdd_2tx_slot0.cfg , followings are configured.

First note that two antenna is configured for DL for both carriers (N_NR_ANTENNA_DL = 2) and for UL for both carriers (N_ANTENNA_UL = 2). In this test, N_ANTENNA_UL = 2 does not necessarily mean 2 layer(rank 2). The number of layer(max rank) will be specified to 1 or 2  depending on the situation. (NOTE : In this test, the max rank of carrier 2 will be configured to 1).  The mode of TX switching operation can be configured to various different way with two flags UL_TX_SWITCH_OPT and UL_TX_SWITCH_ACT.

This file uses an older set of defines. N_CELL is 2, N_NR_ANTENNA_DL is 2 and N_ANTENNA_UL is 2. There is no UL_TX_SWITCH_SLOTS define. UL_TX_SWITCH_OPT is also mapped the other way round from the Test 1 file. Here 0 means switchedUL and 1 means dualUL.

In this file UL_TX_SWITCH_OPT is 0 (switchedUL) and UL_TX_SWITCH_ACT is 1 (UL quality). UL_TX_SWITCH_ACT is wrapped in #ifndef, so it can be set from outside the file. With these two flags you get four operation modes: switchedUL or dualUL, each with immediate or UL quality activation.

Test 2 defines with UL_TX_SWITCH_OPT 0 and UL_TX_SWITCH_ACT 1

This is the configuration for the first cell. The cell is configured to be FDD and assigned as "carrier1".

The first cell is cell_id 0x01 on rf_port 0 in band 7 at dl_nr_arfcn 526500, with 15 kHz SCS. scell_list adds cell_id 2 with ul_allowed: true, so UL CA is configured. The cell_id 0x03 entry is inside #if N_CELL == 3 and is not used.

In this file uplink_tx_switch uses role : "carrier1" instead of priority. The Test 1 file uses priority: 15 for the same purpose. With two cells, priority: 15 is equivalent to carrier1 and priority: 0 is equivalent to carrier2.

First cell n7 FDD with uplink_tx_switch role carrier1 for Test 2

Following is the configuration of the second cell. In UL Tx Switching situation, the second cell is configured to TDD and assigned as 'carrier2. In most of the use case, the max rank of carrier 2 is set to 2. The mode of UL Tx Activation is set to 'ulquality'. In this mode, UL Tx Switching happens based on the quality of UL channel. UL Tx Switching will be activated when the signal on carrier 2 (as measured by SRS) has an UL rank greater than 1 and an UL CQI above ul_quality_ri2_cqi_threshold

The second cell is cell_id 0x02 on rf_port 1 with n_id_cell 501. It is in band 38 at dl_nr_arfcn 522000 with 30 kHz SCS. The TDD pattern has period 5 ms with dl_slots 5, dl_symbols 6, ul_slots 4 and ul_symbols 6. UL Tx switching to this carrier happens in these UL slots.

pusch max_rank: 2 enables 2 layer UL on this cell. uplink_tx_switch sets role : "carrier2". activation: "ul_quality" is the switching condition, enabled by UL_TX_SWITCH_ACT 1.

carrier2_slots : [0, 0, 0, 0, 0, 0, 0, 0, 1, 1] would set the switching points by slot position. It is inside #if UL_TX_SWITCH_OPT == 1, so it is not used in this test where UL_TX_SWITCH_OPT is 0.

Second cell n38 TDD with tdd_ul_dl_config pattern1 for Test 2

Second cell pusch max_rank 2 and uplink_tx_switch role carrier2 for Test 2

Perform the Test

Check if the cell is configured as intended. Check out the output of 'cell phy' and cell command.

cell phy lists 0x001 as NR n7 with DL ARFCN 526500, UL ARFCN 502500 and 15 kHz SCS. This is carrier1. 0x002 is NR n38 at ARFCN 522000 with 30 kHz SCS. This is carrier2. Both cells show ANT 2 and NL 2 in the UL columns. The UL rank actually used per carrier comes from maxRank in the RRC configuration.

The cell command shows the same two cells with pci 500 and 501, on TAC 0x000064 and PLMN 00101.

cell phy and cell output with n7 carrier1 and n38 carrier2

Now power on UE and wait until it completes attach and establishment of 2CC CA for both uplink and downlink.

The C column in the t trace must be 2 for both DL and UL. That means 2CC CA is up in both directions. Check this before you go on to the log analysis.

t trace with C column 2 for DL and UL confirming 2CC CA before Test 2 log analysis

Log Analysis

Sample Log

The first thing to be checked out in the log is about whether the uplinkTxSwitchRequest is configured in ueCapabilityEnquiry.

In this run the frequencyBandListFilter asks for bandNR 7 and bandNR 38, the two bands of this test. The log is filtered with TxSwitch in the search field, so every UL Tx switching IE is highlighted. The UE capability information follows at 15:56:29.370.

UE capability enquiry with uplinkTxSwitchRequest-r16 true for bands 7 and 38

Then check out the band combination for UL Tx Switch in UE capability Information are properly set as you expected. Make it sure and check, check, check on this since there are many cases where a certain feature is not activated properly due to mismatch between what UE are really capable and what is configured in configuration file.

The UE Caps window reports NR bands 7 and 38. The NR CA list has four combinations, and none of them has UL on both bands. Under UL Tx Switch there is one combination: DL N7A + UL N7A with DL N38A + UL N38A. This is the only way to get UL on both n7 and n38 in this test.

UE caps window with UL Tx Switch combination DL N7A + UL N7A and DL N38A + UL N38A

In case of UL Tx UL Switch Release 16, just a few notification would be enough (uplinkTxSwitchingPeriod, uplinkTxSwitching-OptionSupport for example as in this case).

supportedBandCombinationList-UplinkTxSwitch-r16 lists bandNR 7 and bandNR 38 with ca-BandwidthClassDL-NR a and ca-BandwidthClassUL-NR a. In supportedBandPairListNR-r16, bandIndexUL1-r16 1 and bandIndexUL2-r16 2 point to these two bands. uplinkTxSwitchingPeriod-r16 is n140us. This is the time gap the UE needs to switch.

supportedBandCombinationList-UplinkTxSwitch-r16 for n7 and n38 with n140us period

In case of UL Tx UL Switch Release 17,  you would see the Rel 17 feature notification like uplinkTxSwitchingPeriod2T2T.

uplinkTxSwitching-OptionSupport-r16 is switchedUL. This is the mode of switching. Right after it, supportedBandCombinationList-UplinkTxSwitch-v1700 carries supportedBandPairListNR-v1700 with uplinkTxSwitchingPeriod2T2T-r17 n210us. This is the gap for 2TX to 2TX switching. It is longer than the 140 us Rel-16 gap.

UE capability with switchedUL option and uplinkTxSwitchingPeriod2T2T-r17 n210us

Once gNB think it got everything to make any decision to enable UL Tx Switching, it configures the switching in RRC Reconfiguration.

First gNB configures maxRank for the carrier2 (If the carrier1 is PCC cell as in this case, you need to check this under spCellConfig IE) in RRC Reconfiguration.

maxRank 2 is in the pusch-Config of the first RRC reconfiguration, with txConfig codebook and codebookSubset nonCoherent. In Test 1 the PCC had maxRank 1. Here it is 2, so the PCC can also carry 2 layer UL. This is the 2TX side of the 2TX to 2TX switching.

RRC reconfiguration with maxRank 2 in the pusch-Config of carrier1

Then it configures uplinkTxSwitchingPeriodLocation and uplinkTxSwitchingCarrier in uplinkTxSwitching IE. If the switching happens between PCC and SCC in UL CA, usually PCC is designated to be carrier1 and uplinkTxSwitchingPeriodLocation is set to TRUE.

uplinkTxSwitchingPeriodLocation-r16 TRUE means the UL Tx switching gap is applied to this cell, the PCC. uplinkTxSwitchingCarrier-r16 carrier1 makes the PCC the carrier1 of the pair. This matches role : "carrier1" in the gNB configuration.

uplinkTxSwitching-r16 with PeriodLocation TRUE and carrier1 on the PCC

Then gNB configures UL maxRank of carrier2 to 2. You can confirm on this with maxRank IE of SCC UL in this test.

maxRank 2 is in the uplinkConfig of the SCC. It comes from max_rank: 2 in the pusch block of cell 0x02. Both carriers now allow rank 2 in this test.

RRC reconfiguration with maxRank 2 in the pusch-Config of carrier2

Then it configures uplinkTxSwitchingPeriodLocation and uplinkTxSwitchingCarrier in uplinkTxSwitching IE. If the switching happens between PCC and SCC in UL CA, usually SCC is designated to be carrier2 and uplinkTxSwitchingPeriodLocation is set to FALSE.

uplinkTxSwitchingPeriodLocation-r16 FALSE means the switching gap is not applied to this cell, the SCC. The gap is taken on the PCC, which has TRUE. uplinkTxSwitchingCarrier-r16 carrier2 matches role : "carrier2" in the gNB configuration.

uplinkTxSwitching-r16 with PeriodLocation FALSE and carrier2 on the SCC

Then gNB specifies uplinkTxSwitchingOption ether to switchedUL or dualUL. In this test, gNB configured it to switchedUL and enable uplinkTxSwitching-2T-Mode..

uplinkTxSwitchingOption-r16 switchedUL means UL goes on one carrier at a time. uplinkTxSwitching-2T-Mode-r17 enabled turns on 2TX to 2TX switching. This field was not in the Test 1 log. There the UE did not report the Rel-17 2T2T capability.

uplinkTxSwitchingOption-r16 switchedUL and uplinkTxSwitching-2T-Mode-r17 enabled

You can visually confirm how UL switching happens in RB Map plot.

The top row is the PCC DL, the middle row is the PCC UL, and the bottom row is the n38 SCC DL/UL. At the marked switching point, PUSCH on the PCC stops. PUSCH on the SCC starts in the next slot. The PCC UL comes back after the SCC UL slots end. The same pattern repeats in every TDD period from 15:56:36.064 onward.

RB allocation with the UL Tx switching point from PCC PUSCH to n38 SCC PUSCH

Test 3 : 2TX -> 2TX Switching(One Cell -> Two Contiguous Cell), switchedUL  (Rel 17)

This test is to test and show the concept of a simplest cases of UL Tx Switching. It is the case where (according to the scheduling by gNB) UE switches from 2Tx carrier to 2Tx carrier with switchedUL mode. In terms of the number of antenna involved in switching, this test is similar to previous test. But in this test, Carrier 2 consists of 2 contiguous cells with both cells having 2 layers whereas the carrier 2 consists of only one cell in previous test.

The specific scenation implemented in this test is illustrated as below

Carrier1 is FDD n7 with max rank 2. The carrier2 side is made of two TDD n78 cells, each with max rank 2. The two n78 cells are consecutive and share the same Tx antennas. Both can carry 2 layer UL in the same UL slots. When UL moves from n7 to n78, the n7 UL in those slots is not used.

Test 3 scenario with FDD n7 and two contiguous TDD n78 cells at max rank 2

Configuration

I used the enb-ul-tx-switching-CA-rel17.cfg on gNB (NOTE : If you use Amarisoft UEsim as a DUT instead of commercial UE, use ue-ul-tx-switching-CA-rel17.cfg for UEsim configuration)

config directory listing with enb.cfg linked to enb-ul-tx-switching-CA-rel17.cfg

In enb-ul-tx-switching-CA-rel17.cfg, followings are configured.

First note that two antenna is configured for DL for both carriers (N_NR_ANTENNA_DL = 2) and for UL for both carriers (N_ANTENNA_UL = 2). In this test, N_ANTENNA_UL = 2 does not necessarily mean 2 layer(rank 2). The number of layer(max rank) will be specified to 1 or 2  depending on the situation. (NOTE : In this test, the max rank of carrier 2 will be configured to 1).  The mode of TX switching operation can be configured to various different way with two flags UL_TX_SWITCH_OPT and UL_TX_SWITCH_ACT).

The difference from Test 1 is N_CELL 3. This enables the #if N_CELL == 3 blocks, which add the third cell and its entry in scell_list. NR_TDD is 0 for the first cell. N_ANTENNA_DL and N_ANTENNA_UL are 2 for all cells.

The switching flags are the same as in Test 1: UL_TX_SWITCH_OPT 1 (switchedUL), UL_TX_SWITCH_SLOTS 0 (all UL slots) and UL_TX_SWITCH_ACT 1 (UL quality). USE_SRS and NR_SRS_PERIODIC are 1, so periodic SRS is there for the ul_quality measurement.

Test 3 defines with N_CELL 3 and the UL_TX_SWITCH flags underlined

This configuration defines the first NR cell on rf_port: 0 and sets it up as an FDD cell (with subcarrier_spacing: 15 and ssb_subcarrier_spacing: 15). It then adds secondary cells for carrier aggregation using scell_list, and enables UL carrier aggregation on those SCells by setting ul_allowed: true. Finally, it enables NR UL TX switching for this cell with priority: 15, which assigns the UL Tx switching priority for the band (lower value means higher priority); in a 2-cell setup, priority: 15 corresponds to the carrier1 role, while priority: 0 corresponds to carrier2.

This is the same first cell as in Test 1. In this test N_CELL is 3, so the #if N_CELL == 3 block is active. cell_id 0x03 is added to scell_list with ul_allowed: true, and UL CA is set up on both SCells. priority: 15 keeps this cell as carrier1.

First cell n7 FDD with two SCells in scell_list and priority 15 for Test 3

This second nr_cell_list entry configures a TDD NR cell on rf_port: 1 (with subcarrier_spacing: 30 and ssb_subcarrier_spacing: 30) and defines its TDD timing using tdd_ul_dl_config.pattern1 (e.g., dl_slots, dl_symbols, ul_slots, ul_symbols), because UL TX switching decisions matter on UL-capable slots/symbols. UL TX Switching is enabled with uplink_tx_switch.priority: 0, which gives this band the highest UL TX switching priority (and in a 2-cell setup corresponds to the “carrier2” role). The switching behavior is further controlled by uplink_tx_switch.activation (e.g., "ul_quality"), optionally constrained by uplink_tx_switch.preferred_option (e.g., "switchedUL"), and time-gated by uplink_tx_switch.active_slots, which acts like the carrier-specific slot mask (the equivalent of carrier2_slots) telling the scheduler which slots are eligible for UL scheduling on this carrier when switching is triggered.

In most of the use case, the max rank of carrier 2 is set to 2. The mode of UL Tx Activation is set to 'ulquality'. In this mode, UL Tx Switching happens based on the quality of UL channel. UL Tx Switching will be activated when the signal on carrier 2 (as measured by SRS) has an UL rank greater than 1 and an UL CQI above ul_quality_ri2_cqi_threshold

The second cell is the same as in Test 1: cell_id 0x02 in band 78 at dl_nr_arfcn 632628, with the same TDD pattern (dl_slots 5, ul_slots 4). In this test it is the first of the two contiguous n78 cells on the carrier2 side.

It keeps max_rank: 2 and priority: 0, with activation: "ul_quality" and preferred_option: "switchedUL". UL_TX_SWITCH_SLOTS is 0 in this test, so the active_slots line is not used.

Second cell n78 TDD, the first of two contiguous n78 cells in Test 3

Second cell pusch max_rank 2 and uplink_tx_switch block for Test 3

This optional third nr_cell_list entry (enabled by #if N_CELL == 3) adds another TDD n78 cell (band: 78, subcarrier_spacing: 30, ssb_subcarrier_spacing: 30) at dl_nr_arfcn: 633960, intended to be placed contiguously relative to the cell_id: 0x02 carrier. It defines the TDD UL/DL timing with tdd_ul_dl_config.pattern1 (dl_slots, dl_symbols, ul_slots, ul_symbols) so UL Tx switching can be applied only on UL-capable slots. UL Tx switching behavior is enabled through uplink_tx_switch.priority: 0 (highest priority / “carrier2” role in 2-cell terms), with activation controlled by uplink_tx_switch.activation: "ul_quality", a preference via uplink_tx_switch.preferred_option: "switchedUL", and slot eligibility constrained by uplink_tx_switch.active_slots: [0,0,0,0,0,0,0,0,1,1,1] (the carrier-specific slot mask used when deciding where UL can be scheduled under switching).

The third cell is cell_id 0x03 on rf_port 2 with n_id_cell 502. It is in band 78 at dl_nr_arfcn 633960. The comment in the file calls it a contiguous cell, with 19.98 MHz spacing from the center of 0x02. It uses ssb_pos_bitmap "01000000" and the same TDD pattern as cell 0x02. The whole entry is inside #if N_CELL == 3.

Its uplink_tx_switch object has priority: 0, the same as cell 0x02. So both n78 cells are on the carrier2 side with equal priority. activation: "ul_quality" and preferred_option: "switchedUL" are enabled. The active_slots line is not used in this test because UL_TX_SWITCH_SLOTS is 0.

Third cell n78 at dl_nr_arfcn 633960 contiguous to cell 0x02

Third cell uplink_tx_switch with priority 0, ul_quality and switchedUL

Perform the Test

Check if the cell is configured as intended. Check out the output of 'cell phy' and cell command. 0x001 is an FDD n7 carrier identified as carrier1, and 0x002/0x003 are two contiguous TDD n78 carriers that form the carrier2 side. The ANT fields indicate the same antenna configuration is applied on both the carrier1 and carrier2 sides, while the effective UL spatial layers still depend on per-carrier UL settings such as pusch-Config.maxRank even though the RF/antenna setup is shared.

The ARFCNs are 526500 for 0x001 (n7, 15 kHz SCS), 632628 for 0x002 and 633960 for 0x003 (both n78, 30 kHz SCS). The two n78 cells sit next to each other in frequency. Their SSB ARFCNs are 632544 and 633888.

cell phy output with n7 carrier1 and two contiguous n78 cells as carrier2

Now power on UE and wait until it completes attach and establishment of 3CC CA for both uplink and downlink.

Log Analysis

Sample Log

gNB sends UECapabilityEnquiry and includes ue-CapabilityEnquiryExt -> ue-CapabilityRequestFilterCommon -> uplinkTxSwitchRequest-r16: true. This means gNB explicitly requests UE to report UL Tx Switching (Rel-16) capability in the following UECapabilityInformation, so gNB can decide whether it can configure and use UL Tx switching for the UE (e.g., switched UL between the CA carriers).

The frequencyBandListFilter asks for bandNR 7 and bandNR 78. Only two bands are listed, although three cells are configured. That is because both contiguous cells are in n78.

UE capability enquiry with uplinkTxSwitchRequest-r16 true for bands 7 and 78 in Test 3

This UE capability screen shows the UL Tx Switch band combinations that the UE can use for NR UL TX Switching. Under UL Tx Switch, Comb.1 indicates an inter-band pairing like DL N7A + UL N7A together with DL N78B + UL N78B, so UE can keep both carriers in the CA set but switch UL Tx between n7 and n78. Comb.2 indicates an intra-band pairing like DL N78A + UL N78A together with DL N78A + UL N78A, which matches the case of two contiguous n78 carriers, so UE can switch UL Tx between the two n78 UL legs based on gNB UL Tx switching control.

The UE Caps window reports NR bands 7 and 78. The NR CA list has seven combinations, and none of them carries UL on more than one band. Under UL Tx Switch, Comb. 1 uses N78B for the n78 part. Comb. 2 lists N78A twice.

UE caps window with two UL Tx Switch combinations, n7 with N78B and N78A with N78A

This UplinkTxSwitch band combinations report shows two UL Tx switching pairs under uplink_tx_switch.band_pairs. The first pair is band_1: 7 and band_2: 78, and the second pair is band_1: 78 and band_2: 78, so UE supports UL Tx switching for inter-band (n7↔n78) and intra-band (n78↔n78) CA cases. For both pairs, option: "switchedUL" means UE transmits UL on one carrier at a time and switches the UL Tx to the other carrier when needed, and twoT: true indicates UE supports the twoT-related UL Tx switching capability for these band pairs. The field release: 17 tells this capability set is reported as Rel-17.

The first entry has bands DL N7A + UL N7A and DL N78B + UL N78B. features_dl shows MIMO 2 at 20 MHz with SCS 15 kHz, and MIMO 2/2 at 20/20 MHz with SCS 30 kHz. The second value is two 20 MHz n78 carriers with 2 layers each. features_ul shows MIMO 2 for both bands.

The second entry has DL N78A + UL N78A twice, with MIMO 2 at 20 MHz and SCS 30 kHz on each.

UplinkTxSwitch band combinations with pairs 7-78 and 78-78, twoT true, release 17

This UE capability information shows an UL Tx switching capable PCC/SCC CA case under supportedBandCombinationList-uplinkTxSwitch-r16, where the band list includes bandNR: 7 (ClassDL a) and bandNR: 78 (ClassDL b) to represent an FDD–TDD inter-band combination, and it indicates the UE supports mixed numerology in this CA via diffNumerologyWithinPUCCH-GroupSmallerSCS: supported. The actual UL Tx switching pair is described in supportedBandPairListNR-r16 with bandIndexUL1-r16: 1 and bandIndexUL2-r16: 2, and the UE reports the required retuning gap with uplinkTxSwitchingPeriod-r16: n140us. Finally, uplinkTxSwitching-OptionSupport-r16: switchedUL confirms the UL Tx is performed on one carrier at a time, switching between the two UL legs rather than transmitting UL simultaneously.

featureSetCombination is 8 and supportedBandwidthCombinationSet is '1'B for this combination. bandCombination-v1540 reports srs-TxSwitch with supportedSRS-TxPortSwitch notSupported for n7 and t2r2 for n78.

UE capability information with FDD-TDD PCC/SCC combination for UL Tx switching

This UE capability information shows a TDD–TDD SCC/SCC UL Tx switching band combination under supportedBandCombinationList-uplinkTxSwitch-r16, where the bandList contains bandNR: 78 twice, meaning the UE supports UL Tx switching between two n78 carriers in the same CA set. The actual UL switching pair is described in supportedBandPairListNR-r16 with bandIndexUL1-r16: 1 and bandIndexUL2-r16: 2, and the UE reports the required switching gap as uplinkTxSwitchingPeriod-r16: n140us. Finally, uplinkTxSwitching-OptionSupport-r16: switchedUL indicates the UE transmits UL on one of the two n78 carriers at a time and switches the UL transmitter between them when needed.

This is the second combination in the list, with featureSetCombination 9. Both n78 entries use ca-BandwidthClassDL-NR a and ca-BandwidthClassUL-NR a. srs-TxSwitch reports t2r2 for both bands. supportedBandCombinationList-UplinkTxSwitch-v1700 starts right after this combination.

UE capability information with TDD-TDD SCC/SCC combination for two n78 carriers

This part of UE capability information shows the Rel-17 UL Tx switching extension under supportedBandCombinationList-uplinkTxSwitch-v1700. In supportedBandPairListNR-v1700, UE reports uplinkTxSwitchingPeriod2T2T-r17: n210us, which is the required switching gap for the Rel-17 “2T2T” UL Tx switching case. This means gNB should use the Rel-17 switching period value (210 µs here) when it schedules UL and triggers UL Tx switching under the v1700 capability set.

There are two entries in supportedBandCombinationList-UplinkTxSwitch-v1700, one for each r16 combination. Both report uplinkTxSwitchingPeriod2T2T-r17 n210us. So the n7-n78 pair and the n78-n78 pair need the same 210 us gap for 2T2T switching. The Rel-16 gap for both pairs is n140us.

supportedBandCombinationList-UplinkTxSwitch-v1700 with two n210us 2T2T entries

This RRC reconfiguration sets pusch-Config.setup.maxRank: 2 for the PCC (carrier1). This means when UL Tx switching selects carrier1 for UL in a slot, UE can transmit PUSCH with up to 2 layers, so carrier1 is no longer limited to rank-1 UL and can use the same UL MIMO rank as the other UL leg if it is configured similarly.

maxRank 2 is under spCellConfig, uplinkConfig and initialUplinkBWP of the PCC. In Test 1 the same field was maxRank 1.

RRC reconfiguration with maxRank 2 in the PCC pusch-Config for Test 3

This RRC reconfiguration adds the first SCC using sCellToAddModList with sCellIndex: 1, and it defines this SCC as a TDD n78 carrier by setting frequencyBandList: 78. This SCC becomes one UL leg that UL Tx switching can select for UL transmission when switchedUL operation is used.

The first SCC has physCellId 501, absoluteFrequencySSB 632544 and absoluteFrequencyPointA 632016, with carrierBandwidth 51 at kHz30. This is cell 0x02 (n78, dl_nr_arfcn 632628) in the gNB configuration.

RRC reconfiguration adding first SCC sCellIndex 1 in TDD band 78

This RRC reconfiguration sets pusch-Config.setup.maxRank: 2 for the SCC (carrier2). This means when UL Tx switching selects carrier2 for UL in a slot, UE can transmit PUSCH with up to 2 layers, so the scheduler can use rank-2 UL on this SCC while UL is switched onto it.

maxRank 2 is in uplinkConfig and initialUplinkBWP of sCellIndex 1. The other pusch-Config fields are txConfig codebook, codebookSubset nonCoherent and mcs-Table qam256.

RRC reconfiguration with maxRank 2 for the first SCC as carrier2

This RRC reconfiguration configures UL Tx switching for this cell by setting uplinkTxSwitching-r16.setup.uplinkTxSwitchingCarrier-r16: carrier2, so this cell is treated as the carrier2 leg in the UL Tx switching pair. It also sets uplinkTxSwitching-r16.setup.uplinkTxSwitchingPeriodLocation-r16: FALSE, so UE applies the UL switching gap with the FALSE placement rule(i.e, UE places the UL Tx switching gap on a specific side of the switch (typically absorbed on one carrier) instead of sharing the gap across both carriers around the boundary) when switching UL Tx to or from this carrier.

This uplinkTxSwitching-r16 block belongs to the first SCC (sCellIndex 1). It comes after firstActiveUplinkBWP-Id 0 and pusch-ServingCellConfig in the configuration of that SCC.

uplinkTxSwitching-r16 with carrier2 and PeriodLocation FALSE for the first SCC

This RRC reconfiguration adds the second SCC using sCellToAddModList with sCellIndex: 2, and it defines it as another TDD n78 carrier by setting frequencyBandList: 78. Because it is configured as contiguous to the first SCC (same band and numerology via scs-SpecificCarrierList.subcarrierSpacing: kHz30 with its own absoluteFrequencyPointA), it forms the second n78 leg that UL Tx switching can switch to when switchedUL operation is used.

The second SCC has physCellId 502 and absoluteFrequencySSB 633888. absoluteFrequencyPointA is 633348 and carrierBandwidth is 51. This is cell 0x03 (dl_nr_arfcn 633960) in the gNB configuration.

RRC reconfiguration adding second SCC sCellIndex 2 in band 78 contiguous to the first

This RRC reconfiguration sets pusch-Config.setup.maxRank: 2 for the SCC on the carrier2 side. This means UE can transmit PUSCH with up to 2 layers when UL Tx switching selects this SCC for UL, so the scheduler can use rank-2 UL on this carrier during switched UL operation.

maxRank 2 is in the uplinkConfig of sCellIndex 2. So all three UL carriers in this test have maxRank 2: the PCC, the first SCC and the second SCC.

RRC reconfiguration with maxRank 2 for the second SCC

This RRC reconfiguration assigns this SCC as the UL Tx switching carrier2 by setting uplinkTxSwitching-r16.setup.uplinkTxSwitchingCarrier-r16: carrier2. It also sets uplinkTxSwitching-r16.setup.uplinkTxSwitchingPeriodLocation-r16: FALSE, so UE applies the switching gap with the FALSE placement rule when UL Tx is switched to or from this SCC.

Both SCCs get the same setting: carrier2 with uplinkTxSwitchingPeriodLocation-r16 FALSE. The PCC is the only carrier1. The two contiguous n78 cells together form the carrier2 side.

uplinkTxSwitching-r16 with carrier2 and PeriodLocation FALSE for the second SCC

uplinkTxSwitchingOption-r16: switchedUL tells UE to do UL Tx switching by transmitting UL on one carrier at a time and moving UL Tx to the other carrier when switching is triggered. uplinkTxSwitching2T-Mode-r17: enabled tells UE and gNB that 2T→2T switching is supported/activated, so the UL Tx switching operation can be done in the Rel-17 2T mode where the UE switches between carriers while keeping a 2-transmit-chain configuration.

These two fields are set once for the cell group, after the settings of the second SCC. In Test 1 only uplinkTxSwitchingOption-r16 was present. Here uplinkTxSwitching-2T-Mode-r17 is added, since the UE reported uplinkTxSwitchingPeriod2T2T-r17.

switchedUL option and uplinkTxSwitching-2T-Mode-r17 enabled for the 3CC setup

This Resource Block Allocation view shows UL Tx switching operating with rank-2 UL on every selectable UL leg, because pusch-Config.maxRank: 2 is configured on the PCC and on the n78 SCCs, so the red PUSCH blocks appear as “2 layer” whichever carrier is selected by uplinkTxSwitchingOption-r16: switchedUL. The switching can happen between the two n78 SCC cells because they are configured as contiguous carriers, so the UE can retune and transmit on two SCC simultaneously using the same shared 2T antenna ports

There are four rows: #1 DL, #1 UL, and the two n78 SCCs (#3 and #2 DL/UL). The two SCC rows have PUSCH in the same slots. The PCC UL row has no PUSCH in those slots. PUSCH comes back to the PCC while the SCCs are in their DL slots. The time axis starts at 16:55:56.577 and covers frames 179 to 181.

RB allocation with 2 layer PUSCH on PCC and on both contiguous n78 SCCs

Test 4 : 2TX -> 2TX Switching(One Cell -> Two Non Contiguous Cell), switchedUL  (Rel 18)

This test is to test and show the concept of a simplest cases of UL Tx Switching. It is the case where (according to the scheduling by gNB) UE switches from 2Tx carrier to 2Tx carrier with switchedUL mode. In terms of the number of antenna involved in switching, this test is similar to previous test. But in this test, Carrier 2 consists of 2 non-contiguous cells with both cells having 2 layers whereas the carrier 2 consists of two contiguous cell in previous test.

The specific scenation implemented in this test is illustrated as below

Carrier1 is FDD n7. The two TDD cells are n78 and n38. All three have max rank 2. In each TDD period there are two switching points. UL first moves from n7 to one TDD cell, and then from that cell to the other TDD cell. Only one carrier carries the 2 layer UL at any time.

Test 4 scenario with FDD n7 switching to TDD n78 and then to TDD n38

Configuration

I used the enb-ul-tx-switching-CA-rel18-sched-priority.cfg on gNB (NOTE : If you use Amarisoft UEsim as a DUT instead of commercial UE, use ue-ul-tx-switching-CA-rel18.cfg for UEsim configuration)

config directory listing with enb.cfg linked to enb-ul-tx-switching-CA-rel18-sched-priority.cfg

In enb-ul-tx-switching-CA-rel18-sched-priority.cfg, followings are configured.

First note that two antenna is configured for DL for both carriers (N_NR_ANTENNA_DL = 2) and for UL for both carriers (N_ANTENNA_UL = 2). In this test, N_ANTENNA_UL = 2 does not necessarily mean 2 layer(rank 2). The number of layer(max rank) will be specified to 1 or 2  depending on the situation. (NOTE : In this test, the max rank of carrier 2 will be configured to 1).  The mode of TX switching operation can be configured to various different way with two flags UL_TX_SWITCH_OPT and UL_TX_SWITCH_ACT).

The defines are the same as in Test 3: N_CELL 3, N_ANTENNA_DL 2, N_ANTENNA_UL 2, USE_SRS 1 and NR_SRS_PERIODIC 1. The switching flags are UL_TX_SWITCH_OPT 1, UL_TX_SWITCH_SLOTS 0 and UL_TX_SWITCH_ACT 1.

With UL_TX_SWITCH_SLOTS 0, no slot mask is applied and every UL slot is allowed on every cell. In each slot, UL is scheduled on the band with the highest priority within its active_slots, once activation is triggered.

Test 4 defines with N_CELL 3 and UL_TX_SWITCH_SLOTS 0

This configuration defines the first NR cell on rf_port: 0 and sets it up as an FDD cell (with subcarrier_spacing: 15 and ssb_subcarrier_spacing: 15). It then adds secondary cells for carrier aggregation using scell_list, and enables UL carrier aggregation on those SCells by setting ul_allowed: true. Finally, it enables NR UL TX switching for this cell with priority: 15, which assigns the UL Tx switching priority for the band (lower value means higher priority); in a 2-cell setup, priority: 15 corresponds to the carrier1 role, while priority: 0 corresponds to carrier2.

This is the same first cell as in Test 3. N_CELL is 3, so cell_id 0x03 is in scell_list with ul_allowed: true. priority: 15 is the lowest priority, so this FDD cell gets UL only when no higher priority cell takes it.

First cell n7 FDD with two SCells in scell_list and priority 15 for Test 4

This second nr_cell_list entry configures a TDD NR cell on rf_port: 1 (with subcarrier_spacing: 30 and ssb_subcarrier_spacing: 30) and defines its TDD timing using tdd_ul_dl_config.pattern1 (e.g., dl_slots, dl_symbols, ul_slots, ul_symbols), because UL TX switching decisions matter on UL-capable slots/symbols. UL TX Switching is enabled with uplink_tx_switch.priority: 0, which gives this band the highest UL TX switching priority (and in a 2-cell setup corresponds to the “carrier2” role). The switching behavior is further controlled by uplink_tx_switch.activation (e.g., "ul_quality"), optionally constrained by uplink_tx_switch.preferred_option (e.g., "switchedUL"), and time-gated by uplink_tx_switch.active_slots, which acts like the carrier-specific slot mask (the equivalent of carrier2_slots) telling the scheduler which slots are eligible for UL scheduling on this carrier when switching is triggered.

In most of the use case, the max rank of carrier 2 is set to 2. The mode of UL Tx Activation is set to 'ulquality'. In this mode, UL Tx Switching happens based on the quality of UL channel. UL Tx Switching will be activated when the signal on carrier 2 (as measured by SRS) has an UL rank greater than 1 and an UL CQI above ul_quality_ri2_cqi_threshold

The second cell is again cell_id 0x02 in band 78 at dl_nr_arfcn 632628, with the same TDD pattern (dl_slots 5, ul_slots 4). In this test it is one of the two TDD cells on the carrier2 side.

It has max_rank: 2 and priority: 0, the highest priority. Its active_slots line is [0, 0, 0, 0, 0, 0, 0, 0, 1, 1]. That line is not used in this test because UL_TX_SWITCH_SLOTS is 0.

Second cell n78 TDD, one of two non contiguous TDD cells in Test 4

Second cell max_rank 2 and uplink_tx_switch priority 0 for Test 4

This optional third nr_cell_list entry (enabled by #if N_CELL == 3) adds another TDD n38 cell (band: 38, subcarrier_spacing: 30, ssb_subcarrier_spacing: 30) at dl_nr_arfcn: 518000, intended to be placed contiguously relative to the cell_id: 0x02 carrier. It defines the TDD UL/DL timing with tdd_ul_dl_config.pattern1 (dl_slots, dl_symbols, ul_slots, ul_symbols) so UL Tx switching can be applied only on UL-capable slots. UL Tx switching behavior is enabled through uplink_tx_switch.priority: 0 (highest priority / “carrier2” role in 2-cell terms), with activation controlled by uplink_tx_switch.activation: "ul_quality", a preference via uplink_tx_switch.preferred_option: "switchedUL", and slot eligibility constrained by uplink_tx_switch.active_slots: [0,0,0,0,0,0,0,1,1,0,0] (the carrier-specific slot mask used when deciding where UL can be scheduled under switching).

The third cell is cell_id 0x03 on rf_port 2 with n_id_cell 502. It is in band 38 at dl_nr_arfcn 518000. This is a different band from the n78 cell 0x02, so the two TDD cells on the carrier2 side are not contiguous. The TDD pattern is the same as for cell 0x02 (dl_slots 5, dl_symbols 6, ul_slots 4, ul_symbols 6).

Its uplink_tx_switch object sets priority: 8. Lower values mean higher priority. So the n78 cell (priority 0) comes first, this n38 cell (priority 8) comes second, and the FDD cell (priority 15) comes last. The active_slots line [0, 0, 0, 0, 0, 0, 1, 1, 0, 0] is not used here because UL_TX_SWITCH_SLOTS is 0.

Third cell n38 TDD at dl_nr_arfcn 518000 for Test 4

Third cell uplink_tx_switch with priority 8, ul_quality and switchedUL for Test 4

Perform the Test

Check if the cell is configured as intended. Check out the output of 'cell phy' and cell command. 0x001 is an FDD n7 carrier identified as carrier1, and 0x002/0x003 are two contiguous TDD n78 carriers that form the carrier2 side. The ANT fields indicate the same antenna configuration is applied on both the carrier1 and carrier2 sides, while the effective UL spatial layers still depend on per-carrier UL settings such as pusch-Config.maxRank even though the RF/antenna setup is shared.

In this run the cells are 0x001 n7 at ARFCN 526500 (carrier1), 0x002 n78 at ARFCN 632628 and 0x003 n38 at ARFCN 518000. 0x002 and 0x003 are two non contiguous TDD cells in different bands. Both belong to the carrier2 side. All three cells show ANT 2 and NL 2 in the UL columns.

cell phy output with n7 carrier1 and non contiguous n78 and n38 as carrier2

Now power on UE and wait until it completes attach and establishment of 3CC CA for both uplink and downlink.

Log Analysis

Sample Log

This UE capability enquiry includes capabilityRequestFilterCommon.uplinkTxSwitchRequest-r16: true, so the gNB is explicitly requesting the UE to report UL Tx switching (Rel-16) related capabilities (i.e., the UE’s supported supportedBandCombinationList-uplinkTxSwitch-*, switching option like switchedUL, and switching timing such as uplinkTxSwitchingPeriod-r16).

In this run the frequencyBandListFilter asks for bandNR 7, bandNR 38 and bandNR 78. All three bands of the test are requested. The UE can then report combinations that include all of them.

UE capability enquiry with uplinkTxSwitchRequest-r16 true for bands 7, 38 and 78

This UE capability view shows the UE has an UL Tx Switch band combination where the CA set includes n7 + n38 + n78, and UL can be switched so that only one UL leg is active at a time across those carriers (shown by the UL Tx Switch → Comb. 1 entry listing DL N7A + UL N7A | DL N38A + UL N38A | DL N78A + UL N78A).

The UE Caps window reports NR bands 7, 38 and 78. The NR CA list has many combinations, but each of them has UL on only one band. Only the entry under UL Tx Switch has UL on n7, n38 and n78 together.

UE caps window with one UL Tx Switch combination over n7, n38 and n78

This log shows the UE reports uplink_tx_switch with band_pairs = (n7,n38), (n7,n78), (n38,n78), and for each pair it supports option: "switchedUL" with twoTx: true, meaning the UE can do UL Tx switching between those carrier pairs while keeping 2-TX capability available (Rel-18).

The bands entry lists DL N7A + UL N7A, DL N38A + UL N38A and DL N78A + UL N78A. features_dl and features_ul show MIMO 2 at 20 MHz, with SCS 15 kHz on n7 and SCS 30 kHz on the TDD bands. The WebGUI field for the 2T support is "twoT", and it is true for all three pairs.

UplinkTxSwitch band combinations with pairs 7-38, 7-78, 38-78 and release 18

This shows that the UE supports a CA band-combination that can be used for UL Tx switching (the combination lists n7 / n38 / n78 entries), and it also reports the Rel-16 switching requirement under supportedBandPairListNR-r16, where bandIndexUL1-r16 = 1 and bandIndexUL2-r16 = 2 form the UL band pair and uplinkTxSwitchingPeriod-r16 = n140us indicates the UE needs a 140 µs retune gap when switching the uplink transmitter between those two UL band indices.

The bandList of this combination has three entries: bandNR 7, bandNR 38 and bandNR 78. All have class a for DL and UL. featureSetCombination is 9 and supportedBandwidthCombinationSet is '1'B. srs-TxSwitch reports notSupported for n7 and t2r2 for n38 and n78. The r16 pair list shows bandIndexUL1-r16 1 and bandIndexUL2-r16 2.

UE capability information with three band bandList and r16 band pair n140us

This log shows that the UE reports UL Tx Switching capability across releases. For r16, the UE declares the switching time gap (for example 140 µs) that is needed while the UE retunes its single UL transmitter between carriers. For r17, the UE reports an updated switching-period set (for example 210 µs), meaning the gNB can schedule UL switching using the r17 timing rule when it selects that feature set. For r18, the UE reports more detailed switching options per band-pair, including the switching mode (e.g., switchedUL) and separate switching-period values for band-pair / FDD / TDD cases, so the gNB can apply the right gap depending on which two carriers are being switched. This is why UL Tx switching can still be exercised even with three non-contiguous cells: the key requirement is “UE supports those band-pairs and timing rules”, not “cells must be contiguous”.

Under supportedBandCombinationList-UplinkTxSwitch-v1800, supportedBandPairListNR-r18 has three entries. They are band index 1-2, 1-3 and 2-3, which covers every pair of the three bands. Each pair has uplinkTxSwitchingOptionForBandPair-r18 switchedUL. Each pair also has switchingPeriodFor2T-r18 n210us and switchingPeriodFor1T-r18 n140us. The v1700 part reports uplinkTxSwitchingPeriod2T2T-r17 n210us.

UE capability with r16, v1700 and v1800 UL Tx switching period and option IEs

In this RRCReconfiguration, gNB sets pusch-Config for the PCC (carrier1) and the highlighted maxRank 2 means the UE is allowed to use up to 2 UL layers (rank-2 UL MIMO) on PUSCH when the UL transmission is on this carrier.

maxRank 2 is in the PCC pusch-Config, with txConfig codebook and codebookSubset nonCoherent. The log is filtered with switched in the search field.

RRC reconfiguration with maxRank 2 in the PCC pusch-Config for Test 4

In this RRCReconfiguration, gNB sends scellToAddModList to add the first SCC (scellIndex = 1), and frequencyBandList = n78 with TDD means this SCC is a TDD NR carrier with its own DL/SSB frequency parameters (e.g., absoluteFrequencySSB/PointA and SCS-specific carrier list). In the UL Tx switching context, this SCC becomes one of the UL candidate carriers, so the UE can switch the UL transmitter between the PCC and this SCC (or between SCCs) using the configured switching option and gap, while still transmitting UL on only one carrier at a time with the shared antenna/RF chain.

The first SCC has physCellId 501, absoluteFrequencySSB 632544 and absoluteFrequencyPointA 632016. carrierBandwidth is 51 at kHz30. This is cell 0x02 (n78) in the gNB configuration.

RRC reconfiguration adding first SCC sCellIndex 1 in TDD band 78 for Test 4

In this RRCReconfiguration, gNB configures PUSCH for SCC (carrier2) and sets maxRank = 2, meaning that when UL Tx switching selects this SCC as the active UL carrier, the UE may transmit up to 2 spatial layers on that SCC (subject to the UE capability and the current switching/gap constraints), even though only one UL carrier is used at a time during switching.

maxRank 2 is in the uplinkConfig of sCellIndex 1, the n78 SCC. The PCC and this SCC now both allow rank 2.

RRC reconfiguration with maxRank 2 for the n78 SCC in Test 4

In this RRCReconfiguration, gNB adds Second SCC (sCellIndex=2) as a TDD NR carrier in band n38 (with its own absoluteFrequencySSB/PointA), and because this SCC is not contiguous to the first SCC, any UL Tx switching between the SCCs means the UE must retune RF and use a switching gap, so the UE can only transmit UL on one carrier at a time and the switching timing/gap parameters decide when that move is allowed.

The second SCC has physCellId 502. absoluteFrequencySSB is 517970 and absoluteFrequencyPointA is 516164, with carrierBandwidth 51 at kHz30. This is cell 0x03 (n38, dl_nr_arfcn 518000) in the gNB configuration.

RRC reconfiguration adding second SCC sCellIndex 2 in TDD band 38

This RRCReconfiguration sets maxRank = 2 for the SCC (Carrier 2), meaning the UE can use up to 2 UL layers when it transmits on that carrier. This becomes relevant with UL Tx switching because when the UE switches its UL transmission from another carrier to Carrier 2, the UL transmission on Carrier 2 will follow this 2-layer cap

This pusch-Config belongs to sCellIndex 2, the n38 SCC. It also has dmrs-UplinkForPUSCH-MappingTypeB in addition to mapping type A. With this, all three UL carriers of the test have maxRank 2.

RRC reconfiguration with maxRank 2 for the n38 SCC in Test 4

This UE Capability Information shows uplinkTxSwitchingMoreBands-r18 is configured, so the UE can do UL Tx switching across more than two bands. uplinkTxSwitchingBandList-r18 lists the participating bands as n7, n38, and n78, which matches the test setup with three non-contiguous cells. uplinkTxSwitchingBandPairList-r18 then enumerates the supported pairs (index 1–2, 1–3, 2–3), so the UE can switch UL between any two of n7/n38/n78. For each pair, switchingOptionConfigForBandPair-r18 = switchedUL means the UL is time-switched (one band at a time), switching2T-Mode-r18 = enabled means 2TX → 2TX switching is supported, and switchingPeriodConfigForBandPair-r18 = n140us means the UE needs a 140 µs switching gap during retuning.

These IEs are under uplinkTxSwitchingMoreBands-r18 setup. uplinkTxSwitchingBandList-r18 lists 78, 38 and 7. uplinkTxSwitchingBandPairList-r18 has three entries, with bandInfoUL1-r18 and bandInfoUL2-r18 set to 1-2, 1-3 and 2-3. Each entry has switchingOptionConfigForBandPair-r18 switchedUL, switching2T-Mode-r18 enabled and switchingPeriodConfigForBandPair-r18 n140us.

uplinkTxSwitchingMoreBands-r18 with band list 78, 38, 7 and three band pairs

This Resource Block Allocation view shows the gNB scheduling UL with UL Tx switching (switchedUL) across three three non-contiguous cells (n7/n38/n78). You can see PUSCH (red) appearing on one cell, then moving to another cell in the next available UL opportunity, so only one band/cell is actively transmitting UL at a time. The “2 layer” labels indicate the UE is using rank-2 UL on the currently selected cell, which is consistent with 2TX → 2TX switching enabled.

The rows are #1 DL, #1 UL and the two TDD SCCs. In each TDD period the two SCC rows get PUSCH in different slots, one right after the other. They never overlap. The PCC UL row has no PUSCH while either SCC has PUSCH. The time axis starts at 14:26:24.669 and covers frames 915 and 916.

RB allocation with 2 layer PUSCH moving between PCC and the two TDD SCCs

Test 5 : 2TX -> 2TX Switching(One Cell -> Two Non Contiguous Cell), switchedUL, User Defined Switching Point  (Rel 18)

This test is to test and show the concept of a simplest cases of UL Tx Switching. It is the case where (according to the scheduling by gNB) UE switches from 2Tx carrier to 2Tx carrier with switchedUL mode. In terms of the number of antenna involved in switching and band combination, this test is similar to previous test. But in this test, the switching point is defined by user via configuration file whereas the switching point is determined by gNB in previous test.

The specific scenation implemented in this test is illustrated as below

The cells are the same as in Test 4. The difference is that the two switching points in each TDD period are fixed by active_slots in the configuration file. The gNB scheduler does not choose them. The order of the two TDD cells in the diagram is only an illustration. The actual UL slots of each cell are set by active_slots below.

Test 5 scenario with user defined switching points between n7, n78 and n38

Configuration

I used the enb-ul-tx-switching-CA-rel18.cfg on gNB (NOTE : If you use Amarisoft UEsim as a DUT instead of commercial UE, use ue-ul-tx-switching-CA-rel18.cfg for UEsim configuration)

config directory listing with enb.cfg linked to enb-ul-tx-switching-CA-rel18.cfg

In enb-ul-tx-switching-CA-rel18.cfg , followings are configured.

First note that two antenna is configured for DL for both carriers (N_NR_ANTENNA_DL = 2) and for UL for both carriers (N_ANTENNA_UL = 2). In this test, N_ANTENNA_UL = 2 does not necessarily mean 2 layer(rank 2). The number of layer(max rank) will be specified to 1 or 2  depending on the situation. (NOTE : In this test, the max rank of carrier 2 will be configured to 1).  The mode of TX switching operation can be configured to various different way with three flags UL_TX_SWITCH_OPT , UL_TX_SWITCH_ACT and UL_TX_SWITCH_SLOTS). The difference between this test from the previous test is that UL_TX_SWITCH_SLOTS is set to 1 in this test. This is to determine the switching point by user (i.e, configuration).

Everything else matches Test 4: N_CELL 3, N_ANTENNA_DL 2, N_ANTENNA_UL 2, USE_SRS 1, NR_SRS_PERIODIC 1, UL_TX_SWITCH_OPT 1 (switchedUL) and UL_TX_SWITCH_ACT 1 (UL quality). UL_TX_SWITCH_SLOTS 1 turns on the active_slots lines of cell 0x02 and cell 0x03 described below.

Test 5 defines with N_CELL 3 and UL_TX_SWITCH_SLOTS 1

This configuration defines the first NR cell on rf_port: 0 and sets it up as an FDD cell (with subcarrier_spacing: 15 and ssb_subcarrier_spacing: 15). It then adds secondary cells for carrier aggregation using scell_list, and enables UL carrier aggregation on those SCells by setting ul_allowed: true. Finally, it enables NR UL TX switching for this cell with priority: 15, which assigns the UL Tx switching priority for the band (lower value means higher priority); in a 2-cell setup, priority: 15 corresponds to the carrier1 role, while priority: 0 corresponds to carrier2.

This first cell is the same as in Test 4. It has no active_slots line. So the FDD cell has no slot restriction, and it carries UL in the slots that the two TDD cells do not take.

First cell n7 FDD with two SCells in scell_list and priority 15 for Test 5

This second nr_cell_list entry configures a TDD NR cell on rf_port: 1 (with subcarrier_spacing: 30 and ssb_subcarrier_spacing: 30) and defines its TDD timing using tdd_ul_dl_config.pattern1 (e.g., dl_slots, dl_symbols, ul_slots, ul_symbols), because UL TX switching decisions matter on UL-capable slots/symbols. UL TX Switching is enabled with uplink_tx_switch.priority: 0, which gives this band the highest UL TX switching priority (and in a 2-cell setup corresponds to the “carrier2” role). The switching behavior is further controlled by uplink_tx_switch.activation (e.g., "ul_quality"), optionally constrained by uplink_tx_switch.preferred_option (e.g., "switchedUL"), and time-gated by uplink_tx_switch.active_slots, which acts like the carrier-specific slot mask (the equivalent of carrier2_slots) telling the scheduler which slots are eligible for UL scheduling on this carrier when switching is triggered.

In most of the use case, the max rank of carrier 2 is set to 2. The mode of UL Tx Activation is set to 'ulquality'. In this mode, UL Tx Switching happens based on the quality of UL channel. UL Tx Switching will be activated when the signal on carrier 2 (as measured by SRS) has an UL rank greater than 1 and an UL CQI above ul_quality_ri2_cqi_threshold

The second cell is cell_id 0x02 in band 78 at dl_nr_arfcn 632628, with dl_slots 5 and ul_slots 4 in a 5 ms period. At 30 kHz SCS, the 10 slots of the period are slot 0 to slot 9, and slots 6 to 9 are the full UL slots.

In this test UL_TX_SWITCH_SLOTS is 1, so active_slots : [0, 0, 0, 0, 0, 0, 0, 0, 1, 1] is used. UL on this n78 cell is allowed only in slots 8 and 9. Each entry is one slot, repeated modulo the array length. The array length must divide 20*2^mu. To move the switching point, change which entries are 1.

Second cell n78 TDD whose active_slots set the Test 5 switching point

Second cell active_slots with slots 8 and 9 enabled for Test 5

This optional third nr_cell_list entry (enabled by #if N_CELL == 3) adds another TDD n38 cell (band: 38, subcarrier_spacing: 30, ssb_subcarrier_spacing: 30) at dl_nr_arfcn: 518000, intended to be placed contiguously relative to the cell_id: 0x02 carrier. It defines the TDD UL/DL timing with tdd_ul_dl_config.pattern1 (dl_slots, dl_symbols, ul_slots, ul_symbols) so UL Tx switching can be applied only on UL-capable slots. UL Tx switching behavior is enabled through uplink_tx_switch.priority: 0 (highest priority / “carrier2” role in 2-cell terms), with activation controlled by uplink_tx_switch.activation: "ul_quality", a preference via uplink_tx_switch.preferred_option: "switchedUL", and slot eligibility constrained by uplink_tx_switch.active_slots: [0,0,0,0,0,0,0,1,1,0,0] (the carrier-specific slot mask used when deciding where UL can be scheduled under switching).

The third cell is cell_id 0x03 in band 38 at dl_nr_arfcn 518000, on rf_port 2 with n_id_cell 502. It has the same TDD pattern as the n78 cell.

In this test UL_TX_SWITCH_SLOTS is 1, so active_slots : [0, 0, 0, 0, 0, 0, 1, 1, 0, 0] is used. UL on this n38 cell is allowed only in slots 6 and 7. The n78 cell gets slots 8 and 9. The two TDD cells therefore split the 4 UL slots of each period without overlap. priority: 8 is still there. With non overlapping active_slots, the slot mask decides which TDD cell carries the UL in each slot.

Third cell n38 TDD at dl_nr_arfcn 518000 for Test 5

Third cell active_slots with slots 6 and 7 enabled for Test 5

Perform the Test

Check if the cell is configured as intended. Check out the output of 'cell phy' and cell command. 0x001 is an FDD n7 carrier identified as carrier1, and 0x002/0x003 are two contiguous TDD n78 carriers that form the carrier2 side. The ANT fields indicate the same antenna configuration is applied on both the carrier1 and carrier2 sides, while the effective UL spatial layers still depend on per-carrier UL settings such as pusch-Config.maxRank even though the RF/antenna setup is shared.

The cell list is the same as in Test 4. 0x001 is n7 (carrier1), and 0x002 n78 and 0x003 n38 are the two non contiguous TDD cells on the carrier2 side. active_slots does not appear in cell phy. You see its effect only in the UL scheduling.

cell phy output for Test 5 with the same n7, n78 and n38 cells as Test 4

Now power on UE and wait until it completes attach and establishment of 3CC CA for both uplink and downlink.

Log Analysis

Sample Log

This UE capability enquiry includes capabilityRequestFilterCommon.uplinkTxSwitchRequest-r16: true, so the gNB is explicitly requesting the UE to report UL Tx switching (Rel-16) related capabilities (i.e., the UE’s supported supportedBandCombinationList-uplinkTxSwitch-*, switching option like switchedUL, and switching timing such as uplinkTxSwitchingPeriod-r16).

The frequencyBandListFilter asks for bandNR 7, bandNR 38 and bandNR 78, the same as in Test 4. The UE capability information follows at 11:41:44.624.

UE capability enquiry with uplinkTxSwitchRequest-r16 true for bands 7, 38 and 78 in Test 5

This UE capability screen is saying the UE supports UL Tx Switching for the specific 3CC set n7 + n38 + n78 (shown as DL N7A + UL N7A, DL N38A + UL N38A, DL N78A + UL N78A), meaning the UE can keep the three DL carriers aggregated, but for uplink it will select one of these cells at a time and switch (“switchedUL”) the same Tx chain(s) between the three bands when the scheduler requests UL on a different cell, with a small switching gap/period rather than doing simultaneous UL on all three.

NR bands are 7, 38 and 78. The UL Tx Switch combination is DL N7A + UL N7A, DL N38A + UL N38A and DL N78A + UL N78A. This is the same as in Test 4. The user defined switching point is a gNB setting and does not change the UE capability.

UE caps window with UL Tx Switch combination over n7, n38 and n78 in Test 5

This “UplinkTxSwitch band combinations” block is the UE explicitly telling the gNB that for the 3-band set (n7, n38, n78) it supports UL Tx switching pair-by-pair between 7↔38, 7↔78, and 38↔78, and that for each pair the switching mode is switchedUL with twoT: true (meaning the UE can do the switching while using two TX chains / up to 2 UL layers, i.e., 2Tx → 2Tx switching), and it reports this capability as Release 18 so the scheduler is allowed to move UL between those cells (even if your three cells are non-contiguous in frequency, the capability here is about supported band pairs + switching mode, while any “shared antenna / contiguity” constraint is a separate RF implementation detail).

The three band_pairs are 7-38, 7-78 and 38-78. Each has option "switchedUL" and "twoT": true, and the set is reported with "release": 18. features_dl and features_ul show MIMO 2 at 20 MHz for all three bands.

UplinkTxSwitch band combinations with three switchedUL pairs, twoT true, release 18

The highlighted supportedBandCombinationList-uplinkTxSwitch-r16 is the UE’s declaration that UL Tx switching is supported for the NR band-combination set {n7, n38, n78} (each with ca-BandwidthClassDL-NR a and ca-BandwidthClassUL-NR a), along with the related capability details like featureSetCombination 9 and ca-ParametersNR (for example simultaneousRxTxInterBandCA supported and mixed-numerology support), and when you combine that with the separate “UplinkTxSwitch band combinations” list (the allowed band pairs plus option = switchedUL and twoT = true) and the release-specific switching gaps/periods (Rel-16/17/18), it explains why this test with three non-contiguous cells still works: the UE cannot UL-transmit on all three at the same time, so the scheduler time-shares the UE’s two Tx chains and alternates UL between the supported band pairs

The bandList lists bandNR 7, bandNR 38 and bandNR 78, each with ca-BandwidthClassDL-NR a and ca-BandwidthClassUL-NR a. ca-ParametersNR reports simultaneousRxTxInterBandCA supported and diffNumerologyWithinPUCCH-GroupSmallerSCS supported. bandCombination-v1540 reports srs-TxSwitch notSupported for the first band and t2r2 for the other two.

supportedBandCombinationList-UplinkTxSwitch-r16 with bands 7, 38 and 78

The highlighted IEs show that the UE reports Uplink Tx Switching capability across multiple releases: supportedBandPairListNR-r16 indicates the Rel-16 baseline with uplinkTxSwitchingPeriod-r16 = n140us, supportedBandCombinationList-UplinkTxSwitch-v1700 adds Rel-17 2Tx→2Tx behavior with uplinkTxSwitchingPeriod2T2T-r17 = n210us, and supportedBandCombinationList-UplinkTxSwitch-v1800 provides the Rel-18 detailed control where switchingOptionConfigForBandPair-r18 = switchedUL and the UE can signal different switching times (e.g., 140 µs vs 210 µs) depending on the switching scenario so the gNB can schedule UL Tx Switching more precisely.

supportedBandPairListNR-r16 gives bandIndexUL1-r16 1, bandIndexUL2-r16 2 and uplinkTxSwitchingPeriod-r16 n140us. uplinkTxSwitching-OptionSupport-r16 is switchedUL. The v1800 part has three pairs (1-2, 1-3 and 2-3). Each pair has uplinkTxSwitchingOptionForBandPair-r18 switchedUL, with switchingPeriodFor2T-r18 n210us and switchingPeriodFor1T-r18 n140us.

UE capability with r16 n140us, r17 2T2T n210us and r18 per band pair periods

In this RRC reconfiguration message, the UE (and gNB config) sets maxRank = 2 under pusch-Config for the PCC (Carrier 1), which means the uplink on this carrier is allowed to use up to 2 layers (2Tx UL MIMO); in the UL Tx Switching context, this effectively says “when the UE’s transmit chain is assigned to the PCC as the active UL carrier during switching, it can transmit with rank-2,” while the other configured cells may have their own maxRank values for when they become the active UL carrier.

maxRank 2 is in the pusch-Config under spCellConfig. The same block has txConfig codebook, codebookSubset nonCoherent and mcs-Table qam256.

RRC reconfiguration with maxRank 2 in the PCC pusch-Config for Test 5

In this RRC reconfiguration, the gNB adds the first SCC via sCellToAddModList (with sCellIndex = 1), where sCellConfigCommon shows physCellId = 501 and downlinkConfigCommon.frequencyInfoDL.frequencyBandList indicates NR band 78 (TDD), with absoluteFrequencySSB = 632544, absoluteFrequencyPointA = 632016, and scs-SpecificCarrierList set to subcarrierSpacing = kHz30 and carrierBandwidth = 51—this SCC is therefore one of the CA cells that participates in your UL Tx switching setup, meaning the UE can keep this SCC for DL reception while UL transmission capability is managed by the negotiated UL Tx switching rules (i.e., the TX chain is switched/borrowed across the configured band pair(s) rather than requiring a dedicated UL chain on every SCC).

This SCC is cell 0x02 in the gNB configuration. In this test its active_slots allow UL only in slots 8 and 9.

RRC reconfiguration adding first SCC sCellIndex 1 in TDD band 78 for Test 5

In this RRC reconfiguration, the UL configuration for the SCC (treated as “carrier2” in the UL Tx Switching setup) includes the IE maxRank = 2, which means when UL Tx Switching temporarily enables uplink on this SCC, the UE can transmit up to rank-2 (2 layers) PUSCH on that switched carrier.

maxRank 2 is in the uplinkConfig and initialUplinkBWP of the first SCC (n78).

RRC reconfiguration with maxRank 2 for the n78 SCC in Test 5

This sCellToAddModList entry with sCellIndex = 2 defines the second SCC as a TDD carrier on NR band frequencyBandList = 38 using its own downlink frequency settings under downlinkConfigCommon.frequencyInfoDL (notably absoluteFrequencySSB, absoluteFrequencyPointA, and the scs-SpecificCarrierList with offsetToCarrier, subcarrierSpacing, carrierBandwidth), and because this SCC is non-contiguous to the first SCC, any UL Tx Switching enabled by IEs like uplinkTxSwitchingBandList(-r18) / uplinkTxSwitchingBandPairList(-r18) with uplinkTxSwitchingOptionConfigForBandPair = switchedUL will be handled as time-switched UL on one selected band-pair at a time (retuning the shared TX chain), rather than “sharing” a wide RF path to do simultaneous 2Tx across adjacent SCCs.

The second SCC has physCellId 502. absoluteFrequencySSB is 517970, absoluteFrequencyPointA is 516164 and carrierBandwidth is 51 at kHz30. This is cell 0x03 (n38, dl_nr_arfcn 518000) in the gNB configuration. Its active_slots allow UL only in slots 6 and 7.

RRC reconfiguration adding second SCC sCellIndex 2 in TDD band 38 for Test 5

In this RRCReconfiguration, the IE maxRank (shown as maxRank 2 inside the SCC’s uplinkConfig / pusch-Config) means this SCC (Carrier 2) is allowed to use up to Rank-2 UL transmission (two UL layers / 2Tx UL-MIMO), and in UL Tx Switching terms it tells the gNB that when the UE switches its uplink transmitter onto this carrier, it can operate in a 2Tx mode, so the scheduler can apply the appropriate switching gap depending on whether the switch is 1T↔1T or 2T↔2T.

This pusch-Config belongs to the second SCC (n38). It also has dmrs-UplinkForPUSCH-MappingTypeB. All three UL carriers of this test therefore have maxRank 2.

RRC reconfiguration with maxRank 2 for the n38 SCC in Test 5

This UECapabilityInformation shows the Rel-18 UL Tx Switching IEs where uplinkTxSwitchingBandList-r18 lists all bands/cells that can participate in UL Tx Switching (here 7/38/78), and uplinkTxSwitchingBandPairList-r18 then defines the allowed switching pairs using bandInfoUL1-r18 and bandInfoUL2-r18, while also telling the gNB the switching behavior via switchingOptionConfigForBandPair-r18 = switchedUL, switching2T-mode-r18 = enabled (2Tx↔2Tx capable), and the required gap via switchingPeriodConfigForBandPair-r18 (here shown as n140us for each listed pair).

These IEs are under uplinkTxSwitchingMoreBands-r18 setup. uplinkTxSwitchingBandList-r18 lists 78, 38 and 7. The three pairs in uplinkTxSwitchingBandPairList-r18 are 1-2, 1-3 and 2-3, with the same values as in Test 4.

active_slots does not appear in these IEs. It is a gNB scheduler setting only, so the RRC reconfiguration is the same as in Test 4.

uplinkTxSwitchingMoreBands-r18 with band list and band pairs in Test 5

This Resource Block Allocation view shows that, even though you configured three non-contiguous cells (so the UE cannot keep simultaneous UL on all of them), the scheduler is using UL Tx Switching to time-share the same UL transmitter(s) across the configured carriers, and when the UE is on a given UL carrier it can still transmit rank-2 PUSCH (the red blocks marked “2 layer”, meaning 2 UL layers / 2Tx mode) before switching the UL to another carrier in a different time segment.

The rows are #1 DL, #1 UL, #3 DL/UL (n38) and #2 DL/UL (n78). In each TDD period PUSCH on the n38 row comes first. PUSCH on the n78 row follows right after it. This matches active_slots: slots 6 and 7 for n38, and slots 8 and 9 for n78.

The PCC UL row has PUSCH only outside these slots. The pattern is the same in every period from 11:41:55.568 to 11:41:55.588 (frames 1856 to 1858). Compare this with Test 4, where no slot mask was set.

RB allocation with n38 PUSCH in slots 6-7 then n78 PUSCH in slots 8-9