Skip to content

PUSCH transmit power control not applied in nrUE

The PUSCH TPC command received via DCI is not applied when generating the PUSCH signal. However, the TPC is taken into consideration when reporting power headroom to the gNB. This fails to close the control loop and as a result the gNB keeps sending TPC indefinitely and the UE reports a false PH. This eventually leads to a point where the gNB thinks the UE is at it's maximum transmit power and attempts to limit the PRB allocation.

Steps to Reproduce

  1. config files: x310_tested_indoors.conf channelmod_rfsimu.conf ue.conf

  2. gNB command: sudo ./nr-softmodem -O ~/conf-files/x310_tested_indoors.conf --sa --gNBs.[0].min_rxtxtime 4 -E --rfsim --rfsimulator.options chanmod --channelmod.modellist modellist_rfsimu_1

  3. UE command: sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --sa -O ~/conf-files/ue.conf -E --rfsim --rfsimulator.options chanmod --channelmod.modellist modellist_rfsimu_1

  4. Run iperf server: docker exec -it oai-ext-dn iperf3 -s

  5. Run iperf client with UL traffic: iperf3 -c 192.168.70.135 -B 10.0.0.2 -b 50M -t 60 -u

Observation

It is seen that only less than half of the maximum PRBs are allocated and soon the RLC buffer overflows and start to reject packets. In my case, only 28 PRBs were allocated after starting the iperf traffic.

UE RNTI 8d65 CU-UE-ID 1 in-sync PH 17 dB PCMAX 20 dBm, average RSRP -44 (16 meas)                                                                                                                                                                                                         
UE 8d65: UL-RI 1, TPMI 0                                                                                                                                                                                                                                                                  
UE 8d65: dlsch_rounds 369/0/0/0, dlsch_errors 0, pucch0_DTX 0, BLER 0.00000 MCS (0) 9                                                                                                                                                                                                     
UE 8d65: ulsch_rounds 10728/2/0/0, ulsch_errors 0, ulsch_DTX 0, BLER 0.00000 MCS (0) 27 (Qm 6  dB) NPRB 28  SNR 20.0 dB                                                                                                                                                                   
UE 8d65: MAC:    TX          40674 RX       17443431 bytes                                                                                                                                                                                                                                
UE 8d65: LCID 1: TX            531 RX            266 bytes                                                                                                                                                                                                                                
UE 8d65: LCID 2: TX              0 RX              0 bytes                                                                                                                                                                                                                                
UE 8d65: LCID 4: TX           1452 RX       17225124 bytes                                                                                        

When the noise_power_dB in the channelmod_rfsimu.conf is changed from -10 to -20, there is no TPC from gNB and the full 106 PRBs are allocated.

Possible Solution

Scale up/down the amplitude of PUSCH REs based on TPC? This might require taking into account the current Tx gain and the maximum Tx power of the radio being used.

Workaround

As a temporary workaround, we can ignore the TPC for reporting the PH.

index 557a393ce2..ae9d711a02 100644
--- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
+++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
@@ -957,7 +957,7 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
                                                      pusch_config_pdu->target_code_rate,
                                                      pusch_config_pdu->pusch_uci.beta_offset_csi1,
                                                      pusch_config_pdu->pusch_data.tb_size << 3,
-                                                     delta_pusch,
+                                                     0,//delta_pusch,
                                                      is_rar_tx_retx,
                                                      pusch_config_pdu->transform_precoding);