From e9c0253361de47024aae4cc012d00943e3626ec1 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger <florian.kaltenberger@eurecom.fr> Date: Mon, 9 Sep 2013 09:41:21 +0000 Subject: [PATCH] fixed SNR calculation, added csv file output git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4140 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- openair1/SIMULATION/LTE_PHY/ulsim.c | 123 ++++++++-------------------- 1 file changed, 34 insertions(+), 89 deletions(-) diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c index 6015c6e43b..d2df8316f4 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsim.c +++ b/openair1/SIMULATION/LTE_PHY/ulsim.c @@ -155,11 +155,8 @@ int main(int argc, char **argv) { unsigned int tx_lev=0,tx_lev_dB,trials,errs[4]={0,0,0,0},round_trials[4]={0,0,0,0}; u8 transmission_mode=1,n_rx=1; - - FILE *bler_fdUL; FILE *bler_fd; - char bler_fname[20]; - + char bler_fname[512]; FILE *input_fdUL=NULL,*trch_out_fdUL=NULL; // unsigned char input_file=0; @@ -169,8 +166,7 @@ int main(int argc, char **argv) { FILE *csv_fdUL; FILE *fperen; - char fperen_name[512]; - + char fperen_name[512]; FILE *fmageren; char fmageren_name[512]; @@ -442,22 +438,11 @@ int main(int argc, char **argv) { printf("Rate = %f (mod %d), coded bits %d\n",rate,get_Qm(mcs),coded_bits_per_codeword); - - // sprintf(ftxlev_name,"txlev_mcs%d_nrb%d_AWGN_nsim%d.m",mcs,nb_rb,n_frames); - - /*if(channel_model == AWGN) - sprintf(bler_fname,"EtezULbler_mcs%d_nrb%d_AWGN_nsim%d.m",mcs,nb_rb,n_frames); - else - sprintf(bler_fname,"EtezULbler_mcs%d_nrb%d_channel_model_%d_nsim%d.m",mcs,nb_rb,chMod,n_frames); - */ - //bler_fdUL = fopen(bler_fname,"w"); - //ftxlev = fopen(ftxlev_name,"w"); - //fprintf(bler_fd,"bler = ["); - - sprintf(bler_fname,"bler_%d.m",mcs); + sprintf(bler_fname,"ULbler_mcs%d_nrb%d_ChannelModel%d_nsim%d.csv",mcs,nb_rb,chMod,n_frames); bler_fd = fopen(bler_fname,"w"); - - + + fprintf(bler_fd,"#SNR;mcs;nb_rb;TBS;rate;errors[0];trials[0];errors[1];trials[1];errors[2];trials[2];errors[3];trials[3]\n"); + if(abstx){ sprintf(fperen_name,"ULchan_estims_F_mcs%d_rb%d_chanMod%d_nframes%d_chanReal%d.m",mcs,nb_rb,chMod,n_frames,n_ch_rlz); fperen = fopen(fperen_name,"a+"); @@ -481,17 +466,13 @@ int main(int argc, char **argv) { fclose(ftexlv); */ - if(abstx){ // CSV file sprintf(csv_fname,"EULdataout_tx%d_mcs%d_nbrb%d_chan%d_nsimus%d_eren.m",transmission_mode,mcs,nb_rb,chMod,n_frames); csv_fdUL = fopen(csv_fname,"w"); fprintf(csv_fdUL,"data_all%d=[",mcs); - - sprintf(bler_fname,"EtezULbler_mcs%d_nrb%d_channel_model_%d_nsim%d.m",mcs,nb_rb,chMod,n_frames); - bler_fdUL = fopen(bler_fname,"w"); - } + for (i=0;i<2;i++) { s_re[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); s_im[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double)); @@ -935,34 +916,24 @@ int main(int argc, char **argv) { 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); if (n_frames==1) { write_output("txsig0UL.m","txs0", &txdata[0][PHY_vars_eNB->lte_frame_parms.samples_per_tti*subframe],2*frame_parms->samples_per_tti,1,1); // write_output("txsig1UL.m","txs1", &txdata[1][PHY_vars_eNB->lte_frame_parms.samples_per_tti*subframe],2*frame_parms->samples_per_tti,1,1); } - //(double)tx_lev_dB - (SNR+sigma2_dB)); + //AWGN //Set target wideband RX noise level to N0 sigma2_dB = N0;//10*log10((double)tx_lev) +10*log10(PHY_vars_UE->lte_frame_parms.ofdm_symbol_size/(PHY_vars_UE->lte_frame_parms.N_RB_DL*12)) - SNR; - // Adjust SNR to account for difference in TX bandwidth and sampling rate (512/300 for 5MHz) - SNR2 = SNR + 10*log10(((double)PHY_vars_UE->lte_frame_parms.ofdm_symbol_size/N_RB_DL/12)); + sigma2 = pow(10,sigma2_dB/10); + // compute tx_gain to achieve target SNR (per resource element!) - tx_gain = sqrt(pow(10.0,.1*(N0+SNR2))*nb_rb/(N_RB_DL*(double)tx_lev)); + tx_gain = sqrt(pow(10.0,.1*(N0+SNR))*(nb_rb*12/(double)PHY_vars_UE->lte_frame_parms.ofdm_symbol_size)/(double)tx_lev); - //AWGN - sigma2 = pow(10,sigma2_dB/10); - //fprintf(bler_fdUL,"%f,%d;%d;%f;%f;%f\n",SNR,tx_lev,tx_lev_dB,sigma2_dB,tx_gain,SNR2); - //if(saving_bler == 0) - //{ - //if (trials==0 && round==0 ) { - - //fprintf(bler_fdUL,"%f;%d;%d;%f;%f;%f\n",SNR,tx_lev,tx_lev_dB,sigma2_dB,tx_gain,SNR2); - //} - //} - - // fill measurement symbol (19) with noise - + // fill measurement symbol (19) with noise for (i=0;i<OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES;i++) { for (aa=0;aa<PHY_vars_eNB->lte_frame_parms.nb_antennas_rx;aa++) { @@ -990,20 +961,15 @@ int main(int argc, char **argv) { } } - - - if(abstx){ if(saving_bler==0) if (trials==0 && round==0) { // calculate freq domain representation to compute SINR - freq_channel(UE2eNB, N_RB_DL,12*N_RB_DL + 1); // snr=pow(10.0,.1*SNR); fprintf(csv_fdUL,"%f,%d,%d,%f,%f,%f,",SNR,tx_lev,tx_lev_dB,sigma2_dB,tx_gain,SNR2); //fprintf(csv_fdUL,"%f,",SNR); - fprintf(bler_fdUL,"%f;%d;%d;%f;%f;%f\n",SNR,tx_lev,tx_lev_dB,sigma2_dB,tx_gain,SNR2); for (u=0;u<12*nb_rb;u++){ for (aarx=0;aarx<UE2eNB->nb_rx;aarx++) { for (aatx=0;aatx<UE2eNB->nb_tx;aatx++) { @@ -1090,26 +1056,16 @@ int main(int argc, char **argv) { if(abstx){ namepointer_chMag = NULL; - if(trials==0 && round==0 && SNR==snr0) { - char* namepointer ; namepointer = &fperen_name; write_output(namepointer, "xxx" ,PHY_vars_eNB->lte_eNB_pusch_vars[0]->drs_ch_estimates[0][0],300,1,10); namepointer = NULL ; - - - // flagMag = 1; - - } - } - - - + /////// start_meas(&PHY_vars_eNB->ulsch_decoding_stats); @@ -1120,6 +1076,7 @@ int main(int argc, char **argv) { 1, // Nbundled llr8_flag); stop_meas(&PHY_vars_eNB->ulsch_decoding_stats); + if (cqi_flag > 0) { cqi_error = 0; if (PHY_vars_eNB->ulsch_eNB[0]->Or1 < 32) { @@ -1237,25 +1194,25 @@ int main(int argc, char **argv) { cqi_crc_falsepositives,round_trials[0]+round_trials[1]+round_trials[2]+round_trials[3], cqi_crc_falsenegatives,round_trials[0]+round_trials[1]+round_trials[2]+round_trials[3]); } - if (PHY_vars_eNB->ulsch_eNB[0]->o_ACK[0] > 0) { + if (PHY_vars_eNB->ulsch_eNB[0]->o_ACK[0] > 0) printf("ACK/NAK errors %d/%d\n",ack_errors,round_trials[0]+round_trials[1]+round_trials[2]+round_trials[3]); - fprintf(bler_fd,"%f;%d;%d;%f;%d;%d;%d;%d;%d;%d;%d;%d\n", - SNR, - mcs, - PHY_vars_eNB->ulsch_eNB[0]->harq_processes[harq_pid]->TBS, - rate, - errs[0], - round_trials[0], - errs[1], - round_trials[1], - errs[2], - round_trials[2], - errs[3], - round_trials[3]); - } - // fprintf(bler_fdUL,"%f\n",tx_lev); - ////hhh + + fprintf(bler_fd,"%f;%d;%d;%d;%f;%d;%d;%d;%d;%d;%d;%d;%d\n", + SNR, + mcs, + nb_rb, + PHY_vars_eNB->ulsch_eNB[0]->harq_processes[harq_pid]->TBS, + rate, + errs[0], + round_trials[0], + errs[1], + round_trials[1], + errs[2], + round_trials[2], + errs[3], + round_trials[3]); + if (dump_perf==1) { printf("UE TX function statistics (per 1ms subframe)\n\n"); @@ -1345,18 +1302,8 @@ int main(int argc, char **argv) { //write_output("chestim_f.m","chestf",PHY_vars_eNB->lte_eNB_pusch_vars[0]->drs_ch_estimates[0][0],300*12,2,1); // write_output("chestim_t.m","chestt",PHY_vars_eNB->lte_eNB_pusch_vars[0]->drs_ch_estimates_time[0][0], (frame_parms->ofdm_symbol_size)*2,2,1); - /*for (z = 0 ; z < 300*12 ; z++) - { - ulchestim_f[z] = 0 ; - } - for (zz = 0 ; zz < (frame_parms->ofdm_symbol_size)*2 ; zz++) - { - ulchestim_t[z] = 0 ; - }*/ - - }//ch realization - // fclose(bler_fdUL); + if(abstx){ fperen = fopen(fperen_name,"a+"); fprintf(fperen,"];\n"); @@ -1381,8 +1328,6 @@ int main(int argc, char **argv) { if(abstx){// ABSTRACTION fprintf(csv_fdUL,"];"); fclose(csv_fdUL); - fclose(bler_fdUL); - } fclose(bler_fd); -- GitLab