RSSI threshold for PUSCH & PUCCH power control
To prevent ADC railing or "clipping" when the received power is too large, introduce RSSI threshold parameters for PUSCH and PUCCH, which are now configured in units of 0.1 dB. Here is how you can configure and use these thresholds:
-
Configuration:
- Set the
pusch_RSSI_Thresholdandpucch_RSSI_Thresholdparameters in your configuration file (e.g.,gnb.conf) (MACRLC section). - These parameters define the maximum acceptable RSSI values for PUSCH and PUCCH, respectively. The unit is either dBm or dBFS, depending on the RSSI reporting configuration.
- Set the
-
Usage:
- The
nr_limit_tpcfunction will automatically adjust the Transmit Power Control (TPC) commands based on the configured RSSI thresholds. - If the RSSI exceeds the threshold, the TPC command will be limited to prevent further increase in power, thereby avoiding ADC clipping.
- The
Example Configuration
pusch_RSSI_Threshold = -500; # Set the PUSCH RSSI threshold to -50.0 dB/-50 dBFS
pucch_RSSI_Threshold = -600; # Set the PUCCH RSSI threshold to -60.0 dB/-60 dBFS
Code Integration
The nr_limit_tpc function is called within the scheduling functions to apply the RSSI threshold checks:
void handle_nr_uci_pucch_0_1(module_id_t mod_id,
int frame,
int slot,
const nfapi_nr_uci_pucch_pdu_format_0_1_t *uci_01)
{
// ...existing code...
sched_ctrl->tpc1 = nr_limit_tpc(sched_ctrl->tpc1, uci_01->rssi, rssi_threshold);
// ...existing code...
}
void handle_nr_uci_pucch_2_3_4(module_id_t mod_id,
int frame,
int slot,
const nfapi_nr_uci_pucch_pdu_format_2_3_4_t *uci_234)
{
// ...existing code...
sched_ctrl->tpc1 = nr_limit_tpc(sched_ctrl->tpc1, uci_234->rssi, rssi_threshold);
// ...existing code...
}
static void _nr_rx_sdu(const module_id_t gnb_mod_idP,
const int CC_id,
const frame_t frameP,
const sub_frame_t subframeP,
const rnti_t rntiP,
const uint8_t *sduP,
const uint16_t sdu_lenP,
const uint8_t ul_cqi,
const uint16_t timing_advance,
const uint8_t harq_pid)
{
// ...existing code...
UE_scheduling_control->tpc0 = nr_limit_tpc(UE_scheduling_control->tpc0, rssi, rssi_threshold);
// ...existing code...
}
Edited by Bartosz Podrygajlo