diff --git a/openair1/PHY/TOOLS/defs.h b/openair1/PHY/TOOLS/defs.h index 9c4cad096828dd861512db3a4ed2cdc6d349dbb9..a24121b5db9eaa56c1e9e4947c8e7f55cdbdfd54 100644 --- a/openair1/PHY/TOOLS/defs.h +++ b/openair1/PHY/TOOLS/defs.h @@ -297,7 +297,7 @@ void bit8_rxdemux(int32_t length,int32_t offset); @param format data format (0 = real 16-bit, 1 = complex 16-bit,2 real 32-bit, 3 complex 32-bit,4 = real 8-bit, 5 = complex 8-bit) */ int32_t write_output(const char *fname, const char *vname, void *data, int length, int dec, char format); -int32_t write_output_chFf(const char *fname, const char *vname, float *data1, float *data2, int length, int dec, char format); +int32_t write_output_chFf(const char *fname, const char *vname, float data1[1200], float data2[1200], int length, int dec); #endif void Zero_Buffer(void *,uint32_t); diff --git a/openair1/PHY/TOOLS/file_output.c b/openair1/PHY/TOOLS/file_output.c index b65628de9830c0c461a6353cc0cf27407748bc02..a364f05a944e61822ed70d7a81f8e7c986567586 100644 --- a/openair1/PHY/TOOLS/file_output.c +++ b/openair1/PHY/TOOLS/file_output.c @@ -190,19 +190,16 @@ int write_output(const char *fname,const char *vname,void *data,int length,int d return 0; } -int write_output_chFf(const char *fname,const char *vname,float *data1,float *data2,int length,int dec) +int write_output_chFf(const char *fname,const char *vname,float data1[1200],float data2[1200],int length,int dec) { FILE *fp=NULL; + fp = fopen(fname,"a+"); int i; printf("Writing %d to %s\n",length,fname); - if (fp== NULL) { - printf("[OPENAIR][FILE OUTPUT] Cannot open file %s\n",fname); - return(-1); - } for (i=0; i<length; i++) { fprintf(fp,"%g + j*(%g)\n",data1[i],data2[i]); } diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 60fc55e19aac59f32a64a350c7506976cb8a487e..79c993a9051280c3ee6c5d4559b1011be94a6c64 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -259,32 +259,48 @@ void DL_channel_freq(PHY_VARS_eNB *eNB,PHY_VARS_UE *UE,int subframe,int awgn_fla double channelx,channely; double sigma2_dB,sigma2; double iqim=0.0; + float tx_pwr; + + /*tx_pwr = dac_fixed_gain_AVX_float(s_re_f, + s_im_f, + eNB->common_vars.txdataF[0], + subframe*UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti, + eNB2UE[0]->nb_tx, + UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti, + subframe*UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti, + UE->frame_parms.ofdm_symbol_size, + 14, + UE->frame_parms.pdsch_config_common.referenceSignalPower, // dBm/RE + UE->frame_parms.N_RB_DL*12);*/ // 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*UE->frame_parms.samples_per_tti; i++) { + for (i=0; i<2*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti); i++) { for (aa=0; aa<eNB->frame_parms.nb_antennas_tx; aa++) { if (awgn_flag == 0) { - s_re_f[aa][i] = ((double)(((short *)eNB->common_vars.txdataF[0][aa]))[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti)) + (i<<1)]); - s_im_f[aa][i] = ((double)(((short *)eNB->common_vars.txdataF[0][aa]))[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti)) +(i<<1)+1]); + s_re_f[aa][i] = ((float)(((short *)eNB->common_vars.txdataF[0][aa]))[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti)) + (i<<1)]); + s_im_f[aa][i] = ((float)(((short *)eNB->common_vars.txdataF[0][aa]))[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti)) +(i<<1)+1]); } else { for (aarx=0; aarx<UE->frame_parms.nb_antennas_rx; aarx++) { if (aa==0) { - r_re_f[aarx][i] = ((double)(((short *)eNB->common_vars.txdataF[0][aa]))[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti)) +(i<<1)]); - r_im_f[aarx][i] = ((double)(((short *)eNB->common_vars.txdataF[0][aa]))[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti)) +(i<<1)+1]); + r_re_f[aarx][i] = ((float)(((short *)eNB->common_vars.txdataF[0][aa]))[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti)) +(i<<1)]); + r_im_f[aarx][i] = ((float)(((short *)eNB->common_vars.txdataF[0][aa]))[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti)) +(i<<1)+1]); } else { - r_re_f[aarx][i] += ((double)(((short *)eNB->common_vars.txdataF[0][aa]))[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti)) +(i<<1)]); - r_im_f[aarx][i] += ((double)(((short *)eNB->common_vars.txdataF[0][aa]))[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti)) +(i<<1)+1]); + r_re_f[aarx][i] += ((float)(((short *)eNB->common_vars.txdataF[0][aa]))[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti)) +(i<<1)]); + r_im_f[aarx][i] += ((float)(((short *)eNB->common_vars.txdataF[0][aa]))[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti)) +(i<<1)+1]); } } } } } - + printf("subframe %d\n",subframe); + write_output("tx_data.m","txdata", &eNB->common_vars.txdata[0][0],UE->frame_parms.samples_per_tti,1,1); + write_output("tx_data_F.m","txdataF", &eNB->common_vars.txdataF[0][0],(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti),1,1); + write_output("r_re_f.m","rref", &r_re_f[0],(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti),1,1); + write_output("r_im_f.m","rimf", &r_im_f[0],(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti),1,1); // Multipath channel if (awgn_flag == 0) { - /*multipath_channel(eNB2UE[round],s_re,s_im,r_re,r_im, - 2*UE->frame_parms.samples_per_tti,hold_channel);*/ + multipath_channel_freq_AVX_float(eNB2UE[round],s_re_f,s_im_f,r_re_f,r_im_f, 2*UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti,hold_channel,0,0,0,subframe&0x1); @@ -310,15 +326,15 @@ void DL_channel_freq(PHY_VARS_eNB *eNB,PHY_VARS_UE *UE,int subframe,int awgn_fla if(abstx) { if (trials==0 && round==0) { // calculate freq domain representation to compute SINR - freq_channel(eNB2UE[0], eNB->frame_parms.N_RB_DL,2*eNB->frame_parms.N_RB_DL + 1); + freq_channel_AVX_float(eNB2UE[0], eNB->frame_parms.N_RB_DL,2*eNB->frame_parms.N_RB_DL + 1); // snr=pow(10.0,.1*SNR); fprintf(csv_fd,"%f,",SNR); for (u=0; u<2*eNB->frame_parms.N_RB_DL; u++) { for (aarx=0; aarx<eNB2UE[0]->nb_rx; aarx++) { for (aatx=0; aatx<eNB2UE[0]->nb_tx; aatx++) { - channelx = eNB2UE[0]->chF[aarx+(aatx*eNB2UE[0]->nb_rx)][u].x; - channely = eNB2UE[0]->chF[aarx+(aatx*eNB2UE[0]->nb_rx)][u].y; + channelx = eNB2UE[0]->chFf[aarx+(aatx*eNB2UE[0]->nb_rx)].x[u]; + channely = eNB2UE[0]->chFf[aarx+(aatx*eNB2UE[0]->nb_rx)].y[u]; fprintf(csv_fd,"%e+i*(%e),",channelx,channely); } } @@ -330,8 +346,8 @@ void DL_channel_freq(PHY_VARS_eNB *eNB,PHY_VARS_UE *UE,int subframe,int awgn_fla for (u=0; u<2*eNB->frame_parms.N_RB_DL; u++) { for (aarx=0; aarx<eNB2UE[1]->nb_rx; aarx++) { for (aatx=0; aatx<eNB2UE[1]->nb_tx; aatx++) { - channelx = eNB2UE[1]->chF[aarx+(aatx*eNB2UE[1]->nb_rx)][u].x; - channely = eNB2UE[1]->chF[aarx+(aatx*eNB2UE[1]->nb_rx)][u].y; + channelx = eNB2UE[1]->chFf[aarx+(aatx*eNB2UE[1]->nb_rx)].x[u]; + channely = eNB2UE[1]->chFf[aarx+(aatx*eNB2UE[1]->nb_rx)].y[u]; fprintf(csv_fd,"%e+i*(%e),",channelx,channely); } } @@ -342,8 +358,8 @@ void DL_channel_freq(PHY_VARS_eNB *eNB,PHY_VARS_UE *UE,int subframe,int awgn_fla for (u=0; u<2*eNB->frame_parms.N_RB_DL; u++) { for (aarx=0; aarx<eNB2UE[2]->nb_rx; aarx++) { for (aatx=0; aatx<eNB2UE[2]->nb_tx; aatx++) { - channelx = eNB2UE[2]->chF[aarx+(aatx*eNB2UE[2]->nb_rx)][u].x; - channely = eNB2UE[2]->chF[aarx+(aatx*eNB2UE[2]->nb_rx)][u].y; + channelx = eNB2UE[2]->chFf[aarx+(aatx*eNB2UE[2]->nb_rx)].x[u]; + channely = eNB2UE[2]->chFf[aarx+(aatx*eNB2UE[2]->nb_rx)].y[u]; fprintf(csv_fd,"%e+i*(%e),",channelx,channely); } } @@ -354,8 +370,8 @@ void DL_channel_freq(PHY_VARS_eNB *eNB,PHY_VARS_UE *UE,int subframe,int awgn_fla for (u=0; u<2*eNB->frame_parms.N_RB_DL; u++) { for (aarx=0; aarx<eNB2UE[3]->nb_rx; aarx++) { for (aatx=0; aatx<eNB2UE[3]->nb_tx; aatx++) { - channelx = eNB2UE[3]->chF[aarx+(aatx*eNB2UE[3]->nb_rx)][u].x; - channely = eNB2UE[3]->chF[aarx+(aatx*eNB2UE[3]->nb_rx)][u].y; + channelx = eNB2UE[3]->chFf[aarx+(aatx*eNB2UE[3]->nb_rx)].x[u]; + channely = eNB2UE[3]->chFf[aarx+(aatx*eNB2UE[3]->nb_rx)].y[u]; fprintf(csv_fd,"%e+i*(%e),",channelx,channely); } } @@ -374,9 +390,9 @@ void DL_channel_freq(PHY_VARS_eNB *eNB,PHY_VARS_UE *UE,int subframe,int awgn_fla 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.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[aa])[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti))+2*i] = - (short) (r_re_f[aa][i] + sqrt(sigma2/2)*ziggurat(0.0,1.0)); + (short) (r_re_f[aa][i] + sqrt(sigma2/2)*gaussdouble(0.0,1.0)); ((short*) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[aa])[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti))+2*i+1] = - (short) (r_im_f[aa][i] + (iqim*r_re_f[aa][i]) + sqrt(sigma2/2)*ziggurat(0.0,1.0)); + (short) (r_im_f[aa][i] + (iqim*r_re_f[aa][i]) + sqrt(sigma2/2)*gaussdouble(0.0,1.0)); } } } @@ -1448,6 +1464,7 @@ int main(int argc, char **argv) //int re_allocated; char fname[32],vname[32]; FILE *bler_fd; + //FILE *chFf; char bler_fname[256]; FILE *time_meas_fd; char time_meas_fname[256]; @@ -2474,7 +2491,7 @@ int main(int argc, char **argv) eNB_rxtx_proc_t *proc_eNB = &eNB->proc.proc_rxtx[UE->current_thread_id[subframe]]; for (trials = 0; trials<n_frames; trials++) { - //printf("Trial %d\n",trials); + printf("Trial %d\n",trials); fflush(stdout); round=0; @@ -2650,7 +2667,7 @@ int main(int argc, char **argv) if (n_frames==1) { printf("tx_lev = %d (%d dB)\n",tx_lev,tx_lev_dB); if (!UE->do_ofdm_mod) - write_output("txsig0.m","txs0", &eNB->common_vars.txdataF[eNB_id][0][subframe*(eNB->frame_parms.ofdm_symbol_size*eNB->frame_parms.symbols_per_tti)], (eNB->frame_parms.ofdm_symbol_size*eNB->frame_parms.symbols_per_tti),1,1); + write_output("txsig0.m","txs0", &eNB->common_vars.txdata[eNB_id][0][subframe*eNB->frame_parms.samples_per_tti],eNB->frame_parms.samples_per_tti,1,1); if (transmission_mode<7) { write_output("txsigF0.m","txsF0", &eNB->common_vars.txdataF[eNB_id][0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); @@ -2749,10 +2766,10 @@ int main(int argc, char **argv) if ((test_perf ==0 ) && (n_frames==1)) { if (UE->do_ofdm_mod) { - write_output_chFf("ch0_f.m","ch0_f",eNB2UE[0]->chFf[0].x,eNB2UE[0]->chFf[0].y,eNB2UE[0]->channel_length,1,8); + write_output_chFf("ch0_f.m","ch0_f",eNB2UE[0]->chFf[0].x,eNB2UE[0]->chFf[0].y,eNB2UE[0]->channel_length,1); if (eNB->frame_parms.nb_antennas_tx>1) - write_output_chFf("ch1_f.m","ch1_f",eNB2UE[0]->chFf[eNB->frame_parms.nb_antennas_rx].x,eNB2UE[0]->chFf[eNB->frame_parms.nb_antennas_rx].y,eNB2UE[0]->channel_length,1,8); + write_output_chFf("ch1_f.m","ch1_f",eNB2UE[0]->chFf[eNB->frame_parms.nb_antennas_rx].x,eNB2UE[0]->chFf[eNB->frame_parms.nb_antennas_rx].y,eNB2UE[0]->channel_length,1); } else {