Skip to content

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:

  1. Configuration:
    • Set the pusch_RSSI_Threshold and pucch_RSSI_Threshold parameters 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.
  2. Usage:
    • The nr_limit_tpc function 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.

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

Merge request reports

Loading