From e253a6f38096f57964679ea1cf3596f830f9d0c4 Mon Sep 17 00:00:00 2001
From: Sakthivel Velumani <velumani@eurecom.fr>
Date: Fri, 15 Nov 2019 14:15:45 +0100
Subject: [PATCH] Added support for nushift

---
 .../NR_ESTIMATION/nr_ul_channel_estimation.c  | 19 +++++++++++++-----
 openair1/PHY/NR_UE_ESTIMATION/filt16a_32.c    | 20 +++++++++++++++----
 openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h    | 15 ++++++++++----
 .../nr_dl_channel_estimation.c                | 19 +++++++++++++-----
 4 files changed, 55 insertions(+), 18 deletions(-)

diff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
index d81669f69f..89321f637b 100644
--- a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
+++ b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
@@ -41,7 +41,8 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
   unsigned char aarx;
   unsigned short k;
   unsigned int pilot_cnt;
-  int16_t ch[2],*pil,*rxF,*ul_ch,*fl,*fm,*fr,*fml,*fmr,*fmm;
+  int16_t ch[2],*pil,*rxF,*ul_ch;
+  int16_t *fl,*fm,*fr,*fml,*fmr,*fmm,*fdcl,*fdcr,*fdclh,*fdcrh;
   int ch_offset,symbol_offset, length_dmrs, UE_id = 0;
   unsigned short n_idDMRS[2] = {0,1}; //to update from pusch config
   int32_t temp_in_ifft_0[8192*2] __attribute__((aligned(16)));
@@ -82,6 +83,10 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
          fmm = filt8_mm0;
          fml = filt8_m0;
          fmr = filt8_mr0;
+         fdcl = filt8_dcl0;
+         fdcr = filt8_dcr0;
+         fdclh = filt8_dcl0_h;
+         fdcrh = filt8_dcr0_h;
          break;
 
    case 1:
@@ -91,6 +96,10 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
          fmm = filt8_mm1;
          fml = filt8_ml1;
          fmr = filt8_m1;
+         fdcl = filt8_dcl1;
+         fdcr = filt8_dcr1;
+         fdclh = filt8_dcl1_h;
+         fdcrh = filt8_dcr1_h;
          break;
 
    default:
@@ -275,7 +284,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
       // for proper allignment of SIMD vectors
       if((gNB->frame_parms.N_RB_UL&1)==0) {
 
-        multadd_real_vector_complex_scalar(filt8_dcl,
+        multadd_real_vector_complex_scalar(fdcl,
                                            ch,
                                            ul_ch-4,
                                            8);
@@ -286,13 +295,13 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
         ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
         ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
         
-        multadd_real_vector_complex_scalar(filt8_dcr,
+        multadd_real_vector_complex_scalar(fdcr,
                                            ch,
                                            ul_ch-4,
                                            8);
       } else {
         
-        multadd_real_vector_complex_scalar(filt8_dcl_h,
+        multadd_real_vector_complex_scalar(fdclh,
                                            ch,
                                            ul_ch,
                                            8);
@@ -303,7 +312,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
         ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
         ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
         
-        multadd_real_vector_complex_scalar(filt8_dcr_h,
+        multadd_real_vector_complex_scalar(fdcrh,
                                            ch,
                                            ul_ch,
                                            8);
diff --git a/openair1/PHY/NR_UE_ESTIMATION/filt16a_32.c b/openair1/PHY/NR_UE_ESTIMATION/filt16a_32.c
index c6870dd613..eeee55ea3f 100644
--- a/openair1/PHY/NR_UE_ESTIMATION/filt16a_32.c
+++ b/openair1/PHY/NR_UE_ESTIMATION/filt16a_32.c
@@ -135,16 +135,16 @@ short filt8_dcmc[8]= {
 short filt8_dcmd[8]= {
 0,0,0,4096,4096,8192,12288,16384};
 
-short filt8_dcl[8]= {
+short filt8_dcl0[8]= {
 0,0,16384,12288,8192,4096,0,0};
 
-short filt8_dcr[8]= {
+short filt8_dcr0[8]= {
 0,0,0,4096,8192,12288,16384,0};
 
-short filt8_dcl_h[8]= {
+short filt8_dcl0_h[8]= {
 16384,12288,8192,4096,0,0,0,0};
 
-short filt8_dcr_h[8]= {
+short filt8_dcr0_h[8]= {
 0,4096,8192,12288,16384,0,0,0};
 
 short filt8_l1[8] = {
@@ -161,3 +161,15 @@ short filt8_m1[8] = {
 
 short filt8_mm1[8]= {
 0,0,0,0,8192,16384,8192,0};
+
+short filt8_dcl1[8]= {
+0,0,0,16384,12288,8192,4096,0};
+
+short filt8_dcr1[8]= {
+0,0,0,0,4096,8192,12288,16384};
+
+short filt8_dcl1_h[8]= {
+0,16384,12288,8192,4096,0,0,0};
+
+short filt8_dcr1_h[8]= {
+0,0,4096,8192,12288,16384,0,0};
diff --git a/openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h b/openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h
index 5b853be4b3..f64aebeb52 100644
--- a/openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h
+++ b/openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h
@@ -99,13 +99,13 @@ extern short filt8_dcmc[8];
 
 extern short filt8_dcmd[8];
 
-extern short filt8_dcl[8];
+extern short filt8_dcl0[8];
 
-extern short filt8_dcr[8];
+extern short filt8_dcr0[8];
 
-extern short filt8_dcl_h[8];
+extern short filt8_dcl0_h[8];
 
-extern short filt8_dcr_h[8];
+extern short filt8_dcr0_h[8];
 
 extern short filt8_l1[8];
 
@@ -117,4 +117,11 @@ extern short filt8_m1[8];
 
 extern short filt8_mm1[8];
 
+extern short filt8_dcl1[8];
+
+extern short filt8_dcr1[8];
+
+extern short filt8_dcl1_h[8];
+
+extern short filt8_dcr1_h[8];
 #endif
diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c b/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
index 91394efb59..752d06fb21 100644
--- a/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
+++ b/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
@@ -656,7 +656,8 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
   unsigned char aarx;
   unsigned short k;
   unsigned int pilot_cnt;
-  int16_t ch[2],*pil,*rxF,*dl_ch,*fl,*fm,*fr,*fml,*fmr,*fmm;
+  int16_t ch[2],*pil,*rxF,*dl_ch;
+  int16_t *fl,*fm,*fr,*fml,*fmr,*fmm,*fdcl,*fdcr,*fdclh,*fdcrh;
   int ch_offset,symbol_offset;
 
   //uint16_t Nid_cell = (eNB_offset == 0) ? ue->frame_parms.Nid_cell : ue->measurements.adj_cell_id[eNB_offset-1];
@@ -691,6 +692,10 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
          fmm = filt8_mm0;
          fml = filt8_m0;
          fmr = filt8_mr0;
+         fdcl = filt8_dcl0;
+         fdcr = filt8_dcr0;
+         fdclh = filt8_dcl0_h;
+         fdcrh = filt8_dcr0_h;
          break;
 
    case 1:
@@ -700,6 +705,10 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
          fmm = filt8_mm1;
          fml = filt8_ml1;
          fmr = filt8_m1;
+         fdcl = filt8_dcl1;
+         fdcr = filt8_dcr1;
+         fdclh = filt8_dcl1_h;
+         fdcrh = filt8_dcr1_h;
          break;
 
    default:
@@ -882,7 +891,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
       // for proper allignment of SIMD vectors
       if((ue->frame_parms.N_RB_DL&1)==0) {
         
-        multadd_real_vector_complex_scalar(filt8_dcl,
+        multadd_real_vector_complex_scalar(fdcl,
                                            ch,
                                            dl_ch-4,
                                            8);
@@ -893,13 +902,13 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
         ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
         ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
         
-        multadd_real_vector_complex_scalar(filt8_dcr,
+        multadd_real_vector_complex_scalar(fdcr,
                                            ch,
                                            dl_ch-4,
                                            8);
       } else {
 
-        multadd_real_vector_complex_scalar(filt8_dcl_h,
+        multadd_real_vector_complex_scalar(fdclh,
                                            ch,
                                            dl_ch,
                                            8);
@@ -910,7 +919,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
         ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
         ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
         
-        multadd_real_vector_complex_scalar(filt8_dcr_h,
+        multadd_real_vector_complex_scalar(fdcrh,
                                            ch,
                                            dl_ch,
                                            8);
-- 
2.26.2