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