From e76c2139f609154f3d40aae9b1dac64bc1d0ed4a Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger <florian.kaltenberger@eurecom.fr> Date: Fri, 20 Sep 2013 08:25:00 +0000 Subject: [PATCH] adding PERFECT_CE and csv file output to pdcchsim git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4159 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- openair1/SIMULATION/LTE_PHY/pdcchsim.c | 70 ++++++++++++++++++++++---- 1 file changed, 59 insertions(+), 11 deletions(-) diff --git a/openair1/SIMULATION/LTE_PHY/pdcchsim.c b/openair1/SIMULATION/LTE_PHY/pdcchsim.c index dcdcfb1d05..1f5f975a44 100644 --- a/openair1/SIMULATION/LTE_PHY/pdcchsim.c +++ b/openair1/SIMULATION/LTE_PHY/pdcchsim.c @@ -426,9 +426,10 @@ DCI_PDU *get_dci(LTE_DL_FRAME_PARMS *lte_frame_parms,u8 log2L, u8 log2Lcommon, u break; } } + /* // add common dci DCI_pdu.dci_alloc[0].dci_length = BCCH_pdu_size_bits; - DCI_pdu.dci_alloc[0].L = 2; + DCI_pdu.dci_alloc[0].L = log2Lcommon; DCI_pdu.dci_alloc[0].rnti = SI_RNTI; DCI_pdu.dci_alloc[0].format = format1A; DCI_pdu.dci_alloc[0].ra_flag = 0; @@ -437,19 +438,20 @@ DCI_PDU *get_dci(LTE_DL_FRAME_PARMS *lte_frame_parms,u8 log2L, u8 log2Lcommon, u // add ue specific dci DCI_pdu.dci_alloc[1].dci_length = dci_length; - DCI_pdu.dci_alloc[1].L = 1; + DCI_pdu.dci_alloc[1].L = log2L; DCI_pdu.dci_alloc[1].rnti = rnti; DCI_pdu.dci_alloc[1].format = format1; DCI_pdu.dci_alloc[1].ra_flag = 0; memcpy((void*)&DCI_pdu.dci_alloc[1].dci_pdu[0], &DLSCH_alloc_pdu[0], dci_length_bytes); DCI_pdu.Num_ue_spec_dci++; + */ - DCI_pdu.dci_alloc[2].dci_length = UL_pdu_size_bits; - DCI_pdu.dci_alloc[2].L = 1; - DCI_pdu.dci_alloc[2].rnti = rnti; - DCI_pdu.dci_alloc[2].format = format0; - DCI_pdu.dci_alloc[2].ra_flag = 0; - memcpy((void*)&DCI_pdu.dci_alloc[2].dci_pdu[0], &UL_alloc_pdu[0], UL_pdu_size_bytes); + DCI_pdu.dci_alloc[0].dci_length = UL_pdu_size_bits; + DCI_pdu.dci_alloc[0].L = log2L; + DCI_pdu.dci_alloc[0].rnti = rnti; + DCI_pdu.dci_alloc[0].format = format0; + DCI_pdu.dci_alloc[0].ra_flag = 0; + memcpy((void*)&DCI_pdu.dci_alloc[0].dci_pdu[0], &UL_alloc_pdu[0], UL_pdu_size_bytes); DCI_pdu.Num_ue_spec_dci++; DCI_pdu.nCCE = 0; @@ -518,6 +520,10 @@ int main(int argc, char **argv) { u8 num_phich_interf = 0; lte_frame_type_t frame_type=TDD; +#ifdef PERFECT_CE + int k, aarx; +#endif + number_of_cards = 1; openair_daq_vars.rx_rf_mode = 1; @@ -739,7 +745,7 @@ int main(int argc, char **argv) { if (n_frames==1) snr1 = snr0+.1; else - snr1 = snr0+5.0; + snr1 = snr0+8.0; printf("SNR0 %f, SNR1 %f\n",snr0,snr1); @@ -775,7 +781,6 @@ int main(int argc, char **argv) { subframe,NUMBER_OF_OFDM_CARRIERS, PHY_vars_eNB->lte_frame_parms.Ncp,PHY_vars_eNB->lte_frame_parms.samples_per_tti,nsymb); - msg("[SIM] Using SCM/101\n"); eNB2UE = new_channel_desc_scm(PHY_vars_eNB->lte_frame_parms.nb_antennas_tx_eNB, PHY_vars_UE->lte_frame_parms.nb_antennas_rx, channel_model, @@ -836,7 +841,7 @@ int main(int argc, char **argv) { //printf("nCCE_max %d\n",nCCE_max); //printf("num_phich interferers %d\n",num_phich_interf); - for (SNR=snr0;SNR<snr1;SNR+=1) { + for (SNR=snr0;SNR<snr1;SNR+=0.2) { n_errors_common = 0; @@ -929,7 +934,14 @@ int main(int argc, char **argv) { &PHY_vars_eNB->lte_frame_parms, PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id], subframe); + + if (n_frames==1) + printf("num_pdcch_symbols at TX %d\n",num_pdcch_symbols); + if (is_phich_subframe(&PHY_vars_eNB->lte_frame_parms,subframe)) { + if (n_frames==1) + printf("generating PHICH\n"); + harq_pid = phich_subframe_to_harq_pid(&PHY_vars_eNB->lte_frame_parms, PHY_vars_eNB->frame, subframe); phich_ACK = taus()&1; @@ -1114,6 +1126,42 @@ int main(int argc, char **argv) { 0, 0); +#ifdef PERFECT_CE + if (awgn_flag==0) { + // fill in perfect channel estimates + freq_channel(eNB2UE,PHY_vars_UE->lte_frame_parms.N_RB_DL,12*PHY_vars_UE->lte_frame_parms.N_RB_DL + 1); + //write_output("channel.m","ch",desc1->ch[0],desc1->channel_length,1,8); + //write_output("channelF.m","chF",desc1->chF[0],nb_samples,1,8); + for(k=0;k<NUMBER_OF_eNB_MAX;k++) { + for(aa=0;aa<frame_parms->nb_antennas_tx;aa++) + { + for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++) + { + for (i=0;i<frame_parms->N_RB_DL*12;i++) + { + ((s16 *) PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[k][(aa<<1)+aarx])[2*i+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(s16)(eNB2UE->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP); + ((s16 *) PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[k][(aa<<1)+aarx])[2*i+1+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(s16)(eNB2UE->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP); + } + } + } + } + } + else { + for(aa=0;aa<frame_parms->nb_antennas_tx;aa++) + { + for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++) + { + for (i=0;i<frame_parms->N_RB_DL*12;i++) + { + ((s16 *) PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP); + ((s16 *) PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+1+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0/2; + } + } + } + } +#endif + + if (l==((PHY_vars_eNB->lte_frame_parms.Ncp==0)?4:3)) { // write_output("H00.m","h00",&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0][0][0]),((frame_parms->Ncp==0)?7:6)*(PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size),1,1); -- GitLab