diff --git a/executables/nr-ue.c b/executables/nr-ue.c index a153b60481281fb51949f8d9936abb002a5d3866..f9721b40f1b575579dd42b6a6a8701fd1771e81f 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -864,7 +864,6 @@ void *UE_thread(void *arg) { bool syncRunning=false; const int nb_slot_frame = UE->frame_parms.slots_per_frame; int absolute_slot=0, decoded_frame_rx=INT_MAX, trashed_frames=0; - UE->phy_sim_mode = false; while (!oai_exit) { if (UE->lost_sync) { diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c index 6524593a67805c575728b1cd6ec814c110668654..39d45a82d85ca61298f9d75a402909a5ee146f33 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c @@ -135,7 +135,6 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, uint32_t pdsch_est_size, int32_t dl_ch_estimates[][pdsch_est_size], int16_t *llr[2], - int16_t *layer_llr[NR_MAX_NB_LAYERS], c16_t ptrs_phase_per_slot[][NR_SYMBOLS_PER_SLOT], int32_t ptrs_re_per_slot[][NR_SYMBOLS_PER_SLOT], uint32_t dl_valid_re[NR_SYMBOLS_PER_SLOT], @@ -470,6 +469,26 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, /* at last symbol in a slot calculate LLR's for whole slot */ if(symbol == (startSymbIdx + nbSymb -1)) { + uint8_t nb_re_dmrs; + if (dlsch[0].dlsch_config.dmrsConfigType == NFAPI_NR_DMRS_TYPE1) { + nb_re_dmrs = 6*dlsch[0].dlsch_config.n_dmrs_cdm_groups; + } + else { + nb_re_dmrs = 4*dlsch[0].dlsch_config.n_dmrs_cdm_groups; + } + uint16_t dmrs_len = get_num_dmrs(dlsch[0].dlsch_config.dlDmrsSymbPos); + + const uint32_t rx_llr_size = nr_get_G(dlsch[0].dlsch_config.number_rbs, + dlsch[0].dlsch_config.number_symbols, + nb_re_dmrs, + dmrs_len, + dlsch[0].dlsch_config.qamModOrder, + dlsch[0].Nl); + const uint32_t rx_llr_layer_size = (rx_llr_size + dlsch[0].Nl - 1) / dlsch[0].Nl; + + int16_t* layer_llr[NR_MAX_NB_LAYERS]; + for (int i=0; i<NR_MAX_NB_LAYERS; i++) + layer_llr[i] = (int16_t *)malloc16_clear(rx_llr_layer_size*sizeof(int16_t)); for(uint8_t i =startSymbIdx; i < (startSymbIdx+nbSymb);i++) { /* re evaluating the first symbol flag as LLR's are done in symbol loop */ if(i == startSymbIdx && i < 3) { @@ -500,15 +519,6 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, llr_offset); } - int dmrs_type = dlsch[0].dlsch_config.dmrsConfigType; - uint8_t nb_re_dmrs; - uint16_t dmrs_len = get_num_dmrs(dlsch[0].dlsch_config.dlDmrsSymbPos); - if (dmrs_type==NFAPI_NR_DMRS_TYPE1) { - nb_re_dmrs = 6*dlsch[0].dlsch_config.n_dmrs_cdm_groups; - } else { - nb_re_dmrs = 4*dlsch[0].dlsch_config.n_dmrs_cdm_groups; - } - dlsch0_harq->G = nr_get_G(dlsch[0].dlsch_config.number_rbs, dlsch[0].dlsch_config.number_symbols, nb_re_dmrs, @@ -524,6 +534,8 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, codeword_TB1, layer_llr); + for (int i=0; i<NR_MAX_NB_LAYERS; i++) + free(layer_llr[i]); // Please keep it: useful for debugging #ifdef DEBUG_PDSCH_RX char filename[50]; diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c b/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c index 7f708125d2c14d365ab98e8f0e2051695e5e8469..41cb691b1d65a18ff96c1a4f0c3b65b47bbe843e 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c @@ -587,18 +587,14 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, dmrs_len, dlsch[0].dlsch_config.qamModOrder, dlsch[0].Nl); - const uint32_t rx_llr_layer_size = (rx_llr_size + dlsch[0].Nl - 1) / dlsch[0].Nl; int16_t* llr[2]; int16_t* layer_llr[NR_MAX_NB_LAYERS]; llr[0] = (int16_t *)malloc16_clear(rx_llr_size*sizeof(int16_t)); - for (int i=0; i<NR_MAX_NB_LAYERS; i++) - layer_llr[i] = (int16_t *)malloc16_clear(rx_llr_layer_size*sizeof(int16_t)); int ret = nr_ue_pdsch_procedures(ue, proc, phy_data.dlsch, llr, - layer_llr, rxdataF); if (ret >= 0) dec = nr_ue_dlsch_procedures(ue, diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h index 9cd964342bce030488c6a62033b6398760e09e5f..921be8500245bac72024ca98b00696d33baed20c 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h @@ -876,7 +876,6 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, uint32_t pdsch_est_size, int32_t dl_ch_estimates[][pdsch_est_size], int16_t *llr[2], - int16_t *layer_llr[NR_MAX_NB_LAYERS], c16_t ptrs_phase_per_slot[][NR_SYMBOLS_PER_SLOT], int32_t ptrs_re_per_slot[][NR_SYMBOLS_PER_SLOT], uint32_t dl_valid_re[NR_SYMBOLS_PER_SLOT], diff --git a/openair1/PHY/defs_nr_UE.h b/openair1/PHY/defs_nr_UE.h index 2ca2f339a75d95ebe19fd670b12f4b61833116e6..78c85652de826febc6691227b12a630ca041b6d4 100644 --- a/openair1/PHY/defs_nr_UE.h +++ b/openair1/PHY/defs_nr_UE.h @@ -660,7 +660,6 @@ typedef struct { void *phy_sim_pdsch_rxdataF_comp; void *phy_sim_pdsch_dl_ch_estimates; void *phy_sim_pdsch_dl_ch_estimates_ext; - bool phy_sim_mode; } PHY_VARS_NR_UE; typedef struct nr_phy_data_tx_s { diff --git a/openair1/SCHED_NR_UE/defs.h b/openair1/SCHED_NR_UE/defs.h index eed79545bc444efb1a0e0e5006e4dd64c13c658c..1439c9fd010dcd98f631c95fa24ef4a886e8e48c 100644 --- a/openair1/SCHED_NR_UE/defs.h +++ b/openair1/SCHED_NR_UE/defs.h @@ -177,7 +177,6 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, NR_UE_DLSCH_t dlsch[2], int16_t *llr[2], - int16_t *layer_llr[NR_MAX_NB_LAYERS], c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]); int nr_ue_pdcch_procedures(PHY_VARS_NR_UE *ue, diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index ceacf6e74cf836d562f46230339645dad6bdbcc1..8e297d1df8ef04ea668a25d1ca80d70dd096b0f2 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -573,7 +573,6 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, NR_UE_DLSCH_t dlsch[2], int16_t *llr[2], - int16_t *layer_llr[NR_MAX_NB_LAYERS], c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) { int frame_rx = proc->frame_rx; @@ -711,7 +710,6 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, pdsch_est_size, pdsch_dl_ch_estimates, llr, - layer_llr, ptrs_phase_per_slot, ptrs_re_per_slot, dl_valid_re, @@ -738,12 +736,14 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UEscopeCopy(ue, pdschRxdataF_comp, rxdataF_comp, sizeof(struct complex16), ue->frame_parms.nb_antennas_rx, rx_size); - if (ue->phy_sim_mode) { + if (ue->phy_sim_pdsch_rxdataF_comp) memcpy(ue->phy_sim_pdsch_rxdataF_comp, rxdataF_comp, sizeof(int32_t)*rx_size*ue->frame_parms.nb_antennas_rx); + if (ue->phy_sim_pdsch_rxdataF_ext) memcpy(ue->phy_sim_pdsch_rxdataF_ext, rxdataF_ext, sizeof(int32_t)*rx_size*ue->frame_parms.nb_antennas_rx); + if (ue->phy_sim_pdsch_dl_ch_estimates_ext) memcpy(ue->phy_sim_pdsch_dl_ch_estimates_ext, dl_ch_estimates_ext, sizeof(int32_t)*rx_size*ue->frame_parms.nb_antennas_rx); + if (ue->phy_sim_pdsch_dl_ch_estimates) memcpy(ue->phy_sim_pdsch_dl_ch_estimates, dl_ch_estimates_ext, sizeof(int32_t)*rx_size*ue->frame_parms.nb_antennas_rx); - } } return 0; } @@ -1282,21 +1282,16 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue, dlsch[0].dlsch_config.qamModOrder, dlsch[0].Nl); const uint32_t rx_llr_buf_sz = ((rx_llr_size+15)/16)*16; - const uint32_t rx_llr_layer_size = (rx_llr_size + dlsch[0].Nl - 1) / dlsch[0].Nl; const uint32_t nb_codewords = NR_MAX_NB_LAYERS > 4 ? 2 : 1; int16_t* llr[2]; - int16_t* layer_llr[NR_MAX_NB_LAYERS]; for (int i=0; i<nb_codewords; i++) llr[i] = (int16_t *)malloc16_clear(rx_llr_buf_sz*sizeof(int16_t)); - for (int i=0; i<NR_MAX_NB_LAYERS; i++) - layer_llr[i] = (int16_t *)malloc16_clear(rx_llr_layer_size*sizeof(int16_t)); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_C, VCD_FUNCTION_IN); ret_pdsch = nr_ue_pdsch_procedures(ue, proc, dlsch, llr, - layer_llr, rxdataF); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_C, VCD_FUNCTION_OUT); @@ -1317,16 +1312,14 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue, LOG_D(PHY, "[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f\n",nr_slot_rx,ue->dlsch_procedures_stat.p_time/(cpuf*1000.0)); } - if (ue->phy_sim_mode) { + if (ue->phy_sim_rxdataF) memcpy(ue->phy_sim_rxdataF, rxdataF, sizeof(int32_t)*rxdataF_sz*ue->frame_parms.nb_antennas_rx); + if (ue->phy_sim_pdsch_llr) memcpy(ue->phy_sim_pdsch_llr, llr[0], sizeof(int16_t)*rx_llr_buf_sz); - } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_OUT); for (int i=0; i<nb_codewords; i++) free(llr[i]); - for (int i=0; i<NR_MAX_NB_LAYERS; i++) - free(layer_llr[i]); } // do procedures for CSI-IM diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c index 6a784a21e643c9163df404a9dd4ca1b46bb3e601..db53197b31567eb182a359e4394404d355044bd4 100644 --- a/openair1/SIMULATION/NR_PHY/dlsim.c +++ b/openair1/SIMULATION/NR_PHY/dlsim.c @@ -957,7 +957,6 @@ int main(int argc, char **argv) memcpy(&UE->frame_parms,frame_parms,sizeof(NR_DL_FRAME_PARMS)); UE->frame_parms.nb_antennas_rx = n_rx; UE->max_ldpc_iterations = max_ldpc_iterations; - UE->phy_sim_mode = true; if (run_initial_sync==1) UE->is_synchronized = 0; else {UE->is_synchronized = 1; UE->UE_mode[0]=PUSCH;} diff --git a/openair1/SIMULATION/NR_PHY/pbchsim.c b/openair1/SIMULATION/NR_PHY/pbchsim.c index 179bcf8a4523d8fadc2210319b6b16183a335edc..cb193e83e859e57a8a09458e5b88c99fcc5e35f3 100644 --- a/openair1/SIMULATION/NR_PHY/pbchsim.c +++ b/openair1/SIMULATION/NR_PHY/pbchsim.c @@ -95,7 +95,6 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, NR_UE_DLSCH_t dlsch[2], int16_t *llr[2], - int16_t *layer_llr[NR_MAX_NB_LAYERS], c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]) { return 0; }