From 0124e5378c910ea5fe0f745d59b7d43214c330e7 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Sat, 6 Jun 2020 22:55:13 +0200 Subject: [PATCH] adding possibility to read rx signal from file --- openair1/SIMULATION/NR_PHY/prachsim.c | 31 ++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/openair1/SIMULATION/NR_PHY/prachsim.c b/openair1/SIMULATION/NR_PHY/prachsim.c index 797118b382..c420ca41fa 100644 --- a/openair1/SIMULATION/NR_PHY/prachsim.c +++ b/openair1/SIMULATION/NR_PHY/prachsim.c @@ -99,7 +99,9 @@ int main(int argc, char **argv){ // double prach_sinr; // uint32_t nsymb; // uint16_t preamble_max, preamble_energy_max; - + FILE *input_fd=NULL; + char* input_file=NULL; + int n_bytes=0; NR_DL_FRAME_PARMS *frame_parms; NR_PRACH_RESOURCES_t prach_resources; @@ -292,6 +294,14 @@ int main(int argc, char **argv){ break; case 'F': + input_fd = fopen(optarg,"r"); + input_file = optarg; + + if (input_fd==NULL) { + printf("Problem with filename %s\n",optarg); + exit(-1); + } + break; default: @@ -647,7 +657,7 @@ int main(int argc, char **argv){ for (trial=0; trialcommon.rxdata[aa][rx_prach_start])[2*i+1] = (short) (.167*(r_im[aa][i] + (iqim*r_re[aa][i]) + sqrt(sigma2/2)*gaussdouble(0.0,1.0))); } } + } else { + n_bytes = fread(&ru->common.rxdata[0][rx_prach_start+frame_parms->samples_per_subframe/2],sizeof(int32_t),frame_parms->samples_per_subframe/2,input_fd); + printf("fread %d bytes from file %s\n",n_bytes,input_file); + if (n_bytes!=frame_parms->samples_per_subframe/2) { + printf("expected %d bytes\n",frame_parms->samples_per_subframe/2); + exit(-1); + } + } + rx_nr_prach_ru(ru, prach_format, numRA, prachStartSymbol, frame, slot); @@ -695,7 +714,7 @@ int main(int argc, char **argv){ LOG_M("prach0.m","prach0", &txdata[0][prach_start], frame_parms->samples_per_subframe, 1, 1); LOG_M("prachF0.m","prachF0", &gNB->prach_vars.prachF[0], N_ZC, 1, 1); LOG_M("rxsig0.m","rxs0", &gNB->common_vars.rxdata[0][rx_prach_start], frame_parms->samples_per_subframe, 1, 1); - //LOG_M("ru_rxsig0.m","rxs0", &ru->common.rxdata[0][rx_prach_start], frame_parms->samples_per_subframe, 1, 1); + LOG_M("ru_rxsig0.m","rxs0", &ru->common.rxdata[0][rx_prach_start], frame_parms->samples_per_subframe, 1, 1); LOG_M("rxsigF0.m","rxsF0", gNB->prach_vars.rxsigF[0], N_ZC, 1, 1); LOG_M("prach_preamble.m","prachp", &gNB->X_u[0], N_ZC, 1, 1); LOG_M("ue_prach_preamble.m","prachp", &UE->X_u[0], N_ZC, 1, 1); @@ -703,6 +722,8 @@ int main(int argc, char **argv){ } } printf("SNR %f dB, UE Speed %f km/h: errors %d/%d (delay %f)\n", SNR, ue_speed, prach_errors, n_frames, delay_avg/(double)(n_frames-prach_errors)); + if (input_fd) + break; if (prach_errors) break; } // UE Speed loop @@ -710,6 +731,8 @@ int main(int argc, char **argv){ printf("PRACH test OK\n"); break; } + if (input_fd) + break; } //SNR loop for (i=0; i<2; i++) { @@ -724,5 +747,7 @@ int main(int argc, char **argv){ free(r_re); free(r_im); + if (input_fd) fclose(input_fd); + return(0); }