Commit eda87e60 authored by Navid Nikaein's avatar Navid Nikaein

* add test case 02 for performance benchmarking of the softmodem



git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5328 818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent 2c445795
...@@ -194,25 +194,28 @@ int main(int argc, char **argv) { ...@@ -194,25 +194,28 @@ int main(int argc, char **argv) {
unsigned int coded_bits_per_codeword,nsymb; unsigned int coded_bits_per_codeword,nsymb;
int subframe=3; int subframe=3;
unsigned int tx_lev=0,tx_lev_dB,trials,errs[4]={0,0,0,0},round_trials[4]={0,0,0,0}; unsigned int tx_lev=0,tx_lev_dB,trials,errs[4]={0,0,0,0},round_trials[4]={0,0,0,0};
uint8_t transmission_mode=1,n_rx=1; uint8_t transmission_mode=1,n_rx=1,n_tx=1;
FILE *bler_fd; FILE *bler_fd=NULL;
char bler_fname[512]; char bler_fname[512];
FILE *time_meas_fd=NULL;
char time_meas_fname[256];
FILE *input_fdUL=NULL,*trch_out_fdUL=NULL; FILE *input_fdUL=NULL,*trch_out_fdUL=NULL;
// unsigned char input_file=0; // unsigned char input_file=0;
char input_val_str[50],input_val_str2[50]; char input_val_str[50],input_val_str2[50];
// FILE *rx_frame_file; // FILE *rx_frame_file;
FILE *csv_fdUL; FILE *csv_fdUL=NULL;
FILE *fperen; FILE *fperen=NULL;
char fperen_name[512]; char fperen_name[512];
FILE *fmageren; FILE *fmageren=NULL;
char fmageren_name[512]; char fmageren_name[512];
FILE *flogeren; FILE *flogeren=NULL;
char flogeren_name[512]; char flogeren_name[512];
/* FILE *ftxlev; /* FILE *ftxlev;
...@@ -246,7 +249,11 @@ int main(int argc, char **argv) { ...@@ -246,7 +249,11 @@ int main(int argc, char **argv) {
uint32_t UL_alloc_pdu; uint32_t UL_alloc_pdu;
int s,Kr,Kr_bytes; int s,Kr,Kr_bytes;
int dump_perf=0; int dump_perf=0;
int test_perf=0;
double effective_rate=0.0;
char channel_model_input[10];
uint8_t max_turbo_iterations=4; uint8_t max_turbo_iterations=4;
uint8_t llr8_flag=0; uint8_t llr8_flag=0;
int nb_rb_set = 0; int nb_rb_set = 0;
...@@ -260,7 +267,7 @@ int main(int argc, char **argv) { ...@@ -260,7 +267,7 @@ int main(int argc, char **argv) {
logInit(); logInit();
while ((c = getopt (argc, argv, "hapbm:n:Y:X:s:w:e:q:d:D:c:r:i:f:y:c:oA:C:R:g:N:l:S:T:QB:PI:L")) != -1) { while ((c = getopt (argc, argv, "hapbm:n:Y:X:x:s:w:e:q:d:D:O:c:r:i:f:y:c:oA:C:R:g:N:l:S:T:QB:PI:L")) != -1) {
switch (c) { switch (c) {
case 'a': case 'a':
channel_model = AWGN; channel_model = AWGN;
...@@ -288,6 +295,7 @@ int main(int argc, char **argv) { ...@@ -288,6 +295,7 @@ int main(int argc, char **argv) {
abstx= atoi(optarg); abstx= atoi(optarg);
break; break;
case 'g': case 'g':
sprintf(channel_model_input,optarg,10);
switch((char)*optarg) { switch((char)*optarg) {
case 'A': case 'A':
channel_model=SCM_A; channel_model=SCM_A;
...@@ -341,6 +349,10 @@ int main(int argc, char **argv) { ...@@ -341,6 +349,10 @@ int main(int argc, char **argv) {
channel_model=Rice1; channel_model=Rice1;
chMod = 14; chMod = 14;
break; break;
case 'N':
channel_model=AWGN;
chMod = 1;
break;
default: default:
msg("Unsupported channel model!\n"); msg("Unsupported channel model!\n");
exit(-1); exit(-1);
...@@ -356,6 +368,17 @@ int main(int argc, char **argv) { ...@@ -356,6 +368,17 @@ int main(int argc, char **argv) {
case 'e': case 'e':
input_snr_step= atof(optarg); input_snr_step= atof(optarg);
break; break;
case 'x':
transmission_mode=atoi(optarg);
if ((transmission_mode!=1) &&
(transmission_mode!=2)) {
msg("Unsupported transmission mode %d\n",transmission_mode);
exit(-1);
}
if (transmission_mode>1) {
n_tx = 1;
}
break;
case 'y': case 'y':
n_rx = atoi(optarg); n_rx = atoi(optarg);
break; break;
...@@ -428,6 +451,10 @@ int main(int argc, char **argv) { ...@@ -428,6 +451,10 @@ int main(int argc, char **argv) {
dump_perf=1; dump_perf=1;
opp_enabled=1; opp_enabled=1;
break; break;
case 'O':
test_perf=atoi(optarg);
//print_perf =1;
break;
case 'L': case 'L':
llr8_flag=1; llr8_flag=1;
break; break;
...@@ -487,6 +514,13 @@ int main(int argc, char **argv) { ...@@ -487,6 +514,13 @@ int main(int argc, char **argv) {
bler_fd = fopen(bler_fname,"w"); 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"); 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 (test_perf != 0) {
sprintf(time_meas_fname,"%s/TEST/OAI/PERF/time_meas_prb%d_mcs%d_antrx%d_channel%s_tx%d.csv",
getenv("OPENAIR_TARGETS"),
N_RB_DL,mcs,n_rx,channel_model_input,transmission_mode);
time_meas_fd = fopen(time_meas_fname,"w");
}
if(abstx){ 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); 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);
...@@ -807,6 +841,7 @@ int main(int argc, char **argv) { ...@@ -807,6 +841,7 @@ int main(int argc, char **argv) {
} }
avg_iter = 0; iter_trials=0; avg_iter = 0; iter_trials=0;
reset_meas(&PHY_vars_UE->phy_proc_tx);
reset_meas(&PHY_vars_UE->ofdm_mod_stats); reset_meas(&PHY_vars_UE->ofdm_mod_stats);
reset_meas(&PHY_vars_UE->ulsch_modulation_stats); reset_meas(&PHY_vars_UE->ulsch_modulation_stats);
reset_meas(&PHY_vars_UE->ulsch_encoding_stats); reset_meas(&PHY_vars_UE->ulsch_encoding_stats);
...@@ -815,6 +850,8 @@ int main(int argc, char **argv) { ...@@ -815,6 +850,8 @@ int main(int argc, char **argv) {
reset_meas(&PHY_vars_UE->ulsch_turbo_encoding_stats); reset_meas(&PHY_vars_UE->ulsch_turbo_encoding_stats);
reset_meas(&PHY_vars_UE->ulsch_segmentation_stats); reset_meas(&PHY_vars_UE->ulsch_segmentation_stats);
reset_meas(&PHY_vars_UE->ulsch_multiplexing_stats); reset_meas(&PHY_vars_UE->ulsch_multiplexing_stats);
reset_meas(&PHY_vars_eNB->phy_proc_rx);
reset_meas(&PHY_vars_eNB->ofdm_demod_stats); reset_meas(&PHY_vars_eNB->ofdm_demod_stats);
reset_meas(&PHY_vars_eNB->ulsch_channel_estimation_stats); reset_meas(&PHY_vars_eNB->ulsch_channel_estimation_stats);
reset_meas(&PHY_vars_eNB->ulsch_freq_offset_estimation_stats); reset_meas(&PHY_vars_eNB->ulsch_freq_offset_estimation_stats);
...@@ -877,6 +914,9 @@ int main(int argc, char **argv) { ...@@ -877,6 +914,9 @@ int main(int argc, char **argv) {
/////////////////////////////////////// ///////////////////////////////////////
if (input_fdUL == NULL) { if (input_fdUL == NULL) {
start_meas(&PHY_vars_UE->phy_proc_tx);
#ifdef OFDMA_ULSCH #ifdef OFDMA_ULSCH
if (srs_flag) if (srs_flag)
generate_srs_tx(PHY_vars_UE,0,AMP,subframe); generate_srs_tx(PHY_vars_UE,0,AMP,subframe);
...@@ -925,7 +965,7 @@ int main(int argc, char **argv) { ...@@ -925,7 +965,7 @@ int main(int argc, char **argv) {
PHY_vars_UE->ulsch_ue[0]); PHY_vars_UE->ulsch_ue[0]);
#endif #endif
stop_meas(&PHY_vars_UE->ulsch_modulation_stats); stop_meas(&PHY_vars_UE->ulsch_modulation_stats);
if (n_frames==1) { if (n_frames==1) {
write_output("txsigF0UL.m","txsF0", &PHY_vars_UE->lte_ue_common_vars.txdataF[0][PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size*nsymb*subframe],PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size*nsymb,1,1); write_output("txsigF0UL.m","txsF0", &PHY_vars_UE->lte_ue_common_vars.txdataF[0][PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size*nsymb*subframe],PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size*nsymb,1,1);
//write_output("txsigF1.m","txsF1", PHY_vars_UE->lte_ue_common_vars.txdataF[0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); //write_output("txsigF1.m","txsF1", PHY_vars_UE->lte_ue_common_vars.txdataF[0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
...@@ -954,7 +994,7 @@ int main(int argc, char **argv) { ...@@ -954,7 +994,7 @@ int main(int argc, char **argv) {
#endif #endif
stop_meas(&PHY_vars_UE->ofdm_mod_stats); stop_meas(&PHY_vars_UE->ofdm_mod_stats);
stop_meas(&PHY_vars_UE->phy_proc_tx);
tx_lev += signal_energy(&txdata[aa][PHY_vars_eNB->lte_frame_parms.samples_per_tti*subframe], tx_lev += signal_energy(&txdata[aa][PHY_vars_eNB->lte_frame_parms.samples_per_tti*subframe],
PHY_vars_eNB->lte_frame_parms.samples_per_tti); PHY_vars_eNB->lte_frame_parms.samples_per_tti);
...@@ -1067,7 +1107,7 @@ int main(int argc, char **argv) { ...@@ -1067,7 +1107,7 @@ int main(int argc, char **argv) {
#endif #endif
start_meas(&PHY_vars_eNB->phy_proc_rx);
start_meas(&PHY_vars_eNB->ofdm_demod_stats); start_meas(&PHY_vars_eNB->ofdm_demod_stats);
lte_eNB_I0_measurements(PHY_vars_eNB, lte_eNB_I0_measurements(PHY_vars_eNB,
0, 0,
...@@ -1123,7 +1163,7 @@ int main(int argc, char **argv) { ...@@ -1123,7 +1163,7 @@ int main(int argc, char **argv) {
1, // Nbundled 1, // Nbundled
llr8_flag); llr8_flag);
stop_meas(&PHY_vars_eNB->ulsch_decoding_stats); stop_meas(&PHY_vars_eNB->ulsch_decoding_stats);
stop_meas(&PHY_vars_eNB->phy_proc_rx);
if (cqi_flag > 0) { if (cqi_flag > 0) {
cqi_error = 0; cqi_error = 0;
if (PHY_vars_eNB->ulsch_eNB[0]->Or1 < 32) { if (PHY_vars_eNB->ulsch_eNB[0]->Or1 < 32) {
...@@ -1215,22 +1255,24 @@ int main(int argc, char **argv) { ...@@ -1215,22 +1255,24 @@ int main(int argc, char **argv) {
dB_fixed(PHY_vars_eNB->lte_eNB_pusch_vars[0]->ulsch_power[1]), dB_fixed(PHY_vars_eNB->lte_eNB_pusch_vars[0]->ulsch_power[1]),
PHY_vars_eNB->PHY_measurements_eNB->n0_power_dB[0], PHY_vars_eNB->PHY_measurements_eNB->n0_power_dB[0],
PHY_vars_eNB->PHY_measurements_eNB->n0_power_dB[1]); PHY_vars_eNB->PHY_measurements_eNB->n0_power_dB[1]);
effective_rate = ((double)(round_trials[0])/((double)round_trials[0] + round_trials[1] + round_trials[2] + round_trials[3]));
printf("Errors (%d/%d %d/%d %d/%d %d/%d), Pe = (%e,%e,%e,%e) => effective rate %f (%3.1f%%,%f), normalized delay %f (%f)\n", printf("Errors (%d/%d %d/%d %d/%d %d/%d), Pe = (%e,%e,%e,%e) => effective rate %f (%3.1f%%,%f), normalized delay %f (%f)\n",
errs[0], errs[0],
round_trials[0], round_trials[0],
errs[1], errs[1],
round_trials[0], round_trials[1],
errs[2], errs[2],
round_trials[0], round_trials[2],
errs[3], errs[3],
round_trials[0], round_trials[3],
(double)errs[0]/(round_trials[0]), (double)errs[0]/(round_trials[0]),
(double)errs[1]/(round_trials[0]), (double)errs[1]/(round_trials[0]),
(double)errs[2]/(round_trials[0]), (double)errs[2]/(round_trials[0]),
(double)errs[3]/(round_trials[0]), (double)errs[3]/(round_trials[0]),
rate*((double)(round_trials[0])/((double)round_trials[0] + round_trials[1] + round_trials[2] + round_trials[3])), rate*effective_rate,
100*((double)(round_trials[0])/((double)round_trials[0] + round_trials[1] + round_trials[2] + round_trials[3])), 100*effective_rate,
rate, rate,
(1.0*(round_trials[0]-errs[0])+2.0*(round_trials[1]-errs[1])+3.0*(round_trials[2]-errs[2])+4.0*(round_trials[3]-errs[3]))/((double)round_trials[0])/(double)PHY_vars_eNB->ulsch_eNB[0]->harq_processes[harq_pid]->TBS, (1.0*(round_trials[0]-errs[0])+2.0*(round_trials[1]-errs[1])+3.0*(round_trials[2]-errs[2])+4.0*(round_trials[3]-errs[3]))/((double)round_trials[0])/(double)PHY_vars_eNB->ulsch_eNB[0]->harq_processes[harq_pid]->TBS,
(1.0*(round_trials[0]-errs[0])+2.0*(round_trials[1]-errs[1])+3.0*(round_trials[2]-errs[2])+4.0*(round_trials[3]-errs[3]))/((double)round_trials[0])); (1.0*(round_trials[0]-errs[0])+2.0*(round_trials[1]-errs[1])+3.0*(round_trials[2]-errs[2])+4.0*(round_trials[3]-errs[3]))/((double)round_trials[0]));
...@@ -1263,6 +1305,7 @@ int main(int argc, char **argv) { ...@@ -1263,6 +1305,7 @@ int main(int argc, char **argv) {
if (dump_perf==1) { if (dump_perf==1) {
printf("UE TX function statistics (per 1ms subframe)\n\n"); printf("UE TX function statistics (per 1ms subframe)\n\n");
printf("Total PHY proc tx :%f us (%d trials)\n",(double)PHY_vars_UE->phy_proc_tx.diff/PHY_vars_UE->phy_proc_tx.trials/cpu_freq_GHz/1000.0,PHY_vars_UE->phy_proc_tx.trials);
printf("OFDM_mod time :%f us (%d trials)\n",(double)PHY_vars_UE->ofdm_mod_stats.diff/PHY_vars_UE->ofdm_mod_stats.trials/cpu_freq_GHz/1000.0,PHY_vars_UE->ofdm_mod_stats.trials); printf("OFDM_mod time :%f us (%d trials)\n",(double)PHY_vars_UE->ofdm_mod_stats.diff/PHY_vars_UE->ofdm_mod_stats.trials/cpu_freq_GHz/1000.0,PHY_vars_UE->ofdm_mod_stats.trials);
printf("ULSCH modulation time :%f us (%d trials)\n",(double)PHY_vars_UE->ulsch_modulation_stats.diff/PHY_vars_UE->ulsch_modulation_stats.trials/cpu_freq_GHz/1000.0,PHY_vars_UE->ulsch_modulation_stats.trials); printf("ULSCH modulation time :%f us (%d trials)\n",(double)PHY_vars_UE->ulsch_modulation_stats.diff/PHY_vars_UE->ulsch_modulation_stats.trials/cpu_freq_GHz/1000.0,PHY_vars_UE->ulsch_modulation_stats.trials);
printf("ULSCH encoding time :%f us (%d trials)\n",(double)PHY_vars_UE->ulsch_encoding_stats.diff/PHY_vars_UE->ulsch_encoding_stats.trials/cpu_freq_GHz/1000.0,PHY_vars_UE->ulsch_encoding_stats.trials); printf("ULSCH encoding time :%f us (%d trials)\n",(double)PHY_vars_UE->ulsch_encoding_stats.diff/PHY_vars_UE->ulsch_encoding_stats.trials/cpu_freq_GHz/1000.0,PHY_vars_UE->ulsch_encoding_stats.trials);
...@@ -1273,6 +1316,7 @@ int main(int argc, char **argv) { ...@@ -1273,6 +1316,7 @@ int main(int argc, char **argv) {
printf("|__ ULSCH multiplexing time :%f us (%d trials)\n",((double)PHY_vars_UE->ulsch_multiplexing_stats.trials/PHY_vars_UE->ulsch_encoding_stats.trials)*(double)PHY_vars_UE->ulsch_multiplexing_stats.diff/PHY_vars_UE->ulsch_multiplexing_stats.trials/cpu_freq_GHz/1000.0,PHY_vars_UE->ulsch_multiplexing_stats.trials); printf("|__ ULSCH multiplexing time :%f us (%d trials)\n",((double)PHY_vars_UE->ulsch_multiplexing_stats.trials/PHY_vars_UE->ulsch_encoding_stats.trials)*(double)PHY_vars_UE->ulsch_multiplexing_stats.diff/PHY_vars_UE->ulsch_multiplexing_stats.trials/cpu_freq_GHz/1000.0,PHY_vars_UE->ulsch_multiplexing_stats.trials);
printf("\n\neNB RX function statistics (per 1ms subframe)\n\n"); printf("\n\neNB RX function statistics (per 1ms subframe)\n\n");
printf("Total PHY proc rx :%f us (%d trials)\n",(double)PHY_vars_eNB->phy_proc_rx.diff/PHY_vars_eNB->phy_proc_rx.trials/cpu_freq_GHz/1000.0,PHY_vars_eNB->phy_proc_rx.trials);
printf("OFDM_demod time :%f us (%d trials)\n",(double)PHY_vars_eNB->ofdm_demod_stats.diff/PHY_vars_eNB->ofdm_demod_stats.trials/cpu_freq_GHz/1000.0,PHY_vars_eNB->ofdm_demod_stats.trials); printf("OFDM_demod time :%f us (%d trials)\n",(double)PHY_vars_eNB->ofdm_demod_stats.diff/PHY_vars_eNB->ofdm_demod_stats.trials/cpu_freq_GHz/1000.0,PHY_vars_eNB->ofdm_demod_stats.trials);
printf("ULSCH demodulation time :%f us (%d trials)\n",(double)PHY_vars_eNB->ulsch_demodulation_stats.diff/PHY_vars_eNB->ulsch_demodulation_stats.trials/cpu_freq_GHz/1000.0,PHY_vars_eNB->ulsch_demodulation_stats.trials); printf("ULSCH demodulation time :%f us (%d trials)\n",(double)PHY_vars_eNB->ulsch_demodulation_stats.diff/PHY_vars_eNB->ulsch_demodulation_stats.trials/cpu_freq_GHz/1000.0,PHY_vars_eNB->ulsch_demodulation_stats.trials);
printf("ULSCH Decoding time (%.2f Mbit/s, avg iter %f) :%f us (%d trials, max %f)\n", printf("ULSCH Decoding time (%.2f Mbit/s, avg iter %f) :%f us (%d trials, max %f)\n",
...@@ -1338,7 +1382,73 @@ int main(int argc, char **argv) { ...@@ -1338,7 +1382,73 @@ int main(int argc, char **argv) {
} //ABStraction } //ABStraction
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\n");
fprintf(time_meas_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(time_meas_fd,"SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3;ND;\n");
fprintf(time_meas_fd,"%f;%d;%d;%f(%2.1f%%,%f);%d;%d;%d;%d;%d;%d;%d;%d;(%e,%e,%e,%e);%f(%f);\n",
SNR,
mcs,
PHY_vars_eNB->ulsch_eNB[0]->harq_processes[harq_pid]->TBS,
rate*effective_rate,
100*effective_rate,
rate,
errs[0],
round_trials[0],
errs[1],
round_trials[1],
errs[2],
round_trials[2],
errs[3],
round_trials[3],
(double)errs[0]/(round_trials[0]),
(double)errs[1]/(round_trials[0]),
(double)errs[2]/(round_trials[0]),
(double)errs[3]/(round_trials[0]),
(1.0*(round_trials[0]-errs[0])+2.0*(round_trials[1]-errs[1])+3.0*(round_trials[2]-errs[2])+4.0*(round_trials[3]-errs[3]))/((double)round_trials[0])/(double)PHY_vars_eNB->ulsch_eNB[0]->harq_processes[harq_pid]->TBS,
(1.0*(round_trials[0]-errs[0])+2.0*(round_trials[1]-errs[1])+3.0*(round_trials[2]-errs[2])+4.0*(round_trials[3]-errs[3]))/((double)round_trials[0]));
fprintf(time_meas_fd,"UE_PROC_TX(%d); OFDM_MOD(%d); UL_MOD(%d); UL_ENC(%d); eNB_PROC_RX(%d); OFDM_DEMOD(%d); UL_DEMOD(%d); UL_DECOD(%d);\n",
PHY_vars_UE->phy_proc_tx.trials,
PHY_vars_UE->ofdm_mod_stats.trials,
PHY_vars_UE->ulsch_modulation_stats.trials,
PHY_vars_UE->ulsch_encoding_stats.trials,
PHY_vars_eNB->phy_proc_rx.trials,
PHY_vars_eNB->ofdm_demod_stats.trials,
PHY_vars_eNB->ulsch_demodulation_stats.trials,
PHY_vars_eNB->ulsch_decoding_stats.trials
);
fprintf(time_meas_fd,"%f;%f;%f;%f;%f;%f;%f;%f",
get_time_meas_us(&PHY_vars_UE->phy_proc_tx),
get_time_meas_us(&PHY_vars_UE->ofdm_mod_stats),
get_time_meas_us(&PHY_vars_UE->ulsch_modulation_stats),
get_time_meas_us(&PHY_vars_UE->ulsch_encoding_stats),
get_time_meas_us(&PHY_vars_eNB->phy_proc_rx),
get_time_meas_us(&PHY_vars_eNB->ofdm_demod_stats),
get_time_meas_us(&PHY_vars_eNB->ulsch_demodulation_stats),
get_time_meas_us(&PHY_vars_eNB->ulsch_decoding_stats)
);
printf("[passed] effective rate : %f (%2.1f%%,%f)): log and break \n",rate*effective_rate, 100*effective_rate, rate );
break;
} else if (test_perf !=0 ){
printf("[continue] effective rate : %f (%2.1f%%,%f)): increase snr \n",rate*effective_rate, 100*effective_rate, rate);
}
if (((double)errs[0]/(round_trials[0]))<1e-2) if (((double)errs[0]/(round_trials[0]))<1e-2)
break; break;
} // SNR } // SNR
...@@ -1377,6 +1487,8 @@ int main(int argc, char **argv) { ...@@ -1377,6 +1487,8 @@ int main(int argc, char **argv) {
fclose(csv_fdUL); fclose(csv_fdUL);
} }
fclose(bler_fd); fclose(bler_fd);
if (test_perf !=0)
fclose (time_meas_fd);
printf("Freeing channel I/O\n"); printf("Freeing channel I/O\n");
for (i=0;i<2;i++) { for (i=0;i<2;i++) {
......
...@@ -42,7 +42,7 @@ makerr1 = '***' ...@@ -42,7 +42,7 @@ makerr1 = '***'
makerr2 = 'Error 1' makerr2 = 'Error 1'
def execute(oai, user, pw, logfile,logdir): def execute(oai, user, pw, logfile,logdir,debug):
case = '101' case = '101'
......
...@@ -48,8 +48,8 @@ NUM_UE=2 ...@@ -48,8 +48,8 @@ NUM_UE=2
NUM_eNB=1 NUM_eNB=1
NUM_TRIALS=3 NUM_TRIALS=3
PRB=[25,50,75,100] PRB=[25]#,50,75,100]
MCS=[4,5,7,9,12,15,18,21,24,27] MCS=[4,5]#,7,9,12,15,18,21,24,27]
ANT_TX=2 # 2 ANT_TX=2 # 2
ANT_RX=2 # 2 ANT_RX=2 # 2
PDCCH=2 #, 2, 3, 4 PDCCH=2 #, 2, 3, 4
...@@ -57,12 +57,15 @@ CHANNEL=["N"] # A,B,C,D,E,F, ...@@ -57,12 +57,15 @@ CHANNEL=["N"] # A,B,C,D,E,F,
TX_MODE=2 # 2, TX_MODE=2 # 2,
MIN_SNR=2 MIN_SNR=2
MAX_SNR=18 MAX_SNR=18
PERF=80
OPT="-L"
FRAME=500
#OPT="-L -d" # 8bit decoder , activate dci decoding at UE #OPT="-L -d" # 8bit decoder , activate dci decoding at UE
def execute(oai, user, pw, logfile,logdir): def execute(oai, user, pw, logfile,logdir,debug):
case = '102' case = '102'
oai.send('cd $OPENAIR1_DIR;') oai.send('cd $OPENAIR1_DIR;')
...@@ -94,8 +97,7 @@ def execute(oai, user, pw, logfile,logdir): ...@@ -94,8 +97,7 @@ def execute(oai, user, pw, logfile,logdir):
name = 'Run oai.dlsim.perf.70%' name = 'Run oai.dlsim.perf.70%'
diag = 'no diagnostic is available, check the log file' diag = 'no diagnostic is available, check the log file'
for i in range(len(PRB)): for i in range(len(PRB)):
#for j in range(len(MCS)): for j in range(len(MCS)):
for j in range(0,28):
for k in range(1,ANT_TX): for k in range(1,ANT_TX):
for m in range (1,ANT_RX): for m in range (1,ANT_RX):
for n in range(1,PDCCH): for n in range(1,PDCCH):
...@@ -106,16 +108,17 @@ def execute(oai, user, pw, logfile,logdir): ...@@ -106,16 +108,17 @@ def execute(oai, user, pw, logfile,logdir):
#conf = '-B' + str(PRB[i]) + ' -m'+str(MCS[j]) + ' -y'+str(k) + ' -z'+str(m) +' -c'+str(n) + ' -g'+str(CHANNEL[o]) + ' -x'+str(p) + ' -s'+str(q) + ' -w1.0 -f.1 -n500 -P -O80' #+ OPT #conf = '-B' + str(PRB[i]) + ' -m'+str(MCS[j]) + ' -y'+str(k) + ' -z'+str(m) +' -c'+str(n) + ' -g'+str(CHANNEL[o]) + ' -x'+str(p) + ' -s'+str(q) + ' -w1.0 -f.1 -n500 -P -O80' #+ OPT
#trace = logdir + '/time_meas' + '_prb'+str(PRB[i])+'_mcs'+ str(MCS[j])+ '_anttx' + str(k)+ '_antrx' + str(m) + '_pdcch' + str(n) + '_channel' +str(CHANNEL[o]) + '_tx' +str(p) + '_snr' +str(q)+'.'+case+str(test)+ '.log' #trace = logdir + '/time_meas' + '_prb'+str(PRB[i])+'_mcs'+ str(MCS[j])+ '_anttx' + str(k)+ '_antrx' + str(m) + '_pdcch' + str(n) + '_channel' +str(CHANNEL[o]) + '_tx' +str(p) + '_snr' +str(q)+'.'+case+str(test)+ '.log'
conf = '-B' + str(PRB[i]) + ' -m'+str(j) + ' -y'+str(k) + ' -z'+str(m) +' -c'+str(n) + ' -g'+str(CHANNEL[o]) + ' -x'+str(p) + ' -s'+str(q) + ' -w1.0 -f.1 -n500 -P -O80' #+ OPT conf = '-B' + str(PRB[i]) + ' -m'+str(MCS[j]) + ' -y'+str(k) + ' -z'+str(m) +' -c'+str(n) + ' -g'+str(CHANNEL[o]) + ' -x'+str(p) + ' -s'+str(q) + ' -w1.0 -f.1 -P -n'+str(FRAME)+' -O'+str(PERF)+' '+ OPT
trace = logdir + '/time_meas' + '_prb'+str(PRB[i])+'_mcs'+ str(j)+ '_anttx' + str(k)+ '_antrx' + str(m) + '_pdcch' + str(n) + '_channel' +str(CHANNEL[o]) + '_tx' +str(p) + '_snr' +str(q)+'.'+case+str(test)+ '.log' trace = logdir + '/time_meas' + '_prb'+str(PRB[i])+'_mcs'+ str(MCS[j])+ '_anttx' + str(k)+ '_antrx' + str(m) + '_pdcch' + str(n) + '_channel' +str(CHANNEL[o]) + '_tx' +str(p) + '_snr' +str(q)+'.'+case+str(test)+ '.log'
tee = ' 2>&1 | tee ' + trace tee = ' 2>&1 | tee ' + trace
match = oai.send_expect_re('./dlsim.rel8 ' + conf + tee, 'passed', 0, 1000) match = oai.send_expect_re('./dlsim.rel8 ' + conf + tee, 'passed', 0, 1000)
#print conf if debug :
print conf
if match : if match :
log.ok(case, str(test), name, conf, '', logfile) log.ok(case, str(test), name, conf, '', logfile)
MIN_SNR = q # just to speed up the test MIN_SNR = q # just to speed up the test
test+=1 test+=1
break; # found smallest snr break; # found the smallest snr
else : else :
try: try:
if os.path.isfile(trace) : if os.path.isfile(trace) :
......
#******************************************************************************
# Eurecom OpenAirInterface
# Copyright(c) 1999 - 2013 Eurecom
# This program is free software; you can redistribute it and/or modify it
# under the terms and conditions of the GNU General Public License,
# version 2, as published by the Free Software Foundation.
# This program is distributed in the hope it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
# The full GNU General Public License is included in this distribution in
# the file called "COPYING".
# Contact Information
# Openair Admin: openair_admin@eurecom.fr
# Openair Tech : openair_tech@eurecom.fr
# Forums : http://forums.eurecom.fsr/openairinterface
# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France
#*****************************************************************************
# \file case02.py
# \brief test case 02 for OAI: executions
# \author Navid Nikaein
# \date 2013
# \version 0.1
# @ingroup _test
import time
import random
import log
import openair
import core
import os
import shutil # copy file
NUM_UE=2
NUM_eNB=1
NUM_TRIALS=3
PRB=[25]#,50,75,100]
MCS=[4,5,7,9,12,15,18,21,24,27]
ANT_TX=1 # 2
ANT_RX=2 # 2
CHANNEL=["N"] # A,B,C,D,E,F,
TX_MODE=2 # 2,
MIN_SNR=2
MAX_SNR=34
PERF=80
OPT="-L"
FRAME=500
#OPT="-L -d" # 8bit decoder , activate dci decoding at UE
def execute(oai, user, pw, logfile,logdir,debug):
case = '103'
oai.send('cd $OPENAIR1_DIR;')
oai.send('cd SIMULATION/LTE_PHY;')
try:
test = '0'
name = 'Run oai.ulsim.sanity'
conf = '-a -n 100'
diag = 'ulsim is not running normally (Segmentation fault / Exiting / FATAL), debugging might be needed'
trace = logdir + '/log_' + case + test + '_1.txt;'
tee = ' 2>&1 | tee ' + trace
oai.send_expect_false('./ulsim.rel8 ' + conf + tee, 'Segmentation fault', 30)
trace = logdir + '/log_' + case + test + '_2.txt;'
tee = ' 2>&1 | tee ' + trace
oai.send_expect_false('./ulsim.rel8 ' + conf + tee, 'Exiting', 30)
trace = logdir + '/log_' + case + test + '_3.txt;'
tee = ' 2>&1 | tee ' + trace
oai.send_expect_false('./ulsim.rel8 ' + conf + tee, 'FATAL', 30)
except log.err, e:
log.fail(case, test, name, conf, e.value, diag, logfile,trace)
else:
log.ok(case, test, name, conf, '', logfile)
try:
test = 1
MIN_SNR=2
name = 'Run oai.ulsim.perf.'+str(PERF)+'%'
diag = 'no diagnostic is available, check the log file'
for i in range(len(PRB)):
for j in range(len(MCS)):
for m in range (1,ANT_RX):
for o in range(len(CHANNEL)):
for p in range(1,TX_MODE):
for q in range(MIN_SNR,MAX_SNR):
#if if PRB[i] :
conf = '-B' + str(PRB[i]) + ' -m'+str(MCS[j]) + ' -y'+str(m) + ' -g'+str(CHANNEL[o]) + ' -x'+str(p) + ' -s'+str(q) + ' -w1.0 -e.1 -P -n'+str(FRAME)+' -O'+str(PERF)+' '+ OPT
trace = logdir + '/time_meas' + '_prb'+str(PRB[i])+'_mcs'+ str(MCS[j])+ '_antrx' + str(m) + '_channel' +str(CHANNEL[o]) + '_tx' +str(p) + '_snr' +str(q)+'.'+case+str(test)+ '.log'
tee = ' 2>&1 | tee ' + trace
match = oai.send_expect_re('./ulsim.rel8 ' + conf + tee, 'passed', 0, 1000)
if debug :
print conf
if q == MAX_SNR :
log.skip(case,str(test), name, conf,'','',logfile)
if match :
log.ok(case, str(test), name, conf, '', logfile)
MIN_SNR = q # just to speed up the test
test+=1
break; # found the smallest snr
else :
try:
if os.path.isfile(trace) :
os.remove(trace)
except OSError, e: ## if failed, report it back to the user ##
print ("Error: %s - %s." % (e.filename,e.strerror))
except log.err, e:
log.fail(case, str(test), name, conf, e.value, diag, logfile,trace)
#else:
# log.ok(case, test, name, conf, '', logfile)
...@@ -46,6 +46,7 @@ import math #from time import clock ...@@ -46,6 +46,7 @@ import math #from time import clock
import log import log
import case11 import case11
import case12 import case12
import case13
from openair import * from openair import *
...@@ -109,8 +110,10 @@ oai.kill(user, pw) ...@@ -109,8 +110,10 @@ oai.kill(user, pw)
#oai.rm_driver(oai,user,pw) #oai.rm_driver(oai,user,pw)
# start te test cases # start te test cases
case11.execute(oai, user, pw, logfile,logdir) #case11.execute(oai, user, pw, logfile,logdir,debug)
case12.execute(oai, user, pw, logfile,logdir) #case12.execute(oai, user, pw, logfile,logdir,debug)
case13.execute(oai, user, pw, logfile,logdir,debug)
oai.kill(user, pw) oai.kill(user, pw)
#oai.rm_driver(oai,user,pw) #oai.rm_driver(oai,user,pw)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment