From 014e045ba6197eee2e096074be2a4fdab961fab4 Mon Sep 17 00:00:00 2001
From: Francesco Mani <francesco.mani@eurecom.fr>
Date: Thu, 7 May 2020 09:44:07 +0200
Subject: [PATCH] bugfix in dmrs offset for pusch

---
 openair1/PHY/INIT/nr_init.c               |  2 +-
 openair1/PHY/NR_REFSIG/nr_dmrs_rx.c       |  6 ++++--
 openair1/SCHED_NR/phy_procedures_nr_gNB.c | 13 +++++++++++++
 3 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c
index 57e15234ac..ee64c5a32a 100644
--- a/openair1/PHY/INIT/nr_init.c
+++ b/openair1/PHY/INIT/nr_init.c
@@ -176,7 +176,7 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
   }
 
   uint32_t Nid_pusch[2] = {cfg->cell_config.phy_cell_id.value,cfg->cell_config.phy_cell_id.value};
-  LOG_D(PHY,"Initializing PUSCH DMRS Gold sequence with (%x,%x)\n",Nid_pusch[1],Nid_pusch[2]);
+  LOG_D(PHY,"Initializing PUSCH DMRS Gold sequence with (%x,%x)\n",Nid_pusch[0],Nid_pusch[1]);
   nr_gold_pusch(gNB, &Nid_pusch[0]);
 
   /// Transport init necessary for NR synchro
diff --git a/openair1/PHY/NR_REFSIG/nr_dmrs_rx.c b/openair1/PHY/NR_REFSIG/nr_dmrs_rx.c
index 1f2687b883..2f88242eb7 100644
--- a/openair1/PHY/NR_REFSIG/nr_dmrs_rx.c
+++ b/openair1/PHY/NR_REFSIG/nr_dmrs_rx.c
@@ -70,14 +70,16 @@ int nr_pusch_dmrs_rx(PHY_VARS_gNB *gNB,
   wf = (dmrs_type==pusch_dmrs_type1) ? wf1 : wf2;
   wt = (dmrs_type==pusch_dmrs_type1) ? wt1 : wt2;
 
+  int dmrs_offset = re_offset/((dmrs_type==pusch_dmrs_type1)?2:3);
+
   if (dmrs_type > 2)
     LOG_E(PHY,"PUSCH DMRS config type %d not valid\n", dmrs_type+1);
 
   if ((p>=1000) && (p<((dmrs_type==pusch_dmrs_type1) ? 1008 : 1012))) {
       if (gNB->frame_parms.Ncp == NORMAL) {
         nb_dmrs = ((dmrs_type==pusch_dmrs_type1) ? 6:4);
-        for (int i=re_offset; i<re_offset+(nb_pusch_rb*nb_dmrs); i++) {
-          k = i-re_offset;
+        for (int i=dmrs_offset; i<dmrs_offset+(nb_pusch_rb*nb_dmrs); i++) {
+          k = i-dmrs_offset;
           w = (wf[p-1000][i&1])*(wt[p-1000][lp]);
           mod_table = (w==1) ? nr_rx_mod_table : nr_rx_nmod_table;
 
diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
index 147ff778f3..cee747203d 100644
--- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c
+++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
@@ -50,6 +50,8 @@
 
 #include "intertask_interface.h"
 
+//#define DEBUG_RXDATA
+
 uint8_t SSB_Table[38]={0,2,4,6,8,10,12,14,254,254,16,18,20,22,24,26,28,30,254,254,32,34,36,38,40,42,44,46,254,254,48,50,52,54,56,58,60,62};
 
 extern uint8_t nfapi_mode;
@@ -436,6 +438,17 @@ void phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
 	    (ulsch_harq->slot == slot_rx) &&
 	    (ulsch_harq->handled == 0)){
 
+#ifdef DEBUG_RXDATA
+          int slot_offset = frame_parms->get_samples_slot_timestamp(slot_rx,frame_parms,0);
+          slot_offset -= ru->N_TA_offset;
+          char name[128];
+          FILE *f;
+          sprintf(name, "rxdata.%d.%d.raw", frame_rx,slot_rx);
+          f = fopen(name, "w"); if (f == NULL) exit(1);
+          fwrite(&ru->common.rxdata[0][slot_offset],2,frame_parms->get_samples_per_slot(slot_rx,frame_parms)*2, f);
+          fclose(f);
+#endif
+
 	  uint8_t symbol_start = ulsch_harq->ulsch_pdu.start_symbol_index;
 	  uint8_t symbol_end = symbol_start + ulsch_harq->ulsch_pdu.nr_of_symbols;
 	  for(uint8_t symbol = symbol_start; symbol < symbol_end; symbol++) {
-- 
2.26.2