diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c index 96ccac848b5379e0cc5eee62fa40ce5781bec4d0..5d86bbd92a69ff618b40a6cb3d0f52a282de5e07 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c @@ -199,7 +199,7 @@ void ue_rrc_measurements(PHY_VARS_UE *ue, rxF_sss = (int16_t *)&ue->common_vars.rxdataF[aarx][(5*ue->frame_parms.ofdm_symbol_size)]; rxF_pss = (int16_t *)&ue->common_vars.rxdataF[aarx][(6*ue->frame_parms.ofdm_symbol_size)]; - + //-ve spectrum from SSS // printf("slot %d: SSS DTX: %d,%d, non-DTX %d,%d\n",slot,rxF_pss[-72],rxF_pss[-71],rxF_pss[-36],rxF_pss[-35]); @@ -249,7 +249,7 @@ void ue_rrc_measurements(PHY_VARS_UE *ue, // note this is a dummy pointer, the pss is not really there! // in FDD the pss is in the symbol after the sss, but not in TDD rxF_pss = (int16_t *)&ue->common_vars.rxdataF[aarx][(7*ue->frame_parms.ofdm_symbol_size)]; - + //-ve spectrum from SSS // ue->measurements.n0_power[aarx] = (((int32_t)rxF_pss[-72]*rxF_pss[-72])+((int32_t)rxF_pss[-71]*rxF_pss[-71])); ue->measurements.n0_power[aarx] = (((int32_t)rxF_pss[-70]*rxF_pss[-70])+((int32_t)rxF_pss[-69]*rxF_pss[-69])); @@ -262,14 +262,14 @@ void ue_rrc_measurements(PHY_VARS_UE *ue, ue->measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+68]*rxF_sss[2+68])+((int32_t)rxF_sss[2+67]*rxF_sss[2+67])); ue->measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+66]*rxF_sss[2+66])+((int32_t)rxF_sss[2+65]*rxF_sss[2+65])); // ue->measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+64]*rxF_sss[2+64])+((int32_t)rxF_sss[2+63]*rxF_sss[2+63])); - + ue->measurements.n0_power_dB[aarx] = (unsigned short) dB_fixed(ue->measurements.n0_power[aarx]/(6)); - ue->measurements.n0_power_tot += ue->measurements.n0_power[aarx]; - } + ue->measurements.n0_power_tot += ue->measurements.n0_power[aarx]; + } ue->measurements.n0_power_tot_dB = (unsigned short) dB_fixed(ue->measurements.n0_power_tot/(6*aarx)); ue->measurements.n0_power_tot_dBm = ue->measurements.n0_power_tot_dB - ue->rx_total_gain_dB - dB_fixed(ue->frame_parms.ofdm_symbol_size); - - + + } } } @@ -312,7 +312,7 @@ void ue_rrc_measurements(PHY_VARS_UE *ue, // if ((ue->frame_rx&0x3ff) == 0) // printf("rb %d, off %d : %d\n",rb,off,((rxF[off]*rxF[off])+(rxF[off+1]*rxF[off+1]))); - + off+=12; if (off>=(ue->frame_parms.ofdm_symbol_size<<1)) @@ -423,10 +423,10 @@ void lte_ue_measurements(PHY_VARS_UE *ue, int nb_subbands,subband_size,last_subband_size; int N_RB_DL = frame_parms->N_RB_DL; ue->measurements.nb_antennas_rx = frame_parms->nb_antennas_rx; - + if (ue->transmission_mode[eNB_id]!=4) ue->measurements.rank[eNB_id] = 0; - else + else ue->measurements.rank[eNB_id] = 1; // printf ("tx mode %d\n", ue->transmission_mode[eNB_id]); // printf ("rank %d\n", ue->PHY_measurements.rank[eNB_id]); @@ -597,7 +597,7 @@ void lte_ue_measurements(PHY_VARS_UE *ue, // pmi #if defined(__x86_64__) || defined(__i386__) - + pmi128_re = _mm_xor_si128(pmi128_re,pmi128_re); pmi128_im = _mm_xor_si128(pmi128_im,pmi128_im); #elif defined(__arm__) @@ -613,8 +613,8 @@ void lte_ue_measurements(PHY_VARS_UE *ue, limit = last_subband_size>>2; for (i=0; i<limit; i++) { - -#if defined(__x86_64__) || defined(__i386__) + +#if defined(__x86_64__) || defined(__i386__) mmtmpPMI0 = _mm_xor_si128(mmtmpPMI0,mmtmpPMI0); mmtmpPMI1 = _mm_xor_si128(mmtmpPMI1,mmtmpPMI1); @@ -638,10 +638,10 @@ void lte_ue_measurements(PHY_VARS_UE *ue, // print_ints(" pmi128_re 0",&pmi128_re); pmi128_im = _mm_add_epi32(pmi128_im,mmtmpPMI1); // print_ints(" pmi128_im 0 ",&pmi128_im); - + /* mmtmpPMI0 = _mm_xor_si128(mmtmpPMI0,mmtmpPMI0); mmtmpPMI1 = _mm_xor_si128(mmtmpPMI1,mmtmpPMI1); - + mmtmpPMI0 = _mm_madd_epi16(dl_ch0_128[1],dl_ch1_128[1]); // print_ints("re",&mmtmpPMI0); mmtmpPMI1 = _mm_shufflelo_epi16(dl_ch1_128[1],_MM_SHUFFLE(2,3,0,1)); @@ -657,7 +657,7 @@ void lte_ue_measurements(PHY_VARS_UE *ue, // print_ints(" pmi128_re 1",&pmi128_re); pmi128_im = _mm_add_epi32(pmi128_im,mmtmpPMI1); //print_ints(" pmi128_im 1 ",&pmi128_im);*/ - + #elif defined(__arm__) mmtmpPMI0 = vmull_s16(((int16x4_t*)dl_ch0_128)[0], ((int16x4_t*)dl_ch1_128)[0]); @@ -719,7 +719,7 @@ void lte_ue_measurements(PHY_VARS_UE *ue, } } - ue->measurements.rank[eNB_id] = 0; + //ue->measurements.rank[eNB_id] = 0; for (i=0; i<nb_subbands; i++) { ue->measurements.selected_rx_antennas[eNB_id][i] = 0; diff --git a/openair1/SCHED/defs.h b/openair1/SCHED/defs.h index df8652e3dc8b20ed0d01eafedaa665c19bfc158a..11856398f488ea27abff43e5ae800d3f51f6820f 100644 --- a/openair1/SCHED/defs.h +++ b/openair1/SCHED/defs.h @@ -199,7 +199,7 @@ void phy_procedures_eNB_S_TX(PHY_VARS_eNB *phy_vars_eNB,relaying_type_t r_type); */ void phy_procedures_eNB_S_RX(PHY_VARS_eNB *phy_vars_eNB,eNB_rxtx_proc_t *proc,relaying_type_t r_type); -/*! \brief Scheduling for eNB PRACH RX procedures +/*! \brief Scheduling for eNB PRACH RX procedures @param phy_vars_eNB Pointer to eNB variables on which to act @param proc Pointer to RXn-TXnp4 proc information */ @@ -477,7 +477,7 @@ int get_ue_active_harq_pid(uint8_t Mod_id,uint8_t CC_id,uint16_t rnti,int frame, void dump_dlsch(PHY_VARS_UE *phy_vars_ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe,uint8_t harq_pid); void dump_dlsch_SI(PHY_VARS_UE *phy_vars_ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe); void dump_dlsch_ra(PHY_VARS_UE *phy_vars_ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe); -void dump_dlsch2(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint16_t coded_bits_per_codeword,int round); +void dump_dlsch2(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint16_t coded_bits_per_codeword,int round, unsigned char harq_pid); /*@}*/ diff --git a/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c b/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c index 5375175fb20e610c8127e622cd9071e607fcc11a..a5baa6a8a757dee0027f4d5ba2362e23263b85a9 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c @@ -172,10 +172,10 @@ int main(int argc, char **argv) unsigned char *input_buffer0[2],*input_buffer1[2]; unsigned short input_buffer_length0,input_buffer_length1; - /* A variable "ret" is a nuumber of turbo iterations, that are performed in the turbo-decoder for each CW. + /* A variable "ret" is a nuumber of turbo iterations, that are performed in the turbo-decoder for each CW. The decoder checks CRC, and if CRC test fails, it increments "ret". Ret is between 1 and 4, where 4 is for - the max number of turbo iterations. If the CRC is passed, ret is equal to a current iteration. - This is done separately for each CW inside decoding process. + the max number of turbo iterations. If the CRC is passed, ret is equal to a current iteration. + This is done separately for each CW inside decoding process. Again: this is not a HARQ retransmission!*/ unsigned int ret[2]; unsigned int coded_bits_per_codeword[2],nsymb,dci_cnt,tbs[2]; @@ -353,7 +353,7 @@ int main(int argc, char **argv) common_flag = 1; TPC = atoi(optarg); break; - + case 'E': threequarter_fs=1; break; @@ -424,7 +424,7 @@ int main(int argc, char **argv) case 'w': snr_int = atof(optarg); break; - + case 'N': n_ch_rlz= atof(optarg); break; @@ -452,10 +452,10 @@ int main(int argc, char **argv) case 'E': channel_model=EPA; break; - case 'F': + case 'F': channel_model=EVA; break; - case 'G': + case 'G': channel_model=ETU; break; case 'H': @@ -531,7 +531,7 @@ int main(int argc, char **argv) exit(-1); } break; - + case 'R': num_rounds=atoi(optarg); break; @@ -540,7 +540,7 @@ int main(int argc, char **argv) break; case 'T': n_rnti=atoi(optarg); - break; + break; case 'u': rx_type = (RX_type_t) atoi(optarg); if (rx_type<rx_standard || rx_type>rx_SIC_dual_stream) { @@ -569,7 +569,7 @@ int main(int argc, char **argv) break; case 'V': interf_unaw_shift0=atoi(optarg); - break; + break; case 'W': interf_unaw_shift1=atoi(optarg); break; @@ -605,10 +605,10 @@ int main(int argc, char **argv) printf("-u Receiver type: 0=standard, 1 = single stream IC (for TM3,4,5,6), 2 = dual stream IC (for TM3,4), 3 = SIC (for TM3,4) \n"); exit(1); break; - + } } - + if (common_flag == 0) { switch (N_RB_DL) { case 6: @@ -633,7 +633,7 @@ int main(int argc, char **argv) } else NB_RB = 4; - NB_RB=conv_nprb(0,DLSCH_RB_ALLOC,N_RB_DL); + NB_RB=conv_nprb(0,DLSCH_RB_ALLOC,N_RB_DL); if ((transmission_mode > 1) && (n_tx != 2)) { @@ -668,12 +668,12 @@ int main(int argc, char **argv) */ } - if (transmission_mode==5) { + if (transmission_mode==5) { n_users = 2; eNB_id_i = UE->n_connected_eNB; //eNB_id_i=1; } - else + else eNB_id_i = eNB_id; lte_param_init(n_tx, @@ -727,7 +727,7 @@ int main(int argc, char **argv) SCM_A, SCM_B, SCM_C, SCM_D, EPA, EVA, ETU, Rayleigh8, Rayleigh1, Rayleigh1_corr, Rayleigh1_anticorr, Rice1, Rice8, Rayleigh1_orthogonal, Rayleigh1_orth_eff_ch_TM4_prec_real, Rayleigh1_orth_eff_ch_TM4_prec_imag, Rayleigh8_orth_eff_ch_TM4_prec_real, Rayleigh8_orth_eff_ch_TM4_prec_imag, TS_SHIFT); if(transmission_mode==5) sprintf(bler_fname,"bler_tx%d_rec%d_chan%d_nrx%d_mcs%d_mcsi%d_u%d_imod%d.csv",transmission_mode,rx_type,channel_model,n_rx,mcs1,mcs_i,rx_type,i_mod); - else if (abstx == 1) + else if (abstx == 1) if (perfect_ce==1) sprintf(bler_fname,"bler_tx%d_r%d_ch%d_%d_nrx%d_mcs%d_mcsi%d_ab_pce_sh%d_pnort_r45.csv",transmission_mode,rx_type,channel_model,n_frames, n_rx,mcs1, mcs2,interf_unaw_shift ); else @@ -737,7 +737,7 @@ int main(int argc, char **argv) sprintf(bler_fname,"bler_tx%d_r%d_ch%d_%d_nrx%d_mcs%d_mcsi%d_pce_sh%d_pnort_r45.csv",transmission_mode,rx_type,channel_model,n_frames, n_rx,mcs1, mcs2, interf_unaw_shift); else sprintf(bler_fname,"bler_tx%d_r%d_ch%d_%d_nrx%d_mcs%d_mcsi%d_sh%d_pnort_r45.csv",transmission_mode,rx_type,channel_model,n_frames,n_rx,mcs1, mcs2, interf_unaw_shift); - + bler_fd = fopen(bler_fname,"w"); if (bler_fd==NULL) { fprintf(stderr,"Cannot create file %s!\n",bler_fname); @@ -746,7 +746,7 @@ int main(int argc, char **argv) fprintf(bler_fd,"SNR; MCS1; MCS2; TBS1; TBS2; rate 0; rate 1; err0_st1; err0_st2 trials0; err1_st1; err1_st2; trials1; err2_st1; err2_st2; trials2; err3_st1; err3_st2; trials3; throug 0; throug 1; sum throug; dci_err\n"); if (test_perf != 0) { - + char hostname[1024]; hostname[1023] = '\0'; @@ -763,14 +763,14 @@ int main(int argc, char **argv) exit(-1); } } - + if(abstx){ // CSV file // add here second stream mcs - + if (transmission_mode == 5) sprintf(csv_fname,"dataout_tx%d_u2%d_mcs%d_chan%d_nsimus%d_R%d_abstr.m",transmission_mode,rx_type,mcs1,channel_model,n_frames,num_rounds); - - else + + else if (perfect_ce==1) sprintf(csv_fname,"dout_tx%d_r%d_mcs%d_mcsi%d_ch%d_ns%d_R%d_pce_sh%d_%d_pnort_r45.m",transmission_mode,rx_type,mcs1,mcs2,channel_model,n_frames,num_rounds, interf_unaw_shift, n_ch_rlz); else @@ -898,7 +898,7 @@ n(tikz_fname,"w"); UE->transmission_mode[eNB_id]=transmission_mode; if (UE->transmission_mode[eNB_id] !=4) UE->measurements.rank[eNB_id]=0; - else + else UE->measurements.rank[eNB_id]=1; // Fill in UL_alloc UL_alloc_pdu.type = 0; @@ -908,7 +908,7 @@ n(tikz_fname,"w"); UL_alloc_pdu.ndi = 1; UL_alloc_pdu.TPC = 0; UL_alloc_pdu.cqi_req = 1; - + CCCH_alloc_pdu.type = 0; CCCH_alloc_pdu.vrb_type = 0; CCCH_alloc_pdu.rballoc = CCCH_RB_ALLOC; @@ -968,7 +968,7 @@ n(tikz_fname,"w"); exit(-1); } - if ((transmission_mode == 3) || (transmission_mode==4) || (transmission_mode==8)) + if ((transmission_mode == 3) || (transmission_mode==4) || (transmission_mode==8)) Kmimo=2; else Kmimo=1; @@ -1054,9 +1054,9 @@ n(tikz_fname,"w"); case 1: case 2: if (common_flag == 0) { - + if (eNB->frame_parms.frame_type == TDD) { - + switch (eNB->frame_parms.N_RB_DL) { case 6: dci_length = sizeof_DCI1_1_5MHz_TDD_t; @@ -1066,7 +1066,7 @@ n(tikz_fname,"w"); ((DCI1_1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI1_1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI1_1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1_1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1_1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1_1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1_1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1078,7 +1078,7 @@ n(tikz_fname,"w"); ((DCI1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1090,7 +1090,7 @@ n(tikz_fname,"w"); ((DCI1_10MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI1_10MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI1_10MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1_10MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1_10MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1_10MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1_10MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1100,7 +1100,7 @@ n(tikz_fname,"w"); ((DCI1_20MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI1_20MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI1_20MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1_20MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1_20MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1_20MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1_20MHz_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; dci_length = sizeof_DCI1_20MHz_TDD_t; @@ -1117,7 +1117,7 @@ n(tikz_fname,"w"); ((DCI1_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = DLSCH_RB_ALLOC; ((DCI1_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI1_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1128,7 +1128,7 @@ n(tikz_fname,"w"); ((DCI1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = DLSCH_RB_ALLOC; ((DCI1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1139,7 +1139,7 @@ n(tikz_fname,"w"); ((DCI1_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = DLSCH_RB_ALLOC; ((DCI1_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI1_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1150,18 +1150,18 @@ n(tikz_fname,"w"); ((DCI1_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = DLSCH_RB_ALLOC; ((DCI1_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI1_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; - } + } } memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes); dci_alloc[num_dci].dci_length = dci_length; dci_alloc[num_dci].L = 1; dci_alloc[num_dci].rnti = n_rnti+k; dci_alloc[num_dci].format = format1; - dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]); + dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]); printf("Generating dlsch params for user %d\n",k); generate_eNB_dlsch_params_from_dci(0, @@ -1181,7 +1181,7 @@ n(tikz_fname,"w"); } else { //common flag =1 if (eNB->frame_parms.frame_type == TDD) { - + switch (eNB->frame_parms.N_RB_DL) { case 6: dci_length = sizeof_DCI1A_1_5MHz_TDD_1_6_t; @@ -1192,7 +1192,7 @@ n(tikz_fname,"w"); ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1205,7 +1205,7 @@ n(tikz_fname,"w"); ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1218,7 +1218,7 @@ n(tikz_fname,"w"); ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1229,7 +1229,7 @@ n(tikz_fname,"w"); ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; dci_length = sizeof_DCI1A_20MHz_TDD_1_6_t; @@ -1247,7 +1247,7 @@ n(tikz_fname,"w"); ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(eNB->frame_parms.N_RB_DL,0,9); ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1259,7 +1259,7 @@ n(tikz_fname,"w"); ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(eNB->frame_parms.N_RB_DL,0,9); ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1271,7 +1271,7 @@ n(tikz_fname,"w"); ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(eNB->frame_parms.N_RB_DL,0,9); ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1283,11 +1283,11 @@ n(tikz_fname,"w"); ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(eNB->frame_parms.N_RB_DL,0,9); ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; - } + } } memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes); dci_alloc[num_dci].dci_length = dci_length; @@ -1295,7 +1295,7 @@ n(tikz_fname,"w"); dci_alloc[num_dci].rnti = SI_RNTI; dci_alloc[num_dci].format = format1A; dci_alloc[num_dci].firstCCE = 0; - dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]); + dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]); printf("Generating dlsch params for user %d\n",k); generate_eNB_dlsch_params_from_dci(0, @@ -1310,19 +1310,19 @@ n(tikz_fname,"w"); 0, P_RNTI, eNB->UE_stats[0].DL_pmi_single); - + num_common_dci++; num_dci++; - + } break; case 3: //LARGE CDD if (common_flag == 0) { - + if (eNB->frame_parms.nb_antennas_tx == 2) {// here DCI does not contain any precoder information. matrix is fixed as identity, but dont forget aboy cycling if (eNB->frame_parms.frame_type == TDD) { - + switch (eNB->frame_parms.N_RB_DL) { case 6: dci_length = sizeof_DCI2A_1_5MHz_2A_TDD_t; @@ -1331,10 +1331,10 @@ n(tikz_fname,"w"); ((DCI2A_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI2A_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI2A_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI2A_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; + ((DCI2A_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; ((DCI2A_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi1 = 1; ((DCI2A_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv1 = 0; - ((DCI2A_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; + ((DCI2A_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; ((DCI2A_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1; ((DCI2A_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0; break; @@ -1346,10 +1346,10 @@ n(tikz_fname,"w"); ((DCI2A_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI2A_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI2A_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI2A_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; + ((DCI2A_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; ((DCI2A_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi1 = 1; ((DCI2A_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv1 = 0; - ((DCI2A_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; + ((DCI2A_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; ((DCI2A_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1; ((DCI2A_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0; break; @@ -1361,10 +1361,10 @@ n(tikz_fname,"w"); ((DCI2A_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI2A_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI2A_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI2A_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; + ((DCI2A_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; ((DCI2A_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi1 = 1; ((DCI2A_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv1 = 0; - ((DCI2A_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; + ((DCI2A_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; ((DCI2A_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1; ((DCI2A_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0; break; @@ -1374,10 +1374,10 @@ n(tikz_fname,"w"); ((DCI2A_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI2A_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI2A_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI2A_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; + ((DCI2A_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; ((DCI2A_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi1 = 1; ((DCI2A_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv1 = 0; - ((DCI2A_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; + ((DCI2A_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; ((DCI2A_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1; ((DCI2A_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0; dci_length = sizeof_DCI2A_20MHz_2A_TDD_t; @@ -1385,7 +1385,7 @@ n(tikz_fname,"w"); break; } } - + else { // fdd switch (eNB->frame_parms.N_RB_DL) { case 6: @@ -1394,10 +1394,10 @@ n(tikz_fname,"w"); ((DCI2A_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = DLSCH_RB_ALLOC; ((DCI2A_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI2A_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI2A_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; + ((DCI2A_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; ((DCI2A_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi1 = 1; ((DCI2A_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv1 = 0; - ((DCI2A_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; + ((DCI2A_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; ((DCI2A_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1; ((DCI2A_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0; break; @@ -1408,10 +1408,10 @@ n(tikz_fname,"w"); ((DCI2A_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = DLSCH_RB_ALLOC; ((DCI2A_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI2A_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI2A_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; + ((DCI2A_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; ((DCI2A_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi1 = 1; ((DCI2A_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv1 = 0; - ((DCI2A_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; + ((DCI2A_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; ((DCI2A_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1; ((DCI2A_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0; break; @@ -1422,10 +1422,10 @@ n(tikz_fname,"w"); ((DCI2A_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = DLSCH_RB_ALLOC; ((DCI2A_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI2A_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI2A_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; + ((DCI2A_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; ((DCI2A_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi1 = 1; ((DCI2A_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv1 = 0; - ((DCI2A_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; + ((DCI2A_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; ((DCI2A_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1; ((DCI2A_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0; break; @@ -1436,27 +1436,27 @@ n(tikz_fname,"w"); ((DCI2A_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = DLSCH_RB_ALLOC; ((DCI2A_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI2A_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI2A_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; + ((DCI2A_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; ((DCI2A_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi1 = 1; ((DCI2A_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv1 = 0; - ((DCI2A_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; + ((DCI2A_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; ((DCI2A_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1; ((DCI2A_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0; break; - } + } } } else if (eNB->frame_parms.nb_antennas_tx == 4) { //4 antenna, needs diff precoding codebook index depeneding on layers } - + memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes); dci_alloc[num_dci].dci_length = dci_length; dci_alloc[num_dci].L = 1; dci_alloc[num_dci].rnti = n_rnti+k; dci_alloc[num_dci].format = format2A; - dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]); - + dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]); + printf("Generating dlsch params for user %d / format 2A (%d)\n",k,format2A); generate_eNB_dlsch_params_from_dci(0, subframe, @@ -1470,13 +1470,13 @@ n(tikz_fname,"w"); 0, P_RNTI, eNB->UE_stats[0].DL_pmi_single); - + num_dci++; num_ue_spec_dci++; } else { //commonn flag 1 if (eNB->frame_parms.frame_type == TDD) { //tdd - + switch (eNB->frame_parms.N_RB_DL) { case 6: dci_length = sizeof_DCI1A_1_5MHz_TDD_1_6_t; @@ -1487,7 +1487,7 @@ n(tikz_fname,"w"); ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1500,7 +1500,7 @@ n(tikz_fname,"w"); ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1513,7 +1513,7 @@ n(tikz_fname,"w"); ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1524,7 +1524,7 @@ n(tikz_fname,"w"); ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; dci_length = sizeof_DCI1A_20MHz_TDD_1_6_t; @@ -1542,7 +1542,7 @@ n(tikz_fname,"w"); ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(eNB->frame_parms.N_RB_DL,0,9); ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1554,7 +1554,7 @@ n(tikz_fname,"w"); ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(eNB->frame_parms.N_RB_DL,0,9); ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1566,7 +1566,7 @@ n(tikz_fname,"w"); ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(eNB->frame_parms.N_RB_DL,0,9); ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1578,11 +1578,11 @@ n(tikz_fname,"w"); ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(eNB->frame_parms.N_RB_DL,0,9); ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; - } + } } memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes); dci_alloc[num_dci].dci_length = dci_length; @@ -1590,8 +1590,8 @@ n(tikz_fname,"w"); dci_alloc[num_dci].rnti = SI_RNTI; dci_alloc[num_dci].format = format1A; dci_alloc[num_dci].firstCCE = 0; - dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]); - + dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]); + printf("Generating dlsch params for user %d\n",k); generate_eNB_dlsch_params_from_dci(0, subframe, @@ -1605,33 +1605,33 @@ n(tikz_fname,"w"); 0, P_RNTI, eNB->UE_stats[0].DL_pmi_single); - + num_common_dci++; num_dci++; - + } printf("Generated DCI format 2A (Transmission Mode 3)\n"); break; case 4: // !!! this dci format contains precoder information if (common_flag == 0) { - + if (eNB->frame_parms.nb_antennas_tx == 2) { if (eNB->frame_parms.frame_type == TDD) { - + switch (eNB->frame_parms.N_RB_DL) { case 6: - dci_length = sizeof_DCI2_1_5MHz_2A_TDD_t; + dci_length = sizeof_DCI2_1_5MHz_2A_TDD_t; dci_length_bytes = sizeof(DCI2_1_5MHz_2A_TDD_t); ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = DLSCH_RB_ALLOC; ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; + ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi1 = 1; ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv1 = 0; - ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; + ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1; ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0; ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap = 0; @@ -1642,13 +1642,13 @@ n(tikz_fname,"w"); dci_length_bytes = sizeof(DCI2_5MHz_2A_TDD_t); ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rah = 0; ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = DLSCH_RB_ALLOC; - ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; - ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; + ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; + ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; + ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi1 = 1; ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv1 = 0; - ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; + ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1; ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0; ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap = 0; @@ -1663,10 +1663,10 @@ n(tikz_fname,"w"); ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; + ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi1 = 1; ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv1 = 0; - ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; + ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1; ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0; ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap = 0; @@ -1679,10 +1679,10 @@ n(tikz_fname,"w"); ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; + ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi1 = 1; ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv1 = 0; - ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; + ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1; ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0; ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap = 0; @@ -1692,7 +1692,7 @@ n(tikz_fname,"w"); break; } } - + else { switch (eNB->frame_parms.N_RB_DL) { case 6: @@ -1701,10 +1701,10 @@ n(tikz_fname,"w"); ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = DLSCH_RB_ALLOC; ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; + ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi1 = 1; ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv1 = 0; - ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; + ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1; ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0; ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap = 0; @@ -1717,10 +1717,10 @@ n(tikz_fname,"w"); ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = DLSCH_RB_ALLOC; ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; + ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi1 = 1; ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv1 = 0; - ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; + ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1; ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0; ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap = 0; @@ -1733,10 +1733,10 @@ n(tikz_fname,"w"); ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = DLSCH_RB_ALLOC; ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; + ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi1 = 1; ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv1 = 0; - ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; + ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1; ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0; ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap = 0; @@ -1749,36 +1749,36 @@ n(tikz_fname,"w"); ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = DLSCH_RB_ALLOC; ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = 0; ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; + ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs1 = mcs1; ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi1 = 1; ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv1 = 0; - ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; + ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs2 = mcs2; ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1; ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0; ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap = 0; ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi = 2; break; - } + } } } else if (eNB->frame_parms.nb_antennas_tx == 4) { } - - printf ("TM4 with tpmi =%d\n", ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi); - if ((((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 2) || (((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 2)) { + + printf ("TM4 with tpmi =%d\n", ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi); + if ((((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 2) || (((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 2)) { eNB->UE_stats[0].DL_pmi_single = (unsigned short)(taus()&0xffff); - + } - + memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes); dci_alloc[num_dci].dci_length = dci_length; dci_alloc[num_dci].L = 1; dci_alloc[num_dci].rnti = n_rnti+k; dci_alloc[num_dci].format = format2; - dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]); - + dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]); + printf("Generating dlsch params for user %d\n",k); generate_eNB_dlsch_params_from_dci(0, subframe, @@ -1792,13 +1792,13 @@ n(tikz_fname,"w"); 0, P_RNTI, eNB->UE_stats[0].DL_pmi_single); - + num_dci++; num_ue_spec_dci++; } else { //common_flag==1 if (eNB->frame_parms.frame_type == TDD) { - + switch (eNB->frame_parms.N_RB_DL) { case 6: dci_length = sizeof_DCI1A_1_5MHz_TDD_1_6_t; @@ -1809,7 +1809,7 @@ n(tikz_fname,"w"); ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_1_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1822,7 +1822,7 @@ n(tikz_fname,"w"); ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1835,7 +1835,7 @@ n(tikz_fname,"w"); ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_10MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1846,7 +1846,7 @@ n(tikz_fname,"w"); ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->dai = 0; ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_20MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; dci_length = sizeof_DCI1A_20MHz_TDD_1_6_t; @@ -1864,7 +1864,7 @@ n(tikz_fname,"w"); ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(eNB->frame_parms.N_RB_DL,0,9); ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1876,7 +1876,7 @@ n(tikz_fname,"w"); ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(eNB->frame_parms.N_RB_DL,0,9); ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1888,7 +1888,7 @@ n(tikz_fname,"w"); ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(eNB->frame_parms.N_RB_DL,0,9); ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_10MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; @@ -1900,11 +1900,11 @@ n(tikz_fname,"w"); ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rballoc = computeRIV(eNB->frame_parms.N_RB_DL,0,9); ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->TPC = TPC; ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0; - ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; + ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1; ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->ndi = 1; ((DCI1A_20MHz_FDD_t *)&DLSCH_alloc_pdu_1[k])->rv = 0; break; - } + } } memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes); dci_alloc[num_dci].dci_length = dci_length; @@ -1912,7 +1912,7 @@ n(tikz_fname,"w"); dci_alloc[num_dci].rnti = SI_RNTI; dci_alloc[num_dci].format = format1A; dci_alloc[num_dci].firstCCE = 0; - dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]); + dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]); printf("Generating dlsch params for user %d\n",k); generate_eNB_dlsch_params_from_dci(0, @@ -1927,7 +1927,7 @@ n(tikz_fname,"w"); 0, P_RNTI, eNB->UE_stats[0].DL_pmi_single); - + num_common_dci++; num_dci++; @@ -1979,12 +1979,12 @@ n(tikz_fname,"w"); */ } - if (n_frames==1) + if (n_frames==1) printf("num_pdcch_symbols %d, numCCE %d => ",num_pdcch_symbols,numCCE); numCCE = get_nCCE(num_pdcch_symbols,&eNB->frame_parms,get_mi(&eNB->frame_parms,subframe)); - if (n_frames==1) + if (n_frames==1) printf("%d\n",numCCE); // apply RNTI-based nCCE allocation @@ -2062,7 +2062,7 @@ n(tikz_fname,"w"); errs[0][i]=0; errs[1][i]=0; /*Let see, how it will work, if */ - round_trials[i] = 0; + round_trials[i] = 0; // round_trials_1[i] = 0; } dci_errors=0; @@ -2118,7 +2118,7 @@ n(tikz_fname,"w"); initialize(&time_vector_rx_demod); struct list time_vector_rx_dec; initialize(&time_vector_rx_dec); - + for (trials = 0;trials<n_frames;trials++) { //printf("Trial %d\n",trials); fflush(stdout); @@ -2132,14 +2132,14 @@ n(tikz_fname,"w"); ret[0] = UE->dlsch[0][0]->max_turbo_iterations+1; ret[1] = UE->dlsch[0][0]->max_turbo_iterations+1; - /*This condition indicates, that the round_trials must go on, while CRC keeps failing at - least for one of the CW and round < num_rounds. This also means that round_trials is a unique + /*This condition indicates, that the round_trials must go on, while CRC keeps failing at + least for one of the CW and round < num_rounds. This also means that round_trials is a unique variable for both CW*/ while (((transmission_mode == 3 || transmission_mode == 4) && ((round < num_rounds) && ((ret[0] > UE->dlsch[0][0]->max_turbo_iterations) - || (ret[1] > UE->dlsch[0][0]->max_turbo_iterations)))) || + || (ret[1] > UE->dlsch[0][0]->max_turbo_iterations)))) || ((transmission_mode!=4 && transmission_mode != 3)&& ((round < num_rounds) && (ret[0] > UE->dlsch[0][0]->max_turbo_iterations)))) { - + //printf("Trial %d, round %d , ret[0] %d, ret[1] %d, round_trials %d\n",trials,round, ret[0], ret[1], round_trials[round]); //printf("round_trials %d round %d\n", round_trials[round], round); @@ -2147,11 +2147,11 @@ n(tikz_fname,"w"); //printf("round_trials %d round %d\n", round_trials[round], round); - if (transmission_mode == 4 || transmission_mode == 5 || transmission_mode == 6) + if (transmission_mode == 4 || transmission_mode == 5 || transmission_mode == 6) pmi_feedback=1; - else + else pmi_feedback=0; - + if (abstx) { if (trials==0 && round==0 && SNR==snr0) //generate a new channel hold_channel = 0; @@ -2162,25 +2162,25 @@ n(tikz_fname,"w"); hold_channel = 0;//(round==0) ? 0 : 1; PMI_FEEDBACK: - + //printf("Trial %d : Round %d, pmi_feedback %d \n",trials,round,pmi_feedback); for (aa=0; aa<eNB->frame_parms.nb_antennas_tx;aa++) { memset(&eNB->common_vars.txdataF[eNB_id][aa][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t)); } - + if (input_fd==NULL) { start_meas(&eNB->phy_proc_tx); // Simulate HARQ procedures!!! if (common_flag == 0) { - + if (round == 0) { // First round TB0_active = 1; - + eNB->dlsch[0][0]->harq_processes[0]->rvidx = round&3; if (eNB->frame_parms.frame_type == TDD) { - + switch (transmission_mode) { case 1: case 2: @@ -2240,7 +2240,7 @@ n(tikz_fname,"w"); } break; case 4: - switch (eNB->frame_parms.N_RB_DL) { + switch (eNB->frame_parms.N_RB_DL) { case 6: ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1; ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = 0; @@ -2270,8 +2270,8 @@ n(tikz_fname,"w"); memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_20MHz_2A_TDD_t)); break; } - break; - + break; + case 5: DLSCH_alloc_pdu2_1E[0].ndi = trials&1; DLSCH_alloc_pdu2_1E[0].rv = 0; @@ -2339,7 +2339,7 @@ n(tikz_fname,"w"); } break; case 4: - switch (eNB->frame_parms.N_RB_DL) { + switch (eNB->frame_parms.N_RB_DL) { case 6: ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1; ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = 0; @@ -2369,19 +2369,19 @@ n(tikz_fname,"w"); memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_20MHz_2A_FDD_t)); break; } - break; + break; case 5: DLSCH_alloc_pdu2_1E[0].ndi = trials&1; DLSCH_alloc_pdu2_1E[0].rv = 0; memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu2_1E[0],sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t)); break; } - + } } - else { + else { eNB->dlsch[0][0]->harq_processes[0]->rvidx = round&3; - + if (eNB->frame_parms.frame_type == TDD) { switch (transmission_mode) { case 1: @@ -2537,7 +2537,7 @@ n(tikz_fname,"w"); break; } break; - + case 5: DLSCH_alloc_pdu2_1E[0].ndi = trials&1; DLSCH_alloc_pdu2_1E[0].rv = round&3; @@ -2700,9 +2700,9 @@ n(tikz_fname,"w"); memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_20MHz_2A_FDD_t)); break; } - break; - - + break; + + case 5: DLSCH_alloc_pdu2_1E[0].ndi = trials&1; DLSCH_alloc_pdu2_1E[0].rv = round&3; @@ -2712,7 +2712,7 @@ n(tikz_fname,"w"); } } } - + num_pdcch_symbols_2 = generate_dci_top(num_ue_spec_dci, num_common_dci, dci_alloc, @@ -2745,7 +2745,7 @@ n(tikz_fname,"w"); #endif rate[cw] = (double)tbs[cw]/(double)coded_bits_per_codeword[cw]; - + if ((SNR==snr0) && (trials==0) && (round==0) && (pmi_feedback==0)) printf("User %d, cw %d: Rate = %f (%f bits/dim) (G %d, TBS %d, mod %d, pdcch_sym %d, ndi %d)\n", k,cw,rate[cw],rate[cw]*get_Qm(eNB->dlsch[k][cw]->harq_processes[0]->mcs), @@ -2759,27 +2759,27 @@ n(tikz_fname,"w"); if (DLSCH_alloc_pdu2_1E[0].tpmi == 5) { eNB->dlsch[0][0]->harq_processes[0]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,eNB->frame_parms.N_RB_DL); UE->dlsch[0][0]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL); - if (n_users>1) - eNB->dlsch[1][0]->harq_processes[0]->pmi_alloc = (eNB->dlsch[0][0]->harq_processes[0]->pmi_alloc ^ 0x1555); + if (n_users>1) + eNB->dlsch[1][0]->harq_processes[0]->pmi_alloc = (eNB->dlsch[0][0]->harq_processes[0]->pmi_alloc ^ 0x1555); /* if ((trials<10) && (round==0)) { printf("tx PMI UE0 %x (pmi_feedback %d)\n",pmi2hex_2Ar1(eNB->dlsch[0][0]->pmi_alloc),pmi_feedback); if (transmission_mode ==5) printf("tx PMI UE1 %x\n",pmi2hex_2Ar1(eNB->dlsch[1][0]->pmi_alloc)); } - */ + */ } - - + + if (transmission_mode==4 && ((((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 2) ||(((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 2))){ eNB->dlsch[0][0]->harq_processes[0]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,eNB->frame_parms.N_RB_DL); UE->dlsch[0][0]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL); } - - - start_meas(&eNB->dlsch_encoding_stats); + + + start_meas(&eNB->dlsch_encoding_stats); if (dlsch_encoding(((cw==0) ? input_buffer0[k] : input_buffer1[k]), &eNB->frame_parms, num_pdcch_symbols, @@ -2789,9 +2789,9 @@ n(tikz_fname,"w"); &eNB->dlsch_turbo_encoding_stats, &eNB->dlsch_interleaving_stats)<0) exit(-1); - - - + + + /* if (transmission_mode == 3) { if (dlsch_encoding(input_buffer1[k], @@ -2806,17 +2806,17 @@ n(tikz_fname,"w"); exit(-1); } */ - stop_meas(&eNB->dlsch_encoding_stats); + stop_meas(&eNB->dlsch_encoding_stats); - eNB->dlsch[k][cw]->rnti = (common_flag==0) ? n_rnti+k : SI_RNTI; - start_meas(&eNB->dlsch_scrambling_stats); + eNB->dlsch[k][cw]->rnti = (common_flag==0) ? n_rnti+k : SI_RNTI; + start_meas(&eNB->dlsch_scrambling_stats); dlsch_scrambling(&eNB->frame_parms, 0, eNB->dlsch[k][cw], coded_bits_per_codeword[cw], cw, subframe<<1); - stop_meas(&eNB->dlsch_scrambling_stats); + stop_meas(&eNB->dlsch_scrambling_stats); if (n_frames==1) { for (s=0;s<eNB->dlsch[k][cw]->harq_processes[0]->C;s++) { @@ -2824,16 +2824,16 @@ n(tikz_fname,"w"); Kr = eNB->dlsch[k][cw]->harq_processes[0]->Kminus; else Kr = eNB->dlsch[k][cw]->harq_processes[0]->Kplus; - + Kr_bytes = Kr>>3; - + // for (i=0;i<Kr_bytes;i++) // printf("cw%d %d : (%x)\n",cw,i,eNB->dlsch[k][cw]->harq_processes[0]->c[s][i]); } } } - - start_meas(&eNB->dlsch_modulation_stats); + + start_meas(&eNB->dlsch_modulation_stats); re_allocated = dlsch_modulation(eNB->common_vars.txdataF[eNB_id], AMP, subframe, @@ -2842,21 +2842,21 @@ n(tikz_fname,"w"); eNB->dlsch[k][0], eNB->dlsch[k][1] ); - stop_meas(&eNB->dlsch_modulation_stats); + stop_meas(&eNB->dlsch_modulation_stats); /* if (trials==0 && round==0) printf("RE count %d\n",re_allocated); */ } //n_users - + generate_pilots(eNB, eNB->common_vars.txdataF[eNB_id], AMP, LTE_NUMBER_OF_SUBFRAMES_PER_FRAME); - + start_meas(&eNB->ofdm_mod_stats); - + do_OFDM_mod_l(eNB->common_vars.txdataF[eNB_id], eNB->common_vars.txdata[eNB_id], (subframe*2), @@ -2866,10 +2866,10 @@ n(tikz_fname,"w"); eNB->common_vars.txdata[eNB_id], (subframe*2)+1, &eNB->frame_parms); - + stop_meas(&eNB->ofdm_mod_stats); - stop_meas(&eNB->phy_proc_tx); - + stop_meas(&eNB->phy_proc_tx); + do_OFDM_mod_l(eNB->common_vars.txdataF[eNB_id], eNB->common_vars.txdata[eNB_id], (subframe*2)+2, @@ -2888,7 +2888,7 @@ n(tikz_fname,"w"); eNB->frame_parms.samples_per_tti); } tx_lev_dB = (unsigned int) dB_fixed(tx_lev); - + if (n_frames==1) { printf("tx_lev = %d (%d dB)\n",tx_lev,tx_lev_dB); write_output("txsig0.m","txs0", &eNB->common_vars.txdata[eNB_id][0][subframe* eNB->frame_parms.samples_per_tti], @@ -2900,7 +2900,7 @@ n(tikz_fname,"w"); i=0; while (!feof(input_fd)) { fscanf(input_fd,"%s %s",input_val_str,input_val_str2); - + if ((i%4)==0) { ((short*)txdata[0])[i/2] = (short)((1<<15)*strtod(input_val_str,NULL)); ((short*)txdata[0])[(i/2)+1] = (short)((1<<15)*strtod(input_val_str2,NULL)); @@ -2919,7 +2919,7 @@ n(tikz_fname,"w"); tx_lev_dB = (unsigned int) dB_fixed(tx_lev); } */ - + // printf("Copying tx ..., nsymb %d (n_tx %d), awgn %d\n",nsymb,eNB->frame_parms.nb_antennas_tx,awgn_flag); for (i=0;i<2*frame_parms->samples_per_tti;i++) { for (aa=0;aa<eNB->frame_parms.nb_antennas_tx;aa++) { @@ -2938,7 +2938,7 @@ n(tikz_fname,"w"); //printf("r_im0 = %d\n",r_im[0][i]); //printf("r_re1 = %d\n",r_re[1][i]); //printf("r_im1 = %d\n",r_im[1][i]); - + } else { for (aarx=0;aarx<UE->frame_parms.nb_antennas_rx;aarx++) { @@ -2957,7 +2957,7 @@ n(tikz_fname,"w"); } // Multipath channel - if (awgn_flag == 0) { + if (awgn_flag == 0) { multipath_channel(eNB2UE[round],s_re,s_im,r_re,r_im, 2*frame_parms->samples_per_tti,hold_channel); // printf("amc: ****************** eNB2UE[%d]->n_rx = %d,dd %d\n",round,eNB2UE[round]->nb_rx,eNB2UE[round]->channel_offset); @@ -2973,7 +2973,7 @@ n(tikz_fname,"w"); // write_output("channelF.m","chF",eNB2UE[round]->chF[0],12*UE->frame_parms.N_RB_DL +1,1,8); } } - + // freq_channel(eNB2UE[0], NB_RB,12*NB_RB + 1); if(abstx){ if (trials==0 && round==0) { @@ -2981,7 +2981,7 @@ n(tikz_fname,"w"); freq_channel(eNB2UE[0], NB_RB,2*NB_RB + 1); // snr=pow(10.0,.1*SNR); fprintf(csv_fd,"%f,",SNR); - + for (u=0;u<2*NB_RB;u++){ for (aarx=0;aarx<eNB2UE[0]->nb_rx;aarx++) { for (aatx=0;aatx<eNB2UE[0]->nb_tx;aatx++) { @@ -2991,10 +2991,10 @@ n(tikz_fname,"w"); } } } - + if(num_rounds>1){ freq_channel(eNB2UE[1], NB_RB,2*NB_RB + 1); - + for (u=0;u<2*NB_RB;u++){ for (aarx=0;aarx<eNB2UE[1]->nb_rx;aarx++) { for (aatx=0;aatx<eNB2UE[1]->nb_tx;aatx++) { @@ -3005,7 +3005,7 @@ n(tikz_fname,"w"); } } freq_channel(eNB2UE[2], NB_RB,2*NB_RB + 1); - + for (u=0;u<2*NB_RB;u++){ for (aarx=0;aarx<eNB2UE[2]->nb_rx;aarx++) { for (aatx=0;aatx<eNB2UE[2]->nb_tx;aatx++) { @@ -3015,9 +3015,9 @@ n(tikz_fname,"w"); } } } - + freq_channel(eNB2UE[3], NB_RB,2*NB_RB + 1); - + for (u=0;u<2*NB_RB;u++){ for (aarx=0;aarx<eNB2UE[3]->nb_rx;aarx++) { for (aatx=0;aatx<eNB2UE[3]->nb_tx;aatx++) { @@ -3030,28 +3030,28 @@ n(tikz_fname,"w"); } } } - + //AWGN // This is the SNR on the PDSCH for OFDM symbols without pilots -> rho_A sigma2_dB = 10*log10((double)tx_lev) +10*log10((double)eNB->frame_parms.ofdm_symbol_size/(double)(NB_RB*12)) - SNR - get_pa_dB(eNB->pdsch_config_dedicated); sigma2 = pow(10,sigma2_dB/10); if (n_frames==1) printf("Sigma2 %f (sigma2_dB %f,%f,%f )\n",sigma2,sigma2_dB,10*log10((double)eNB->frame_parms.ofdm_symbol_size/(double)(NB_RB*12)),get_pa_dB(eNB->pdsch_config_dedicated)); - + for (i=0; i<2*frame_parms->samples_per_tti; i++) { for (aa=0;aa<eNB->frame_parms.nb_antennas_rx;aa++) { //printf("s_re[0][%d]=> %f , r_re[0][%d]=> %f\n",i,s_re[aa][i],i,r_re[aa][i]); - ((short*) UE->common_vars.rxdata[aa])[(2*subframe*UE->frame_parms.samples_per_tti)+2*i] = + ((short*) UE->common_vars.rxdata[aa])[(2*subframe*UE->frame_parms.samples_per_tti)+2*i] = (short) (r_re[aa][i] + sqrt(sigma2/2)*gaussdouble(0.0,1.0)); - ((short*) UE->common_vars.rxdata[aa])[(2*subframe*UE->frame_parms.samples_per_tti)+2*i+1] = + ((short*) UE->common_vars.rxdata[aa])[(2*subframe*UE->frame_parms.samples_per_tti)+2*i+1] = (short) (r_im[aa][i] + (iqim*r_re[aa][i]) + sqrt(sigma2/2)*gaussdouble(0.0,1.0)); } - } - + } + // lte_sync_time_init(eNB->frame_parms,common_vars); // lte_sync_time(common_vars->rxdata, eNB->frame_parms); // lte_sync_time_free(); - + /* // optional: read rx_frame from file if ((rx_frame_file = fopen("rx_frame.dat","r")) == NULL) @@ -3059,22 +3059,22 @@ n(tikz_fname,"w"); printf("Cannot open rx_frame.m data file\n"); exit(0); } - + result = fread((void *)PHY_vars->rx_vars[0].RX_DMA_BUFFER,4,FRAME_LENGTH_COMPLEX_SAMPLES,rx_frame_file); printf("Read %d bytes\n",result); result = fread((void *)PHY_vars->rx_vars[1].RX_DMA_BUFFER,4,FRAME_LENGTH_COMPLEX_SAMPLES,rx_frame_file); printf("Read %d bytes\n",result); - + fclose(rx_frame_file); */ - + if (n_frames==1) { printf("RX level in null symbol %d\n",dB_fixed(signal_energy(&UE->common_vars.rxdata[0][160+OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES],OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES/2))); printf("RX level in data symbol %d\n",dB_fixed(signal_energy(&UE->common_vars.rxdata[0][160+(2*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES)],OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES/2))); printf("rx_level Null symbol %f\n",10*log10(signal_energy_fp(r_re,r_im,1,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES/2,256+(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES)))); printf("rx_level data symbol %f\n",10*log10(signal_energy_fp(r_re,r_im,1,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES/2,256+(2*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES)))); } - + if (eNB->frame_parms.Ncp == 0) { // normal prefix pilot1 = 4; pilot2 = 7; @@ -3084,8 +3084,8 @@ n(tikz_fname,"w"); pilot1 = 3; pilot2 = 6; pilot3 = 9; - } - + } + start_meas(&UE->phy_proc_rx); // Inner receiver scheduling for 3 slots for (Ns=(2*subframe);Ns<((2*subframe)+3);Ns++) { @@ -3094,17 +3094,17 @@ n(tikz_fname,"w"); printf("Ns %d, l %d, l2 %d\n",Ns, l, l+(Ns%2)*pilot2); /* This function implements the OFDM front end processor (FEP). - + Parameters: frame_parms LTE DL Frame Parameters ue_common_vars LTE UE Common Vars l symbol within slot (0..6/7) Ns Slot number (0..19) sample_offset offset within rxdata (points to beginning of subframe) - no_prefix if 1 prefix is removed by HW - + no_prefix if 1 prefix is removed by HW + */ - + start_meas(&UE->ofdm_demod_stats); slot_fep(UE, l, @@ -3145,14 +3145,14 @@ n(tikz_fname,"w"); for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) { for (i=0; i<frame_parms->N_RB_DL*12; i++) { ((int16_t *) UE->common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP); - ((int16_t *) UE->common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0/2; + ((int16_t *) UE->common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0/2; } } } } } } - + if ((Ns==((2*subframe))) && (l==0)) { lte_ue_measurements(UE, subframe*UE->frame_parms.samples_per_tti, @@ -3217,7 +3217,7 @@ n(tikz_fname,"w"); eNB_id, subframe); printf("dci_cnt %d\n",dci_cnt); - + if (dci_cnt==0) { dlsch_active = 0; if (round==0) { @@ -3233,14 +3233,14 @@ n(tikz_fname,"w"); //round_trials[i]--; //round=5; } - + for (i=0;i<dci_cnt;i++) { //printf("Generating dlsch parameters for RNTI %x\n",dci_alloc_rx[i].rnti); if (round == 0) { UE->dlsch[0][0]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->first_tx=1; UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->first_tx=1; } - if ((dci_alloc_rx[i].rnti == n_rnti) && + if ((dci_alloc_rx[i].rnti == n_rnti) && (generate_ue_dlsch_params_from_dci(0, subframe, dci_alloc_rx[i].dci_pdu, @@ -3276,9 +3276,9 @@ n(tikz_fname,"w"); //round_trials[0]++; round=5; - if (n_frames==1) + if (n_frames==1) printf("DCI misdetection trial %d\n",trials); - + } // for (i=1;i<=round;i++) // round_trials[i]--; @@ -3324,7 +3324,7 @@ n(tikz_fname,"w"); break; case 4: generate_ue_dlsch_params_from_dci(0, - subframe, + subframe, &DLSCH_alloc_pdu_1[0], (common_flag==0)? C_RNTI : SI_RNTI, (common_flag==0)? format2 : format1A,//format1A only for a codeblock @@ -3368,7 +3368,7 @@ n(tikz_fname,"w"); start_meas(&UE->dlsch_llr_stats); - + for (m=UE->pdcch_vars[0]->num_pdcch_symbols; m<pilot2; m++) { if (rx_pdsch(UE, PDSCH, @@ -3386,8 +3386,8 @@ n(tikz_fname,"w"); } stop_meas(&UE->dlsch_llr_stats); } - - if ((Ns==(1+(2*subframe))) && (l==pilot1)){// process symbols (6 Extended Prefix),7,8,9 + + if ((Ns==(1+(2*subframe))) && (l==pilot1)){// process symbols (6 Extended Prefix),7,8,9 start_meas(&UE->dlsch_llr_stats); for (m=pilot2;m<pilot3; m++) { if (rx_pdsch(UE, @@ -3406,7 +3406,7 @@ n(tikz_fname,"w"); } stop_meas(&UE->dlsch_llr_stats); } - + if ((Ns==(2+(2*subframe))) && (l==0)) { // process symbols 10,11,(12,13 Normal Prefix) do deinterleaving for TTI start_meas(&UE->dlsch_llr_stats); for (m=pilot3; m<UE->frame_parms.symbols_per_tti; m++) { @@ -3441,15 +3441,15 @@ n(tikz_fname,"w"); } } } - + if (rx_type==rx_SIC_dual_stream){ cw_to_decode_interf=1; cw_to_decode_interf_free=1; } else { - cw_to_decode_interf=Kmimo; - } - + cw_to_decode_interf=Kmimo; + } + for (cw_non_sic=0; cw_non_sic<cw_to_decode_interf; cw_non_sic++){ UE->dlsch[0][cw_non_sic]->rnti = (common_flag==0) ? n_rnti: SI_RNTI; @@ -3463,16 +3463,16 @@ n(tikz_fname,"w"); UE->dlsch[0][cw_non_sic]->harq_processes[UE->dlsch[0][cw_non_sic]->current_harq_pid]->G = coded_bits_per_codeword[cw_non_sic]; UE->dlsch[0][cw_non_sic]->harq_processes[UE->dlsch[0][cw_non_sic]->current_harq_pid]->Qm = get_Qm(eNB->dlsch[0][cw_non_sic]->harq_processes[0]->mcs); - + if (n_frames==1) { printf("Kmimo=%d, cw=%d, G=%d, TBS=%d\n",Kmimo,cw_non_sic,coded_bits_per_codeword[cw_non_sic], UE->dlsch[0][cw_non_sic]->harq_processes[UE->dlsch[0][cw_non_sic]->current_harq_pid]->TBS); - + // calculate uncoded BER uncoded_ber_bit = (short*) malloc(sizeof(short)*coded_bits_per_codeword[cw_non_sic]); AssertFatal(uncoded_ber_bit, "uncoded_ber_bit==NULL"); - + sprintf(fname,"dlsch%d_rxF_r%d_cw%d_llr.m",eNB_id,round, cw_non_sic); sprintf(vname,"dl%d_r%d_cw%d_llr",eNB_id,round, cw_non_sic); write_output(fname,vname, UE->pdsch_vars[0]->llr[cw_non_sic],coded_bits_per_codeword[cw_non_sic],1,0); @@ -3482,28 +3482,28 @@ n(tikz_fname,"w"); uncoded_ber=0; printf("trials=%d\n", trials); - for (i=0;i<coded_bits_per_codeword[cw_non_sic];i++) + for (i=0;i<coded_bits_per_codeword[cw_non_sic];i++) if (eNB->dlsch[0][cw_non_sic]->harq_processes[0]->e[i] != (UE->pdsch_vars[0]->llr[cw_non_sic][i]<0)) { uncoded_ber_bit[i] = 1; uncoded_ber++; } else uncoded_ber_bit[i] = 0; - + uncoded_ber/=coded_bits_per_codeword[cw_non_sic]; avg_ber += uncoded_ber; sprintf(fname,"cw%d_uncoded_ber_bit.m", cw_non_sic); sprintf(vname,"uncoded_ber_bit_cw%d", cw_non_sic); write_output(fname, vname,uncoded_ber_bit,coded_bits_per_codeword[cw_non_sic],1,0); printf("cw %d, uncoded ber %f\n",cw_non_sic,uncoded_ber); - + free(uncoded_ber_bit); - uncoded_ber_bit = NULL; + uncoded_ber_bit = NULL; } - start_meas(&UE->dlsch_unscrambling_stats); + start_meas(&UE->dlsch_unscrambling_stats); dlsch_unscrambling(&UE->frame_parms, 0, UE->dlsch[0][cw_non_sic], @@ -3511,26 +3511,26 @@ n(tikz_fname,"w"); UE->pdsch_vars[eNB_id]->llr[cw_non_sic], cw_non_sic, subframe<<1); - stop_meas(&UE->dlsch_unscrambling_stats); + stop_meas(&UE->dlsch_unscrambling_stats); start_meas(&UE->dlsch_decoding_stats); ret[cw_non_sic] = dlsch_decoding(UE, - UE->pdsch_vars[eNB_id]->llr[cw_non_sic], + UE->pdsch_vars[eNB_id]->llr[cw_non_sic], &UE->frame_parms, UE->dlsch[0][cw_non_sic], UE->dlsch[0][cw_non_sic]->harq_processes[UE->dlsch[0][cw_non_sic]->current_harq_pid], subframe, UE->dlsch[0][cw_non_sic]->current_harq_pid, 1,llr8_flag); - stop_meas(&UE->dlsch_decoding_stats); - - + stop_meas(&UE->dlsch_decoding_stats); + + if (ret[cw_non_sic] <= UE->dlsch[0][cw_non_sic]->max_turbo_iterations ) { //If CRC for the first CW did not fail - if (cw_non_sic==0) { + if (cw_non_sic==0) { avg_iter[0] += ret[0]; iter_trials[0]++; } - + if (n_frames==2) { printf("cw non sic %d, round %d: No DLSCH errors found, uncoded ber %f\n",cw_non_sic,round,uncoded_ber); #ifdef PRINT_BYTES @@ -3539,9 +3539,9 @@ n(tikz_fname,"w"); Kr = UE->dlsch[0][cw_non_sic]->harq_processes[0]->Kminus; else Kr = UE->dlsch[0][cw_non_sic]->harq_processes[0]->Kplus; - + Kr_bytes = Kr>>3; - + printf("Decoded_output (Segment %d):\n",s); for (i=0;i<Kr_bytes;i++) printf("%d : %x (%x)\n",i,UE->dlsch[0][cw_non_sic]->harq_processes[0]->c[s][i], @@ -3549,10 +3549,10 @@ n(tikz_fname,"w"); } #endif } - + UE->total_TBS[eNB_id] = UE->total_TBS[eNB_id] + UE->dlsch[eNB_id][cw_non_sic]->harq_processes[UE->dlsch[eNB_id][cw_non_sic]->current_harq_pid]->TBS; - // If the receiver is NOT SIC, Here we are done with both CW, now only to calculate BLER + // If the receiver is NOT SIC, Here we are done with both CW, now only to calculate BLER //If the receiver IS SIC, we are done only with CW0, CW1 was only compensated by this moment (y1' obtained) if (UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]->mimo_mode == LARGE_CDD) { //try to decode second stream using SIC /* @@ -3568,15 +3568,15 @@ n(tikz_fname,"w"); dlsch0_eNB_harq->rvidx = dlsch0_ue_harq->rvidx; dlsch0_eNB_harq->Nl = dlsch0_ue_harq->Nl; dlsch0_eNB_harq->round = dlsch0_ue_harq->round; - + dlsch0_eNB_harq->TBS = dlsch0_ue_harq->TBS; dlsch0_eNB_harq->dl_power_off = dlsch0_ue_harq->dl_power_off; dlsch0_eNB_harq->status = dlsch0_ue_harq->status; - + UE->dlsch[eNB_id]->active = UE->dlsch[eNB_id][0]->active; UE->dlsch[eNB_id]->rnti = UE->dlsch[eNB_id][0]->rnti; UE->dlsch[eNB_id]->current_harq_pid = UE->dlsch[eNB_id][0]->current_harq_pid; - + dlsch_encoding(UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]->b, &UE->frame_parms, num_pdcch_symbols, @@ -3586,7 +3586,7 @@ n(tikz_fname,"w"); &UE->dlsch_turbo_encoding_stats, &UE->dlsch_interleaving_stats ); - + coded_bits_per_codeword = get_G(&UE->frame_parms, UE->dlsch[eNB_id]->harq_processes[UE->dlsch[eNB_id]->current_harq_pid]->nb_rb, UE->dlsch[eNB_id]->harq_processes[UE->dlsch[eNB_id]->current_harq_pid]->rb_alloc, @@ -3594,8 +3594,8 @@ n(tikz_fname,"w"); UE->dlsch[eNB_id]->harq_processes[UE->dlsch[eNB_id]->current_harq_pid]->Nl, num_pdcch_symbols, 0,subframe); - - + + //scrambling dlsch_scrambling(&UE->frame_parms, 0, @@ -3603,8 +3603,8 @@ n(tikz_fname,"w"); coded_bits_per_codeword, 0, subframe<<1); - - + + //modulation re_allocated = dlsch_modulation(sic_buffer, AMP, @@ -3618,7 +3618,7 @@ n(tikz_fname,"w"); // compute the norm of the effective channel for both receive antennas -> alphha[0], alphha[2] // multiply with the norm of the effective channnel */ - + //stripping (from matched filter output of first stream = rxdataF_comp0) // this is pseudocode /* @@ -3626,8 +3626,8 @@ n(tikz_fname,"w"); UE->pdsch_vars[eNB_id].rxdataF_ext[i] -= alpha[i].*sic_buffer[i]; } */ - - //apply rho to output + + //apply rho to output /* dlsch_channel_compensation(UE->pdsch_vars[eNB_id].rxdataF_ext, UE->pdsch_vars[eNB_id].dl_ch_rho_ext[harq_pid][round], @@ -3645,19 +3645,19 @@ n(tikz_fname,"w"); */ - //detection of second stream + //detection of second stream //} - + } - + if ((UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]->mimo_mode >=DUALSTREAM_UNIFORM_PRECODING1) && (UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]->mimo_mode <=DUALSTREAM_PUSCH_PRECODING) && rx_type==rx_SIC_dual_stream) { - + // for (round = 0 ; round < 1 ; round++) { dlsch0_ue_harq = UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]; dlsch0_eNB_harq = UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]; - + dlsch0_eNB_harq->mimo_mode = UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]->mimo_mode; dlsch0_eNB_harq->rb_alloc[0] = dlsch0_ue_harq->rb_alloc_even[0]; dlsch0_eNB_harq->nb_rb = dlsch0_ue_harq->nb_rb; @@ -3668,11 +3668,11 @@ n(tikz_fname,"w"); dlsch0_eNB_harq->TBS = dlsch0_ue_harq->TBS; dlsch0_eNB_harq->dl_power_off = dlsch0_ue_harq->dl_power_off; dlsch0_eNB_harq->status = dlsch0_ue_harq->status; - + UE->dlsch_eNB[eNB_id]->active = UE->dlsch[eNB_id][0]->active; UE->dlsch_eNB[eNB_id]->rnti = UE->dlsch[eNB_id][0]->rnti; UE->dlsch_eNB[eNB_id]->current_harq_pid = UE->dlsch[eNB_id][0]->current_harq_pid; - + dlsch_encoding(input_buffer0[0], //UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]->b, &UE->frame_parms, num_pdcch_symbols, @@ -3682,8 +3682,8 @@ n(tikz_fname,"w"); &UE->dlsch_rate_matching_stats, &UE->dlsch_turbo_encoding_stats, &UE->dlsch_interleaving_stats); - - + + coded_bits_per_codeword[cw_non_sic]= get_G(&UE->frame_parms, UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch_eNB[eNB_id]->current_harq_pid]->nb_rb, UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch_eNB[eNB_id]->current_harq_pid]->rb_alloc, @@ -3707,13 +3707,13 @@ n(tikz_fname,"w"); UE->dlsch_eNB[0], NULL, coded_bits_per_codeword[cw_non_sic]); - + // write_output("sic_buffer.m","sic", *sic_buffer,re_allocated,1,1); // write_output("rxdataF_comp1.m","rxF_comp1", *UE->pdsch_vars[eNB_id]->rxdataF_comp1[UE->dlsch[0][0]->current_harq_pid][round],14*12*25,1,1); // write_output("rxdataF_rho.m","rho", *UE->pdsch_vars[eNB_id]->dl_ch_rho_ext[UE->dlsch[0][0]->current_harq_pid][round],14*12*25,1,1); switch (get_Qm(eNB->dlsch[0][1]->harq_processes[0]->mcs)){ - + case 2: dlsch_qpsk_llr_SIC(&UE->frame_parms, @@ -3725,7 +3725,7 @@ n(tikz_fname,"w"); dlsch0_eNB_harq->nb_rb, subframe, dlsch0_eNB_harq->rb_alloc[0], - get_Qm(eNB->dlsch[0][0]->harq_processes[0]->mcs), + get_Qm(eNB->dlsch[0][0]->harq_processes[0]->mcs), UE->dlsch[eNB_id][0]); break; @@ -3760,9 +3760,9 @@ n(tikz_fname,"w"); UE->dlsch[eNB_id][0]); break; } - + // write_output("rxdata_llr1.m","llr1", UE->pdsch_vars[eNB_id]->llr[1],re_allocated*2,1,0); - + for (cw_sic=cw_to_decode_interf_free; cw_sic<cw_to_decode_interf_free+1;cw_sic++){ UE->dlsch[0][cw_sic]->rnti = (common_flag==0) ? n_rnti: SI_RNTI; coded_bits_per_codeword[cw_sic]= get_G(&eNB->frame_parms, @@ -3773,14 +3773,14 @@ n(tikz_fname,"w"); num_pdcch_symbols, 0, subframe); - + UE->dlsch[0][cw_sic]->harq_processes[UE->dlsch[0][cw_sic]->current_harq_pid]->G = coded_bits_per_codeword[cw_sic]; UE->dlsch[0][cw_sic]->harq_processes[UE->dlsch[0][cw_sic]->current_harq_pid]->Qm = get_Qm(eNB->dlsch[0][cw_sic]->harq_processes[0]->mcs); - + if (n_frames==2) { printf("Kmimo=%d, cw=%d, G=%d, TBS=%d\n",Kmimo,cw_sic,coded_bits_per_codeword[cw_sic], UE->dlsch[0][cw_sic]->harq_processes[UE->dlsch[0][cw_sic]->current_harq_pid]->TBS); - + // calculate uncoded BER uncoded_ber_bit = (short*) malloc(sizeof(short)*coded_bits_per_codeword[cw_sic]); AssertFatal(uncoded_ber_bit, "uncoded_ber_bit==NULL"); @@ -3792,24 +3792,24 @@ n(tikz_fname,"w"); write_output(fname, vname,eNB->dlsch[0][cw_sic]->harq_processes[0]->e,coded_bits_per_codeword[cw_sic],1,4); uncoded_ber=0; printf("trials=%d\n", trials); - for (i=0;i<coded_bits_per_codeword[cw_sic];i++) + for (i=0;i<coded_bits_per_codeword[cw_sic];i++) if (eNB->dlsch[0][cw_sic]->harq_processes[0]->e[i] != (UE->pdsch_vars[0]->llr[cw_sic][i]<0)) { uncoded_ber_bit[i] = 1; uncoded_ber++; } else uncoded_ber_bit[i] = 0; - + uncoded_ber/=coded_bits_per_codeword[cw_sic]; avg_ber += uncoded_ber; sprintf(fname,"cw%d_uncoded_ber_bit.m", cw_sic); sprintf(vname,"uncoded_ber_bit_cw%d", cw_sic); write_output(fname, vname,uncoded_ber_bit,coded_bits_per_codeword[cw_sic],1,0); - printf("cw %d, uncoded ber %f\n",cw_sic,uncoded_ber); + printf("cw %d, uncoded ber %f\n",cw_sic,uncoded_ber); free(uncoded_ber_bit); - uncoded_ber_bit = NULL; + uncoded_ber_bit = NULL; } - start_meas(&UE->dlsch_unscrambling_stats); + start_meas(&UE->dlsch_unscrambling_stats); dlsch_unscrambling(&UE->frame_parms, 0, UE->dlsch[0][cw_sic], @@ -3817,26 +3817,26 @@ n(tikz_fname,"w"); UE->pdsch_vars[eNB_id]->llr[cw_sic], cw_sic, subframe<<1); - stop_meas(&UE->dlsch_unscrambling_stats); + stop_meas(&UE->dlsch_unscrambling_stats); start_meas(&UE->dlsch_decoding_stats); ret[1] = dlsch_decoding(UE, - UE->pdsch_vars[eNB_id]->llr[cw_sic], + UE->pdsch_vars[eNB_id]->llr[cw_sic], &UE->frame_parms, UE->dlsch[0][cw_sic], UE->dlsch[0][cw_sic]->harq_processes[UE->dlsch[0][cw_sic]->current_harq_pid], subframe, UE->dlsch[0][cw_sic]->current_harq_pid, 1,llr8_flag); - stop_meas(&UE->dlsch_decoding_stats); - - - if (ret[1] <= UE->dlsch[0][cw_sic]->max_turbo_iterations ) { //if (ret <= UE->dlsch[0][cw_sic]->max_turbo_iterations ) - + stop_meas(&UE->dlsch_decoding_stats); + + + if (ret[1] <= UE->dlsch[0][cw_sic]->max_turbo_iterations ) { //if (ret <= UE->dlsch[0][cw_sic]->max_turbo_iterations ) + avg_iter[1] += ret[1]; iter_trials[1]++; - - + + if (n_frames==2) { printf("cw sic %d, round %d: No DLSCH errors found, uncoded ber %f\n",cw_sic,round,uncoded_ber); #ifdef PRINT_BYTES @@ -3845,29 +3845,29 @@ n(tikz_fname,"w"); Kr = UE->dlsch[0][cw_sic]->harq_processes[0]->Kminus; else Kr = UE->dlsch[0][cw_sic]->harq_processes[0]->Kplus; - + Kr_bytes = Kr>>3; - + printf("Decoded_output (Segment %d):\n",s); for (i=0;i<Kr_bytes;i++) printf("%d : %x (%x)\n",i,UE->dlsch[0][cw_sic]->harq_processes[0]->c[s][i], UE->dlsch[0][cw_sic]->harq_processes[0]->c[s][i]^eNB->dlsch[0][cw_sic]->harq_processes[0]->c[s][i]); } #endif - } - - } - - + } + + } + + else { errs[cw_sic][round]++; // exit(0); - + if (cw_sic==1) { avg_iter[1] += ret[1]-1; iter_trials[1]++; } - + if (n_frames==2) { //if ((n_frames==1) || (SNR>=30)) { printf("cw sic %d, round %d: DLSCH errors found, uncoded ber %f\n",cw_sic,round,uncoded_ber); @@ -3877,9 +3877,9 @@ n(tikz_fname,"w"); Kr = UE->dlsch[0][cw_sic]->harq_processes[0]->Kminus; else Kr = UE->dlsch[0][cw_sic]->harq_processes[0]->Kplus; - + Kr_bytes = Kr>>3; - + printf("Decoded_output (Segment %d):\n",s); for (i=0;i<Kr_bytes;i++) printf("%d : %x (%x)\n",i,UE->dlsch[0][cw_sic]->harq_processes[0]->c[s][i], @@ -3888,33 +3888,33 @@ n(tikz_fname,"w"); #endif } //n_frames==1 // exit(0); - } //if (ret > UE->dlsch[0][cw_sic]->max_turbo_iterations ) + } //if (ret > UE->dlsch[0][cw_sic]->max_turbo_iterations ) } //for (int cw_1=cw_to_decode_interf_free; cw_1<cw_to_decode_interf_free+1;cw_1++) - - + + } //if SIC - - + + } //if (ret <= UE->dlsch[0][cw_non_sic]->max_turbo_iterations ) else { errs[cw_non_sic][round]++; - + if (cw_non_sic==0) { avg_iter[0] += ret[0]-1; iter_trials[0]++; } - + if (rx_type==rx_SIC_dual_stream) { errs[1][round]++; } - + if (cw_non_sic==1) { avg_iter[1] += ret[1]-1; iter_trials[1]++; } - - - if (n_frames==2) { + + + if (n_frames==1) { //if ((n_frames==1) || (SNR>=30)) { printf("cw %d, round %d: DLSCH errors found, uncoded ber %f\n",cw_non_sic,round,uncoded_ber); #ifdef PRINT_BYTES @@ -3923,9 +3923,9 @@ n(tikz_fname,"w"); Kr = UE->dlsch[0][cw_non_sic]->harq_processes[0]->Kminus; else Kr = UE->dlsch[0][cw_non_sic]->harq_processes[0]->Kplus; - + Kr_bytes = Kr>>3; - + printf("Decoded_output (Segment %d):\n",s); for (i=0;i<Kr_bytes;i++) printf("%d : %x (%x)\n",i,UE->dlsch[0][cw_non_sic]->harq_processes[0]->c[s][i], @@ -3935,10 +3935,10 @@ n(tikz_fname,"w"); } } } - + stop_meas(&UE->phy_proc_rx); - - if (n_frames==2) { + + if (n_frames==1) { //rxsig sprintf(fname,"rxsig0_r%d.m",round); @@ -3998,7 +3998,7 @@ n(tikz_fname,"w"); UE->frame_parms.ofdm_symbol_size*nsymb,1,1); } //pdsch_vars - //dump_dlsch2(UE,eNB_id,coded_bits_per_codeword[0],round,UE->dlsch[0][0]->current_harq_pid); + dump_dlsch2(UE,eNB_id,coded_bits_per_codeword[0],round,UE->dlsch[0][0]->current_harq_pid); /* write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4); write_output("dlsch_ber_bit.m","ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0); @@ -4009,56 +4009,56 @@ n(tikz_fname,"w"); //pdcch_vars write_output("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1); write_output("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[eNB_id]->dl_ch_estimates_ext[0],300*3,1,1); - + write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[eNB_id]->rxdataF_comp[0],4*300,1,1); write_output("pdcch_rxF_llr.m","pdcch_llr",UE->pdcch_vars[eNB_id]->llr,2400,1,4); - - + + if (round == 3) exit(-1); } if (xforms==1) { - phy_scope_UE(form_ue, + phy_scope_UE(form_ue, UE, eNB_id, 0,// UE_id - subframe); + subframe); } - + round++; } //round if(transmission_mode != 3 && transmission_mode !=4 ){ if ((errs[0][0]>=n_frames/10) && (trials>(n_frames/2)) ) break; - } - + } + //len = chbch_stats_read(stats_buffer,NULL,0,4096); //printf("%s\n\n",stats_buffer); - + if (UE->proc.proc_rxtx[0].frame_rx % 10 == 0) { UE->bitrate[eNB_id] = (UE->total_TBS[eNB_id] - UE->total_TBS_last[eNB_id])*10; LOG_D(PHY,"[UE %d] Calculating bitrate: total_TBS = %d, total_TBS_last = %d, bitrate = %d kbits/s\n",UE->Mod_id,UE->total_TBS[eNB_id],UE->total_TBS_last[eNB_id],UE->bitrate[eNB_id]/1000); UE->total_TBS_last[eNB_id] = UE->total_TBS[eNB_id]; } - + UE->proc.proc_rxtx[0].frame_rx++; - - /* calculate the total processing time for each packet, + + /* calculate the total processing time for each packet, * get the max, min, and number of packets that exceed t>2000us */ - double t_tx = (double)eNB->phy_proc_tx.p_time/cpu_freq_GHz/1000.0; - double t_tx_ifft = (double)eNB->ofdm_mod_stats.p_time/cpu_freq_GHz/1000.0; - double t_tx_mod = (double)eNB->dlsch_modulation_stats.p_time/cpu_freq_GHz/1000.0; - double t_tx_enc = (double)eNB->dlsch_encoding_stats.p_time/cpu_freq_GHz/1000.0; - - - double t_rx = (double)UE->phy_proc_rx.p_time/cpu_freq_GHz/1000.0; - double t_rx_fft = (double)UE->ofdm_demod_stats.p_time/cpu_freq_GHz/1000.0; - double t_rx_demod = (double)UE->dlsch_rx_pdcch_stats.p_time/cpu_freq_GHz/1000.0; - double t_rx_dec = (double)UE->dlsch_decoding_stats.p_time/cpu_freq_GHz/1000.0; - + double t_tx = (double)eNB->phy_proc_tx.p_time/cpu_freq_GHz/1000.0; + double t_tx_ifft = (double)eNB->ofdm_mod_stats.p_time/cpu_freq_GHz/1000.0; + double t_tx_mod = (double)eNB->dlsch_modulation_stats.p_time/cpu_freq_GHz/1000.0; + double t_tx_enc = (double)eNB->dlsch_encoding_stats.p_time/cpu_freq_GHz/1000.0; + + + double t_rx = (double)UE->phy_proc_rx.p_time/cpu_freq_GHz/1000.0; + double t_rx_fft = (double)UE->ofdm_demod_stats.p_time/cpu_freq_GHz/1000.0; + double t_rx_demod = (double)UE->dlsch_rx_pdcch_stats.p_time/cpu_freq_GHz/1000.0; + double t_rx_dec = (double)UE->dlsch_decoding_stats.p_time/cpu_freq_GHz/1000.0; + if (t_tx > t_tx_max) t_tx_max = t_tx; if (t_tx < t_tx_min) @@ -4071,13 +4071,13 @@ n(tikz_fname,"w"); n_tx_dropped++; if (t_rx > 2000) n_rx_dropped++; - + push_front(&time_vector_tx, t_tx); push_front(&time_vector_tx_ifft, t_tx_ifft); push_front(&time_vector_tx_mod, t_tx_mod); push_front(&time_vector_tx_enc, t_tx_enc); - + push_front(&time_vector_rx, t_rx); push_front(&time_vector_rx_fft, t_rx_fft); push_front(&time_vector_rx_demod, t_rx_demod); @@ -4179,7 +4179,7 @@ n(tikz_fname,"w"); SNR, (double)tx_lev_dB+10*log10(UE->frame_parms.ofdm_symbol_size/(NB_RB*12)), sigma2_dB); - + printf("Errors (%d(%d)/%d %d(%d)/%d %d(%d)/%d %d(%d)/%d), Pe = (%e(%e),%e(%e),%e(%e),%e(%e))," "dci_errors %d/%d, Pe = %e => effective rate %f (%2.1f%%,%f, %f), normalized delay %f (%f), " "throughput stream 0 = %f , throughput stream 1 = %f, system throughput = %f , rate 0 = %f , rate 1 = %f \n", @@ -4220,8 +4220,8 @@ n(tikz_fname,"w"); rate[1]*get_Qm(eNB->dlsch[0][1]->harq_processes[0]->mcs)*(1-((double)errs[1][0]/(double)round_trials[0])), rate[0], rate[1]); - - + + if (print_perf==1) { printf("eNB TX function statistics (per 1ms subframe)\n\n"); @@ -4369,19 +4369,19 @@ n(tikz_fname,"w"); rate[1]*get_Qm(eNB->dlsch[0][1]->harq_processes[0]->mcs)*(1-((double)errs[1][0]/(double)round_trials[0])), dci_errors); } - + if(abstx){ //ABSTRACTION - if ((transmission_mode != 3)&& (transmission_mode != 4)) { + if ((transmission_mode != 3)&& (transmission_mode != 4)) { blerr[0][0] = (double)errs[0][0]/(round_trials[0]); - + if(num_rounds>1){ blerr[0][1] = (double)errs[0][1]/(round_trials[1]); - + blerr[0][2] = (double)errs[0][2]/(round_trials[2]); - + blerr[0][3] = (double)errs[0][3]/(round_trials[3]); - + fprintf(csv_fd,"%e;%e;%e;%e;\n",blerr[0][0],blerr[0][1],blerr[0][2],blerr[0][3]); } else { @@ -4405,7 +4405,7 @@ n(tikz_fname,"w"); } } } - + if ( (test_perf != 0) && (100 * effective_rate > test_perf )) { //fprintf(time_meas_fd,"SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err\n"); if ((transmission_mode != 3) && (transmission_mode != 4)) { @@ -4467,7 +4467,7 @@ n(tikz_fname,"w"); errs[0][3], round_trials[3], dci_errors); - + //fprintf(time_meas_fd,"SNR; MCS; TBS; rate; DL_DECOD_ITER; err0; trials0; err1; trials1; err2; trials2; err3; trials3; PE; dci_err;PE;ND;\n"); fprintf(time_meas_fd,"%f;%d;%d;%d;%d;%f;%2.1f;%f;%f;%d;%d;%d;%d;%d;%d;%d;%d;%e;%e;%e;%e;%d;%d;%e;%f;%f;", SNR, @@ -4497,7 +4497,7 @@ n(tikz_fname,"w"); (1.0*(round_trials[0]-errs[0][0])+2.0*(round_trials[1]-errs[0][1])+3.0*(round_trials[2]-errs[0][2])+4.0*(round_trials[3]-errs[0][3]))/((double)round_trials[0])); } //fprintf(time_meas_fd,"eNB_PROC_TX(%d); OFDM_MOD(%d); DL_MOD(%d); DL_SCR(%d); DL_ENC(%d); UE_PROC_RX(%d); OFDM_DEMOD_CH_EST(%d); RX_PDCCH(%d); CH_COMP_LLR(%d); DL_USCR(%d); DL_DECOD(%d);\n", - fprintf(time_meas_fd,"%d; %d; %d; %d; %d; %d; %d; %d; %d; %d; %d;", + fprintf(time_meas_fd,"%d; %d; %d; %d; %d; %d; %d; %d; %d; %d; %d;", eNB->phy_proc_tx.trials, eNB->ofdm_mod_stats.trials, eNB->dlsch_modulation_stats.trials, @@ -4525,31 +4525,31 @@ n(tikz_fname,"w"); ); //fprintf(time_meas_fd,"eNB_PROC_TX_STD;eNB_PROC_TX_MAX;eNB_PROC_TX_MIN;eNB_PROC_TX_MED;eNB_PROC_TX_Q1;eNB_PROC_TX_Q3;eNB_PROC_TX_DROPPED;\n"); fprintf(time_meas_fd,"%f;%f;%f;%f;%f;%f;%d;", std_phy_proc_tx, t_tx_max, t_tx_min, tx_median, tx_q1, tx_q3, n_tx_dropped); - + //fprintf(time_meas_fd,"IFFT;\n"); fprintf(time_meas_fd,"%f;%f;%f;%f;", std_phy_proc_tx_ifft, tx_ifft_median, tx_ifft_q1, tx_ifft_q3); - + //fprintf(time_meas_fd,"MOD;\n"); fprintf(time_meas_fd,"%f;%f;%f;%f;", std_phy_proc_tx_mod, tx_mod_median, tx_mod_q1, tx_mod_q3); - + //fprintf(time_meas_fd,"ENC;\n"); fprintf(time_meas_fd,"%f;%f;%f;%f;", std_phy_proc_tx_enc, tx_enc_median, tx_enc_q1, tx_enc_q3); - - + + //fprintf(time_meas_fd,"UE_PROC_RX_STD;UE_PROC_RX_MAX;UE_PROC_RX_MIN;UE_PROC_RX_MED;UE_PROC_RX_Q1;UE_PROC_RX_Q3;UE_PROC_RX_DROPPED;\n"); fprintf(time_meas_fd,"%f;%f;%f;%f;%f;%f;%d;", std_phy_proc_rx, t_rx_max, t_rx_min, rx_median, rx_q1, rx_q3, n_rx_dropped); //fprintf(time_meas_fd,"FFT;\n"); fprintf(time_meas_fd,"%f;%f;%f;%f;", std_phy_proc_rx_fft, rx_fft_median, rx_fft_q1, rx_fft_q3); - + //fprintf(time_meas_fd,"DEMOD;\n"); fprintf(time_meas_fd,"%f;%f;%f;%f;", std_phy_proc_rx_demod,rx_demod_median, rx_demod_q1, rx_demod_q3); - + //fprintf(time_meas_fd,"DEC;\n"); fprintf(time_meas_fd,"%f;%f;%f;%f\n", std_phy_proc_rx_dec, rx_dec_median, rx_dec_q1, rx_dec_q3); - - /* + + /* fprintf(time_meas_fd,"%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;%d;", eNB->phy_proc_tx.trials, eNB->ofdm_mod_stats.trials, @@ -4573,34 +4573,34 @@ n(tikz_fname,"w"); if (((double)errs[0][0]/(round_trials[0]))<1e-2 && ((double)errs[1][0]/(round_trials[0]))<1e-2) break; } - else{ - if (((double)errs[0][0]/(round_trials[0]))<1e-2) + else{ + if (((double)errs[0][0]/(round_trials[0]))<1e-2) break; - + } } else { - + if ((rx_type==rx_IC_dual_stream) || (rx_type==rx_standard) || (rx_type==rx_SIC_dual_stream)) { if (((double)errs[0][0]/(round_trials[0]))<1e-3 && ((double)errs[1][0]/(round_trials[0]))<1e-3) break; } - else{ - if (((double)errs[0][0]/(round_trials[0]))<1e-3) + else{ + if (((double)errs[0][0]/(round_trials[0]))<1e-3) break; - + } - + } - - + + if (n_frames==1) break; }// SNR - + } //ch_realization - + fclose(bler_fd); if (test_perf !=0)