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
-
config files: x310_tested_indoors.conf channelmod_rfsimu.conf ue.conf
-
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
-
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
-
Run iperf server:
docker exec -it oai-ext-dn iperf3 -s
-
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);