From 2b2e9563ffc65471e37405819ca540d38515f41f Mon Sep 17 00:00:00 2001 From: Thomas Schlichter Date: Thu, 21 Aug 2025 16:52:14 +0200 Subject: [PATCH] gNB: add SSB-SINR measurement values to the MAC statistics output --- .../LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c | 5 ++++ openair2/LAYER2/NR_MAC_gNB/main.c | 25 +++++++++++++++---- openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h | 2 ++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c index 1b317890ae..f2a1988459 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c @@ -534,6 +534,11 @@ static void evaluate_sinr_report(gNB_MAC_INST *nrmac, *cumul_bits += 4; } + NR_mac_stats_t *stats = &UE->mac_stats; + // including ssb SINR in mac stats + stats->cumul_sinrx10 += sinr_report->SINRx10[0]; + stats->num_sinr_meas++; + LOG_D(MAC, "Reported SSB-SINR = %d.%d\n", sinr_report->SINRx10[0] / 10, sinr_report->SINRx10[0] % 10); } diff --git a/openair2/LAYER2/NR_MAC_gNB/main.c b/openair2/LAYER2/NR_MAC_gNB/main.c index e80f852022..4860483d73 100644 --- a/openair2/LAYER2/NR_MAC_gNB/main.c +++ b/openair2/LAYER2/NR_MAC_gNB/main.c @@ -126,24 +126,37 @@ size_t dump_mac_stats(gNB_MAC_INST *gNB, char *output, size_t strlen, bool reset NR_UE_sched_ctrl_t *sched_ctrl = &UE->UE_sched_ctrl; NR_mac_stats_t *stats = &UE->mac_stats; const int avg_rsrp = stats->num_rsrp_meas > 0 ? stats->cumul_rsrp / stats->num_rsrp_meas : 0; + const int avg_sinrx10 = stats->num_sinr_meas > 0 ? stats->cumul_sinrx10 / stats->num_sinr_meas : 0; output += snprintf(output, end - output, "UE RNTI %04x CU-UE-ID ", UE->rnti); if (du_exists_f1_ue_data(UE->rnti)) { f1_ue_data_t ued = du_get_f1_ue_data(UE->rnti); output += snprintf(output, end - output, "%d", ued.secondary_ue); } else { - output += snprintf(output, end-output, "(none)"); + output += snprintf(output, end - output, "(none)"); } bool in_sync = !sched_ctrl->ul_failure; output += snprintf(output, end - output, - " %s PH %d dB PCMAX %d dBm, average RSRP %d (%d meas)\n", + " %s PH %d dB PCMAX %d dBm", in_sync ? "in-sync" : "out-of-sync", sched_ctrl->ph, - sched_ctrl->pcmax, - avg_rsrp, - stats->num_rsrp_meas); + sched_ctrl->pcmax); + + if (stats->num_rsrp_meas) + output += snprintf(output, end - output, ", average RSRP %d (%d meas)", avg_rsrp, stats->num_rsrp_meas); + + if (stats->num_sinr_meas) { + output += snprintf(output, + end - output, + ", average SINR %d.%d (%d meas)", + avg_sinrx10 / 10, + avg_sinrx10 % 10, + stats->num_sinr_meas); + } + + output += snprintf(output, end - output, "\n"); if(sched_ctrl->CSI_report.cri_ri_li_pmi_cqi_report.print_report) output += snprintf(output, @@ -178,6 +191,8 @@ size_t dump_mac_stats(gNB_MAC_INST *gNB, char *output, size_t strlen, bool reset if (reset_rsrp) { stats->num_rsrp_meas = 0; stats->cumul_rsrp = 0; + stats->num_sinr_meas = 0; + stats->cumul_sinrx10 = 0; } output += snprintf(output, end - output, diff --git a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h index db12640893..1e8fef481d 100644 --- a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h +++ b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h @@ -693,6 +693,8 @@ typedef struct NR_mac_stats { uint32_t pucch0_DTX; int cumul_rsrp; uint8_t num_rsrp_meas; + int cumul_sinrx10; + uint8_t num_sinr_meas; char srs_stats[50]; // Statistics may differ depending on SRS usage int pusch_snrx10; int deltaMCS;