From 4d33b341c2dce68833b465bee2591aa94a544e9e Mon Sep 17 00:00:00 2001
From: Sakthivel Velumani <velumani@eurecom.fr>
Date: Wed, 5 Feb 2020 18:13:11 +0100
Subject: [PATCH] updated phy simulators

---
 executables/nr-ru.c                   |  2 +-
 openair1/SIMULATION/NR_PHY/dlsim.c    | 12 +++++-----
 openair1/SIMULATION/NR_PHY/pbchsim.c  |  4 ++--
 openair1/SIMULATION/NR_PHY/prachsim.c | 34 +++++++++++++--------------
 openair1/SIMULATION/NR_PHY/ulsim.c    |  2 +-
 5 files changed, 27 insertions(+), 27 deletions(-)

diff --git a/executables/nr-ru.c b/executables/nr-ru.c
index 183beef73a..dcc662b4b0 100644
--- a/executables/nr-ru.c
+++ b/executables/nr-ru.c
@@ -720,7 +720,7 @@ void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) {
   unsigned int txs;
   int i,txsymb;
   T(T_ENB_PHY_OUTPUT_SIGNAL, T_INT(0), T_INT(0), T_INT(frame), T_INT(slot),
-    T_INT(0), T_BUFFER(&ru->common.txdata[0][fp->get_samples_slot_timestamp(slot,fp,0)], fp->samples_per_subframe));
+    T_INT(0), T_BUFFER(&ru->common.txdata[0][fp->get_samples_slot_timestamp(slot,fp,0)], fp->samples_per_subframe * 4));
 
   int slot_type         = nr_slot_select(cfg,frame,slot%fp->slots_per_frame);
   int prevslot_type     = nr_slot_select(cfg,frame,(slot+(fp->slots_per_frame-1))%fp->slots_per_frame);
diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c
index 5ce6f9e420..103c73b903 100644
--- a/openair1/SIMULATION/NR_PHY/dlsim.c
+++ b/openair1/SIMULATION/NR_PHY/dlsim.c
@@ -740,7 +740,7 @@ int main(int argc, char **argv)
 	if (gNB->frame_parms.nb_antennas_tx>1)
 	  LOG_M("txsigF1.m","txsF1", gNB->common_vars.txdataF[1],frame_length_complex_samples_no_prefix,1,1);
       }
-      int tx_offset = slot*frame_parms->samples_per_slot;
+      int tx_offset = frame_parms->get_samples_slot_timestamp(slot,frame_parms,0);
       if (n_trials==1) printf("samples_per_slot_wCP = %d\n", frame_parms->samples_per_slot_wCP);
       
       //TODO: loop over slots
@@ -769,13 +769,13 @@ int main(int argc, char **argv)
       if (output_fd) 
 	fwrite(txdata[0],sizeof(int32_t),frame_length_complex_samples,output_fd);
       
-      int txlev = signal_energy(&txdata[0][(slot*frame_parms->samples_per_slot)+5*frame_parms->ofdm_symbol_size + 4*frame_parms->nb_prefix_samples + frame_parms->nb_prefix_samples0],
+      int txlev = signal_energy(&txdata[0][frame_parms->get_samples_slot_timestamp(slot,frame_parms,0)+5*frame_parms->ofdm_symbol_size + 4*frame_parms->nb_prefix_samples + frame_parms->nb_prefix_samples0],
 				frame_parms->ofdm_symbol_size + frame_parms->nb_prefix_samples);
       
       //  if (n_trials==1) printf("txlev %d (%f)\n",txlev,10*log10((double)txlev));
       
-      for (i=(slot * frame_parms->samples_per_slot); 
-	   i<((slot+1) * frame_parms->samples_per_slot); 
+      for (i=(frame_parms->get_samples_slot_timestamp(slot,frame_parms,0)); 
+	   i<(frame_parms->get_samples_slot_timestamp(slot+1,frame_parms,0)); 
 	   i++) {
 	for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
 	  r_re[aa][i] = ((double)(((short *)txdata[aa]))[(i<<1)]);
@@ -791,8 +791,8 @@ int main(int argc, char **argv)
       sigma2    = pow(10, sigma2_dB/10);
       if (n_trials==1) printf("sigma2 %f (%f dB), txlev %f (factor %f)\n",sigma2,sigma2_dB,10*log10((double)txlev),(double)(double)UE->frame_parms.ofdm_symbol_size/(12*rel15.rbSize));
       
-      for (i=(slot * frame_parms->samples_per_slot); 
-	   i<((slot+1) * frame_parms->samples_per_slot); 
+      for (i=frame_parms->get_samples_slot_timestamp(slot,frame_parms,0); 
+	   i<frame_parms->get_samples_slot_timestamp(slot+1,frame_parms,0);
 	   i++) {
 	for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
 	  ((short*) UE->common_vars.rxdata[aa])[2*i]   = (short) ((r_re[aa][i] + sqrt(sigma2/2)*gaussdouble(0.0,1.0)));
diff --git a/openair1/SIMULATION/NR_PHY/pbchsim.c b/openair1/SIMULATION/NR_PHY/pbchsim.c
index 9afba02290..0adeda61bb 100644
--- a/openair1/SIMULATION/NR_PHY/pbchsim.c
+++ b/openair1/SIMULATION/NR_PHY/pbchsim.c
@@ -479,14 +479,14 @@ int main(int argc, char **argv)
     	for (aa=0; aa<gNB->frame_parms.nb_antennas_tx; aa++) {
     		if (cyclic_prefix_type == 1) {
     			PHY_ofdm_mod(gNB->common_vars.txdataF[aa],
-    			             &txdata[aa][slot*frame_parms->samples_per_slot],
+    			             &txdata[aa][frame_parms->get_samples_slot_timestamp(slot,frame_parms,0)],
 				     frame_parms->ofdm_symbol_size,
 				     12,
 				     frame_parms->nb_prefix_samples,
 				     CYCLIC_PREFIX);
     		} else {
     			nr_normal_prefix_mod(gNB->common_vars.txdataF[aa],
-    			                     &txdata[aa][slot*frame_parms->samples_per_slot],
+    			                     &txdata[aa][frame_parms->get_samples_slot_timestamp(slot,frame_parms,0)],
 			                     14,
 			                     frame_parms);
     		}
diff --git a/openair1/SIMULATION/NR_PHY/prachsim.c b/openair1/SIMULATION/NR_PHY/prachsim.c
index 74a286863b..1ec18858dc 100644
--- a/openair1/SIMULATION/NR_PHY/prachsim.c
+++ b/openair1/SIMULATION/NR_PHY/prachsim.c
@@ -393,7 +393,7 @@ int main(int argc, char **argv)
   nsymb = (frame_parms->Ncp == 0) ? 14 : 12;
 
   printf("FFT Size %d, Extended Prefix %d, Samples per subframe %d,Frame type %s, Frequency Range %s\n",NUMBER_OF_OFDM_CARRIERS,
-         frame_parms->Ncp,frame_parms->samples_per_slot<<1,frame_parms->frame_type == FDD ? "FDD" : "TDD", frame_parms->freq_range == nr_FR1 ? "FR1" : "FR2");
+         frame_parms->Ncp,frame_parms->samples_per_subframe,frame_parms->frame_type == FDD ? "FDD" : "TDD", frame_parms->freq_range == nr_FR1 ? "FR1" : "FR2");
 
   ru->nr_frame_parms=frame_parms;
   ru->if_south = LOCAL_RF;
@@ -421,7 +421,7 @@ int main(int argc, char **argv)
   }
 
   txdata = UE->common_vars.txdata;
-  printf("txdata %p\n",&txdata[0][subframe*frame_parms->samples_per_slot<<1]);
+  printf("txdata %p\n",&txdata[0][subframe*frame_parms->samples_per_subframe]);
 
   double fs,bw;
 
@@ -524,25 +524,25 @@ int main(int argc, char **argv)
   /* tx_lev_dB not used later, no need to set */
   //tx_lev_dB = (unsigned int) dB_fixed(tx_lev);
 
-  LOG_M("txsig0.m","txs0", &txdata[0][subframe*frame_parms->samples_per_slot<<1],frame_parms->samples_per_slot<<1,1,1);
+  LOG_M("txsig0.m","txs0", &txdata[0][subframe*frame_parms->samples_per_subframe],frame_parms->samples_per_subframe,1,1);
   //LOG_M("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
 
   // multipath channel
   dump_nr_prach_config(&gNB->frame_parms,subframe);
 
-  for (i=0; i<2*frame_parms->samples_per_slot<<1; i++) {
+  for (i=0; i<2*frame_parms->samples_per_subframe; i++) {
     for (aa=0; aa<1; aa++) {
       if (awgn_flag == 0) {
-        s_re[aa][i] = ((double)(((short *)&txdata[aa][subframe*frame_parms->samples_per_slot<<1]))[(i<<1)]);
-        s_im[aa][i] = ((double)(((short *)&txdata[aa][subframe*frame_parms->samples_per_slot<<1]))[(i<<1)+1]);
+        s_re[aa][i] = ((double)(((short *)&txdata[aa][subframe*frame_parms->samples_per_subframe]))[(i<<1)]);
+        s_im[aa][i] = ((double)(((short *)&txdata[aa][subframe*frame_parms->samples_per_subframe]))[(i<<1)+1]);
       } else {
         for (aarx=0; aarx<gNB->frame_parms.nb_antennas_rx; aarx++) {
           if (aa==0) {
-            r_re[aarx][i] = ((double)(((short *)&txdata[aa][subframe*frame_parms->samples_per_slot<<1]))[(i<<1)]);
-            r_im[aarx][i] = ((double)(((short *)&txdata[aa][subframe*frame_parms->samples_per_slot<<1]))[(i<<1)+1]);
+            r_re[aarx][i] = ((double)(((short *)&txdata[aa][subframe*frame_parms->samples_per_subframe]))[(i<<1)]);
+            r_im[aarx][i] = ((double)(((short *)&txdata[aa][subframe*frame_parms->samples_per_subframe]))[(i<<1)+1]);
           } else {
-            r_re[aarx][i] += ((double)(((short *)&txdata[aa][subframe*frame_parms->samples_per_slot<<1]))[(i<<1)]);
-            r_im[aarx][i] += ((double)(((short *)&txdata[aa][subframe*frame_parms->samples_per_slot<<1]))[(i<<1)+1]);
+            r_re[aarx][i] += ((double)(((short *)&txdata[aa][subframe*frame_parms->samples_per_subframe]))[(i<<1)]);
+            r_im[aarx][i] += ((double)(((short *)&txdata[aa][subframe*frame_parms->samples_per_subframe]))[(i<<1)+1]);
           }
         }
       }
@@ -573,7 +573,7 @@ int main(int argc, char **argv)
 
         if (awgn_flag == 0) {
           multipath_tv_channel(UE2gNB,s_re,s_im,r_re,r_im,
-                               2*frame_parms->samples_per_slot<<1,0);
+                               2*frame_parms->samples_per_subframe,0);
         }
 
         if (n_frames==1) {
@@ -582,11 +582,11 @@ int main(int argc, char **argv)
                  10*log10(tx_lev));
         }
 
-        for (i=0; i<frame_parms->samples_per_slot<<1; i++) {
+        for (i=0; i<frame_parms->samples_per_subframe; i++) {
           for (aa=0; aa<gNB->frame_parms.nb_antennas_rx; aa++) {
 
-            ((short*) &gNB->common_vars.rxdata[aa][subframe*(frame_parms->samples_per_slot<<1)])[2*i] = (short) (.167*(r_re[aa][i] +sqrt(sigma2/2)*gaussdouble(0.0,1.0)));
-            ((short*) &gNB->common_vars.rxdata[aa][subframe*(frame_parms->samples_per_slot<<1)])[2*i+1] = (short) (.167*(r_im[aa][i] + (iqim*r_re[aa][i]) + sqrt(sigma2/2)*gaussdouble(0.0,1.0)));
+            ((short*) &gNB->common_vars.rxdata[aa][subframe*(frame_parms->samples_per_subframe)])[2*i] = (short) (.167*(r_re[aa][i] +sqrt(sigma2/2)*gaussdouble(0.0,1.0)));
+            ((short*) &gNB->common_vars.rxdata[aa][subframe*(frame_parms->samples_per_subframe)])[2*i+1] = (short) (.167*(r_im[aa][i] + (iqim*r_re[aa][i]) + sqrt(sigma2/2)*gaussdouble(0.0,1.0)));
           }
         }
 	uint16_t preamble_rx;
@@ -612,11 +612,11 @@ int main(int argc, char **argv)
 	  printf("preamble %d (tx %d) : energy %d, delay %d\n",preamble_rx,preamble_tx,preamble_energy_list[0],preamble_delay_list[0]);
 	  
           
-          LOG_M("prach0.m","prach0", &txdata[0][subframe*frame_parms->samples_per_slot<<1],frame_parms->samples_per_slot<<1,1,1);
+          LOG_M("prach0.m","prach0", &txdata[0][subframe*frame_parms->samples_per_subframe],frame_parms->samples_per_subframe,1,1);
           LOG_M("prachF0.m","prachF0", &gNB->prach_vars.prachF[0],24576,1,1);
           LOG_M("rxsig0.m","rxs0",
-                       &gNB->common_vars.rxdata[0][subframe*frame_parms->samples_per_slot<<1],
-                       frame_parms->samples_per_slot<<1,1,1);
+                       &gNB->common_vars.rxdata[0][subframe*frame_parms->samples_per_subframe],
+                       frame_parms->samples_per_subframe,1,1);
           LOG_M("rxsigF0.m","rxsF0", gNB->prach_vars.rxsigF[0],839*4,1,1);
           LOG_M("prach_preamble.m","prachp",&gNB->X_u[0],839,1,1);
         }
diff --git a/openair1/SIMULATION/NR_PHY/ulsim.c b/openair1/SIMULATION/NR_PHY/ulsim.c
index dddddec465..cfa834b876 100644
--- a/openair1/SIMULATION/NR_PHY/ulsim.c
+++ b/openair1/SIMULATION/NR_PHY/ulsim.c
@@ -594,7 +594,7 @@ int main(int argc, char **argv)
 
       ///////////
       ////////////////////////////////////////////////////
-      tx_offset = slot*frame_parms->samples_per_slot;
+      tx_offset = frame_parms->get_samples_slot_timestamp(slot,frame_parms,0);
 
       txlev = signal_energy_amp_shift(&UE->common_vars.txdata[0][tx_offset + 5*frame_parms->ofdm_symbol_size + 4*frame_parms->nb_prefix_samples + frame_parms->nb_prefix_samples0],
               frame_parms->ofdm_symbol_size + frame_parms->nb_prefix_samples);
-- 
2.26.2