Skip to content

Commit 67f2221

Browse files
committed
csi: walk around CSI-RS collision with PDSCH DM-RS
1 parent dd46594 commit 67f2221

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed

apps/units/flexible_du/du_high/du_high_config_translators.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,14 @@ static void fill_csi_resources(serving_cell_config& out_cell, const du_high_unit
163163
csi_params.nof_ports = cell_cfg.nof_antennas_dl;
164164
csi_params.csi_rs_period = static_cast<csi_resource_periodicity>(csi_cfg.csi_rs_period_msec *
165165
get_nof_slots_per_subframe(cell_cfg.common_scs));
166+
167+
// [Implementation-defined] The default CSI symbols are in symbols 4 and 8, the DM-RS for PDSCH might collide in
168+
// symbol index 8 when the number of DM-RS additional positions is 3.
169+
if (uint_to_dmrs_additional_positions(cell_cfg.pdsch_cfg.dmrs_add_pos) == dmrs_additional_positions::pos3) {
170+
csi_params.csi_ofdm_symbol_index = 9;
171+
csi_params.tracking_csi_ofdm_symbol_indexes = {4, 9, 4, 9};
172+
}
173+
166174
if (cell_cfg.tdd_ul_dl_cfg.has_value()) {
167175
if (not csi_helper::derive_valid_csi_rs_slot_offsets(
168176
csi_params,

include/srsran/scheduler/config/csi_helper.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "srsran/ran/csi_rs/csi_meas_config.h"
1414
#include "srsran/ran/pci.h"
1515
#include "srsran/ran/tdd/tdd_ul_dl_config.h"
16+
#include <array>
1617

1718
namespace srsran {
1819
namespace csi_helper {
@@ -26,6 +27,10 @@ struct csi_builder_params {
2627
unsigned nof_rbs;
2728
/// Number of ports set for the CSI-RS.
2829
unsigned nof_ports = 1;
30+
/// Symbol index for the CSI measurement.
31+
unsigned csi_ofdm_symbol_index = 8;
32+
/// Symbol indexes for tracking signals.
33+
std::array<unsigned, 4> tracking_csi_ofdm_symbol_indexes = {4, 8, 4, 8};
2934
/// Period of the CSI-RS resources.
3035
csi_resource_periodicity csi_rs_period = csi_resource_periodicity::slots80;
3136
/// Slot offset for measurement CSI-RS resources. Note: Should avoid collisions with SSB and SIB1.

lib/scheduler/config/csi_helper.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ static zp_csi_rs_resource make_default_zp_csi_rs_resource(const csi_builder_para
165165
res.res_mapping.fd_alloc.resize(3);
166166
res.res_mapping.fd_alloc.set(2, true);
167167
res.res_mapping.cdm = csi_rs_cdm_type::fd_CDM2;
168-
res.res_mapping.first_ofdm_symbol_in_td = 8;
168+
res.res_mapping.first_ofdm_symbol_in_td = params.csi_ofdm_symbol_index;
169169
res.res_mapping.freq_density = csi_rs_freq_density_type::one;
170170
res.res_mapping.freq_band_rbs = get_csi_freq_occupation_rbs(params.nof_rbs, params.nof_rbs);
171171
res.period = params.csi_rs_period;
@@ -317,11 +317,10 @@ fill_tracking_nzp_csi_rs_resource(span<nzp_csi_rs_resource> tracking_csi_rs,
317317
res.res_mapping.cdm = csi_rs_cdm_type::no_CDM;
318318
res.res_mapping.freq_density = csi_rs_freq_density_type::three;
319319

320-
static constexpr unsigned symbol_offsets[] = {4, 8, 4, 8};
321320
static constexpr unsigned rel_slot_offset[] = {0, 0, 1, 1};
322321
for (unsigned i = 0; i != NOF_TRACKING_RESOURCES; ++i) {
323322
res.res_id = static_cast<nzp_csi_rs_res_id_t>(first_csi_res_id + i);
324-
res.res_mapping.first_ofdm_symbol_in_td = symbol_offsets[i];
323+
res.res_mapping.first_ofdm_symbol_in_td = params.tracking_csi_ofdm_symbol_indexes[i];
325324
res.csi_res_offset = params.tracking_csi_slot_offset + rel_slot_offset[i];
326325
tracking_csi_rs[i] = res;
327326
}

0 commit comments

Comments
 (0)