From f30b42d877bfb637d4ebf15b29215d6f5601bf6b Mon Sep 17 00:00:00 2001 From: francescomani Date: Fri, 29 Dec 2023 17:18:17 +0100 Subject: [PATCH] improvements for slot fep at UE when receiving CSI and PDSCH --- openair1/SCHED_NR_UE/phy_procedures_nr_ue.c | 72 ++++++++++----------- 1 file changed, 34 insertions(+), 38 deletions(-) diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index d3ce92da26..78ca9fecee 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -1004,8 +1004,37 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_ start_meas(&meas); // do procedures for C-RNTI + bool slot_fep_map[14] = {0}; const uint32_t rxdataF_sz = ue->frame_parms.samples_per_slot_wCP; __attribute__ ((aligned(32))) c16_t rxdataF[ue->frame_parms.nb_antennas_rx][rxdataF_sz]; + + // do procedures for CSI-IM + if ((ue->csiim_vars[gNB_id]) && (ue->csiim_vars[gNB_id]->active == 1)) { + for(int symb_idx = 0; symb_idx < 4; symb_idx++) { + int symb = ue->csiim_vars[gNB_id]->csiim_config_pdu.l_csiim[symb_idx]; + if (!slot_fep_map[symb]) { + nr_slot_fep(ue, &ue->frame_parms, proc, symb, rxdataF, link_type_dl); + slot_fep_map[symb] = true; + } + } + nr_ue_csi_im_procedures(ue, proc, rxdataF); + ue->csiim_vars[gNB_id]->active = 0; + } + + // do procedures for CSI-RS + if ((ue->csirs_vars[gNB_id]) && (ue->csirs_vars[gNB_id]->active == 1)) { + for(int symb = 0; symb < NR_SYMBOLS_PER_SLOT; symb++) { + if(is_csi_rs_in_symbol(ue->csirs_vars[gNB_id]->csirs_config_pdu,symb)) { + if (!slot_fep_map[symb]) { + nr_slot_fep(ue, &ue->frame_parms, proc, symb, rxdataF, link_type_dl); + slot_fep_map[symb] = true; + } + } + } + nr_ue_csi_rs_procedures(ue, proc, rxdataF); + ue->csirs_vars[gNB_id]->active = 0; + } + if (dlsch[0].active) { VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_PDSCH, VCD_FUNCTION_IN); fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_config = &dlsch[0].dlsch_config; @@ -1013,15 +1042,12 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_ uint16_t start_symb_sch = dlsch_config->start_symbol; LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR Frame.slot %d.%d ------ \n", frame_rx%1024, nr_slot_rx); - //to update from pdsch config - for (uint16_t m=start_symb_sch;m<(nb_symb_sch+start_symb_sch) ; m++){ - nr_slot_fep(ue, - &ue->frame_parms, - proc, - m, // to be updated from higher layer - rxdataF, - link_type_dl); + for (int m = start_symb_sch; m < (nb_symb_sch + start_symb_sch) ; m++) { + if (!slot_fep_map[m]) { + nr_slot_fep(ue, &ue->frame_parms, proc, m, rxdataF, link_type_dl); + slot_fep_map[m] = true; + } } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_PDSCH, VCD_FUNCTION_OUT); @@ -1097,36 +1123,6 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_ free(llr[i]); } - // do procedures for CSI-IM - if ((ue->csiim_vars[gNB_id]) && (ue->csiim_vars[gNB_id]->active == 1)) { - int l_csiim[4] = {-1, -1, -1, -1}; - for(int symb_idx = 0; symb_idx < 4; symb_idx++) { - bool nr_slot_fep_done = false; - for (int symb_idx2 = 0; symb_idx2 < symb_idx; symb_idx2++) { - if (l_csiim[symb_idx2] == ue->csiim_vars[gNB_id]->csiim_config_pdu.l_csiim[symb_idx]) { - nr_slot_fep_done = true; - } - } - l_csiim[symb_idx] = ue->csiim_vars[gNB_id]->csiim_config_pdu.l_csiim[symb_idx]; - if(nr_slot_fep_done == false) { - nr_slot_fep(ue, &ue->frame_parms, proc, ue->csiim_vars[gNB_id]->csiim_config_pdu.l_csiim[symb_idx], rxdataF, link_type_dl); - } - } - nr_ue_csi_im_procedures(ue, proc, rxdataF); - ue->csiim_vars[gNB_id]->active = 0; - } - - // do procedures for CSI-RS - if ((ue->csirs_vars[gNB_id]) && (ue->csirs_vars[gNB_id]->active == 1)) { - for(int symb = 0; symb < NR_SYMBOLS_PER_SLOT; symb++) { - if(is_csi_rs_in_symbol(ue->csirs_vars[gNB_id]->csirs_config_pdu,symb)) { - nr_slot_fep(ue, &ue->frame_parms, proc, symb, rxdataF, link_type_dl); - } - } - nr_ue_csi_rs_procedures(ue, proc, rxdataF); - ue->csirs_vars[gNB_id]->active = 0; - } - start_meas(&meas); if (nr_slot_rx==9) {