- 16 Jul, 2026 5 commits
-
-
Noemi Giustini authored
Implement RRC.ConnMean (3GPP TS 28.552 §5.1.1.4.1): mean number of UEs in RRC-CONNECTED state over the granularity period, computed as a time-average of periodic samples. - ran_func_kpm.c: append RRC.ConnMean to kpm_node_meas_cu[] and kpm_node_meas_gnb[]. - ran_func_kpm_subs.h: add rrc_conn_count_sum and rrc_conn_count_samples to e2_node_level_stats_t for per-report start/end snapshots. - ran_func_kpm_subs.c: add fill_RRC_ConnMean(); snapshots the live RRC counters into node_stats[1], computes the mean as Δsum/Δsamples over the granularity window, returns a real-valued record (noLabel); extend cp_node_level_stats() to copy the two new fields; add dispatch entry to lst_measure[]. - nr_rrc_defs.h: add rrc_conn_count_sum and rrc_conn_count_samples to gNB_RRC_INST. - rrc_gNB.c: add nr_rrc_sample_conn_count(); it samples the connected-UE count and accumulates it into the cumulative counters, invoked from the existing stats timer in the RRC task loop. It is always compiled: counting is harmless when the E2 agent is disabled, and it leaves the timer setup and write_rrc_stats() untouched. Advertised by CU and monolithic gNB node types. Signed-off-by:Noemi Giustini <giustini.n@northeastern.edu>
-
Noemi Giustini authored
Implement MR.NRScSSSINR (3GPP TS 28.552 §5.1.1.32): distribution of the NR serving-cell SS-SINR reported by UEs. Level L maps to (L-46)/2 dB (0.5 dB steps, range -23..+40.5 dB) per TS 38.133 §10.1.16. This is the RRC serving-cell SS-SINR (TS 38.331 Measurement Report), so it is collected at RRC and kept as a per-cell RRC statistic. - ran_func_kpm.c: introduce kpm_node_meas_cu[] with MR.NRScSSSINR; add it to kpm_node_meas_gnb[]; wire kpm_node_meas_cu into the ran_def_kpm table for the CU and CU-CP rows. - ran_func_kpm_subs.c: add fill_MR_NRScSSSINR(); distBinX (SINR level) is 0-based on the wire (valid range 0..127) and used directly as the array index, returning RC.nrrrc[0]->ss_sinr_cell_dist[bin]; requests without distBinX yield NO_VALUE; add dispatch entry to lst_measure[]. - nr_rrc_defs.h: add ss_sinr_cell_dist[128] to gNB_RRC_INST. - rrc_gNB.c: add nr_rrc_count_ss_sinr_dist(); it reads the serving-cell SINR of a periodic Measurement Report and increments the histogram. It is invoked from rrc_gNB_process_MeasurementReport() on the report itself, before process_Periodical_Measurement_Report() consumes it, so the latter keeps its original signature. It is always compiled: counting is harmless when the E2 agent is disabled. Advertised by CU, CU-CP, and monolithic gNB node types. Signed-off-by:Noemi Giustini <giustini.n@northeastern.edu>
-
Noemi Giustini authored
Implement L1M.SS-RSRP (3GPP TS 28.552 §5.1.1.22.1): distribution of the L1 SS-RSRP reported by UEs, resolved per SSB beam. Each bin accumulates the count of reports at a given (beam, RSRP-level); level L maps to (L-157) dBm per TS 38.133 §10.1.6. SS-RSRP used as L1-RSRP originates in L1 (TS 38.214), so it is collected at MAC when the per-beam L1-RSRP report is decoded, not from RRC Measurement Reports (which carry the L3-filtered RRC measurement). The histogram is therefore a per-cell DU statistic. - nr_mac_gNB.h: add ss_rsrp_ssb_dist[64][128] to NR_du_stats, plus the NR_KPM_NB_SSB / NR_KPM_SS_RSRP_NB_LEVELS dimensions. - gNB_scheduler_uci.c: in evaluate_rsrp_report(), for SS-RSRP (per-SSB) reports, increment ss_rsrp_ssb_dist[ssb][level] for every reported beam. RSRP is available in dBm; the 0..127 report level is recovered as (RSRP + 157), so that level L maps back to (L-157) dBm per TS 38.133 §10.1.6, and both the strongest beam and the differential beams are binned. - ran_func_kpm_subs.c: add fill_L1M_SS_RSRP(); distBinX (RSRP level) and the optional ssbIndex are 0-based on the wire and used directly as array indices (valid ranges 0..127 and 0..63); returns the per-beam value du_stats->ss_rsrp_ssb_dist[ssb][bin] or the cell-wide sum over beams when ssbIndex is absent; add dispatch entry to lst_measure[]. - ran_func_kpm.c: advertise L1M.SS-RSRP as a DU measurement (kpm_node_meas_du and kpm_node_meas_gnb). Advertised by DU and monolithic gNB node types. Signed-off-by:Noemi Giustini <giustini.n@northeastern.edu>
-
Noemi Giustini authored
Implement CARR.PUSCHMCSDist (3GPP TS 28.552 §5.1.1.12.2): uplink counterpart of CARR.PDSCHMCSDist; PRB-weighted 3D histogram over (rank, MCS-table, MCS-index) for PUSCH transmissions. PUSCH may use MCS tables 0 (64-QAM), 1 (256-QAM) and 3 (SC-FDMA), so the MCS-table dimension is indexed directly by current_BWP->mcs_table and sized to 4 (index 2 unused). Remapping the tables into fewer bins would lose the 64-QAM/256-QAM distinction, so no remapping is applied. - ran_func_kpm.c: register CARR.PUSCHMCSDist in the RAN Function Definition advertisement (kpm_node_meas_* lists). - ran_func_kpm_subs.c: add fill_CARR_PUSCHMCSDist(); distBinX (rank) is 1-based on the wire and converted to a 0-based index, while distBinY (MCS table, values 0/1/3) and distBinZ (MCS index) are 0-based and used directly, returning du_stats->pusch_mcs_dist[rank-1][table][mcs]; add dispatch entry to lst_measure[]. - nr_mac_gNB.h: the pusch_mcs_dist histogram was sized [8][2][32], too small for MCS table 3 (SC-FDMA) and thus overflowing at collection time; size the MCS-table dimension to 4 via NR_KPM_NB_MCS_TABLE_UL to hold tables 0, 1, 3. - gNB_scheduler_ulsch.c: the UL collection into pusch_mcs_dist already exists; align its surrounding DevAsserts with the KPM dimension macros (NR_KPM_MAX_LAYERS, NR_KPM_NB_MCS). Carried as E2SM-KPM Style 1 / Format 1 with distBinX/Y/Z labels. Advertised by DU and monolithic gNB node types. Signed-off-by:Noemi Giustini <giustini.n@northeastern.edu>
-
Noemi Giustini authored
CARR.PDSCHMCSDist (3GPP TS 28.552 §5.1.1.12.1) and its du_stats histogram already existed, but the metric was never collected and the reader indexed the histogram incorrectly. Rework it into a correct PRB-weighted 3D histogram over (rank, MCS-table, MCS-index). - gNB_scheduler_dlsch.c: add the missing collection hook in the DL scheduling path; increment the (rank, MCS-table, MCS) bin by the number of scheduled PRBs on each PDSCH. mcsTableIdx is 0-based (0..2), so it is used directly to index the MCS-table axis of the histogram. - ran_func_kpm_subs.c: make fill_CARR_PDSCHMCSDist() fully label-driven; reject with NO_VALUE if any of distBinX/Y/Z is absent. distBinX (rank) and distBinY (MCS table) are 1-based on the wire and converted to 0-based indices; distBinZ (MCS index) is already 0-based and used directly, reading du_stats->pdsch_mcs_dist[rank-1][table-1][mcs]. Carried as E2SM-KPM Style 1 measurement (Indication Message Format 1) with standard MeasurementLabel fields distBinX/Y/Z (INTEGER 1..65535). Advertised by DU and monolithic gNB node types. Signed-off-by:Noemi Giustini <giustini.n@northeastern.edu>
-
- 12 Jun, 2026 1 commit
-
-
Robert Schmidt authored
Integration: `2026.w24` - #145 RLC data req: Use API to fill multiple RLC PDUs at gNB - #160 ci: maintainer approval for additional file changes and update maintainer's contact - #146 Unit tests for bit functions - #142 UE DL Channel compensation and LLR optimization - #166 CI OCUDU configuration changes - #170 fix(fhi72): add observability to the O-DU - #173 fix(f1): DRB Information has criticality ignore - #171 Local ssb detection
-
- 11 Jun, 2026 19 commits
-
-
Robert Schmidt authored
Local ssb detection (#171) PSS/SSS detection in the UE code uses a global structure that describe the cell parameters it is not logical because we will populate this information from what we read in the MIB and the SIB1 later it also blocks us to make a cell scanner in a logical manner, just calling pss detection function with a set of detection parameters and a buffer of digital radio this MR fixes this and simplifies the code. Reviewed-by:Sakthivel Velumani <s.velumani@northeastern.edu>
-
Robert Schmidt authored
fix(f1): DRB Information has criticality ignore (#173) See 38.473: this IE is supposed to be "ignore". Closes: #172 Reviewed-By:Guido Casati <guido.casati@openairinterface.org>
-
Robert Schmidt authored
fix(fhi72): add observability to the O-DU (#170) This change adds printout to packet error/timing counters for the O-DU K release. In F release these counters are either not present or not implemented properly. Reviewed-by:Teodora Vladić <teodora.vladic@openairinterface.org>
-
Robert Schmidt authored
CI OCUDU configuration changes (#166) 1. Enable more logs in ocudu gnb. 2. Reduce tx amplitude to prevent clipping in OAI DFT. Reviewed-by:Bartosz Podrygajlo <bartosz.podrygajlo@openairinterface.org>
-
Robert Schmidt authored
See 38.473. Closes: #172 Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Laurent THOMAS authored
Signed-off-by:Laurent THOMAS <laurent.thomas@open-cells.com>
-
Laurent THOMAS authored
Signed-off-by:Laurent THOMAS <laurent.thomas@open-cells.com>
-
Laurent THOMAS authored
Signed-off-by:Laurent THOMAS <laurent.thomas@open-cells.com>
-
Laurent THOMAS authored
Signed-off-by:Laurent THOMAS <laurent.thomas@open-cells.com>
-
Laurent THOMAS authored
Signed-off-by:Laurent THOMAS <laurent.thomas@open-cells.com>
-
Laurent THOMAS authored
Signed-off-by:Laurent THOMAS <laurent.thomas@open-cells.com>
-
Laurent THOMAS authored
Signed-off-by:Laurent THOMAS <laurent.thomas@open-cells.com>
-
Laurent THOMAS authored
Signed-off-by:Laurent THOMAS <laurent.thomas@open-cells.com>
-
Laurent THOMAS authored
remove static global tables that can become race condition in scanning context. Also difficult to understand for about no cpu saving Signed-off-by:Laurent THOMAS <laurent.thomas@open-cells.com>
-
Laurent THOMAS authored
Signed-off-by:Laurent THOMAS <laurent.thomas@open-cells.com>
-
Bartosz Podrygajlo authored
Signed-off-by:Bartosz Podrygajlo <bartosz.podrygajlo@openairinterface.org>
-
Laurent THOMAS authored
Signed-off-by:Laurent THOMAS <laurent.thomas@open-cells.com>
-
Laurent THOMAS authored
Signed-off-by:Laurent THOMAS <laurent.thomas@open-cells.com>
-
Sakthivel Velumani authored
CI script saves only stdout logs. Signed-off-by:Sakthivel Velumani <s.velumani@northeastern.edu>
-
- 10 Jun, 2026 15 commits
-
-
Sakthivel Velumani authored
OAI DFT has scaling issues when the signal is very strong or close to full scale. So reduce amplitude by 10dB in gnb to prevent overflow/clipping. Signed-off-by:Sakthivel Velumani <s.velumani@northeastern.edu>
-
Sakthivel Velumani authored
Signed-off-by:Sakthivel Velumani <s.velumani@northeastern.edu>
-
Robert Schmidt authored
UE DL Channel compensation and LLR optimization (#142) - Common channel compensation: Extracted nr_channel_compensation() as a shared function (AVX2/MRC inline) used by both gNB and UE PDSCH/PUSCH paths, eliminating duplicated compensation logic. - Common ML/MMSE 2-layer MIMO: Created shared ML LLR and MMSE routines for 2-layer spatial multiplexing, shared between gNB and UE demodulation. - File segregation: Moved common LLR and channel compensation functions into dedicated source files for better modularity and reuse. - nr_dlsim -E flag: Added a command-line argument to enable/disable ML/MMSE equalization at runtime (MMSE default), enabling side-by-side performance comparison without recompilation. - Persistent UE buffer allocation: pdsch_dl_ch_estimates, rxdataF_comp, dl_ch_mag,dl_ch_magb,dl_ch_magr and rho_dl are now allocated once in PHY_VARS_NR_UE on first use, resize automatically when dimensions change (resizeAllowed=true), and are freed at UE teardown in term_nr_ue_signal. Eliminates per-slot heap allocation/free overhead. - PTRS restricted to one antenna port: PTRS phase tracking is only valid for a single port; processing now correctly restricted to avoid unnecessary computation. - Reduce rxdataF_comp buffer size: MRC combines all Rx antenna contributions into a per-layer output, so the first dimension was reduced from Nl * nb_antennas_rx to Nl, reducing buffer footprint proportionally. - 256QAM segfault fix: nr_256qam_llr() on gNB side used a VLA for LLRs without alignment, causing AVX2 load faults. Fixed with attribute((aligned(32))). Reviewed-by:Sakthivel Velumani <s.velumani@northeastern.edu>
-
Robert Schmidt authored
Unit tests for bit functions (#146) Unit tests for bit functions in file bits.h using randomized values to make the tests dynamic Migrated from https://gitlab.eurecom.fr/oai/openairinterface5g/-/merge_requests/4139Reviewed-by:
Robert Schmidt <robert.schmidt@openairinterface.org> Reviewed-by:
Rupanjali Srivastava <rupanjali.srivastava@openairinterface.org>
-
Rupanjali authored
256 QAM: Fixing the segmentation fault in nr_256qam_llr() the input llr buffer is not 32 byte aligned for AVX2 instructions on gNB side Signed-off-by:Rupanjali <rupanjali.srivastava@openairinterface.org>
-
Rupanjali authored
nr_channel_estimation() produces combined output of all antenna ports for each layer. So reduced the buffer size from no. of layer times no. of antennas to no. of layers. Signed-off-by:Rupanjali <rupanjali.srivastava@openairinterface.org>
-
Rupanjali authored
The current state of PTRS will not work for multiple antenna ports because the function assumes rxdataF_comp has signal for all antenna ports but it doesn't as we do MRC after DMRS compensation. Signed-off-by:Rupanjali <rupanjali.srivastava@openairinterface.org>
-
Rupanjali authored
Added a command line argument -E to enable/disable ML/MMSE for nr_dlsim with MMSE being default to compare performances during runtime Signed-off-by:Rupanjali <rupanjali.srivastava@openairinterface.org>
-
Rupanjali authored
Signed-off-by:Rupanjali <rupanjali.srivastava@openairinterface.org>
-
Rupanjali authored
Created common ML LLR and MMSE for 2 layers functions being shared by both gNB and UE. Disabled ML based LLR due to lareg compute time Signed-off-by:Rupanjali <rupanjali.srivastava@openairinterface.org>
-
Rupanjali authored
Signed-off-by:Rupanjali <rupanjali.srivastava@openairinterface.org>
-
Rupanjali authored
Signed-off-by:Rupanjali <rupanjali.srivastava@openairinterface.org>
-
Robert Schmidt authored
ci: maintainer approval for additional file changes and update maintainer's contact (#160) Reviewed-by:
Robert Schmidt <robert.schmidt@openairinterface.org> Reviewed-by:
Jaroslava Fiedlerova <jaroslava.fiedlerova@openairinterface.org>
-
Robert Schmidt authored
After migration of github, we only use the commit ID for the pre-ci-check script. This is problematic, because it checks for merges, excluding the integration branch (expected to have merges), based on the branch _name_. In this commit, if a full SHA is detected as the branch "name", use "git branch --points-at" to get a branch name, then use that to exclude integration branches (or not). If no branch name is found, the branch name "" is used, which will trigger the normal merge check (because "" does not match the integration branch name). Signed-off-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
RLC data req: Use API to fill multiple RLC PDUs at gNB (#145) Use the RLC API to fill a transport block for a given LCID with a single lock-unlock cycle. This is a (partial) recommit of 4426fb1a which had been reverted later in commit 8ed54d70. Reviewed-by:
Jaroslava Fiedlerova <jaroslava.fiedlerova@openairinterface.org> Reviewed-by:
Francesco Mani <email@francescomani.it>
-