From ded31877343d2d32acd0fa2b7abd0b46c0a5ddd8 Mon Sep 17 00:00:00 2001 From: francescomani Date: Tue, 22 Apr 2025 17:54:51 +0200 Subject: [PATCH] omitting beam weigths in case of DAS --- doc/analog_beamforming.md | 4 ++-- openair1/SCHED_NR/phy_procedures_nr_gNB.c | 4 ++-- openair2/GNB_APP/gnb_config.c | 4 ++++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/doc/analog_beamforming.md b/doc/analog_beamforming.md index e953e02fb3..4ff208343e 100644 --- a/doc/analog_beamforming.md +++ b/doc/analog_beamforming.md @@ -20,9 +20,9 @@ In the `MACRLC` section of configuration files, there are three new parameters: - `set_analog_beamforming` can be set to 1 or 0 to activate or desactivate analog beamforming (default value is 0) - `beam_duration` is the number of slots (currently minimum duration of a beam) the scheduler is tied to a beam (default value is 1) - `beams_per_period` is the number of concurrent beams the RU can handle in the beam duration (default value is 1) -- `beam_weights` is a vector field containing the set of beam indices to be provided by the OAI L1 to the RU is also required. In current implementation, the number of beam indices should be equal to the number of SSBs transmitted. +- `beam_weights` is a vector field containing the set of beam indices to be provided by the OAI L1 to the RU is also required. In current implementation, the number of beam indices should be equal to the number of SSBs transmitted -DAS is enabled by setting to 1 the parameter `enable_das` in the L1 section of the configuration file. +DAS is enabled by setting to 1 the parameter `enable_das` in the L1 section of the configuration file. In case of DAS enabled, the field `beam_weights` in `MACRLC` section can be omitted. # Implementation in OAI scheduler diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index ad75cc733e..d21674edaf 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -55,10 +55,10 @@ int beam_index_allocation(bool das, { if (!common_vars->beam_id) return 0; + if (das) + return fapi_beam_index; int ru_beam_idx = analog_bf->analog_beam_list[fapi_beam_index].value; - if (das) - return ru_beam_idx; int idx = -1; for (int j = 0; j < common_vars->num_beams_period; j++) { // L2 analog beam implementation is slot based, so we need to verify occupancy for the whole slot diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c index 4a68aa1f78..44ea5648bf 100644 --- a/openair2/GNB_APP/gnb_config.c +++ b/openair2/GNB_APP/gnb_config.c @@ -1700,6 +1700,10 @@ void RCconfig_nr_macrlc(configmodule_interface_t *cfg) beam_info->beam_allocation_size = -1; // to be initialized once we have information on frame configuration } if (config_isparamset(MacRLC_ParamList.paramarray[j], MACRLC_BEAMWEIGHTS_IDX)) { + if (NFAPI_MODE == NFAPI_MONOLITHIC) { + GET_PARAMS_LIST(L1_ParamList, L1_Params, L1PARAMS_DESC, CONFIG_STRING_L1_LIST, NULL); + AssertFatal(*(L1_ParamList.paramarray[j][L1_ANALOG_DAS].uptr) == 0, "No need to set beam weights in case of DAS\n"); + } int n = MacRLC_ParamList.paramarray[j][MACRLC_BEAMWEIGHTS_IDX].numelt; int num_beam = n; if (!ab) {