From 6a8a551ef33f8def8c37ab9f955e1e290cea0dd0 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG <xiwen.jiang@eureocm.fr> Date: Fri, 24 Jun 2016 12:32:57 +0200 Subject: [PATCH] add beamforming_mode into generate eNB and UE dlsch parameters from DCI --- openair1/PHY/LTE_TRANSPORT/dci_tools.c | 23 +++++++++--- openair1/PHY/LTE_TRANSPORT/proto.h | 6 ++-- openair1/SCHED/phy_procedures_lte_eNb.c | 9 +++-- openair1/SCHED/phy_procedures_lte_ue.c | 16 +++++---- openair1/SIMULATION/LTE_PHY/dlsim.c | 48 +++++++++++++++---------- 5 files changed, 68 insertions(+), 34 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c index f1bf0da14f..a01b31ee90 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c @@ -872,7 +872,8 @@ int generate_eNB_dlsch_params_from_dci(int frame, uint16_t si_rnti, uint16_t ra_rnti, uint16_t p_rnti, - uint16_t DL_pmi_single) + uint16_t DL_pmi_single, + uint8_t beamforming_mode) { uint8_t harq_pid = UINT8_MAX; @@ -1244,7 +1245,13 @@ int generate_eNB_dlsch_params_from_dci(int frame, dlsch0_harq->Nl = 1; // dlsch[0]->layer_index = 0; - dlsch0_harq->mimo_mode = (frame_parms->mode1_flag == 1) ? SISO : ALAMOUTI; + if (beamforming_mode == 0) + dlsch0_harq->mimo_mode = (frame_parms->mode1_flag == 1) ? SISO : ALAMOUTI; + else if (beamforming_mode == 7) + dlsch0_harq->mimo_mode = TM7; + else + LOG_E(PHY,"Invalid beamforming mode %dL\n", beamforming_mode); + dlsch0_harq->dl_power_off = 1; /* if (dlsch[0]->harq_processes[harq_pid]->first_tx == 1) { @@ -3854,7 +3861,8 @@ int generate_ue_dlsch_params_from_dci(int frame, PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated, uint16_t si_rnti, uint16_t ra_rnti, - uint16_t p_rnti) + uint16_t p_rnti, + uint8_t beamforming_mode) { uint8_t harq_pid=0; @@ -4171,6 +4179,7 @@ int generate_ue_dlsch_params_from_dci(int frame, dlsch0_harq->rvidx = rv; dlsch0_harq->Nl = 1; // dlsch[0]->layer_index = 0; + dlsch0_harq->mimo_mode = frame_parms->mode1_flag == 1 ?SISO : ALAMOUTI; dlsch0_harq->dl_power_off = 1; //no power offset @@ -4521,7 +4530,13 @@ int generate_ue_dlsch_params_from_dci(int frame, dlsch[0]->rnti = rnti; - dlsch0_harq->mimo_mode = (frame_parms->mode1_flag == 1) ? SISO : ALAMOUTI; + if (beamforming_mode == 0) + dlsch0_harq->mimo_mode = (frame_parms->mode1_flag == 1) ? SISO : ALAMOUTI; + else if (beamforming_mode == 7) + dlsch0_harq->mimo_mode = TM7; + else + LOG_E(PHY,"Not supported beamforming mode %d\n",beamforming_mode); + dlsch0 = dlsch[0]; diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h index 35de21c7b8..7535a26470 100644 --- a/openair1/PHY/LTE_TRANSPORT/proto.h +++ b/openair1/PHY/LTE_TRANSPORT/proto.h @@ -1424,7 +1424,8 @@ int generate_ue_dlsch_params_from_dci(int frame, PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated, uint16_t si_rnti, uint16_t ra_rnti, - uint16_t p_rnti); + uint16_t p_rnti, + uint8_t beamforming_mode); int32_t generate_eNB_dlsch_params_from_dci(int frame, uint8_t subframe, @@ -1437,7 +1438,8 @@ int32_t generate_eNB_dlsch_params_from_dci(int frame, uint16_t si_rnti, uint16_t ra_rnti, uint16_t p_rnti, - uint16_t DL_pmi_single); + uint16_t DL_pmi_single, + uint8_t beamforming_mode); int32_t generate_eNB_ulsch_params_from_rar(uint8_t *rar_pdu, frame_t frame, diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index e03ffa2120..e9ee770545 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -1094,7 +1094,8 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e SI_RNTI, 0, P_RNTI, - phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single); + phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single, + 0); phy_vars_eNB->dlsch_eNB_SI->nCCE[subframe] = DCI_pdu->dci_alloc[i].firstCCE; @@ -1129,7 +1130,8 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e SI_RNTI, DCI_pdu->dci_alloc[i].rnti, P_RNTI, - phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single); + phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single, + 0); // mac_xface->macphy_exit("Transmitted RAR, exiting\n"); @@ -1187,7 +1189,8 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e SI_RNTI, 0, P_RNTI, - phy_vars_eNB->eNB_UE_stats[(uint8_t)UE_id].DL_pmi_single); + phy_vars_eNB->eNB_UE_stats[(uint8_t)UE_id].DL_pmi_single, + phy_vars_eNB->transmission_mode[(uint8_t)UE_id]>7?0:phy_vars_eNB->transmission_mode[(uint8_t)UE_id]); LOG_D(PHY,"[eNB %"PRIu8"][PDSCH %"PRIx16"/%"PRIu8"] Frame %d subframe %d: Generated dlsch params\n", phy_vars_eNB->Mod_id,DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->current_harq_pid,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe); diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 0ad6505149..d87a8479f5 100755 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -132,7 +132,7 @@ void dump_dlsch(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe,uint8_t phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols, phy_vars_ue->frame_rx, subframe, - phy_vars_ue->transmission_mode[eNB_id]); + phy_vars_ue->transmission_mode[eNB_id]); write_output("rxsigF0.m","rxsF0", phy_vars_ue->lte_ue_common_vars.rxdataF[0],2*nsymb*phy_vars_ue->lte_frame_parms.ofdm_symbol_size,2,1); write_output("rxsigF0_ext.m","rxsF0_ext", phy_vars_ue->lte_ue_pdsch_vars[0]->rxdataF_ext[0],2*nsymb*phy_vars_ue->lte_frame_parms.ofdm_symbol_size,1,1); @@ -2143,7 +2143,8 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst phy_vars_ue->pdsch_config_dedicated, SI_RNTI, 0, - P_RNTI)==0)) { + P_RNTI, + phy_vars_ue->transmission_mode[eNB_id]>7?0:phy_vars_ue->transmission_mode[eNB_id])==0)) { #ifdef DIAG_PHY @@ -2211,7 +2212,8 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst phy_vars_ue->pdsch_config_dedicated, SI_RNTI, 0, - P_RNTI)==0) { + P_RNTI, + 0)==0) { phy_vars_ue->dlsch_SI_received[eNB_id]++; @@ -2255,7 +2257,8 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst phy_vars_ue->pdsch_config_dedicated, SI_RNTI, phy_vars_ue->prach_resources[eNB_id]->ra_RNTI, - P_RNTI)==0) { + P_RNTI, + 0)==0) { phy_vars_ue->dlsch_ra_received[eNB_id]++; @@ -2790,7 +2793,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols, frame_rx, subframe_prev, - phy_vars_ue->transmission_mode[eNB_id]); + 0); #ifdef DEBUG_PHY_PROC LOG_D(PHY,"Decoding DLSCH_SI : rb_alloc %x : nb_rb %d G %d TBS %d, num_pdcch_sym %d\n",phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[0], @@ -2853,8 +2856,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[2], phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[3]); #endif - - // dump_dlsch_SI(phy_vars_ue,eNB_id,subframe_prev); + // dump_dlsch_SI(phy_vars_ue,eNB_id,subframe_prev); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT); stop_meas(&phy_vars_ue->phy_proc_rx); return(-1); diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 19a0437bdf..6e78ad1a56 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -1149,10 +1149,11 @@ int main(int argc, char **argv) SI_RNTI, 0, P_RNTI, - PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single); + PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single, + transmission_mode<7?0:transmission_mode); - if (transmission_mode == 7) - PHY_vars_eNB->dlsch_eNB[0][0]->harq_processes[0]->mimo_mode = TM7; //Xiwen: to check about harq_pid + /*if (transmission_mode == 7) + PHY_vars_eNB->dlsch_eNB[0][0]->harq_processes[0]->mimo_mode = TM7; //Xiwen: to check about harq_pid*/ num_dci++; num_ue_spec_dci++; @@ -1292,7 +1293,8 @@ int main(int argc, char **argv) SI_RNTI, 0, P_RNTI, - PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single); + PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single, + 0); num_common_dci++; num_dci++; @@ -1459,7 +1461,8 @@ int main(int argc, char **argv) SI_RNTI, 0, P_RNTI, - PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single); + PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single, + 0); num_dci++; num_ue_spec_dci++; @@ -1599,7 +1602,8 @@ int main(int argc, char **argv) SI_RNTI, 0, P_RNTI, - PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single); + PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single, + 0); num_common_dci++; num_dci++; @@ -1767,7 +1771,8 @@ int main(int argc, char **argv) SI_RNTI, 0, P_RNTI, - PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single); + PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single, + 0); num_dci++; num_ue_spec_dci++; @@ -1907,7 +1912,8 @@ int main(int argc, char **argv) SI_RNTI, 0, P_RNTI, - PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single); + PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single, + 0); num_common_dci++; num_dci++; @@ -1936,7 +1942,8 @@ int main(int argc, char **argv) SI_RNTI, 0, P_RNTI, - PHY_vars_eNB->eNB_UE_stats[k].DL_pmi_single); + PHY_vars_eNB->eNB_UE_stats[k].DL_pmi_single, + 0); dump_dci(&PHY_vars_eNB->lte_frame_parms,&dci_alloc[num_dci]); num_ue_spec_dci++; @@ -3226,7 +3233,8 @@ PMI_FEEDBACK: PHY_vars_UE->pdsch_config_dedicated, SI_RNTI, 0, - P_RNTI)==0)) { + P_RNTI==0, + transmission_mode<7?0:transmission_mode))) { //dump_dci(&PHY_vars_UE->lte_frame_parms,&dci_alloc_rx[i]); coded_bits_per_codeword = get_G(&PHY_vars_eNB->lte_frame_parms, PHY_vars_UE->dlsch_ue[0][0]->harq_processes[PHY_vars_UE->dlsch_ue[0][0]->current_harq_pid]->nb_rb, @@ -3237,8 +3245,8 @@ PMI_FEEDBACK: 0, subframe, (transmission_mode<7?0:transmission_mode)); - if (transmission_mode==7 && common_flag==0) - PHY_vars_UE->dlsch_ue[0][0]->harq_processes[0]->mimo_mode = TM7; + /*if (transmission_mode==7 && common_flag==0) + PHY_vars_UE->dlsch_ue[0][0]->harq_processes[0]->mimo_mode = TM7; */ /* rate = (double)dlsch_tbs25[get_I_TBS(PHY_vars_UE->dlsch_ue[0][0]->harq_processes[PHY_vars_UE->dlsch_ue[0][0]->current_harq_pid]->mcs)][PHY_vars_UE->dlsch_ue[0][0]->nb_rb-1]/(coded_bits_per_codeword); @@ -3289,9 +3297,10 @@ PMI_FEEDBACK: PHY_vars_UE->pdsch_config_dedicated, SI_RNTI, 0, - P_RNTI); - if(transmission_mode==7 && common_flag==0) - PHY_vars_UE->dlsch_ue[0][0]->harq_processes[0]->mimo_mode = TM7; + P_RNTI, + transmission_mode<7?0:transmission_mode); + /*if(transmission_mode==7 && common_flag==0) + PHY_vars_UE->dlsch_ue[0][0]->harq_processes[0]->mimo_mode = TM7;*/ break; case 3: @@ -3306,7 +3315,8 @@ PMI_FEEDBACK: PHY_vars_UE->pdsch_config_dedicated, SI_RNTI, 0, - P_RNTI); + P_RNTI, + 0); // printf("Rate: TM3 (after) round %d (%d) first_tx %d\n",round,PHY_vars_UE->dlsch_ue[0][0]->harq_processes[0]->round,PHY_vars_UE->dlsch_ue[0][0]->harq_processes[0]->first_tx); break; @@ -3321,7 +3331,8 @@ PMI_FEEDBACK: PHY_vars_UE->pdsch_config_dedicated, SI_RNTI, 0, - P_RNTI); + P_RNTI, + 0); break; case 5: @@ -3336,7 +3347,8 @@ PMI_FEEDBACK: PHY_vars_UE->pdsch_config_dedicated, SI_RNTI, 0, - P_RNTI); + P_RNTI, + 0); break; } -- 2.26.2