From 2b970281c5efbb19856a173d5b56f95fb9523d39 Mon Sep 17 00:00:00 2001
From: Raymond Knopp <raymond.knopp@eurecom.fr>
Date: Sat, 19 May 2018 19:27:18 +0200
Subject: [PATCH] more modifications for initial synchronization

---
 openair1/PHY/LTE_ESTIMATION/lte_sync_time.c | 14 +++++++-------
 openair1/PHY/LTE_TRANSPORT/initial_syncSL.c |  4 ++--
 openair1/PHY/LTE_TRANSPORT/slsss.c          |  2 +-
 openair1/PHY/extern.h                       |  6 +++---
 openair1/SCHED/phy_procedures_lte_ue.c      |  2 +-
 openair1/SIMULATION/LTE_PHY/slschsim.c      |  7 +++++--
 targets/RT/USER/lte-ue.c                    |  2 +-
 7 files changed, 20 insertions(+), 17 deletions(-)

diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
index 3962af673c..d5460e6139 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
@@ -40,9 +40,9 @@
 #endif
 //#define DEBUG_PHY
 
-int32_t* sync_corr_ue0 = NULL;
-int32_t* sync_corr_ue1 = NULL;
-int32_t* sync_corr_ue2 = NULL;
+int64_t* sync_corr_ue0 = NULL;
+int64_t* sync_corr_ue1 = NULL;
+int64_t* sync_corr_ue2 = NULL;
 
 
 extern int16_t s6n_kHz_7_5[1920];
@@ -64,8 +64,8 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms )   // LTE_UE_COMMON *com
   int32_t sync_tmp[2048*4] __attribute__((aligned(32)));
   int16_t syncF_tmp[2048*2] __attribute__((aligned(32)));
 
-  sync_corr_ue0 = (int32_t *)malloc16(4*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*sizeof(int32_t)*frame_parms->samples_per_tti);
-  sync_corr_ue1 = (int32_t *)malloc16(4*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*sizeof(int32_t)*frame_parms->samples_per_tti);
+  sync_corr_ue0 = (int64_t *)malloc16(4*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*sizeof(int64_t)*frame_parms->samples_per_tti);
+  sync_corr_ue1 = (int64_t *)malloc16(4*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*sizeof(int64_t)*frame_parms->samples_per_tti);
   sync_corr_ue2 = (int32_t *)malloc16(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*sizeof(int32_t)*frame_parms->samples_per_tti);
 
   if (sync_corr_ue0) {
@@ -773,8 +773,8 @@ int lte_sync_timeSL(PHY_VARS_UE *ue,
     avg0 += magtmp0;
     avg1 += magtmp1;
     if (n<4*FRAME_LENGTH_COMPLEX_SAMPLES) {
-      sync_corr_ue1[n] = (int32_t)(magtmp1>>31);       
-      sync_corr_ue0[n] = (int32_t)(magtmp0>>31);       
+      sync_corr_ue1[n] = magtmp1;     
+      sync_corr_ue0[n] = magtmp0;       
     }
   }
   avg0/=(length/4);
diff --git a/openair1/PHY/LTE_TRANSPORT/initial_syncSL.c b/openair1/PHY/LTE_TRANSPORT/initial_syncSL.c
index 4d153c9d18..d2cb47d53b 100644
--- a/openair1/PHY/LTE_TRANSPORT/initial_syncSL.c
+++ b/openair1/PHY/LTE_TRANSPORT/initial_syncSL.c
@@ -62,8 +62,8 @@ int initial_syncSL(PHY_VARS_UE *ue) {
       ue->slbch_errors++;
 
       write_output("rxsig0.m","rxs0",&ue->common_vars.rxdata_syncSL[0][0],40*ue->frame_parms.samples_per_tti,1,1);
-      write_output("corr0.m","rxsync0",sync_corr_ue0,40*ue->frame_parms.samples_per_tti,1,2);
-      write_output("corr1.m","rxsync1",sync_corr_ue1,40*ue->frame_parms.samples_per_tti,1,2);
+      write_output("corr0.m","rxsync0",sync_corr_ue0,40*ue->frame_parms.samples_per_tti,1,6);
+      write_output("corr1.m","rxsync1",sync_corr_ue1,40*ue->frame_parms.samples_per_tti,1,6);
 
       exit(-1);
       return(-1);
diff --git a/openair1/PHY/LTE_TRANSPORT/slsss.c b/openair1/PHY/LTE_TRANSPORT/slsss.c
index 900aff9bfd..1a0711e4ff 100644
--- a/openair1/PHY/LTE_TRANSPORT/slsss.c
+++ b/openair1/PHY/LTE_TRANSPORT/slsss.c
@@ -330,7 +330,7 @@ int rx_slsss(PHY_VARS_UE *ue,int32_t *tot_metric,uint8_t *phase_max,int Nid2)
     ru_tmp.common.rxdata            = (int32_t**)malloc16(ue->frame_parms.nb_antennas_rx*sizeof(int32_t*)); 
     for (int aa=0;aa<ue->frame_parms.nb_antennas_rx;aa++) { 
       ru_tmp.common.rxdata_7_5kHz[aa] = (int32_t*)ue->sl_rxdata_7_5kHz[aa];
-      ru_tmp.common.rxdata[aa]        = (int32_t*)ue->common_vars.rxdata_syncSL[aa];
+      ru_tmp.common.rxdata[aa]        = (int32_t*)&ue->common_vars.rxdata_syncSL[aa][2*ue->rx_offsetSL];
     }
     ru_tmp.common.rxdataF = (int32_t**)rxdataF;
     ru_tmp.nb_rx = ue->frame_parms.nb_antennas_rx;
diff --git a/openair1/PHY/extern.h b/openair1/PHY/extern.h
index a8b1eff193..d6643a4c95 100644
--- a/openair1/PHY/extern.h
+++ b/openair1/PHY/extern.h
@@ -68,9 +68,9 @@ extern int16_t *primary_synch1SL_time;
 extern int16_t *primary_synch0SL_time_rx;
 extern int16_t *primary_synch1SL_time_rx;
 
-extern int *sync_corr_ue0; //!< index [0..10*samples_per_tti[
-extern int *sync_corr_ue1; //!< index [0..10*samples_per_tti[
-extern int *sync_corr_ue2; //!< index [0..10*samples_per_tti[
+extern int64_t *sync_corr_ue0; //!< index [0..10*samples_per_tti[
+extern int64_t *sync_corr_ue1; //!< index [0..10*samples_per_tti[
+extern int64_t *sync_corr_ue2; //!< index [0..10*samples_per_tti[
 
 extern int flagMag;
 //extern short **txdataF_rep_tmp;
diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c
index a29969a8f5..6d63460079 100644
--- a/openair1/SCHED/phy_procedures_lte_ue.c
+++ b/openair1/SCHED/phy_procedures_lte_ue.c
@@ -1227,7 +1227,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, int frame_tx, int subframe_tx, uin
 
   //LOG_E(PHY,"ul-signal [subframe: %d, ulsch_start %d]\n",subframe_tx, ulsch_start);
 #else //this is the normal case
-  ulsch_start = (frame_parms->samples_per_tti*subframe_tx)-ue->N_TA_offset; //-ue->timing_advance;
+  ulsch_start = ue->rx_offset+(frame_parms->samples_per_tti*subframe_tx)-ue->N_TA_offset; //-ue->timing_advance;
 #endif //else EXMIMO
 
 
diff --git a/openair1/SIMULATION/LTE_PHY/slschsim.c b/openair1/SIMULATION/LTE_PHY/slschsim.c
index 201669af4f..417fde4c9f 100644
--- a/openair1/SIMULATION/LTE_PHY/slschsim.c
+++ b/openair1/SIMULATION/LTE_PHY/slschsim.c
@@ -65,6 +65,7 @@ int main(int argc, char **argv) {
   channel_desc_t *UE2UE[2][2][2];
   PHY_VARS_UE *UE;
   int log_level = LOG_INFO;
+  int tx_offset=0;
   SLSCH_t slsch;
   SLDCH_t sldch;
   SLSS_t slss;
@@ -94,7 +95,7 @@ int main(int argc, char **argv) {
 
   char c;
 
-  while ((c = getopt (argc, argv, "hf:m:n:g:r:z:w:s:S")) != -1) {
+  while ((c = getopt (argc, argv, "hf:m:n:g:r:z:w:s:S:")) != -1) {
     switch (c) {
     case 'f':
       snr_step= atof(optarg);
@@ -189,6 +190,8 @@ int main(int argc, char **argv) {
       break;
     case 'S':
       do_SLSS=1;
+      tx_offset=atoi(optarg);
+      printf("Running TX/RX synchornization signals with timing offset %d\n",tx_offset);
       break;
       
     case 'h':
@@ -374,7 +377,7 @@ int main(int argc, char **argv) {
 		    &UE->frame_parms,frame,0);
 	  //	  write_output("rxsig0.m","rxs0",&UE->common_vars.rxdata[0][UE->frame_parms.samples_per_tti*subframe],UE->frame_parms.samples_per_tti,1,1);
 	  if (do_SLSS==1) 
-	    memcpy((void*)&UE->common_vars.rxdata_syncSL[0][(((frame&3)*10)+subframe)*2*UE->frame_parms.samples_per_tti],
+	    memcpy((void*)&UE->common_vars.rxdata_syncSL[0][2*tx_offset+(((frame&3)*10)+subframe)*2*UE->frame_parms.samples_per_tti],
 		   (void*)&UE->common_vars.rxdata[0][subframe*UE->frame_parms.samples_per_tti],
 		   2*UE->frame_parms.samples_per_tti*sizeof(int16_t));
 	  //	  write_output("rxsyncb0.m","rxsyncb0",(void*)UE->common_vars.rxdata_syncSL[0],(UE->frame_parms.samples_per_tti),1,1);
diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c
index 0abe8f2537..9e3696f0b5 100644
--- a/targets/RT/USER/lte-ue.c
+++ b/targets/RT/USER/lte-ue.c
@@ -635,7 +635,7 @@ static void *UE_thread_synch(void *arg)
   return &UE_thread_synch_retval;
 }
 
-extern int32_t* sync_corr_ue1;
+extern int64_t* sync_corr_ue1;
 
 static void *UE_thread_synchSL(void *arg)
 {
-- 
2.26.2