diff --git a/lib/include/srsran/interfaces/gnb_rrc_nr_interfaces.h b/lib/include/srsran/interfaces/gnb_rrc_nr_interfaces.h index f880a4fc8..5b726baea 100644 --- a/lib/include/srsran/interfaces/gnb_rrc_nr_interfaces.h +++ b/lib/include/srsran/interfaces/gnb_rrc_nr_interfaces.h @@ -38,6 +38,9 @@ struct rrc_cell_cfg_nr_t { uint32_t tac; // Tracking area code uint32_t dl_arfcn; // DL freq already included in phy_cell uint32_t ul_arfcn; // UL freq also in phy_cell + uint32_t dl_absolute_freq_point_a; // derived from DL ARFCN + uint32_t ul_absolute_freq_point_a; // derived from UL ARFCN + uint32_t ssb_absolute_freq_point; // derived from DL ARFCN uint32_t band; srsran_duplex_mode_t duplex_mode; }; diff --git a/srsenb/src/enb_cfg_parser.cc b/srsenb/src/enb_cfg_parser.cc index 3e138ce47..9eec0f3ac 100644 --- a/srsenb/src/enb_cfg_parser.cc +++ b/srsenb/src/enb_cfg_parser.cc @@ -1525,20 +1525,23 @@ int set_derived_args_nr(all_args_t* args_, rrc_nr_cfg_t* rrc_cfg_, phy_cfg_t* ph cfg.phy_cell.pdcch.ra_search_space = cfg.phy_cell.pdcch.search_space[1]; cfg.phy_cell.pdcch.ra_search_space.type = srsran_search_space_type_common_1; - // point a - cfg.phy_cell.carrier.dl_absolute_frequency_point_a = - band_helper.get_abs_freq_point_a_arfcn(cfg.phy_cell.carrier.nof_prb, cfg.dl_arfcn); - cfg.phy_cell.carrier.ul_absolute_frequency_point_a = - band_helper.get_abs_freq_point_a_arfcn(cfg.phy_cell.carrier.nof_prb, cfg.ul_arfcn); + // copy center frequencies + cfg.phy_cell.carrier.dl_center_frequency_hz = cfg.phy_cell.dl_freq_hz; + cfg.phy_cell.carrier.ul_center_frequency_hz = cfg.phy_cell.ul_freq_hz; - // ssb freq + cfg.dl_absolute_freq_point_a = band_helper.get_abs_freq_point_a_arfcn(cfg.phy_cell.carrier.nof_prb, cfg.dl_arfcn); + cfg.ul_absolute_freq_point_a = band_helper.get_abs_freq_point_a_arfcn(cfg.phy_cell.carrier.nof_prb, cfg.ul_arfcn); + + // Calculate SSB absolute frequency (in ARFCN notation) if (band_helper.get_ssb_pattern(cfg.band, srsran_subcarrier_spacing_15kHz) != SRSRAN_SSB_PATTERN_INVALID) { - cfg.phy_cell.carrier.absolute_frequency_ssb = band_helper.get_abs_freq_ssb_arfcn( - cfg.band, srsran_subcarrier_spacing_15kHz, cfg.phy_cell.carrier.dl_absolute_frequency_point_a); + cfg.ssb_absolute_freq_point = + band_helper.get_abs_freq_ssb_arfcn(cfg.band, srsran_subcarrier_spacing_15kHz, cfg.dl_absolute_freq_point_a); } else { - cfg.phy_cell.carrier.absolute_frequency_ssb = band_helper.get_abs_freq_ssb_arfcn( - cfg.band, srsran_subcarrier_spacing_30kHz, cfg.phy_cell.carrier.dl_absolute_frequency_point_a); + cfg.ssb_absolute_freq_point = + band_helper.get_abs_freq_ssb_arfcn(cfg.band, srsran_subcarrier_spacing_30kHz, cfg.dl_absolute_freq_point_a); } + // Convert to frequency for PHY + cfg.phy_cell.carrier.ssb_center_freq_hz = band_helper.nr_arfcn_to_freq(cfg.ssb_absolute_freq_point); phy_cfg_->phy_cell_cfg_nr.push_back(cfg.phy_cell); } diff --git a/srsenb/src/stack/rrc/rrc_nr.cc b/srsenb/src/stack/rrc/rrc_nr.cc index 2adda6c50..e79fffff5 100644 --- a/srsenb/src/stack/rrc/rrc_nr.cc +++ b/srsenb/src/stack/rrc/rrc_nr.cc @@ -1130,15 +1130,15 @@ int rrc_nr::ue::pack_recfg_with_sync_sp_cell_cfg_common_dl_cfg_common_freq_info_ cell_group_cfg_pack.sp_cell_cfg.recfg_with_sync.sp_cell_cfg_common.dl_cfg_common.freq_info_dl_present = true; auto& freq_info_dl = cell_group_cfg_pack.sp_cell_cfg.recfg_with_sync.sp_cell_cfg_common.dl_cfg_common.freq_info_dl; freq_info_dl.freq_band_list.push_back(parent->cfg.cell_list[0].band); - freq_info_dl.absolute_freq_point_a = parent->cfg.cell_list[0].phy_cell.carrier.dl_absolute_frequency_point_a; + freq_info_dl.absolute_freq_point_a = parent->cfg.cell_list[0].dl_absolute_freq_point_a; freq_info_dl.absolute_freq_ssb_present = true; - freq_info_dl.absolute_freq_ssb = parent->cfg.cell_list[0].phy_cell.carrier.absolute_frequency_ssb; + freq_info_dl.absolute_freq_ssb = parent->cfg.cell_list[0].ssb_absolute_freq_point; freq_info_dl.scs_specific_carrier_list.resize(1); auto& dl_carrier = freq_info_dl.scs_specific_carrier_list[0]; dl_carrier.offset_to_carrier = 0; dl_carrier.subcarrier_spacing = subcarrier_spacing_opts::khz15; - dl_carrier.carrier_bw = 52; + dl_carrier.carrier_bw = parent->cfg.cell_list[0].phy_cell.carrier.nof_prb; return SRSRAN_SUCCESS; } @@ -1261,13 +1261,13 @@ int rrc_nr::ue::pack_recfg_with_sync_sp_cell_cfg_common_ul_cfg_common_freq_info_ cell_group_cfg_pack.sp_cell_cfg.recfg_with_sync.sp_cell_cfg_common.ul_cfg_common.freq_info_ul_present = true; auto& freq_info_ul = cell_group_cfg_pack.sp_cell_cfg.recfg_with_sync.sp_cell_cfg_common.ul_cfg_common.freq_info_ul; freq_info_ul.freq_band_list.push_back(parent->cfg.cell_list[0].band); - freq_info_ul.absolute_freq_point_a = parent->cfg.cell_list[0].phy_cell.carrier.ul_absolute_frequency_point_a; + freq_info_ul.absolute_freq_point_a = parent->cfg.cell_list[0].ul_absolute_freq_point_a; freq_info_ul.scs_specific_carrier_list.resize(1); auto& ul_carrier = freq_info_ul.scs_specific_carrier_list[0]; ul_carrier.offset_to_carrier = 0; ul_carrier.subcarrier_spacing = subcarrier_spacing_opts::khz15; - ul_carrier.carrier_bw = 52; + ul_carrier.carrier_bw = parent->cfg.cell_list[0].phy_cell.carrier.nof_prb; return SRSRAN_SUCCESS; }