From ef4adce1e53d0960334cf6ea3d7dbc3aef67e308 Mon Sep 17 00:00:00 2001 From: Francesco Mani Date: Tue, 10 Nov 2020 14:14:44 +0100 Subject: [PATCH] using cell id as scrambling id for csi-rs --- openair1/PHY/INIT/nr_init.c | 2 +- openair1/PHY/NR_TRANSPORT/nr_csi_rs.c | 20 ++++++++++++++++++- .../PHY/NR_TRANSPORT/nr_transport_proto.h | 1 + openair1/SCHED_NR/phy_procedures_nr_gNB.c | 2 +- .../NR_MAC_gNB/gNB_scheduler_primitives.c | 2 +- openair2/RRC/NR/rrc_gNB_reconfig.c | 2 +- 6 files changed, 24 insertions(+), 5 deletions(-) diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c index 413228f021..1859bfb90a 100644 --- a/openair1/PHY/INIT/nr_init.c +++ b/openair1/PHY/INIT/nr_init.c @@ -196,7 +196,7 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB, } } - nr_init_csi_rs(gNB, 0); // TODO scramblingID currently hardcoded to 0, to be taken from higher layer parameter scramblingID when implemented + nr_init_csi_rs(gNB, cfg->cell_config.phy_cell_id.value); // TODO scramblingID currently hardcoded to 0, to be taken from higher layer parameter scramblingID when implemented /// Transport init necessary for NR synchro init_nr_transport(gNB); diff --git a/openair1/PHY/NR_TRANSPORT/nr_csi_rs.c b/openair1/PHY/NR_TRANSPORT/nr_csi_rs.c index 150f57b174..8f7837c15b 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_csi_rs.c +++ b/openair1/PHY/NR_TRANSPORT/nr_csi_rs.c @@ -22,6 +22,7 @@ #include "PHY/NR_TRANSPORT/nr_transport_proto.h" #include "PHY/MODULATION/nr_modulation.h" +#include "PHY/NR_REFSIG/nr_refsig.h" #define NR_CSIRS_DEBUG @@ -29,12 +30,13 @@ void nr_generate_csi_rs(PHY_VARS_gNB *gNB, int16_t amp, nfapi_nr_dl_tti_csi_rs_pdu_rel15_t csi_params, + uint16_t cell_id, int slot){ NR_DL_FRAME_PARMS frame_parms=gNB->frame_parms; - uint32_t **gold_csi_rs = gNB->nr_gold_csi_rs[slot]; int32_t **txdataF = gNB->common_vars.txdataF; int txdataF_offset = (slot%2)*frame_parms.samples_per_slot_wCP; + uint32_t **gold_csi_rs = gNB->nr_gold_csi_rs[slot]; int16_t mod_csi[frame_parms.symbols_per_slot][NR_MAX_CSI_RS_LENGTH>>1]; uint16_t b = csi_params.freq_domain; uint16_t n, csi_bw, csi_start, p, k, l, mprime, na, kpn, csi_length; @@ -48,6 +50,22 @@ void nr_generate_csi_rs(PHY_VARS_gNB *gNB, AssertFatal(b!=0, "Invalid CSI frequency domain mapping: no bit selected in bitmap\n"); + // pre-computed for scrambling id equel to cell id + // if the scrambling id is not the cell id we need to re-initialize the rs + if (csi_params.scramb_id != cell_id) { + uint8_t reset; + uint32_t x1, x2; + uint32_t Nid = csi_params.scramb_id; + for (uint8_t symb=0; symbslot == slot) ) { LOG_D(PHY, "CSI-RS generation started in frame %d.%d\n",frame,slot); nfapi_nr_dl_tti_csi_rs_pdu_rel15_t csi_params = csirs->csirs_pdu.csi_rs_pdu_rel15; - nr_generate_csi_rs(gNB, AMP, csi_params, slot); + nr_generate_csi_rs(gNB, AMP, csi_params, gNB->gNB_config.cell_config.phy_cell_id.value, slot); csirs->active = 0; } } diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c index 2f6be0bbe9..af3a2b9d99 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c @@ -2038,7 +2038,7 @@ uint16_t nr_get_csi_bitlen(int Mod_idP, csi_bitlen = ((CSI_report_bitlen->cri_ssbri_bitlen * CSI_report_bitlen->nb_ssbri_cri) + CSI_report_bitlen->rsrp_bitlen +(CSI_report_bitlen->diff_rsrp_bitlen * (CSI_report_bitlen->nb_ssbri_cri -1 )) *UE_info->csi_report_template[UE_id][csi_report_id].nb_of_csi_ssb_report); -printf("%d\n",csi_bitlen); + return csi_bitlen; } diff --git a/openair2/RRC/NR/rrc_gNB_reconfig.c b/openair2/RRC/NR/rrc_gNB_reconfig.c index e767e809ac..c84872ec45 100644 --- a/openair2/RRC/NR/rrc_gNB_reconfig.c +++ b/openair2/RRC/NR/rrc_gNB_reconfig.c @@ -1073,7 +1073,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco nzpcsi0->powerControlOffset = 0; nzpcsi0->powerControlOffsetSS=calloc(1,sizeof(*nzpcsi0->powerControlOffsetSS)); *nzpcsi0->powerControlOffsetSS = NR_NZP_CSI_RS_Resource__powerControlOffsetSS_db0; - nzpcsi0->scramblingID = 50; + nzpcsi0->scramblingID = *servingcellconfigcommon->physCellId; nzpcsi0->periodicityAndOffset = calloc(1,sizeof(*nzpcsi0->periodicityAndOffset)); nzpcsi0->periodicityAndOffset->present = NR_CSI_ResourcePeriodicityAndOffset_PR_slots320; nzpcsi0->periodicityAndOffset->choice.slots320 = 0;