From 7e2a39733e3086aa5a97a97fe363d3d3c58b90dd Mon Sep 17 00:00:00 2001 From: Raymond Knopp <raymond.knopp@eurecom.fr> Date: Fri, 15 Jul 2016 00:04:04 -0700 Subject: [PATCH] modifications for oaisim. oaisim_noS1 compiles at this point. --- openair1/PHY/LTE_TRANSPORT/dci.c | 6 +- openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c | 42 +- openair1/PHY/LTE_TRANSPORT/initial_sync.c | 3 +- openair1/PHY/LTE_TRANSPORT/pbch.c | 9 +- openair1/PHY/LTE_TRANSPORT/proto.h | 5 +- openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c | 9 +- openair1/SCHED/phy_procedures_lte_eNb.c | 36 +- openair1/SCHED/phy_procedures_lte_ue.c | 5 +- .../SIMULATION/ETH_TRANSPORT/emu_transport.c | 45 +- targets/SIMU/USER/channel_sim.c | 26 +- targets/SIMU/USER/oaisim.c | 812 +++++++----------- targets/SIMU/USER/oaisim_functions.c | 62 +- 12 files changed, 441 insertions(+), 619 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c index f5e0a987f70..0117c8e7d28 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci.c +++ b/openair1/PHY/LTE_TRANSPORT/dci.c @@ -2390,14 +2390,14 @@ uint8_t generate_dci_top_emul(PHY_VARS_eNB *phy_vars_eNB, if (dci_alloc[n_dci].format > 0) { // exclude the uplink dci if (dci_alloc[n_dci].rnti == SI_RNTI) { - dlsch_eNB = PHY_vars_eNB_g[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id]->dlsch_eNB_SI; + dlsch_eNB = PHY_vars_eNB_g[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id]->dlsch_SI; eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].dlsch_type[n_dci_dl] = 0;//SI; eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].harq_pid[n_dci_dl] = 0; eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].tbs[n_dci_dl] = dlsch_eNB->harq_processes[0]->TBS>>3; LOG_D(PHY,"[DCI][EMUL]SI tbs is %d and dci index %d harq pid is %d \n",eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].tbs[n_dci_dl],n_dci_dl, eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].harq_pid[n_dci_dl]); } else if (dci_alloc[n_dci_dl].ra_flag == 1) { - dlsch_eNB = PHY_vars_eNB_g[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id]->dlsch_eNB_ra; + dlsch_eNB = PHY_vars_eNB_g[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id]->dlsch_ra; eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].dlsch_type[n_dci_dl] = 1;//RA; eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].harq_pid[n_dci_dl] = 0; eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].tbs[n_dci_dl] = dlsch_eNB->harq_processes[0]->TBS>>3; @@ -2406,7 +2406,7 @@ uint8_t generate_dci_top_emul(PHY_VARS_eNB *phy_vars_eNB, } else { ue_id = find_ue(dci_alloc[n_dci_dl].rnti,PHY_vars_eNB_g[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id]); DevAssert( ue_id != (uint8_t)-1 ); - dlsch_eNB = PHY_vars_eNB_g[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id]->dlsch_eNB[ue_id][0]; + dlsch_eNB = PHY_vars_eNB_g[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id]->dlsch[ue_id][0]; eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].dlsch_type[n_dci_dl] = 2;//TB0; eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].harq_pid[n_dci_dl] = dlsch_eNB->current_harq_pid; diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c index 17180af613f..b6fcfbb1e80 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c @@ -832,7 +832,7 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue, // may not be necessary for PMCH?? for (eNB_id2=0; eNB_id2<NB_eNB_INST; eNB_id2++) { - if (PHY_vars_eNB_g[eNB_id2][CC_id]->lte_frame_parms.Nid_cell == phy_vars_ue->lte_frame_parms.Nid_cell) + if (PHY_vars_eNB_g[eNB_id2][CC_id]->frame_parms.Nid_cell == phy_vars_ue->frame_parms.Nid_cell) break; } @@ -847,9 +847,9 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue, switch (dlsch_id) { - case PDSCH_SI: // SI - dlsch_ue = phy_vars_ue->dlsch_ue_SI[eNB_id]; - dlsch_eNB = PHY_vars_eNB_g[eNB_id2][CC_id]->dlsch_eNB_SI; + case SI_PDSCH: // SI + dlsch_ue = phy_vars_ue->dlsch_SI[eNB_id]; + dlsch_eNB = PHY_vars_eNB_g[eNB_id2][CC_id]->dlsch_SI; // printf("Doing SI: TBS %d\n",dlsch_ue->harq_processes[0]->TBS>>3); memcpy(dlsch_ue->harq_processes[0]->b,dlsch_eNB->harq_processes[0]->b,dlsch_ue->harq_processes[0]->TBS>>3); #ifdef DEBUG_DLSCH_DECODING @@ -863,9 +863,9 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue, return(1); break; - case PDSCH_RA: // RA - dlsch_ue = phy_vars_ue->dlsch_ue_ra[eNB_id]; - dlsch_eNB = PHY_vars_eNB_g[eNB_id2][CC_id]->dlsch_eNB_ra; + case RA_PDSCH: // RA + dlsch_ue = phy_vars_ue->dlsch_ra[eNB_id]; + dlsch_eNB = PHY_vars_eNB_g[eNB_id2][CC_id]->dlsch_ra; memcpy(dlsch_ue->harq_processes[0]->b,dlsch_eNB->harq_processes[0]->b,dlsch_ue->harq_processes[0]->TBS>>3); #ifdef DEBUG_DLSCH_DECODING LOG_D(PHY,"RA Decoded\n"); @@ -879,11 +879,11 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue, break; case PDSCH: // TB0 - dlsch_ue = phy_vars_ue->dlsch_ue[eNB_id][0]; + dlsch_ue = phy_vars_ue->dlsch[eNB_id][0]; harq_pid = dlsch_ue->current_harq_pid; - ue_id= (uint32_t)find_ue((int16_t)phy_vars_ue->lte_ue_pdcch_vars[(uint32_t)eNB_id]->crnti,PHY_vars_eNB_g[eNB_id2][CC_id]); + ue_id= (uint32_t)find_ue((int16_t)phy_vars_ue->pdcch_vars[(uint32_t)eNB_id]->crnti,PHY_vars_eNB_g[eNB_id2][CC_id]); DevAssert( ue_id != (uint32_t)-1 ); - dlsch_eNB = PHY_vars_eNB_g[eNB_id2][CC_id]->dlsch_eNB[ue_id][0]; + dlsch_eNB = PHY_vars_eNB_g[eNB_id2][CC_id]->dlsch[ue_id][0]; #ifdef DEBUG_DLSCH_DECODING @@ -918,18 +918,18 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue, dlsch_ue->harq_ack[subframe].ack = 0; dlsch_ue->harq_ack[subframe].harq_id = harq_pid; dlsch_ue->harq_ack[subframe].send_harq_status = 1; - dlsch->last_iteration_cnt = 1+dlsch_ue->max_turbo_iterations; + dlsch_ue->last_iteration_cnt = 1+dlsch_ue->max_turbo_iterations; return(1+dlsch_ue->max_turbo_iterations); } break; - case 3: { // TB1 - dlsch_ue = phy_vars_ue->dlsch_ue[eNB_id][1]; + case PDSCH1: { // TB1 + dlsch_ue = phy_vars_ue->dlsch[eNB_id][1]; harq_pid = dlsch_ue->current_harq_pid; - int8_t UE_id = find_ue( phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti, PHY_vars_eNB_g[eNB_id2][CC_id] ); + int8_t UE_id = find_ue( phy_vars_ue->pdcch_vars[eNB_id]->crnti, PHY_vars_eNB_g[eNB_id2][CC_id] ); DevAssert( UE_id != -1 ); - dlsch_eNB = PHY_vars_eNB_g[eNB_id2][CC_id]->dlsch_eNB[UE_id][1]; + dlsch_eNB = PHY_vars_eNB_g[eNB_id2][CC_id]->dlsch[UE_id][1]; // reset HARQ dlsch_ue->harq_processes[harq_pid]->status = SCH_IDLE; dlsch_ue->harq_processes[harq_pid]->round = 0; @@ -945,8 +945,8 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue, case PMCH: // PMCH - dlsch_ue = phy_vars_ue->dlsch_ue_MCH[eNB_id]; - dlsch_eNB = PHY_vars_eNB_g[eNB_id2][CC_id]->dlsch_eNB_MCH; + dlsch_ue = phy_vars_ue->dlsch_MCH[eNB_id]; + dlsch_eNB = PHY_vars_eNB_g[eNB_id2][CC_id]->dlsch_MCH; LOG_D(PHY,"decoding pmch emul (size is %d, enb %d %d)\n", dlsch_ue->harq_processes[0]->TBS>>3, eNB_id, eNB_id2); #ifdef DEBUG_DLSCH_DECODING @@ -968,20 +968,20 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue, memcpy(dlsch_ue->harq_processes[0]->b, dlsch_eNB->harq_processes[0]->b, dlsch_ue->harq_processes[0]->TBS>>3); - dlsch->last_iteration_cnt = 1; + dlsch_ue->last_iteration_cnt = 1; return(1); } else { // retransmission - dlsch->last_iteration_cnt = 1+dlsch_ue->max_turbo_iterations; + dlsch_ue->last_iteration_cnt = 1+dlsch_ue->max_turbo_iterations; return(1+dlsch_ue->max_turbo_iterations); } break; default: - dlsch_ue = phy_vars_ue->dlsch_ue[eNB_id][0]; + dlsch_ue = phy_vars_ue->dlsch[eNB_id][0]; LOG_E(PHY,"dlsch_decoding_emul: FATAL, unknown DLSCH_id %d\n",dlsch_id); - dlsch->last_iteration_cnt = 1+dlsch_ue->max_turbo_iterations; + dlsch_ue->last_iteration_cnt = 1+dlsch_ue->max_turbo_iterations; return(1+dlsch_ue->max_turbo_iterations); } diff --git a/openair1/PHY/LTE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_TRANSPORT/initial_sync.c index bec0c424ed4..71372d9e59e 100644 --- a/openair1/PHY/LTE_TRANSPORT/initial_sync.c +++ b/openair1/PHY/LTE_TRANSPORT/initial_sync.c @@ -516,12 +516,13 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) phich_string[ue->frame_parms.phich_config_common.phich_resource], ue->frame_parms.nb_antennas_tx_eNB); +#if defined(OAI_USRP) || defined(EXMIMO) || defined(OAI_BLADERF) || defined(OAI_LMSSDR) LOG_I(PHY,"[UE %d] Frame %d Measured Carrier Frequency %.0f Hz (offset %d Hz)\n", ue->Mod_id, ue->proc.proc_rxtx[0].frame_rx, openair0_cfg[0].rx_freq[0]-ue->common_vars.freq_offset, ue->common_vars.freq_offset); - +#endif } else { #ifdef DEBUG_INITIAL_SYNC LOG_I(PHY,"[UE%d] Initial sync : PBCH not ok\n",ue->Mod_id); diff --git a/openair1/PHY/LTE_TRANSPORT/pbch.c b/openair1/PHY/LTE_TRANSPORT/pbch.c index b7b7149c627..2213ca4da2e 100755 --- a/openair1/PHY/LTE_TRANSPORT/pbch.c +++ b/openair1/PHY/LTE_TRANSPORT/pbch.c @@ -1053,9 +1053,10 @@ uint16_t rx_pbch_emul(PHY_VARS_UE *phy_vars_ue, double bler=0.0;//, x=0.0; double sinr=0.0; - uint16_t nb_rb = phy_vars_ue->lte_frame_parms.N_RB_DL; + uint16_t nb_rb = phy_vars_ue->frame_parms.N_RB_DL; int16_t f; uint8_t CC_id=phy_vars_ue->CC_id; + int frame_rx = phy_vars_ue->proc.proc_rxtx[0].frame_rx; // compute effective sinr // TODO: adapt this to varible bandwidth @@ -1074,10 +1075,10 @@ uint16_t rx_pbch_emul(PHY_VARS_UE *phy_vars_ue, sinr, bler); - if (pbch_phase == (phy_vars_ue->frame_rx % 4)) { + if (pbch_phase == (frame_rx % 4)) { if (uniformrandom() >= bler) { - memcpy(phy_vars_ue->lte_ue_pbch_vars[eNB_id]->decoded_output,PHY_vars_eNB_g[eNB_id][CC_id]->pbch_pdu,PBCH_PDU_SIZE); - return(PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.nb_antennas_tx_eNB); + memcpy(phy_vars_ue->pbch_vars[eNB_id]->decoded_output,PHY_vars_eNB_g[eNB_id][CC_id]->pbch_pdu,PBCH_PDU_SIZE); + return(PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.nb_antennas_tx_eNB); } else return(-1); } else diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h index 547dd86a9c8..6993dd18c01 100644 --- a/openair1/PHY/LTE_TRANSPORT/proto.h +++ b/openair1/PHY/LTE_TRANSPORT/proto.h @@ -1039,7 +1039,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue, uint8_t subframe, - uint8_t dlsch_id, + PDSCH_t dlsch_id, uint8_t eNB_id); /** \brief This function is the top-level entry point to PDSCH demodulation, after frequency-domain transformation and channel estimation. It performs @@ -1539,7 +1539,8 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, uint8_t llr8_flag); uint32_t ulsch_decoding_emul(PHY_VARS_eNB *phy_vars_eNB, - uint8_t UE_index, + eNB_rxtx_proc_t *proc, + uint8_t UE_index, uint16_t *crnti); void generate_phich_top(PHY_VARS_eNB *phy_vars_eNB, diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c index 02bf98c3729..6ed0f91101d 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c @@ -1520,16 +1520,9 @@ uint32_t ulsch_decoding_emul(PHY_VARS_eNB *eNB, eNB_rxtx_proc_t *proc, #endif for (UE_id=0; UE_id<NB_UE_INST; UE_id++) { - if (rnti == PHY_vars_UE_g[UE_id][CC_id]->lte_ue_pdcch_vars[0]->crnti) + if (rnti == PHY_vars_UE_g[UE_id][CC_id]->pdcch_vars[0]->crnti) break; - /* - msg("[PHY] EMUL eNB %d ulsch_decoding_emul : subframe ue id %d crnti %x nb ue %d\n", - eNB->Mod_id, - UE_id, - PHY_vars_UE_g[UE_id]->lte_ue_pdcch_vars[0]->crnti, - NB_UE_INST); - */ } if (UE_id==NB_UE_INST) { diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index 79a6a1d0b78..653b5aeb1ec 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -2119,6 +2119,7 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq #ifdef PHY_ABSTRACTION else { metric0_SR = rx_pucch_emul(eNB, + proc, UE_id, pucch_format1, 0, @@ -2192,11 +2193,12 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq } else { #ifdef PHY_ABSTRACTION - metric0 = rx_pucch_emul(eNB,UE_id, + metric0 = rx_pucch_emul(eNB, + proc, + UE_id, pucch_format1a, 0, - pucch_payload0, - subframe); + pucch_payload0); #endif } @@ -2251,11 +2253,11 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq PUCCH1a_THRES); else { #ifdef PHY_ABSTRACTION - metric0 = rx_pucch_emul(eNB,UE_id, + metric0 = rx_pucch_emul(eNB,proc, + UE_id, format, 0, - pucch_payload0, - subframe); + pucch_payload0); #endif } } else { //using n1_pucch0/n1_pucch1 resources @@ -2283,11 +2285,12 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq PUCCH1a_THRES); else { #ifdef PHY_ABSTRACTION - metric0 = rx_pucch_emul(eNB,UE_id, + metric0 = rx_pucch_emul(eNB, + proc, + UE_id, format, 0, - pucch_payload0, - subframe); + pucch_payload0); #endif } } @@ -2307,13 +2310,12 @@ void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq PUCCH1a_THRES); else { #ifdef PHY_ABSTRACTION - metric1 = rx_pucch_emul(eNB,UE_id, + metric1 = rx_pucch_emul(eNB, + proc, + UE_id, format, 1, - pucch_payload1, - subframe); - - + pucch_payload1); #endif } } @@ -2389,7 +2391,6 @@ void cba_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq_p #ifdef PHY_ABSTRACTION else { rx_ulsch_emul(eNB,proc, - subframe, eNB->UE_stats[UE_id].sector, // this is the effective sector id UE_id); } @@ -2407,6 +2408,7 @@ void cba_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq_p #ifdef PHY_ABSTRACTION else { ret = ulsch_decoding_emul(eNB, + proc, UE_id, &rnti); } @@ -2909,7 +2911,6 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,const #ifdef PHY_ABSTRACTION else { rx_ulsch_emul(eNB,proc, - subframe, eNB->UE_stats[i].sector, // this is the effective sector id i); } @@ -2930,7 +2931,8 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,const #ifdef PHY_ABSTRACTION else { - ret = ulsch_decoding_emul(eNB,proc, + ret = ulsch_decoding_emul(eNB, + proc, i, &rnti); } diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 4f1cc56f805..38609c6f437 100755 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -1209,8 +1209,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin format, ue->frame_parms.pucch_config_common.nCS_AN, pucch_ack_payload, - SR_payload, - subframe_tx); + SR_payload); #endif } } else if (SR_payload==1) { // no ACK/NAK but SR is triggered by MAC @@ -2503,7 +2502,7 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue, #ifdef PHY_ABSTRACTION ret = dlsch_decoding_emul(ue, subframe_rx, - dlsch, + pdsch, eNB_id); #endif } diff --git a/openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c b/openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c index ec15e7c6689..d2ae35b29a8 100644 --- a/openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c +++ b/openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c @@ -348,7 +348,7 @@ void fill_phy_enb_vars(unsigned int enb_id, uint8_t CC_id,unsigned int next_slot switch (eNB_transport_info[enb_id][CC_id].dlsch_type[n_dci_dl]) { case 0: //SI: - memcpy(PHY_vars_eNB_g[enb_id][CC_id]->dlsch_eNB_SI->harq_processes[0]->b, + memcpy(PHY_vars_eNB_g[enb_id][CC_id]->dlsch_SI->harq_processes[0]->b, &eNB_transport_info[enb_id][CC_id].transport_blocks[payload_offset], eNB_transport_info[enb_id][CC_id].tbs[n_dci_dl]); #ifdef DEBUG_EMU @@ -358,7 +358,7 @@ void fill_phy_enb_vars(unsigned int enb_id, uint8_t CC_id,unsigned int next_slot break; case 1: //RA: - memcpy(PHY_vars_eNB_g[enb_id][CC_id]->dlsch_eNB_ra->harq_processes[0]->b, + memcpy(PHY_vars_eNB_g[enb_id][CC_id]->dlsch_ra->harq_processes[0]->b, &eNB_transport_info[enb_id][CC_id].transport_blocks[payload_offset], eNB_transport_info[enb_id][CC_id].tbs[n_dci_dl]); #ifdef DEBUG_EMU @@ -370,9 +370,9 @@ void fill_phy_enb_vars(unsigned int enb_id, uint8_t CC_id,unsigned int next_slot case 2://TB0: harq_pid = eNB_transport_info[enb_id][CC_id].harq_pid[n_dci_dl]; ue_id = eNB_transport_info[enb_id][CC_id].ue_id[n_dci_dl]; - PHY_vars_eNB_g[enb_id][CC_id]->dlsch_eNB[ue_id][0]->rnti= + PHY_vars_eNB_g[enb_id][CC_id]->dlsch[ue_id][0]->rnti= eNB_transport_info[enb_id][CC_id].dci_alloc[n_dci_dl].rnti; - dlsch_eNB = PHY_vars_eNB_g[enb_id][CC_id]->dlsch_eNB[ue_id][0]; + dlsch_eNB = PHY_vars_eNB_g[enb_id][CC_id]->dlsch[ue_id][0]; #ifdef DEBUG_EMU LOG_D(EMU, " enb_id %d ue id is %d rnti is %x dci index %d, harq_pid %d tbs %d \n", @@ -393,9 +393,9 @@ void fill_phy_enb_vars(unsigned int enb_id, uint8_t CC_id,unsigned int next_slot case 3://TB1: harq_pid = eNB_transport_info[enb_id][CC_id].harq_pid[n_dci_dl]; ue_id = eNB_transport_info[enb_id][CC_id].ue_id[n_dci_dl]; - PHY_vars_eNB_g[enb_id][CC_id]->dlsch_eNB[ue_id][1]->rnti= + PHY_vars_eNB_g[enb_id][CC_id]->dlsch[ue_id][1]->rnti= eNB_transport_info[enb_id][CC_id].dci_alloc[n_dci_dl].rnti; - dlsch_eNB = PHY_vars_eNB_g[enb_id][CC_id]->dlsch_eNB[ue_id][1]; + dlsch_eNB = PHY_vars_eNB_g[enb_id][CC_id]->dlsch[ue_id][1]; memcpy(dlsch_eNB->harq_processes[harq_pid]->b, &eNB_transport_info[enb_id][CC_id].transport_blocks[payload_offset], @@ -403,7 +403,7 @@ void fill_phy_enb_vars(unsigned int enb_id, uint8_t CC_id,unsigned int next_slot break; case 5: - memcpy(PHY_vars_eNB_g[enb_id][CC_id]->dlsch_eNB_MCH->harq_processes[0]->b, + memcpy(PHY_vars_eNB_g[enb_id][CC_id]->dlsch_MCH->harq_processes[0]->b, &eNB_transport_info[enb_id][CC_id].transport_blocks[payload_offset], eNB_transport_info[enb_id][CC_id].tbs[n_dci_dl]); #ifdef DEBUG_EMU @@ -491,52 +491,45 @@ void fill_phy_ue_vars(unsigned int ue_id, uint8_t CC_id,unsigned int last_slot) #endif for (n_enb = 0; n_enb < UE_transport_info[ue_id][CC_id].num_eNB; n_enb++) { -#ifdef DEBUG_EMU - /* LOG_D(EMU,"Setting ulsch vars for ue %d rnti %x harq pid is %d \n", - ue_id, UE_transport_info[ue_id][CC_id].rnti[n_enb], - PHY_vars_UE_g[ue_id][CC_id]->ulsch_ue[enb_id]); - */ -#endif + rnti = UE_transport_info[ue_id][CC_id].rnti[n_enb]; enb_id = UE_transport_info[ue_id][CC_id].eNB_id[n_enb]; - PHY_vars_UE_g[ue_id][CC_id]->lte_ue_pdcch_vars[enb_id]->crnti=rnti; + PHY_vars_UE_g[ue_id][CC_id]->pdcch_vars[enb_id]->crnti=rnti; harq_pid = UE_transport_info[ue_id][CC_id].harq_pid[n_enb]; - //ulsch = PHY_vars_UE_g[ue_id][CC_id]->ulsch_ue[enb_id]; - - PHY_vars_UE_g[ue_id][CC_id]->ulsch_ue[enb_id]->o_RI[0] = + PHY_vars_UE_g[ue_id][CC_id]->ulsch[enb_id]->o_RI[0] = ue_cntl_delay[ue_id][CC_id][last_slot%2].pusch_ri & 0x1; - PHY_vars_UE_g[ue_id][CC_id]->ulsch_ue[enb_id]->o_RI[1] = + PHY_vars_UE_g[ue_id][CC_id]->ulsch[enb_id]->o_RI[1] = (ue_cntl_delay[ue_id][CC_id][last_slot%2].pusch_ri>>1) & 0x1; - PHY_vars_UE_g[ue_id][CC_id]->ulsch_ue[enb_id]->o_ACK[0]= + PHY_vars_UE_g[ue_id][CC_id]->ulsch[enb_id]->o_ACK[0]= ue_cntl_delay[ue_id][CC_id][last_slot%2].pusch_ack & 0x1; - PHY_vars_UE_g[ue_id][CC_id]->ulsch_ue[enb_id]->o_ACK[1]= + PHY_vars_UE_g[ue_id][CC_id]->ulsch[enb_id]->o_ACK[1]= (ue_cntl_delay[ue_id][CC_id][last_slot%2].pusch_ack>>1) & 0x1; //*(uint32_t *)ulsch->o = ue_cntl_delay[ue_id][CC_id][last_slot%2].pusch_uci; if ((last_slot % 2) == 1) { - PHY_vars_UE_g[ue_id][CC_id]->ulsch_ue[enb_id]->O = + PHY_vars_UE_g[ue_id][CC_id]->ulsch[enb_id]->O = ue_cntl_delay[ue_id][CC_id][last_slot%2].length_uci; - PHY_vars_UE_g[ue_id][CC_id]->ulsch_ue[enb_id]->uci_format = + PHY_vars_UE_g[ue_id][CC_id]->ulsch[enb_id]->uci_format = ue_cntl_delay[ue_id][CC_id][last_slot%2].uci_format; - memcpy(PHY_vars_UE_g[ue_id][CC_id]->ulsch_ue[enb_id]->o, + memcpy(PHY_vars_UE_g[ue_id][CC_id]->ulsch[enb_id]->o, ue_cntl_delay[ue_id][CC_id][last_slot%2].pusch_uci, MAX_CQI_BYTES); - ulsch = PHY_vars_UE_g[ue_id][CC_id]->ulsch_ue[enb_id]; + ulsch = PHY_vars_UE_g[ue_id][CC_id]->ulsch[enb_id]; // if (((HLC_subband_cqi_rank1_2A_5MHz *)ulsch->o)->cqi1) LOG_D(EMU, "[UE %d] subframe %d last slot %d copy the payload from eNB %d to UE %d with harq id %d cqi (val %d, length %d) \n", ue_id, subframe, last_slot, enb_id, ue_id, harq_pid, ((HLC_subband_cqi_rank1_2A_5MHz *)ulsch->o)->cqi1, - PHY_vars_UE_g[ue_id][CC_id]->ulsch_ue[enb_id]->O); + PHY_vars_UE_g[ue_id][CC_id]->ulsch[enb_id]->O); } - memcpy(PHY_vars_UE_g[ue_id][CC_id]->ulsch_ue[enb_id]->harq_processes[harq_pid]->b, + memcpy(PHY_vars_UE_g[ue_id][CC_id]->ulsch[enb_id]->harq_processes[harq_pid]->b, UE_transport_info[ue_id][CC_id].transport_blocks, UE_transport_info[ue_id][CC_id].tbs[enb_id]); diff --git a/targets/SIMU/USER/channel_sim.c b/targets/SIMU/USER/channel_sim.c index 187f1109c0f..5970adfa5f8 100644 --- a/targets/SIMU/USER/channel_sim.c +++ b/targets/SIMU/USER/channel_sim.c @@ -130,7 +130,7 @@ void do_DL_sig(double **r_re0,double **r_im0, // find out which eNB the UE is attached to for (eNB_id=0; eNB_id<NB_eNB_INST; eNB_id++) { - if (find_ue(PHY_vars_UE_g[UE_id][CC_id]->lte_ue_pdcch_vars[0]->crnti,PHY_vars_eNB_g[eNB_id][CC_id])>=0) { + if (find_ue(PHY_vars_UE_g[UE_id][CC_id]->pdcch_vars[0]->crnti,PHY_vars_eNB_g[eNB_id][CC_id])>=0) { // UE with UE_id is connected to eNb with eNB_id att_eNB_id=eNB_id; LOG_D(OCM,"A: UE attached to eNB (UE%d->eNB%d)\n",UE_id,eNB_id); @@ -165,7 +165,7 @@ void do_DL_sig(double **r_re0,double **r_im0, //dlsch_abstraction(PHY_vars_UE_g[UE_id]->sinr_dB, rb_alloc, 8); // fill in perfect channel estimates channel_desc_t *desc1 = eNB2UE[att_eNB_id][UE_id][CC_id]; - int32_t **dl_channel_est = PHY_vars_UE_g[UE_id][CC_id]->lte_ue_common_vars.dl_ch_estimates[0]; + int32_t **dl_channel_est = PHY_vars_UE_g[UE_id][CC_id]->common_vars.dl_ch_estimates[0]; // double scale = pow(10.0,(enb_data[att_eNB_id]->tx_power_dBm + eNB2UE[att_eNB_id][UE_id]->path_loss_dB + (double) PHY_vars_UE_g[UE_id]->rx_total_gain_dB)/20.0); double scale = pow(10.0,(frame_parms->pdsch_config_common.referenceSignalPower+eNB2UE[att_eNB_id][UE_id][CC_id]->path_loss_dB + (double) PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB)/20.0); LOG_D(OCM,"scale =%lf (%d dB)\n",scale,(int) (20*log10(scale))); @@ -201,13 +201,13 @@ void do_DL_sig(double **r_re0,double **r_im0, // calculate the SNR for the attached eNB (this assumes eNB always uses PMI stored in eNB_UE_stats; to be improved) init_snr(eNB2UE[att_eNB_id][UE_id][CC_id], enb_data[att_eNB_id], ue_data[UE_id], PHY_vars_UE_g[UE_id][CC_id]->sinr_dB, &PHY_vars_UE_g[UE_id][CC_id]->N0, - PHY_vars_UE_g[UE_id][CC_id]->transmission_mode[att_eNB_id], PHY_vars_eNB_g[att_eNB_id][CC_id]->eNB_UE_stats[UE_id].DL_pmi_single, - PHY_vars_eNB_g[att_eNB_id][CC_id]->mu_mimo_mode[UE_id].dl_pow_off,PHY_vars_eNB_g[att_eNB_id][CC_id]->lte_frame_parms.N_RB_DL); + PHY_vars_UE_g[UE_id][CC_id]->transmission_mode[att_eNB_id], PHY_vars_eNB_g[att_eNB_id][CC_id]->UE_stats[UE_id].DL_pmi_single, + PHY_vars_eNB_g[att_eNB_id][CC_id]->mu_mimo_mode[UE_id].dl_pow_off,PHY_vars_eNB_g[att_eNB_id][CC_id]->frame_parms.N_RB_DL); // calculate sinr here for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) { if (att_eNB_id != eNB_id) { - calculate_sinr(eNB2UE[eNB_id][UE_id][CC_id], enb_data[eNB_id], ue_data[UE_id], PHY_vars_UE_g[UE_id][CC_id]->sinr_dB,PHY_vars_eNB_g[att_eNB_id][CC_id]->lte_frame_parms.N_RB_DL); + calculate_sinr(eNB2UE[eNB_id][UE_id][CC_id], enb_data[eNB_id], ue_data[UE_id], PHY_vars_UE_g[UE_id][CC_id]->sinr_dB,PHY_vars_eNB_g[att_eNB_id][CC_id]->frame_parms.N_RB_DL); } } } // hold channel @@ -233,7 +233,7 @@ void do_DL_sig(double **r_re0,double **r_im0, // eNB2UE[eNB_id][UE_id]->path_loss_dB) <= -107.0) // break; - txdata = PHY_vars_eNB_g[eNB_id][CC_id]->lte_eNB_common_vars.txdata[0]; + txdata = PHY_vars_eNB_g[eNB_id][CC_id]->common_vars.txdata[0]; slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1); slot_offset_meas = ((next_slot&1)==0) ? slot_offset : (slot_offset-(frame_parms->samples_per_tti>>1)); tx_pwr = dac_fixed_gain(s_re, @@ -355,7 +355,7 @@ void do_DL_sig(double **r_re0,double **r_im0, LOG_D(OCM,"[SIM][DL] UE %d : ADC in %f dBm for slot %d (subframe %d)\n",UE_id,10*log10(rx_pwr),next_slot,next_slot>>1); #endif - rxdata = PHY_vars_UE_g[UE_id][CC_id]->lte_ue_common_vars.rxdata; + rxdata = PHY_vars_UE_g[UE_id][CC_id]->common_vars.rxdata; slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1); adc(r_re, @@ -463,12 +463,6 @@ void do_UL_sig(double **r_re0,double **r_im0,double **r_re,double **r_im,double #endif } else { //without abstraction - /* - for (UE_id=0;UE_id<NB_UE_INST;UE_id++) { - do_OFDM_mod(PHY_vars_UE_g[UE_id]->lte_ue_common_vars.txdataF,PHY_vars_UE_g[UE_id]->lte_ue_common_vars.txdata,next_slot,&PHY_vars_UE_g[UE_id]->lte_frame_parms); - } - */ - for (eNB_id=0; eNB_id<NB_eNB_INST; eNB_id++) { // Clear RX signal for eNB = eNB_id for (i=0; i<(frame_parms->samples_per_tti>>1); i++) { @@ -481,7 +475,7 @@ void do_UL_sig(double **r_re0,double **r_im0,double **r_re,double **r_im,double // Compute RX signal for eNB = eNB_id for (UE_id=0; UE_id<NB_UE_INST; UE_id++) { - txdata = PHY_vars_UE_g[UE_id][CC_id]->lte_ue_common_vars.txdata; + txdata = PHY_vars_UE_g[UE_id][CC_id]->common_vars.txdata; slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1); slot_offset_meas = ((next_slot&1)==0) ? slot_offset : (slot_offset-(frame_parms->samples_per_tti>>1)); @@ -571,14 +565,14 @@ void do_UL_sig(double **r_re0,double **r_im0,double **r_re,double **r_im,double nb_antennas_rx, frame_parms->samples_per_tti>>1, 1e3/UE2eNB[0][eNB_id][CC_id]->sampling_rate, // sampling time (ns) - (double)PHY_vars_eNB_g[eNB_id][CC_id]->rx_total_gain_eNB_dB - 66.227); // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later) + (double)PHY_vars_eNB_g[eNB_id][CC_id]->rx_total_gain_dB - 66.227); // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later) #ifdef DEBUG_SIM rx_pwr = signal_energy_fp(r_re,r_im,nb_antennas_rx,frame_parms->samples_per_tti>>1,0)*(double)frame_parms->ofdm_symbol_size/(12.0*frame_parms->N_RB_DL); LOG_D(OCM,"[SIM][UL] rx_pwr (ADC in) %f dB for slot %d (subframe %d)\n",10*log10(rx_pwr),next_slot,next_slot>>1); #endif - rxdata = PHY_vars_eNB_g[eNB_id][CC_id]->lte_eNB_common_vars.rxdata[0]; + rxdata = PHY_vars_eNB_g[eNB_id][CC_id]->common_vars.rxdata[0]; slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1); adc(r_re, diff --git a/targets/SIMU/USER/oaisim.c b/targets/SIMU/USER/oaisim.c index adfa4ab5452..2472328c76b 100644 --- a/targets/SIMU/USER/oaisim.c +++ b/targets/SIMU/USER/oaisim.c @@ -25,17 +25,17 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - *******************************************************************************/ +*******************************************************************************/ /*! \file oaisim.c -* \brief oaisim top level -* \author Navid Nikaein -* \date 2013-2015 -* \version 1.0 -* \company Eurecom -* \email: openair_tech@eurecom.fr -* \note -* \warning -*/ + * \brief oaisim top level + * \author Navid Nikaein + * \date 2013-2015 + * \version 1.0 + * \company Eurecom + * \email: openair_tech@eurecom.fr + * \note + * \warning + */ #include <string.h> #include <math.h> @@ -116,11 +116,11 @@ char smbv_ip[16]; #include "T.h" /* - DCI0_5MHz_TDD0_t UL_alloc_pdu; - DCI1A_5MHz_TDD_1_6_t CCCH_alloc_pdu; - DCI2_5MHz_2A_L10PRB_TDD_t DLSCH_alloc_pdu1; - DCI2_5MHz_2A_M10PRB_TDD_t DLSCH_alloc_pdu2; - */ + DCI0_5MHz_TDD0_t UL_alloc_pdu; + DCI1A_5MHz_TDD_1_6_t CCCH_alloc_pdu; + DCI2_5MHz_2A_L10PRB_TDD_t DLSCH_alloc_pdu1; + DCI2_5MHz_2A_M10PRB_TDD_t DLSCH_alloc_pdu2; +*/ #define UL_RB_ALLOC computeRIV(lte_frame_parms->N_RB_UL,0,24) #define CCCH_RB_ALLOC computeRIV(lte_frame_parms->N_RB_UL,0,3) @@ -352,8 +352,8 @@ int omv_write(int pfd, node_list* enb_node_list, node_list* ue_node_list, Data_F omv_data.geo[i].Neighbor[omv_data.geo[i].Neighbors] = j; omv_data.geo[i].Neighbors++; LOG_D( - OMG, - "[eNB %d][UE %d] is_UE_active(i,j) %d geo (x%d, y%d) num neighbors %d\n", i, j-NB_eNB_INST, is_UE_active(i,j-NB_eNB_INST), omv_data.geo[i].x, omv_data.geo[i].y, omv_data.geo[i].Neighbors); + OMG, + "[eNB %d][UE %d] is_UE_active(i,j) %d geo (x%d, y%d) num neighbors %d\n", i, j-NB_eNB_INST, is_UE_active(i,j-NB_eNB_INST), omv_data.geo[i].x, omv_data.geo[i].y, omv_data.geo[i].Neighbors); } } } @@ -388,8 +388,8 @@ int omv_write(int pfd, node_list* enb_node_list, node_list* ue_node_list, Data_F omv_data.geo[i].Neighbor[omv_data.geo[i].Neighbors] = j; omv_data.geo[i].Neighbors++; LOG_D( - OMG, - "[UE %d][eNB %d] is_UE_active %d geo (x%d, y%d) num neighbors %d\n", i-NB_eNB_INST, j, is_UE_active(j,i-NB_eNB_INST), omv_data.geo[i].x, omv_data.geo[i].y, omv_data.geo[i].Neighbors); + OMG, + "[UE %d][eNB %d] is_UE_active %d geo (x%d, y%d) num neighbors %d\n", i-NB_eNB_INST, j, is_UE_active(j,i-NB_eNB_INST), omv_data.geo[i].x, omv_data.geo[i].y, omv_data.geo[i].Neighbors); } } } @@ -441,16 +441,14 @@ l2l1_task (void *args_p) int CC_id; // Framing variables - int32_t slot, last_slot, next_slot; + int32_t sf; #ifdef Rel10 relaying_type_t r_type = no_relay; // no relaying #endif - - lte_subframe_t direction; - + char fname[64], vname[64]; - int sf; + protocol_ctxt_t ctxt; //#ifdef XFORMS // current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0) @@ -478,22 +476,7 @@ l2l1_task (void *args_p) char eNB_stats_th_filename[255]; #endif - for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) - for (eNB_inst = 0; eNB_inst < NB_eNB_INST; eNB_inst++) { - for (sf = 0; sf < 10; sf++) { - PHY_vars_eNB_g[eNB_inst][CC_id]->proc[sf].frame_tx = 0; - PHY_vars_eNB_g[eNB_inst][CC_id]->proc[sf].frame_rx = 0; - PHY_vars_eNB_g[eNB_inst][CC_id]->proc[sf].subframe_tx = (sf + 1) - % 10; - PHY_vars_eNB_g[eNB_inst][CC_id]->proc[sf].subframe_rx = (sf + 9) - % 10; - } - - PHY_vars_eNB_g[eNB_inst][CC_id]->proc[0].frame_rx = 1023; - PHY_vars_eNB_g[eNB_inst][CC_id]->proc[9].frame_tx = 1; - } - //#ifdef XFORMS if (xforms==1) { xargv[0] = xname; fl_initialize (&xargc, xargv, NULL, 0, 0); @@ -520,7 +503,7 @@ l2l1_task (void *args_p) } } - //#endif + #ifdef PRINT_STATS @@ -689,55 +672,34 @@ l2l1_task (void *args_p) omv_write (pfd[1], enb_node_list, ue_node_list, omv_data); } -#endif -#ifdef DEBUG_OMG - /* - if ((((int) oai_emulation.info.time_s) % 100) == 0) { - for (UE_inst = oai_emulation.info.first_ue_local; UE_inst < (oai_emulation.info.first_ue_local + oai_emulation.info.nb_ue_local); UE_inst++) { - get_node_position (UE, UE_inst); - } - } - */ #endif update_ocm (); - for (slot = 0; slot < 20; slot++) { - if (slot % 2 == 0) - start_meas (&oaisim_stats_f); + for (sf = 0; sf < 10; sf++) { + start_meas (&oaisim_stats_f); wait_for_slot_isr (); #if defined(ENABLE_ITTI) - itti_update_lte_time(frame % MAX_FRAME_NUMBER, slot); + itti_update_lte_time(frame % MAX_FRAME_NUMBER, sf<<1); #endif - last_slot = (slot - 1) % 20; - - if (last_slot < 0) - last_slot += 20; - - next_slot = (slot + 1) % 20; - - oai_emulation.info.time_ms = frame * 10 + (slot >> 1); - - direction = subframe_select (frame_parms[0], next_slot >> 1); + oai_emulation.info.time_ms = frame * 10 + sf; #ifdef PROC - if(Channel_Flag==1) - Channel_Func(s_re2,s_im2,r_re2,r_im2,r_re02,r_im02,r_re0_d,r_im0_d,r_re0_u,r_im0_u,eNB2UE,UE2eNB,enb_data,ue_data,abstraction_flag,frame_parms,slot); + if(Channel_Flag==1) + Channel_Func(s_re2,s_im2,r_re2,r_im2,r_re02,r_im02,r_re0_d,r_im0_d,r_re0_u,r_im0_u,eNB2UE,UE2eNB,enb_data,ue_data,abstraction_flag,frame_parms,sf<<1); - if(Channel_Flag==0) + if(Channel_Flag==0) #endif - { + { // SUBFRAME INNER PART #if defined(ENABLE_ITTI) log_set_instance_type (LOG_INSTANCE_ENB); #endif - // if ((next_slot % 2) == 0) - if ((slot & 1) == 0) - clear_eNB_transport_info (oai_emulation.info.nb_enb_local); + clear_eNB_transport_info (oai_emulation.info.nb_enb_local); for (eNB_inst = oai_emulation.info.first_enb_local; (eNB_inst @@ -745,41 +707,50 @@ l2l1_task (void *args_p) + oai_emulation.info.nb_enb_local)); eNB_inst++) { if (oai_emulation.info.cli_start_enb[eNB_inst] != 0) { - if ((slot & 1) == 0) { - T(T_ENB_MASTER_TICK, T_INT(eNB_inst), T_INT(frame % 1024), T_INT(slot/2)); - LOG_D(EMU, - "PHY procedures eNB %d for frame %d, slot %d (subframe TX %d, RX %d) TDD %d/%d Nid_cell %d\n", - eNB_inst, - frame % MAX_FRAME_NUMBER, - slot, - PHY_vars_eNB_g[eNB_inst][0]->proc[slot >> 1].subframe_tx, - PHY_vars_eNB_g[eNB_inst][0]->proc[slot >> 1].subframe_rx, - PHY_vars_eNB_g[eNB_inst][0]->lte_frame_parms.frame_type, - PHY_vars_eNB_g[eNB_inst][0]->lte_frame_parms.tdd_config, - PHY_vars_eNB_g[eNB_inst][0]->lte_frame_parms.Nid_cell); - } + + T(T_ENB_MASTER_TICK, T_INT(eNB_inst), T_INT(frame % 1024), T_INT(sf)); + LOG_D(EMU, + "PHY procedures eNB %d for frame %d, subframe %d TDD %d/%d Nid_cell %d\n", + eNB_inst, + frame % MAX_FRAME_NUMBER, + sf, + PHY_vars_eNB_g[eNB_inst][0]->frame_parms.frame_type, + PHY_vars_eNB_g[eNB_inst][0]->frame_parms.tdd_config, + PHY_vars_eNB_g[eNB_inst][0]->frame_parms.Nid_cell); + #ifdef OPENAIR2 - //Application: traffic gen + //Application: traffic gen update_otg_eNB (eNB_inst, oai_emulation.info.time_ms); //IP/OTG to PDCP and PDCP to IP operation // pdcp_run (frame, 1, 0, eNB_inst); //PHY_vars_eNB_g[eNB_id]->Mod_id #endif - // PHY_vars_eNB_g[eNB_id]->frame = frame; - if ((slot & 1) == 0) - phy_procedures_eNB_lte (slot >> 1, - PHY_vars_eNB_g[eNB_inst], - abstraction_flag, no_relay, - NULL); + CC_id=0; + PHY_vars_eNB_g[eNB_inst][CC_id]->proc.frame_rx = frame; + PHY_vars_eNB_g[eNB_inst][CC_id]->proc.subframe_rx = sf; + PHY_vars_eNB_g[eNB_inst][CC_id]->proc.proc_rxtx[sf&1].frame_rx = frame; + PHY_vars_eNB_g[eNB_inst][CC_id]->proc.proc_rxtx[sf&1].subframe_rx = sf; + PHY_vars_eNB_g[eNB_inst][CC_id]->proc.proc_rxtx[sf&1].subframe_tx = (sf+4)%10; + PHY_vars_eNB_g[eNB_inst][CC_id]->proc.proc_rxtx[sf&1].frame_tx = (sf<6) ? frame : frame+1; + phy_procedures_eNB_common_RX(PHY_vars_eNB_g[eNB_inst][CC_id], + abstraction_flag); + phy_procedures_eNB_uespec_RX(PHY_vars_eNB_g[eNB_inst][CC_id], + &PHY_vars_eNB_g[eNB_inst][CC_id]->proc.proc_rxtx[sf&1], + abstraction_flag, + no_relay); + phy_procedures_eNB_TX(PHY_vars_eNB_g[eNB_inst][CC_id], + &PHY_vars_eNB_g[eNB_inst][CC_id]->proc.proc_rxtx[sf&1], + 0,no_relay,NULL); + #ifdef PRINT_STATS - if(last_slot==9 && frame%10==0) + if((sf==9) && frame%10==0) if(eNB_avg_thr) - fprintf(eNB_avg_thr,"%d %d\n",PHY_vars_eNB_g[eNB_inst][0]->proc[slot>>1].frame_tx, - (PHY_vars_eNB_g[eNB_inst][0]->total_system_throughput)/((PHY_vars_eNB_g[eNB_inst][0]->proc[slot>>1].frame_tx+1)*10)); + fprintf(eNB_avg_thr,"%d %d\n",PHY_vars_eNB_g[eNB_inst][0]->proc.proc_rxtx[sf&1].frame_tx, + (PHY_vars_eNB_g[eNB_inst][0]->total_system_throughput)/((PHY_vars_eNB_g[eNB_inst][0]->proc.proc_rxtx[sf&1].frame_tx+1)*10)); if (eNB_stats[eNB_inst]) { len = dump_eNB_stats(PHY_vars_eNB_g[eNB_inst][0], stats_buffer, 0); @@ -800,7 +771,7 @@ l2l1_task (void *args_p) #endif #endif } - } + }// eNB_inst loop // Call ETHERNET emulation here //emu_transport (frame, last_slot, next_slot, direction, oai_emulation.info.frame_type, ethernet_flag); @@ -809,9 +780,7 @@ l2l1_task (void *args_p) log_set_instance_type (LOG_INSTANCE_UE); #endif - if ((next_slot % 2) == 0) - // if ((slot&1) == 0) - clear_UE_transport_info (oai_emulation.info.nb_ue_local); + clear_UE_transport_info (oai_emulation.info.nb_ue_local); for (UE_inst = oai_emulation.info.first_ue_local; (UE_inst < (oai_emulation.info.first_ue_local + oai_emulation.info.nb_ue_local)); @@ -823,435 +792,302 @@ l2l1_task (void *args_p) if (frame >= (UE_inst * 20)) // activate UE only after 20*UE_id frames so that different UEs turn on separately #endif - { - LOG_D(EMU, - "PHY procedures UE %d for frame %d, slot %d (subframe TX %d, RX %d)\n", - UE_inst, frame % MAX_FRAME_NUMBER, slot, next_slot >> 1, - last_slot >> 1); - - if (PHY_vars_UE_g[UE_inst][0]->UE_mode[0] - != NOT_SYNCHED) { - if (frame > 0) { - PHY_vars_UE_g[UE_inst][0]->frame_rx = frame % MAX_FRAME_NUMBER; - PHY_vars_UE_g[UE_inst][0]->slot_rx = last_slot; - PHY_vars_UE_g[UE_inst][0]->slot_tx = next_slot; - - if (next_slot > 1) - PHY_vars_UE_g[UE_inst][0]->frame_tx = frame % MAX_FRAME_NUMBER; - else - PHY_vars_UE_g[UE_inst][0]->frame_tx = (frame + 1) % MAX_FRAME_NUMBER; + { // UE_PROCEDURES + LOG_D(EMU, + "PHY procedures UE %d for frame %d, subframe %d\n", + UE_inst, frame % MAX_FRAME_NUMBER, sf); + + if (PHY_vars_UE_g[UE_inst][0]->UE_mode[0] + != NOT_SYNCHED) { + if (frame > 0) { + PHY_vars_UE_g[UE_inst][0]->proc.proc_rxtx[sf&1].frame_rx = frame % MAX_FRAME_NUMBER; + PHY_vars_UE_g[UE_inst][0]->proc.proc_rxtx[sf&1].subframe_rx = sf; + PHY_vars_UE_g[UE_inst][0]->proc.proc_rxtx[sf&1].frame_tx = ((sf<6) ? frame : frame+1)% MAX_FRAME_NUMBER; + PHY_vars_UE_g[UE_inst][0]->proc.proc_rxtx[sf&1].subframe_tx = (sf+4)%10; #ifdef OPENAIR2 - //Application - update_otg_UE (UE_inst, oai_emulation.info.time_ms); + //Application + update_otg_UE (UE_inst, oai_emulation.info.time_ms); - //Access layer - PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, UE_inst, 0, ENB_FLAG_NO, NOT_A_RNTI, frame % MAX_FRAME_NUMBER, next_slot); - pdcp_run (&ctxt); + //Access layer + PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, UE_inst, 0, ENB_FLAG_NO, NOT_A_RNTI, frame % MAX_FRAME_NUMBER, sf); + pdcp_run (&ctxt); #endif - for (CC_id = 0; CC_id < MAX_NUM_CCs; - CC_id++) { - phy_procedures_UE_lte ( - PHY_vars_UE_g[UE_inst][CC_id], - 0, abstraction_flag, - normal_txrx, no_relay, - NULL); - } - - ue_data[UE_inst]->tx_power_dBm = - PHY_vars_UE_g[UE_inst][0]->tx_power_dBm; - } - } else { - if (abstraction_flag == 1) { - LOG_E(EMU, - "sync not supported in abstraction mode (UE%d,mode%d)\n", - UE_inst, - PHY_vars_UE_g[UE_inst][0]->UE_mode[0]); - exit (-1); - } - - if ((frame > 0) - && (last_slot - == (LTE_SLOTS_PER_FRAME - - 2))) { - initial_sync (PHY_vars_UE_g[UE_inst][0], - normal_txrx); - - /* - write_output("dlchan00.m","dlch00",&(PHY_vars_UE_g[0]->lte_ue_common_vars.dl_ch_estimates[0][0][0]),(6*(PHY_vars_UE_g[0]->lte_frame_parms.ofdm_symbol_size)),1,1); - if (PHY_vars_UE_g[0]->lte_frame_parms.nb_antennas_rx>1) - write_output("dlchan01.m","dlch01",&(PHY_vars_UE_g[0]->lte_ue_common_vars.dl_ch_estimates[0][1][0]),(6*(PHY_vars_UE_g[0]->lte_frame_parms.ofdm_symbol_size)),1,1); - write_output("dlchan10.m","dlch10",&(PHY_vars_UE_g[0]->lte_ue_common_vars.dl_ch_estimates[0][2][0]),(6*(PHY_vars_UE_g[0]->lte_frame_parms.ofdm_symbol_size)),1,1); - if (PHY_vars_UE_g[0]->lte_frame_parms.nb_antennas_rx>1) - write_output("dlchan11.m","dlch11",&(PHY_vars_UE_g[0]->lte_ue_common_vars.dl_ch_estimates[0][3][0]),(6*(PHY_vars_UE_g[0]->lte_frame_parms.ofdm_symbol_size)),1,1); - write_output("rxsig.m","rxs",PHY_vars_UE_g[0]->lte_ue_common_vars.rxdata[0],PHY_vars_UE_g[0]->lte_frame_parms.samples_per_tti*10,1,1); - write_output("rxsigF.m","rxsF",PHY_vars_UE_g[0]->lte_ue_common_vars.rxdataF[0],2*PHY_vars_UE_g[0]->lte_frame_parms.symbols_per_tti*PHY_vars_UE_g[0]->lte_frame_parms.ofdm_symbol_size,2,1); - write_output("pbch_rxF_ext0.m","pbch_ext0",PHY_vars_UE_g[0]->lte_ue_pbch_vars[0]->rxdataF_ext[0],6*12*4,1,1); - write_output("pbch_rxF_comp0.m","pbch_comp0",PHY_vars_UE_g[0]->lte_ue_pbch_vars[0]->rxdataF_comp[0],6*12*4,1,1); - write_output("pbch_rxF_llr.m","pbch_llr",PHY_vars_UE_g[0]->lte_ue_pbch_vars[0]->llr,(frame_parms->Ncp==0) ? 1920 : 1728,1,4); - */ - } - } + for (CC_id = 0; CC_id < MAX_NUM_CCs; + CC_id++) { + phy_procedures_UE_RX(PHY_vars_UE_g[UE_inst][CC_id], + &PHY_vars_UE_g[UE_inst][CC_id]->proc.proc_rxtx[sf&1], + 0, abstraction_flag, + normal_txrx, no_relay, + NULL); + phy_procedures_UE_TX(PHY_vars_UE_g[UE_inst][CC_id], + &PHY_vars_UE_g[UE_inst][CC_id]->proc.proc_rxtx[sf&1], + 0, + abstraction_flag, + normal_txrx, + no_relay); + } + + ue_data[UE_inst]->tx_power_dBm = + PHY_vars_UE_g[UE_inst][0]->tx_power_dBm; + } + } else { + if (abstraction_flag == 1) { + LOG_E(EMU, + "sync not supported in abstraction mode (UE%d,mode%d)\n", + UE_inst, + PHY_vars_UE_g[UE_inst][0]->UE_mode[0]); + exit (-1); + } + + if ((frame > 0) + && (sf==9)){ + + initial_sync (PHY_vars_UE_g[UE_inst][0], + normal_txrx); + + /* + write_output("dlchan00.m","dlch00",&(PHY_vars_UE_g[0]->common_vars.dl_ch_estimates[0][0][0]),(6*(PHY_vars_UE_g[0]->frame_parms.ofdm_symbol_size)),1,1); + if (PHY_vars_UE_g[0]->frame_parms.nb_antennas_rx>1) + write_output("dlchan01.m","dlch01",&(PHY_vars_UE_g[0]->common_vars.dl_ch_estimates[0][1][0]),(6*(PHY_vars_UE_g[0]->frame_parms.ofdm_symbol_size)),1,1); + write_output("dlchan10.m","dlch10",&(PHY_vars_UE_g[0]->common_vars.dl_ch_estimates[0][2][0]),(6*(PHY_vars_UE_g[0]->frame_parms.ofdm_symbol_size)),1,1); + if (PHY_vars_UE_g[0]->frame_parms.nb_antennas_rx>1) + write_output("dlchan11.m","dlch11",&(PHY_vars_UE_g[0]->common_vars.dl_ch_estimates[0][3][0]),(6*(PHY_vars_UE_g[0]->frame_parms.ofdm_symbol_size)),1,1); + write_output("rxsig.m","rxs",PHY_vars_UE_g[0]->common_vars.rxdata[0],PHY_vars_UE_g[0]->frame_parms.samples_per_tti*10,1,1); + write_output("rxsigF.m","rxsF",PHY_vars_UE_g[0]->common_vars.rxdataF[0],2*PHY_vars_UE_g[0]->frame_parms.symbols_per_tti*PHY_vars_UE_g[0]->frame_parms.ofdm_symbol_size,2,1); + write_output("pbch_rxF_ext0.m","pbch_ext0",PHY_vars_UE_g[0]->lte_ue_pbch_vars[0]->rxdataF_ext[0],6*12*4,1,1); + write_output("pbch_rxF_comp0.m","pbch_comp0",PHY_vars_UE_g[0]->lte_ue_pbch_vars[0]->rxdataF_comp[0],6*12*4,1,1); + write_output("pbch_rxF_llr.m","pbch_llr",PHY_vars_UE_g[0]->lte_ue_pbch_vars[0]->llr,(frame_parms->Ncp==0) ? 1920 : 1728,1,4); + */ + } + } #ifdef PRINT_STATS - if(last_slot==2 && frame%10==0) { - if (UE_stats_th[UE_inst]) { - fprintf(UE_stats_th[UE_inst],"%d %d\n",frame % MAX_FRAME_NUMBER, PHY_vars_UE_g[UE_inst][0]->bitrate[0]/1000); - } - } + if((sf==1) && frame%10==0) { + if (UE_stats_th[UE_inst]) { + fprintf(UE_stats_th[UE_inst],"%d %d\n",frame % MAX_FRAME_NUMBER, PHY_vars_UE_g[UE_inst][0]->bitrate[0]/1000); + } + } - if (UE_stats[UE_inst]) { - len = dump_ue_stats (PHY_vars_UE_g[UE_inst][0], stats_buffer, 0, normal_txrx, 0); - rewind (UE_stats[UE_inst]); - fwrite (stats_buffer, 1, len, UE_stats[UE_inst]); - fflush(UE_stats[UE_inst]); - } + if (UE_stats[UE_inst]) { + len = dump_ue_stats (PHY_vars_UE_g[UE_inst][0], &PHY_vars_UE_g[UE_inst][0]->proc.proc_rxtx[sf&1],stats_buffer, 0, normal_txrx, 0); + rewind (UE_stats[UE_inst]); + fwrite (stats_buffer, 1, len, UE_stats[UE_inst]); + fflush(UE_stats[UE_inst]); + } #endif - } + } // UE_PROCEDURES } - } + } // UE_inst -#ifdef Rel10 - - for (RN_id=oai_emulation.info.first_rn_local; - RN_id<oai_emulation.info.first_rn_local+oai_emulation.info.nb_rn_local; - RN_id++) { - // UE id and eNB id of the RN - UE_inst= oai_emulation.info.first_ue_local+oai_emulation.info.nb_ue_local + RN_id;// NB_UE_INST + RN_id - eNB_inst= oai_emulation.info.first_enb_local+oai_emulation.info.nb_enb_local + RN_id;// NB_eNB_INST + RN_id - - // currently only works in FDD - if (oai_emulation.info.eMBMS_active_state == 4) { - r_type = multicast_relay; - //LOG_I(EMU,"Activating the multicast relaying\n"); - } else { - LOG_E(EMU,"Not supported eMBMS option when relaying is enabled %d\n", r_type); - exit(-1); - } - - PHY_vars_RN_g[RN_id]->frame = frame % MAX_FRAME_NUMBER; - - if ( oai_emulation.info.frame_type == 0) { - // RN == UE - if (frame>0) { - if (PHY_vars_UE_g[UE_inst][0]->UE_mode[0] != NOT_SYNCHED) { - LOG_D(EMU,"[RN %d] PHY procedures UE %d for frame %d, slot %d (subframe TX %d, RX %d)\n", - RN_id, UE_inst, frame, slot, next_slot >> 1,last_slot>>1); - PHY_vars_UE_g[UE_inst][0]->frame_rx = frame % MAX_FRAME_NUMBER; - PHY_vars_UE_g[UE_inst][0]->slot_rx = last_slot; - PHY_vars_UE_g[UE_inst][0]->slot_tx = next_slot; - - if (next_slot>1) PHY_vars_UE_g[UE_inst][0]->frame_tx = frame % MAX_FRAME_NUMBER; - else PHY_vars_UE_g[UE_inst][0]->frame_tx = (frame+1) % MAX_FRAME_NUMBER; - - phy_procedures_UE_lte (PHY_vars_UE_g[UE_inst][0], 0, abstraction_flag,normal_txrx, - r_type, PHY_vars_RN_g[RN_id]); - } else if (last_slot == (LTE_SLOTS_PER_FRAME-2)) { - initial_sync(PHY_vars_UE_g[UE_inst][0],normal_txrx); - } - } - - // RN == eNB - LOG_D(EMU,"[RN %d] PHY procedures eNB %d for frame %d, slot %d (subframe TX %d, RX %d)\n", - RN_id, eNB_inst, frame % MAX_FRAME_NUMBER, slot, next_slot >> 1,last_slot>>1); - phy_procedures_eNB_lte(slot>>1, PHY_vars_eNB_g[eNB_inst], abstraction_flag, - r_type, PHY_vars_RN_g[RN_id]); - } else { - LOG_E(EMU,"TDD is not supported for multicast relaying %d\n", r_type); - exit(-1); - } - } - -#endif - emu_transport (frame % MAX_FRAME_NUMBER, last_slot, next_slot, direction, + emu_transport (frame % MAX_FRAME_NUMBER, sf<<1, ((sf+4)%10)<<1, subframe_select(&PHY_vars_eNB_g[0][0]->frame_parms,sf), oai_emulation.info.frame_type[0], ethernet_flag); - if ((direction == SF_DL) - || (frame_parms[0]->frame_type == FDD)) { - // consider only sec id 0 - /* for (eNB_id=0;eNB_id<NB_eNB_INST;eNB_id++) { - if (abstraction_flag == 0) { - do_OFDM_mod(PHY_vars_eNB_g[eNB_id]->lte_eNB_common_vars.txdataF[0], - PHY_vars_eNB_g[eNB_id]->lte_eNB_common_vars.txdata[0], - frame,next_slot, - frame_parms); - } - }*/ - start_meas (&dl_chan_stats); - - for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) - for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { -//#warning figure out what to do with UE frame_parms during initial_sync - do_DL_sig (r_re0, - r_im0, - r_re, - r_im, - s_re, - s_im, - eNB2UE, - enb_data, - ue_data, - next_slot, - abstraction_flag, - &PHY_vars_eNB_g[0][CC_id]->lte_frame_parms, - UE_inst, CC_id); - } - - stop_meas (&dl_chan_stats); - } - - if ((direction == SF_UL) || (frame_parms[0]->frame_type == 0)) { //if ((subframe<2) || (subframe>4)) - start_meas (&ul_chan_stats); - - for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { -//#warning figure out what to do with UE frame_parms during initial_sync - do_UL_sig (r_re0, r_im0, r_re, r_im, s_re, s_im, UE2eNB, - enb_data, ue_data, next_slot, - abstraction_flag, - &PHY_vars_eNB_g[0][CC_id]->lte_frame_parms, - frame % MAX_FRAME_NUMBER, CC_id); - } - - stop_meas (&ul_chan_stats); - /* - int ccc; - fprintf(SINRpost,"SINRdb For eNB New Subframe : \n "); - for(ccc = 0 ; ccc<301; ccc++) - { - fprintf(SINRpost,"_ %f ", SINRpost_eff[ccc]); - } - fprintf(SINRpost,"SINRdb For eNB : %f \n ", SINRpost_eff[ccc]); - */ - } - - if ((direction == SF_S)) { //it must be a special subframe - if (next_slot % 2 == 0) { //DL part - /* for (eNB_id=0;eNB_id<NB_eNB_INST;eNB_id++) { - if (abstraction_flag == 0) { - do_OFDM_mod(PHY_vars_eNB_g[eNB_id]->lte_eNB_common_vars.txdataF[0], - PHY_vars_eNB_g[eNB_id]->lte_eNB_common_vars.txdata[0], - frame,next_slot, - frame_parms); - } - }*/ - start_meas (&dl_chan_stats); - - for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) - for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { -//#warning check dimensions of r_reN,r_imN for multiple CCs - do_DL_sig (r_re0, - r_im0, - r_re, - r_im, - s_re, - s_im, - eNB2UE, - enb_data, - ue_data, - next_slot, - abstraction_flag, - &PHY_vars_eNB_g[0][CC_id]->lte_frame_parms, - UE_inst, CC_id); - } - - stop_meas (&dl_chan_stats); - /* - for (aarx=0;aarx<UE2eNB[1][0]->nb_rx;aarx++) - for (aatx=0;aatx<UE2eNB[1][0]->nb_tx;aatx++) - for (k=0;k<UE2eNB[1][0]->channel_length;k++) - printf("SB(%d,%d,%d)->(%f,%f)\n",k,aarx,aatx,UE2eNB[1][0]->ch[aarx+(aatx*UE2eNB[1][0]->nb_rx)][k].r,UE2eNB[1][0]->ch[aarx+(aatx*UE2eNB[1][0]->nb_rx)][k].i); - */ - } else { // UL part - start_meas (&ul_chan_stats); - - for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { -//#warning check dimensions of r_reN,r_imN for multiple CCs - do_UL_sig (r_re0, - r_im0, - r_re, - r_im, - s_re, - s_im, - UE2eNB, - enb_data, - ue_data, - next_slot, - abstraction_flag, - &PHY_vars_eNB_g[0][CC_id]->lte_frame_parms, - frame % MAX_FRAME_NUMBER, CC_id); - } - - stop_meas (&ul_chan_stats); - - /* int ccc; - fprintf(SINRpost,"SINRdb For eNB New Subframe : \n "); - for(ccc = 0 ; ccc<301; ccc++) - { - fprintf(SINRpost,"_ %f ", SINRpost_eff[ccc]); - } - fprintf(SINRpost,"SINRdb For eNB : %f \n ", SINRpost_eff[ccc]); - } - */ - } - } - - if ((last_slot == 1) && ((frame % MAX_FRAME_NUMBER) == 0) && (abstraction_flag == 0) - && (oai_emulation.info.n_frames == 1)) { - - write_output ("dlchan0.m", - "dlch0", - &(PHY_vars_UE_g[0][0]->lte_ue_common_vars.dl_ch_estimates[0][0][0]), - (6 - * (PHY_vars_UE_g[0][0]->lte_frame_parms.ofdm_symbol_size)), - 1, 1); - write_output ("dlchan1.m", - "dlch1", - &(PHY_vars_UE_g[0][0]->lte_ue_common_vars.dl_ch_estimates[1][0][0]), - (6 - * (PHY_vars_UE_g[0][0]->lte_frame_parms.ofdm_symbol_size)), - 1, 1); - write_output ("dlchan2.m", - "dlch2", - &(PHY_vars_UE_g[0][0]->lte_ue_common_vars.dl_ch_estimates[2][0][0]), - (6 - * (PHY_vars_UE_g[0][0]->lte_frame_parms.ofdm_symbol_size)), - 1, 1); - write_output ("pbch_rxF_comp0.m", - "pbch_comp0", - PHY_vars_UE_g[0][0]->lte_ue_pbch_vars[0]->rxdataF_comp[0], - 6 * 12 * 4, 1, 1); - write_output ("pbch_rxF_llr.m", "pbch_llr", - PHY_vars_UE_g[0][0]->lte_ue_pbch_vars[0]->llr, - (frame_parms[0]->Ncp == 0) ? 1920 : 1728, 1, - 4); - } - - /* - if ((last_slot==1) && (frame==1)) { - write_output("dlsch_rxF_comp0.m","dlsch0_rxF_comp0",PHY_vars_UE->lte_ue_pdsch_vars[eNB_id]->rxdataF_comp[0],300*(-(PHY_vars_UE->lte_frame_parms.Ncp*2)+14),1,1); - write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",PHY_vars_UE->lte_ue_pdcch_vars[eNB_id]->rxdataF_comp[0],4*300,1,1); - } - */ - } // if Channel_Flag==0 - - if (slot % 2 == 1) - stop_meas (&oaisim_stats_f); - } //end of slot + start_meas (&dl_chan_stats); + + for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + //#warning figure out what to do with UE frame_parms during initial_sync + do_DL_sig (r_re0, + r_im0, + r_re, + r_im, + s_re, + s_im, + eNB2UE, + enb_data, + ue_data, + PHY_vars_eNB_g[0][CC_id]->proc.proc_rxtx[sf&1].subframe_tx<<1, + abstraction_flag, + &PHY_vars_eNB_g[0][CC_id]->frame_parms, + UE_inst, CC_id); + do_DL_sig (r_re0, + r_im0, + r_re, + r_im, + s_re, + s_im, + eNB2UE, + enb_data, + ue_data, + (PHY_vars_eNB_g[0][CC_id]->proc.proc_rxtx[sf&1].subframe_tx<<1)+1, + abstraction_flag, + &PHY_vars_eNB_g[0][CC_id]->frame_parms, + UE_inst, CC_id); + } + + stop_meas (&dl_chan_stats); + + + start_meas (&ul_chan_stats); + + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + //#warning figure out what to do with UE frame_parms during initial_sync + do_UL_sig (r_re0, r_im0, r_re, r_im, s_re, s_im, UE2eNB, + enb_data, ue_data, + PHY_vars_UE_g[0][CC_id]->proc.proc_rxtx[sf&1].subframe_tx<<1, + abstraction_flag, + &PHY_vars_eNB_g[0][CC_id]->frame_parms, + frame % MAX_FRAME_NUMBER, CC_id); + do_UL_sig (r_re0, r_im0, r_re, r_im, s_re, s_im, UE2eNB, + enb_data, ue_data, + (PHY_vars_UE_g[0][CC_id]->proc.proc_rxtx[sf&1].subframe_tx<<1)+1, + abstraction_flag, + &PHY_vars_eNB_g[0][CC_id]->frame_parms, + frame % MAX_FRAME_NUMBER, CC_id); + } + + stop_meas (&ul_chan_stats); + + + if ((sf == 0) && ((frame % MAX_FRAME_NUMBER) == 0) && (abstraction_flag == 0) + && (oai_emulation.info.n_frames == 1)) { + + write_output ("dlchan0.m", + "dlch0", + &(PHY_vars_UE_g[0][0]->common_vars.dl_ch_estimates[0][0][0]), + (6 + * (PHY_vars_UE_g[0][0]->frame_parms.ofdm_symbol_size)), + 1, 1); + write_output ("dlchan1.m", + "dlch1", + &(PHY_vars_UE_g[0][0]->common_vars.dl_ch_estimates[1][0][0]), + (6 + * (PHY_vars_UE_g[0][0]->frame_parms.ofdm_symbol_size)), + 1, 1); + write_output ("dlchan2.m", + "dlch2", + &(PHY_vars_UE_g[0][0]->common_vars.dl_ch_estimates[2][0][0]), + (6 + * (PHY_vars_UE_g[0][0]->frame_parms.ofdm_symbol_size)), + 1, 1); + write_output ("pbch_rxF_comp0.m", + "pbch_comp0", + PHY_vars_UE_g[0][0]->pbch_vars[0]->rxdataF_comp[0], + 6 * 12 * 4, 1, 1); + write_output ("pbch_rxF_llr.m", "pbch_llr", + PHY_vars_UE_g[0][0]->pbch_vars[0]->llr, + (frame_parms[0]->Ncp == 0) ? 1920 : 1728, 1, + 4); + } + + stop_meas (&oaisim_stats_f); + } // SUBFRAME INNER PART + } + if ((frame >= 10) && (frame <= 11) && (abstraction_flag == 0) #ifdef PROC - &&(Channel_Flag==0) + &&(Channel_Flag==0) #endif - ) { + ) { sprintf (fname, "UEtxsig%d.m", frame % MAX_FRAME_NUMBER); sprintf (vname, "txs%d", frame % MAX_FRAME_NUMBER); write_output (fname, - vname, - PHY_vars_UE_g[0][0]->lte_ue_common_vars.txdata[0], - PHY_vars_UE_g[0][0]->lte_frame_parms.samples_per_tti - * 10, - 1, 1); + vname, + PHY_vars_UE_g[0][0]->common_vars.txdata[0], + PHY_vars_UE_g[0][0]->frame_parms.samples_per_tti + * 10, + 1, 1); sprintf (fname, "eNBtxsig%d.m", frame % MAX_FRAME_NUMBER); sprintf (vname, "txs%d", frame % MAX_FRAME_NUMBER); write_output (fname, - vname, - PHY_vars_eNB_g[0][0]->lte_eNB_common_vars.txdata[0][0], - PHY_vars_UE_g[0][0]->lte_frame_parms.samples_per_tti - * 10, - 1, 1); + vname, + PHY_vars_eNB_g[0][0]->common_vars.txdata[0][0], + PHY_vars_UE_g[0][0]->frame_parms.samples_per_tti + * 10, + 1, 1); sprintf (fname, "eNBtxsigF%d.m", frame % MAX_FRAME_NUMBER); sprintf (vname, "txsF%d", frame % MAX_FRAME_NUMBER); write_output (fname, - vname, - PHY_vars_eNB_g[0][0]->lte_eNB_common_vars.txdataF[0][0], - PHY_vars_eNB_g[0][0]->lte_frame_parms.symbols_per_tti - * PHY_vars_eNB_g[0][0]->lte_frame_parms.ofdm_symbol_size, - 1, 1); + vname, + PHY_vars_eNB_g[0][0]->common_vars.txdataF[0][0], + PHY_vars_eNB_g[0][0]->frame_parms.symbols_per_tti + * PHY_vars_eNB_g[0][0]->frame_parms.ofdm_symbol_size, + 1, 1); sprintf (fname, "UErxsig%d.m", frame % MAX_FRAME_NUMBER); sprintf (vname, "rxs%d", frame % MAX_FRAME_NUMBER); write_output (fname, - vname, - PHY_vars_UE_g[0][0]->lte_ue_common_vars.rxdata[0], - PHY_vars_UE_g[0][0]->lte_frame_parms.samples_per_tti - * 10, - 1, 1); + vname, + PHY_vars_UE_g[0][0]->common_vars.rxdata[0], + PHY_vars_UE_g[0][0]->frame_parms.samples_per_tti + * 10, + 1, 1); sprintf (fname, "eNBrxsig%d.m", frame % MAX_FRAME_NUMBER); sprintf (vname, "rxs%d", frame % MAX_FRAME_NUMBER); write_output (fname, - vname, - PHY_vars_eNB_g[0][0]->lte_eNB_common_vars.rxdata[0][0], - PHY_vars_UE_g[0][0]->lte_frame_parms.samples_per_tti - * 10, - 1, 1); + vname, + PHY_vars_eNB_g[0][0]->common_vars.rxdata[0][0], + PHY_vars_UE_g[0][0]->frame_parms.samples_per_tti + * 10, + 1, 1); } - + //#ifdef XFORMS if (xforms==1) { - eNB_inst = 0; + eNB_inst = 0; + + for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) { + for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { + phy_scope_UE(form_ue[CC_id][UE_inst], + PHY_vars_UE_g[UE_inst][CC_id], + eNB_inst, + UE_inst, + 7); + } - for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) { - for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { - phy_scope_UE(form_ue[CC_id][UE_inst], - PHY_vars_UE_g[UE_inst][CC_id], - eNB_inst, - UE_inst, - 7); + phy_scope_eNB(form_enb[UE_inst], + PHY_vars_eNB_g[eNB_inst][0], + UE_inst); + } - - phy_scope_eNB(form_enb[UE_inst], - PHY_vars_eNB_g[eNB_inst][0], - UE_inst); - - } } //#endif - + #ifdef SMBV - + // Rohde&Schwarz SMBV100A vector signal generator if ((frame % MAX_FRAME_NUMBER == config_frames[0]) || (frame % MAX_FRAME_NUMBER == config_frames[1]) || (frame % MAX_FRAME_NUMBER == config_frames[2]) || (frame % MAX_FRAME_NUMBER == config_frames[3])) { smbv_frame_cnt++; } - + #endif - - } - - //end of frame + + } // frame loop stop_meas (&oaisim_stats); oai_shutdown (); - + #ifdef PRINT_STATS - + for (UE_inst=0; UE_inst<NB_UE_INST; UE_inst++) { if (UE_stats[UE_inst]) fclose (UE_stats[UE_inst]); - + if(UE_stats_th[UE_inst]) fclose (UE_stats_th[UE_inst]); } - + for (eNB_inst=0; eNB_inst<NB_eNB_INST; eNB_inst++) { if (eNB_stats[eNB_inst]) fclose (eNB_stats[eNB_inst]); } - + if (eNB_avg_thr) fclose (eNB_avg_thr); - + if (eNB_l2_stats) fclose (eNB_l2_stats); - + #endif - + #if defined(ENABLE_ITTI) itti_terminate_tasks(TASK_L2L1); #endif - + return NULL; } @@ -1354,7 +1190,7 @@ main (int argc, char **argv) #ifdef SMBV // Rohde&Schwarz SMBV100A vector signal generator smbv_init_config(smbv_fname, smbv_nframes); - smbv_write_config_from_frame_parms(smbv_fname, &PHY_vars_eNB_g[0][0]->lte_frame_parms); + smbv_write_config_from_frame_parms(smbv_fname, &PHY_vars_eNB_g[0][0]->frame_parms); #endif // add events to future event list: Currently not used @@ -1862,38 +1698,38 @@ oai_shutdown (void) if (abstraction_flag == 0 && Channel_Flag==0 && Process_Flag==0) #else - if (abstraction_flag == 0) + if (abstraction_flag == 0) #endif - { - /* - #ifdef IFFT_FPGA - free(txdataF2[0]); - free(txdataF2[1]); - free(txdataF2); - free(txdata[0]); - free(txdata[1]); - free(txdata); - #endif - */ - - for (int i = 0; i < 2; i++) { - free (s_re[i]); - free (s_im[i]); - free (r_re[i]); - free (r_im[i]); - } + { + /* + #ifdef IFFT_FPGA + free(txdataF2[0]); + free(txdataF2[1]); + free(txdataF2); + free(txdata[0]); + free(txdata[1]); + free(txdata); + #endif + */ + + for (int i = 0; i < 2; i++) { + free (s_re[i]); + free (s_im[i]); + free (r_re[i]); + free (r_im[i]); + } - free (s_re); - free (s_im); - free (r_re); - free (r_im); - s_re = 0; - s_im = 0; - r_re = 0; - r_im = 0; + free (s_re); + free (s_im); + free (r_re); + free (r_im); + s_re = 0; + s_im = 0; + r_re = 0; + r_im = 0; - lte_sync_time_free (); - } + lte_sync_time_free (); + } // added for PHY abstraction if (oai_emulation.info.ocm_enabled == 1) { @@ -1961,3 +1797,5 @@ get_OAI_emulation () { return &oai_emulation; } + + diff --git a/targets/SIMU/USER/oaisim_functions.c b/targets/SIMU/USER/oaisim_functions.c index 922114aa8e2..5a970ca038f 100644 --- a/targets/SIMU/USER/oaisim_functions.c +++ b/targets/SIMU/USER/oaisim_functions.c @@ -958,21 +958,21 @@ void init_openair1(void) PHY_vars_eNB_g[eNB_id][CC_id]->pusch_config_dedicated[UE_id].betaOffset_ACK_Index = beta_ACK; PHY_vars_eNB_g[eNB_id][CC_id]->pusch_config_dedicated[UE_id].betaOffset_RI_Index = beta_RI; PHY_vars_eNB_g[eNB_id][CC_id]->pusch_config_dedicated[UE_id].betaOffset_CQI_Index = beta_CQI; - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.p_b = (frame_parms[CC_id]->nb_antennas_tx_eNB>1) ? 1 : 0; // rho_A = rho_B + PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.pdsch_config_common.p_b = (frame_parms[CC_id]->nb_antennas_tx_eNB>1) ? 1 : 0; // rho_A = rho_B PHY_vars_UE_g[UE_id][CC_id]->pusch_config_dedicated[eNB_id].betaOffset_ACK_Index = beta_ACK; PHY_vars_UE_g[UE_id][CC_id]->pusch_config_dedicated[eNB_id].betaOffset_RI_Index = beta_RI; PHY_vars_UE_g[UE_id][CC_id]->pusch_config_dedicated[eNB_id].betaOffset_CQI_Index = beta_CQI; - PHY_vars_UE_g[UE_id][CC_id]->lte_frame_parms.pdsch_config_common.p_b = (frame_parms[CC_id]->nb_antennas_tx_eNB>1) ? 1 : 0; // rho_A = rho_B + PHY_vars_UE_g[UE_id][CC_id]->frame_parms.pdsch_config_common.p_b = (frame_parms[CC_id]->nb_antennas_tx_eNB>1) ? 1 : 0; // rho_A = rho_B } } } printf ("AFTER init: MAX_NUM_CCs %d, Nid_cell %d frame_type %d,tdd_config %d\n", MAX_NUM_CCs, - PHY_vars_eNB_g[0][0]->lte_frame_parms.Nid_cell, - PHY_vars_eNB_g[0][0]->lte_frame_parms.frame_type, - PHY_vars_eNB_g[0][0]->lte_frame_parms.tdd_config); + PHY_vars_eNB_g[0][0]->frame_parms.Nid_cell, + PHY_vars_eNB_g[0][0]->frame_parms.frame_type, + PHY_vars_eNB_g[0][0]->frame_parms.tdd_config); number_of_cards = 1; @@ -993,12 +993,12 @@ void init_openair1(void) for (UE_id=0; UE_id<NB_UE_INST; UE_id++) { PHY_vars_UE_g[UE_id][CC_id]->use_ia_receiver = 0; - if (PHY_vars_UE_g[UE_id][CC_id]->lte_frame_parms.frame_type == TDD) { - if (PHY_vars_UE_g[UE_id][CC_id]->lte_frame_parms.N_RB_DL == 100) + if (PHY_vars_UE_g[UE_id][CC_id]->frame_parms.frame_type == TDD) { + if (PHY_vars_UE_g[UE_id][CC_id]->frame_parms.N_RB_DL == 100) PHY_vars_UE_g[UE_id][CC_id]->N_TA_offset = 624; - else if (PHY_vars_UE_g[UE_id][CC_id]->lte_frame_parms.N_RB_DL == 50) + else if (PHY_vars_UE_g[UE_id][CC_id]->frame_parms.N_RB_DL == 50) PHY_vars_UE_g[UE_id][CC_id]->N_TA_offset = 624/2; - else if (PHY_vars_UE_g[UE_id][CC_id]->lte_frame_parms.N_RB_DL == 25) + else if (PHY_vars_UE_g[UE_id][CC_id]->frame_parms.N_RB_DL == 25) PHY_vars_UE_g[UE_id][CC_id]->N_TA_offset = 624/4; } else { PHY_vars_UE_g[UE_id][CC_id]->N_TA_offset = 0; @@ -1006,12 +1006,12 @@ void init_openair1(void) } for (eNB_id=0; eNB_id<NB_eNB_INST; eNB_id++) { - if (PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.frame_type == TDD) { - if (PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.N_RB_DL == 100) + if (PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.frame_type == TDD) { + if (PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.N_RB_DL == 100) PHY_vars_eNB_g[eNB_id][CC_id]->N_TA_offset = 624; - else if (PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.N_RB_DL == 50) + else if (PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.N_RB_DL == 50) PHY_vars_eNB_g[eNB_id][CC_id]->N_TA_offset = 624/2; - else if (PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.N_RB_DL == 25) + else if (PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.N_RB_DL == 25) PHY_vars_eNB_g[eNB_id][CC_id]->N_TA_offset = 624/4; } else { PHY_vars_eNB_g[eNB_id][CC_id]->N_TA_offset = 0; @@ -1048,7 +1048,7 @@ void init_openair1(void) else PHY_vars_UE_g[UE_id][CC_id]->mac_enabled=1; - PHY_vars_UE_g[UE_id][CC_id]->lte_ue_pdcch_vars[0]->crnti = 0x1235 + UE_id; + PHY_vars_UE_g[UE_id][CC_id]->pdcch_vars[0]->crnti = 0x1235 + UE_id; PHY_vars_UE_g[UE_id][CC_id]->current_dlsch_cqi[0] = 10; LOG_I(EMU, "UE %d mode is initialized to %d\n", UE_id, PHY_vars_UE_g[UE_id][CC_id]->UE_mode[0] ); @@ -1077,7 +1077,7 @@ void init_openair2(void) //#warning "eNB index is hard coded to zero" for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) - l2_init (&PHY_vars_eNB_g[0][CC_id]->lte_frame_parms, + l2_init (&PHY_vars_eNB_g[0][CC_id]->frame_parms, oai_emulation.info.eMBMS_active_state, NULL, oai_emulation.info.cba_group_active, @@ -1167,8 +1167,8 @@ void init_ocm(void) map_str_to_int(small_scale_names,oai_emulation.environment_system_config.fading.small_scale.selected_option), eNB_id, UE_id); /* if (oai_emulation.info.transmission_mode == 5) - eNB2UE[eNB_id][UE_id] = new_channel_desc_scm(PHY_vars_eNB_g[eNB_id]->lte_frame_parms.nb_antennas_tx, - PHY_vars_UE_g[UE_id]->lte_frame_parms.nb_antennas_rx, + eNB2UE[eNB_id][UE_id] = new_channel_desc_scm(PHY_vars_eNB_g[eNB_id]->frame_parms.nb_antennas_tx, + PHY_vars_UE_g[UE_id]->frame_parms.nb_antennas_rx, (UE_id == 0)? Rice1_corr : Rice1_anticorr, oai_emulation.environment_system_config.system_bandwidth_MB, forgetting_factor, @@ -1179,11 +1179,11 @@ void init_ocm(void) */ eNB2UE[eNB_id][UE_id][CC_id] = - new_channel_desc_scm(PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.nb_antennas_tx, - PHY_vars_UE_g[UE_id][CC_id]->lte_frame_parms.nb_antennas_rx, + new_channel_desc_scm(PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.nb_antennas_tx, + PHY_vars_UE_g[UE_id][CC_id]->frame_parms.nb_antennas_rx, map_str_to_int(small_scale_names,oai_emulation.environment_system_config.fading.small_scale.selected_option), - N_RB2sampling_rate(PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.N_RB_DL), - N_RB2channel_bandwidth(PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.N_RB_DL), + N_RB2sampling_rate(PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.N_RB_DL), + N_RB2channel_bandwidth(PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.N_RB_DL), forgetting_factor, 0, 0); @@ -1192,11 +1192,11 @@ void init_ocm(void) map_str_to_int(small_scale_names, oai_emulation.environment_system_config.fading.small_scale.selected_option),UE_id, eNB_id); UE2eNB[UE_id][eNB_id][CC_id] = - new_channel_desc_scm(PHY_vars_UE_g[UE_id][CC_id]->lte_frame_parms.nb_antennas_tx, - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.nb_antennas_rx, + new_channel_desc_scm(PHY_vars_UE_g[UE_id][CC_id]->frame_parms.nb_antennas_tx, + PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.nb_antennas_rx, map_str_to_int(small_scale_names, oai_emulation.environment_system_config.fading.small_scale.selected_option), - N_RB2sampling_rate(PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.N_RB_UL), - N_RB2channel_bandwidth(PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.N_RB_UL), + N_RB2sampling_rate(PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.N_RB_UL), + N_RB2channel_bandwidth(PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.N_RB_UL), forgetting_factor, 0, 0); @@ -1265,7 +1265,7 @@ void update_ocm() int CC_id; for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) - enb_data[eNB_id]->tx_power_dBm = PHY_vars_eNB_g[eNB_id][0]->lte_frame_parms.pdsch_config_common.referenceSignalPower; + enb_data[eNB_id]->tx_power_dBm = PHY_vars_eNB_g[eNB_id][0]->frame_parms.pdsch_config_common.referenceSignalPower; for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) ue_data[UE_id]->tx_power_dBm = PHY_vars_UE_g[UE_id][0]->tx_power_dBm; @@ -1315,16 +1315,16 @@ void update_ocm() //pathloss: -132.24 dBm/15kHz RE + target SNR - eNB TX power per RE if (eNB_id == (UE_id % NB_eNB_INST)) { - eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB = -132.24 + snr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower; - UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB = -132.24 + snr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower; + eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB = -132.24 + snr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.pdsch_config_common.referenceSignalPower; + UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB = -132.24 + snr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.pdsch_config_common.referenceSignalPower; } else { - eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB = -132.24 + sinr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower; - UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB = -132.24 + sinr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower; + eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB = -132.24 + sinr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.pdsch_config_common.referenceSignalPower; + UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB = -132.24 + sinr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.pdsch_config_common.referenceSignalPower; } LOG_I(OCM,"Path loss from eNB %d to UE %d (CCid %d)=> %f dB (eNB TX %d, SNR %f)\n",eNB_id,UE_id,CC_id, eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB, - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower,snr_dB); + PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.pdsch_config_common.referenceSignalPower,snr_dB); // printf("[SIM] Path loss from UE %d to eNB %d => %f dB\n",UE_id,eNB_id,UE2eNB[UE_id][eNB_id]->path_loss_dB); } } -- GitLab