From 2931884d07da5021cc9b25d2fd57e8d3bdeddec6 Mon Sep 17 00:00:00 2001 From: luis_pereira87 Date: Wed, 7 Sep 2022 13:56:20 +0100 Subject: [PATCH] Fix ulprbbl based on SRS --- openair1/PHY/defs_gNB.h | 1 + openair1/SCHED_NR/phy_procedures_nr_gNB.c | 6 +++- openair2/GNB_APP/L1_nr_paramdef.h | 5 +++- openair2/GNB_APP/gnb_config.c | 1 + .../LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c | 29 ++++++++++++------- ...gnb.sa.band77.fr1.273PRB.2x2.usrpn300.conf | 2 +- ...gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf | 3 +- .../gnb.sa.band78.fr1.106PRB.usrpb210.conf | 1 - ...gnb.sa.band78.fr1.162PRB.2x2.usrpn300.conf | 1 + 9 files changed, 32 insertions(+), 17 deletions(-) diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index 1934441915..dde2575768 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -840,6 +840,7 @@ typedef struct PHY_VARS_gNB_s { int pucch0_thres; int pusch_thres; int prach_thres; + int srs_thres; uint64_t bad_pucch; int num_ulprbbl; int ulprbbl[275]; diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index b204a9e427..496674de8a 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -822,7 +822,7 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) { generate_srs_nr(srs_pdu, frame_parms, gNB->nr_srs_info[i]->srs_generated_signal, 0, gNB->nr_srs_info[i], AMP, frame_rx, slot_rx); } - const int srs_est = nr_get_srs_signal(gNB,frame_rx,slot_rx, srs_pdu, gNB->nr_srs_info[i], srs_received_signal); + int srs_est = nr_get_srs_signal(gNB, frame_rx, slot_rx, srs_pdu, gNB->nr_srs_info[i], srs_received_signal); if (srs_est >= 0) { nr_srs_channel_estimation(gNB, @@ -843,6 +843,10 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) { &snr); } + if ((snr * 10) < gNB->srs_thres) { + srs_est = -1; + } + T(T_GNB_PHY_UL_FREQ_CHANNEL_ESTIMATE, T_INT(0), T_INT(srs_pdu->rnti), T_INT(frame_rx), T_INT(0), T_INT(0), T_BUFFER(srs_estimated_channel_freq[0][0], frame_parms->ofdm_symbol_size*sizeof(int32_t))); diff --git a/openair2/GNB_APP/L1_nr_paramdef.h b/openair2/GNB_APP/L1_nr_paramdef.h index 5fab0f6dfb..62f2f43926 100644 --- a/openair2/GNB_APP/L1_nr_paramdef.h +++ b/openair2/GNB_APP/L1_nr_paramdef.h @@ -51,6 +51,7 @@ #define CONFIG_STRING_L1_PUCCH0_DTX_THRESHOLD "pucch0_dtx_threshold" #define CONFIG_STRING_L1_PRACH_DTX_THRESHOLD "prach_dtx_threshold" #define CONFIG_STRING_L1_PUSCH_DTX_THRESHOLD "pusch_dtx_threshold" +#define CONFIG_STRING_L1_SRS_DTX_THRESHOLD "srs_dtx_threshold" #define CONFIG_STRING_L1_MAX_LDPC_ITERATIONS "max_ldpc_iterations" /*----------------------------------------------------------------------------------------------------------------------------------------------------*/ /* L1 configuration parameters */ @@ -71,6 +72,7 @@ {CONFIG_STRING_L1_PUCCH0_DTX_THRESHOLD, NULL, 0, uptr:NULL, defintval:100, TYPE_UINT, 0}, \ {CONFIG_STRING_L1_PRACH_DTX_THRESHOLD, NULL, 0, uptr:NULL, defintval:150, TYPE_UINT, 0}, \ {CONFIG_STRING_L1_PUSCH_DTX_THRESHOLD, NULL, 0, uptr:NULL, defintval:50, TYPE_UINT, 0}, \ +{CONFIG_STRING_L1_SRS_DTX_THRESHOLD, NULL, 0, uptr:NULL, defintval:50, TYPE_UINT, 0}, \ {CONFIG_STRING_L1_MAX_LDPC_ITERATIONS, NULL, 0, uptr:NULL, defintval:5, TYPE_UINT, 0}, \ } #define L1_CC_IDX 0 @@ -87,7 +89,8 @@ #define L1_PUCCH0_DTX_THRESHOLD 11 #define L1_PRACH_DTX_THRESHOLD 12 #define L1_PUSCH_DTX_THRESHOLD 13 -#define L1_MAX_LDPC_ITERATIONS 14 +#define L1_SRS_DTX_THRESHOLD 14 +#define L1_MAX_LDPC_ITERATIONS 15 /*----------------------------------------------------------------------------------------------------------------------------------------------------*/ #endif diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c index 25df321b3a..ef610f6f64 100644 --- a/openair2/GNB_APP/gnb_config.c +++ b/openair2/GNB_APP/gnb_config.c @@ -731,6 +731,7 @@ void RCconfig_NR_L1(void) { RC.gNB[j]->pucch0_thres = *(L1_ParamList.paramarray[j][L1_PUCCH0_DTX_THRESHOLD].uptr); RC.gNB[j]->prach_thres = *(L1_ParamList.paramarray[j][L1_PRACH_DTX_THRESHOLD].uptr); RC.gNB[j]->pusch_thres = *(L1_ParamList.paramarray[j][L1_PUSCH_DTX_THRESHOLD].uptr); + RC.gNB[j]->srs_thres = *(L1_ParamList.paramarray[j][L1_SRS_DTX_THRESHOLD].uptr); RC.gNB[j]->max_ldpc_iterations = *(L1_ParamList.paramarray[j][L1_MAX_LDPC_ITERATIONS].uptr); RC.gNB[j]->num_ulprbbl = num_prbbl; RC.gNB[j]->ap_N1 = N1; diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c index 082e8dc599..030d082e6e 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c @@ -795,8 +795,8 @@ void handle_nr_srs_measurements(const module_id_t module_id, const uint8_t num_symbols, const uint8_t wide_band_snr, const uint8_t num_reported_symbols, - nfapi_nr_srs_indication_reported_symbol_t* reported_symbol_list) { - + nfapi_nr_srs_indication_reported_symbol_t *reported_symbol_list) +{ LOG_D(NR_MAC, "(%d.%d) Received SRS indication for rnti: 0x%04x\n", frame, slot, rnti); #ifdef SRS_IND_DEBUG @@ -805,32 +805,39 @@ void handle_nr_srs_measurements(const module_id_t module_id, LOG_I(NR_MAC, "rnti = 0x%04x\n", rnti); LOG_I(NR_MAC, "timing_advance = %i\n", timing_advance); LOG_I(NR_MAC, "num_symbols = %i\n", num_symbols); - LOG_I(NR_MAC, "wide_band_snr = %i (%i dB)\n", wide_band_snr, (wide_band_snr>>1)-64); + LOG_I(NR_MAC, "wide_band_snr = %i (%i dB)\n", wide_band_snr, (wide_band_snr >> 1) - 64); LOG_I(NR_MAC, "num_reported_symbols = %i\n", num_reported_symbols); LOG_I(NR_MAC, "reported_symbol_list[0].num_rbs = %i\n", reported_symbol_list[0].num_rbs); - for(int rb = 0; rb < reported_symbol_list[0].num_rbs; rb++) { - LOG_I(NR_MAC, "reported_symbol_list[0].rb_list[%3i].rb_snr = %i (%i dB)\n", - rb, reported_symbol_list[0].rb_list[rb].rb_snr, (reported_symbol_list[0].rb_list[rb].rb_snr>>1)-64); + for (int rb = 0; rb < reported_symbol_list[0].num_rbs; rb++) { + LOG_I(NR_MAC, "reported_symbol_list[0].rb_list[%3i].rb_snr = %i (%i dB)\n", rb, reported_symbol_list[0].rb_list[rb].rb_snr, (reported_symbol_list[0].rb_list[rb].rb_snr >> 1) - 64); } #endif NR_UE_info_t *UE = find_nr_UE(&RC.nrmac[module_id]->UE_info, rnti); if (!UE) { - LOG_W(NR_MAC, "Could not find UE for RNTI 0x%04x\n", rnti); + LOG_W(NR_MAC, "Could not find UE for RNTI %04x\n", rnti); return; } + if (wide_band_snr == 0xFF) { + LOG_W(NR_MAC, "Invalid wide_band_snr for RNTI %04x\n", rnti); + return; + } + + int wide_band_snr_dB = (wide_band_snr >> 1) - 64; + gNB_MAC_INST *nr_mac = RC.nrmac[module_id]; NR_mac_stats_t *stats = &UE->mac_stats; - stats->srs_wide_band_snr = (wide_band_snr>>1)-64; + stats->srs_wide_band_snr = wide_band_snr_dB; const int ul_prbblack_SNR_threshold = nr_mac->ul_prbblack_SNR_threshold; uint16_t *ulprbbl = nr_mac->ulprbbl; - memset(ulprbbl, 0, reported_symbol_list[0].num_rbs*sizeof(uint16_t)); + memset(ulprbbl, 0, reported_symbol_list[0].num_rbs * sizeof(uint16_t)); + for (int rb = 0; rb < reported_symbol_list[0].num_rbs; rb++) { - int snr = (reported_symbol_list[0].rb_list[rb].rb_snr>>1)-64; - if (snr < ul_prbblack_SNR_threshold) { + int snr = (reported_symbol_list[0].rb_list[rb].rb_snr >> 1) - 64; + if (snr < wide_band_snr_dB - ul_prbblack_SNR_threshold) { ulprbbl[rb] = 0x3FFF; // all symbols taken } LOG_D(NR_MAC, "ulprbbl[%3i] = 0x%x\n", rb, ulprbbl[rb]); diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.fr1.273PRB.2x2.usrpn300.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.fr1.273PRB.2x2.usrpn300.conf index 98d901c35e..6ac50b6aa6 100644 --- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.fr1.273PRB.2x2.usrpn300.conf +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.fr1.273PRB.2x2.usrpn300.conf @@ -19,7 +19,7 @@ gNBs = ( pdsch_AntennaPorts_XP = 2; pusch_AntennaPorts = 2; do_CSIRS = 1; - do_SRS = 0; + do_SRS = 1; ul_prbblacklist = "135,136,137,138" pdcch_ConfigSIB1 = ({ diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf index f5f187a736..8bc681c67d 100644 --- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf @@ -17,7 +17,7 @@ gNBs = ////////// Physical parameters: - pdsch_AntennaPorts_N1 = 2; + pdsch_AntennaPorts_XP = 2; pusch_AntennaPorts = 2; do_CSIRS = 1; do_SRS = 1; @@ -254,7 +254,6 @@ MACRLCs = ( tr_n_preference = "local_RRC"; #pusch_TargetSNRx10 = 150; #pucch_TargetSNRx10 = 200; - ul_prbblack_SNR_threshold = 10; ulsch_max_frame_inactivity = 0; } ); diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf index b31569af11..7819bfe652 100644 --- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf @@ -251,7 +251,6 @@ MACRLCs = ( tr_n_preference = "local_RRC"; pusch_TargetSNRx10 = 150; pucch_TargetSNRx10 = 200; - ul_prbblack_SNR_threshold = 10; ulsch_max_frame_inactivity = 0; } ); diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.162PRB.2x2.usrpn300.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.162PRB.2x2.usrpn300.conf index 67797a0378..d7d6b9ca5a 100644 --- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.162PRB.2x2.usrpn300.conf +++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.162PRB.2x2.usrpn300.conf @@ -20,6 +20,7 @@ gNBs = pdsch_AntennaPorts_XP = 2; pusch_AntennaPorts = 2; do_CSIRS = 1; + do_SRS = 1; pdcch_ConfigSIB1 = ( {