- 21 Jul, 2026 5 commits
-
-
Rakesh Mundlamuri authored
Signed-off-by:Rakesh Mundlamuri <rakesh.mundlamuri@openairinterface.org>
-
Rakesh Mundlamuri authored
This commit introduces a dedicated simulation environment to validate the uplink MU-MIMO joint processing framework. It models a scenario where a single gNB serves multiple spatially multiplexed UEs sharing the exact same time and frequency resources. The simulator executes the complete physical layer baseband pipeline: - PUSCH data generation and LDPC encoding per UE - OFDM modulation (TX) - Signal propagation through a multi-path channel model - OFDM demodulation (RX) at the gNB - Joint PUSCH decoding, equalization, and spatial demultiplexing Performance metrics such as scrambling errors and BLER per UE is evaluated at the end of the simulation. Signed-off-by:Rakesh Mundlamuri <rakesh.mundlamuri@openairinterface.org>
-
Rakesh Mundlamuri authored
Signed-off-by:Rakesh Mundlamuri <rakesh.mundlamuri@openairinterface.org>
-
Rakesh Mundlamuri authored
Signed-off-by:Rakesh Mundlamuri <rakesh.mundlamuri@openairinterface.org>
-
Rakesh Mundlamuri authored
- The nr_rx_pusch_tp() function, which handles single UE PUSCH RX processing, is extended to nr_rx_pusch_group_tp() for group based processing, where all UEs belonging to the same group are processed together. - A joint PDU is created that accumulates all the layers of the UEs in a group to process them jointly. This creates a virtual single UE MIMO configuration that can be processed using existing OAI functions. The resulting output consists of the LLRs from all the UEs. The LLRs are further separated per UE, and unscrambling is performed individually. - Note that the unscrambling step is removed from nr_pusch_symbol_processing(). Because the resulting output from joint processing consists of LLRs from multiple UEs, these LLRs need to be separated before they can be unscrambled individually. Signed-off-by:Rakesh Mundlamuri <rakesh.mundlamuri@openairinterface.org>
-
- 20 Jul, 2026 3 commits
-
-
Rakesh Mundlamuri authored
Signed-off-by:Rakesh Mundlamuri <rakesh.mundlamuri@openairinterface.org>
-
Rakesh Mundlamuri authored
Refactor ULSCH_id based processing of the PUSCH PDUs to group based processing using FAPI groups. This is required to process multiple PUSCH PDUs jointly for MU-MIMO. This is an initial commit that supports group size = 1 and will be extended to > 1 in the following commits. The flow of group information from MAC to PHY using FAPI is as follows: - In MAC, nr_fill_pusch_fapi_groups() is introduced to fill UEs in groups. The FAPI groups consist of UE lists filled with a PDU index. Based on the parameter UL_tti_req->n_group, the number of unique groups are identified. In each group, the parameter group->n_ue defines the number of UEs present in the group along with their PDU indices. - After receiving the FAPI message in the PHY from MAC, in nr_save_ul_tti_req(), a group number and group size for each PUSCH PDU is allocated in nr_fill_ulsch(), and a PUSCH job is created. - Further, after a job is created, in phy_procedures_gNB_uespec_RX(), the PUSCH PDUs of the ULSCH_ids for each group are segregated based on the group index. They are processed jointly using handle_pusch_rx_group_trigger(), and the PUSCH DTX per UE in the group is calculated using handle_pusch_DTX(). Signed-off-by:Rakesh Mundlamuri <rakesh.mundlamuri@openairinterface.org>
-
Rakesh Mundlamuri authored
The function handle_pusch_decode_trigger() consists of PUSCH RX processing and PUSCH DTX detection per UE. This is now split into two functions: handle_pusch_rx_trigger() and handle_pusch_DTX(). This is needed for group based processing where each group consists of multiple UEs and handle_pusch_rx_trigger() processes PUSCH RX for multiple UEs jointly while handle_pusch_DTX() need to detect PUSCH DTX per UE. Signed-off-by:Rakesh Mundlamuri <rakesh.mundlamuri@openairinterface.org>
-
- 17 Jul, 2026 7 commits
-
-
Robert Schmidt authored
Integration: 2026.w29 - #280 Optimize syscalls in GTP receiver/sender, GTP F1 UL callback optimization - #287 demote LOG_E for RRC Release with deprioritisationReq - #259 [FHI72] Remove xran F release support - #286 NR_PHY: Optimize layer demapping for PDSCH/PUSCH receiver performance - #248 Allocate multiple UEs in one slot (DL/UL) - #283 Update WLS library dependencies - #284 Update OpenAirInterface repository links to the new Duranta Project repository - #301 fix(t2): Accept CBs decoded across separate HARQ rounds - #302 fix(phy): Fix an uninitialized variable bug in dot_product - #303 fix(phy): use simde_mm_setr_epi16 to initialize alpha_128 in rotate_cpx_vector - #298 ITTI: cleanup memset after alloc, adopt calloc_or_fail - #299 Update the OAI UE config parameters check range with the standard SST and SD values - #268 nfapi: support SRS channel reports for 64 gNB antenna elements - fix for WLS PR - #304 fix(PHY): compare NID2 instead of NID1 in rx_sss_nr() coherence check - #277 chore: migrate FlexRIC submodule to GitHub - #195 Add cell-level E2SM-KPM measurements - #300 CI: Update Aerial setup to 26-1 Closes: #296
-
Robert Schmidt authored
CI: Update Aerial setup to 26-1 (#300) This PR updates the cuBB image in the Aerial setup to release 26-1. Reviewed-By:Rúben Soares Silva <rsilva@allbesmart.pt>
-
Robert Schmidt authored
Add cell-level E2SM-KPM measurements (#195) This PR adds five 3GPP TS 28.552 cell-level measurements, exposed through the E2SM-KPM service model. The five metrics are: | Metric | 3GPP TS 28.552 | Object class | Advertised by | |---------------------|----------------|--------------|---------------------------| | `CARR.PDSCHMCSDist` | §5.1.1.12.1 | NRCellDU | DU, monolithic gNB | | `CARR.PUSCHMCSDist` | §5.1.1.12.2 | NRCellDU | DU, monolithic gNB | | `L1M.SS-RSRP` | §5.1.1.22.1 | Beam | CU, CU-CP, monolithic gNB | | `MR.NRScSSSINR` | §5.1.1.32 | NRCellCU | CU, CU-CP, monolithic gNB | | `RRC.ConnMean` | §5.1.1.4.1 | NRCellCU | CU, monolithic gNB | Each metric is delivered as one signed commit. Metrics: CARR.PDSCHMCSDist — §5.1.1.12.1: PRB-weighted distribution of the MCS used on PDSCH, modelled as a 3D histogram over (rank, MCS-table, MCS-index). The collection hook in the DL scheduling path increments the matching bin by the number of scheduled PDSCH RBs. Carried as E2SM-KPM Style 1 / Indication Message Format 1 with the `distBinX/Y/Z` measurement labels. CARR.PUSCHMCSDist — §5.1.1.12.2: Uplink counterpart of the above, over (rank, MCS-table-family, MCS-index) for PUSCH. The UL scheduling hook increments the bin by the number of scheduled PUSCH RBs. L1M.SS-RSRP — §5.1.1.22.1: Distribution of the SS-RSRP reported by UEs, resolved per SSB beam. The RRC layer accumulates a per-beam histogram from each periodic Measurement Report; RSRP level `L` maps to `L − 157` dBm (TS 38.133 §10.1.6). The reader returns the per-beam value when the `ssbIndex` label is present, or the cell-wide sum over beams otherwise. MR.NRScSSSINR — §5.1.1.32: Distribution of the NR serving-cell SS-SINR reported by UEs. The RRC layer accumulates a per-cell histogram from each periodic Measurement Report; level `L` maps to `(L − 46) / 2` dB (0.5 dB steps, TS 38.133 §10.1.16). RRC.ConnMean — §5.1.1.4.1: Mean number of UEs in RRC-CONNECTED state over the granularity period. The RRC task samples the connected-UE count at a fixed interval and accumulates a running `{sum, samples}`. The reported mean is the delta of that cumulative accumulator between two consecutive readings. Notes: - All five metrics are carried as E2SM-KPM **Measurement Report Style 1** - Distribution metrics use the standard `distBinX/Y/Z` (and `ssbIndex` where applicable) measurement labels; bins are 1-based on the wire and mapped to 0-based array indices. Where TS 28.552 defines no scalar aggregate, a request without the required label or a `noLabel` subscriptions, are answered with `NO_VALUE`. Reviewed-by:Robert Schmidt <robert.schmidt@openairinterface.org> Reviewed-by:
Teodora Vladić <teodora.vladic@openairinterface.org>
-
Robert Schmidt authored
chore: migrate FlexRIC submodule to GitHub (#277) This PR migrates the FlexRIC submodule from the EURECOM GitLab repository to the GitHub repository under the duranta-project organization. - Update the FlexRIC submodule URL. - Remove submodule branch remotes/origin/service-models-integration from .gitmodules introduced in the commit 2fef830d. After removing the explicit branch configuration, git submodule update --remote will follow the default branch of the FlexRIC remote repository (in this case, dev) Reviewed-by:
Robert Schmidt <robert.schmidt@openairinterface.org> Reviewed-by:
Teodora Vladić <teodora.vladic@openairinterface.org>
-
Robert Schmidt authored
fix(PHY): compare NID2 instead of NID1 in rx_sss_nr() coherence check (#304) target_Nid_cell was being decomposed with GET_NID1() and compared against pss->nid2 (the detected PSS NID2). Since Nid1 != Nid2 in almost all cases, the coherence check always failed, forcing an exhaustive 336-hypothesis SSS search instead of the intended single-candidate fast path when validating a known neighbor PCI, and spamming LOG_E on every such call. Closes: #296 Reviewed-by:Francesco Mani <email@francescomani.it>
-
Teodora Vladić authored
Relevant PR: * https://github.com/duranta-project/openairinterface5g/pull/259 * https://github.com/duranta-project/openairinterface5g/pull/293Signed-off-by:
Teodora Vladić <teodora.vladic@openairinterface.org> Signed-off-by:
Robert Schmidt <robert.schmidt@openairinterface.org>
-
- 16 Jul, 2026 7 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>
-
Mohammed Safwan authored
target_Nid_cell was being decomposed with GET_NID1() and compared against pss->nid2 (the detected PSS NID2). Since Nid1 != Nid2 in almost all cases, the coherence check spuriously failed, forcing an exhaustive 336-hypothesis SSS search instead of the intended single-candidate fast path when validating a known neighbor PCI, and spamming LOG_E on every such call. Fixes #296 Signed-off-by:Mohammed Safwan <mohammed.safwan@openairinterface.org>
-
Robert Schmidt authored
nfapi: support SRS channel reports for 64 gNB antenna elements (#268) This MR is part of the reciprocity-based dynamic BF series and goes together with #156 and #267. Additional MRs will follow with the FAPI changes to support Dynamic Beamforming, as well as adaptations to the scheduler. SRS-reciprocity workflows with Aerial mMIMO (Cat-B, 64-element arrays) return the normalized channel IQ matrix over FAPI, but the SRS.indication structs and codec were dimensioned for 8 gNB antenna elements. A 64-element report needs up to 272 PRGs × 4 UE ports × 64 elements × 4 B ≈ 272 KiB, which the current code truncates or silently drops. Changes: - Buffer dimensioning (nfapi_nr_interface_scf.h): new NFAPI_NR_SRS_MAX_* macros size channel_matrix and the SRS report TLV value[] for 64 antenna elements / 4 UE SRS ports / 272 PRGs. The two buffers are now sized consistently (previously the report TLV allowed more UE ports than channel_matrix could hold). - Integer overflow fixes on the SRS report path, which become fatal at these report sizes: * unpack_nr_srs_report_tlv_value(): last_idx was int16_t, overflowing for reports >= 128 KiB so the copy loop never ran and the report was dropped. Widened to int32_t, and oversized reports are now rejected instead of overrunning the value buffer. * pack/unpack_nr_srs_normalized_channel_iq_matrix(): channel_matrix_size was uint16_t (wraps at 64 KiB). Widened to uint32_t and bounded by sizeof(channel_matrix). * handle_nr_srs_measurements(): the SRS_IND_DEBUG print indexed the matrix with a uint16_t, which wraps for Nu·Ng·Np > 65535. Reviewed-by:Robert Schmidt <robert.schmidt@openairinterface.org> Reviewed-By:
Rúben Soares Silva <rsilva@allbesmart.pt>
-
- 15 Jul, 2026 18 commits
-
-
Robert Schmidt authored
Update the OAI UE config parameters check range with the standard SST and SD values (#299) This PR updates the SST and SD authorized range provided for OAI UE UICC configuration check as per the S-NSSAI as defined in TS 24.501 Sec. 9.11.2.8 and TS 23.003 Sec. 28.4.2. The standard SST range is from 0 to 127 (while 128 to 255 are reserved for operator-specific purposes) and standard SD range is from 0x000000 to 0xFFFFFF. Thanks to IOS-MCN, IISc for providing the IOS-MCN-CORE setup to test the ue-nas-simulator. Reviewed-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
ITTI: cleanup memset after alloc, adopt calloc_or_fail (#298) In NGAP/RRC memset calls after itti_alloc_new_message are redundant since memory is already zero-initialized by itti_alloc_new_message via calloc(). Also, in itti_malloc, manual calloc + AssertFatal is replaced by calloc_or_fail, which provides better error messages and calls abort(). Reviewed-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
fix(phy): use simde_mm_setr_epi16 to initialize alpha_128 in rotate_cpx_vector (#303) Avoid direct pointer-casting of the SIMD variable alpha_128 to int16_t * in rotate_cpx_vector(), which is a strict-aliasing violation and can cause undefined behavior or compiler optimization bugs. Instead, use the simde_mm_setr_epi16 intrinsic to initialize the vector. The bug was observed on an arm system, and would lead to non-deterministic results. Reviewed-by:Laurent THOMAS <laurent.thomas@open-cells.com>
-
Robert Schmidt authored
fix(phy): Fix an uninitialized variable bug in dot_product (#302) This was only present on non x86 systems. Reviewed-by:Laurent THOMAS <laurent.thomas@open-cells.com>
-
Robert Schmidt authored
fix(t2): Accept CBs decoded across separate HARQ rounds (#301) See commit 8481bd3e for more details. Reviewed-by:
Robert Schmidt <robert.schmidt@openairinterface.org>
-
Robert Schmidt authored
Update OpenAirInterface repository links to the new Duranta Project repository (#284) Reviewed-by:
Robert Schmidt <robert.schmidt@openairinterface.org> Reviewed-by:
Shubhika Garg <shubhika.garg@openairinterface.org>
-
Robert Schmidt authored
Update WLS library dependencies (#283) This PR aims to upgrade the used WLS library and dependencies to align with Release K , following the drop of support for Release F previously used PR #259. This was tested locally after installing the new DPDK version and WLS library according to ORAN_FHI7.2_Tutorial.md and nfapi.md. Reviewed-by:
Robert Schmidt <robert.schmidt@openairinterface.org> Reviewed-by:
Teodora Vladić <teodora.vladic@openairinterface.org> Reviewed-by:
Jaroslava Fiedlerova <jaroslava.fiedlerova@openairinterface.org>
-
Jaroslava Fiedlerova authored
Allocate multiple UEs in one slot (DL/UL) (#248) This PR allows to schedule multiple UEs in one slot via a 2-pass loop. Since we still use type-1 RB allocation, we use start+length. Thus, once an allocation is made, it is non-trivial to change it if another UE has been allocated, because it would be necessary to change the allocation of multiple UEs retroactively. Thus, the two-pass algorithm - calculates the amount of RBs relevant for each UE, storing the number of requested RBs - makes allocations while accounting for excess RBs (excess RBs are given to the first UE(s) to preserve the PF property) Further, the number of DCIs in DL/UL is capped to 4 to prevent excessive computation times, as shown in nrdlbench. Also, increase the number of DCIs per slot to 12 (from 8, which might be reached with 4 DL/4 UL UEs) and add asserts. Reviewed-By:
Maxime Elkael <m.elkael@northeastern.edu> Reviewed-By:
Karim Boutiba <karim.boutiba@openairinterface.org>
-
Robert Schmidt authored
NR_PHY: Optimize layer demapping for PDSCH/PUSCH receiver performance (#286) Optimizes layer de-mapping in the NR receiver path and refactors the implementation into a common function shared by both the UE (PDSCH) and gNB (PUSCH) receive paths. Commit 1: [NR_UE_PDSCH] Optimize PDSCH layer de-mapping Uses a switch with a LAYER_DEMAPPING(MO) macro for modulation orders 2, 4, 6, and 8. Since the copy size is now known at compile time, the compiler can replace memcpy calls with inline fixed-size vector stores. Commit 2: [NR_PHY] Common layer de-mapping implementation Extract a common nr_layer_demapping() function for both UE and gNB. Update the UE and gNB receive paths to use the shared implementation, reducing code duplication while bringing the same optimization to the gNB PUSCH path. With ./nr_dlsim -s30 -b106 -R106 -n100 -e25 -x2 -y2 -z2 -P i.e. 64 QAM, 2 layers case, the layer demapping compute time reduces by ~35x times. Develop: |__ DLSCH_CHANNEL_COMPENSATION_STATS 3.03 us (1300 trials) ( 3.94 total [ms]) |__ DLSCH_LLR_STATS 17.54 us (100 trials) ( 1.75 total [ms]) |__ DLSCH_LAYER_DEMAPPING 571.11 us (100 trials) ( 57.11 total [ms]) Post-optimization: |__ DLSCH_CHANNEL_COMPENSATION_STATS 2.67 us (1300 trials) ( 3.47 total [ms]) |__ DLSCH_LLR_STATS 16.50 us (100 trials) ( 1.65 total [ms]) |__ DLSCH_LAYER_DEMAPPING 16.14 us (100 trials) ( 1.61 total [ms]) Mod 2 Layers (µs) 3 Layers (µs) 4 Layers (µs) develop PB speedup develop PB speedup develop PB speedup 64 QAM 571.11 16.14 35.39x 649.16 19.92 32.59x 953.22 30.00 31.77x 16 QAM 523.60 8.35 62.71x 651.99 13.39 48.69x 844.49 14.67 57.57x QPSK 32.43 8.09 4.01x 35.17 9.21 3.82x 63.64 11.44 5.56x Reviewed-By: Rakesh Mundlamuri <rakesh.mundlamuri@openairinterface.org Reviewed-by:Bartosz Podrygajlo <bartosz.podrygajlo@openairinterface.org>
-
Robert Schmidt authored
[FHI72] Remove xran F release support (#259) Additionally, downgrade required DPDK version from v24 to v22 for xran K release. Initially, we wanted to use more recent version, but for the compatibility with T2 card v22 is required. Reviewed-by:Robert Schmidt <robert.schmidt@openairinterface.org>
-
Bartosz Podrygajlo authored
Avoid direct pointer-casting of the SIMD variable `alpha_128` to `int16_t *` in rotate_cpx_vector(), which is a strict-aliasing violation and can cause undefined behavior or compiler optimization bugs. Instead, use the simde_mm_setr_epi16 intrinsic to initialize the vector. The bug was observed on an arm system, and would lead to non-deterministic results. Signed-off-by:Bartosz Podrygajlo <bartosz.podrygajlo@openairinterface.org>
-
Bartosz Podrygajlo authored
This was only present on non x86 systems. Signed-off-by:Bartosz Podrygajlo <bartosz.podrygajlo@openairinterface.org>
-
Rúben Soares Silva authored
Signed-off-by:Rúben Soares Silva <rsilva@allbesmart.pt>
-
Guido Casati authored
Manual calloc + AssertFatal is replaced by calloc_or_fail, which provides better error messages and calls abort(). Signed-off-by:Guido Casati <guido.casati@openairinterface.org>
-
Jaroslava Fiedlerova authored
Add/modify/remove required files for RAN-SA-AERIAL-CN5G Signed-off-by:Jaroslava Fiedlerova <jaroslava.fiedlerova@openairinterface.org>
-
Jaroslava Fiedlerova authored
Add/modify/remove required files for SA-AERIAL-OAIUE-CN5G Signed-off-by:Jaroslava Fiedlerova <jaroslava.fiedlerova@openairinterface.org>
-
Jaroslava Fiedlerova authored
Signed-off-by:Jaroslava Fiedlerova <jaroslava.fiedlerova@openairinterface.org>
-
Robert Schmidt authored
- As per the S-NSSAI as defined in TS 24.501 Sec. 9.11.2.8 and TS 23.003 Sec. 28.4.2 - Standard SST range is from 0 to 127 (128 to 255 is reserved) - Standard SD range is from 0x000000 to 0xFFFFFF Co-authored-by:Venkatareddy Akumalla <venkatareddy.akumalla@openairinterface.org> Signed-off-by:
Venkatareddy Akumalla <venkatareddy.akumalla@openairinterface.org>
-