diff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c index 9aaba7fb66..5fcb59c85b 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c +++ b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c @@ -803,6 +803,10 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, ch[0] = ch_0 / 4; ch[1] = ch_1 / 4; +#if NO_INTERP + for (int i=0;i<12;i++) ((int32_t*)ul_ch)[i] = *(int32_t*)ch; + ul_ch+=24; +#else multadd_real_vector_complex_scalar(filt8_avlip0, ch, ul_ch, @@ -820,6 +824,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, ul_ch, 8); ul_ch -= 24; +#endif for (pilot_cnt=4; pilot_cnt<4*(nb_rb_pusch-1); pilot_cnt += 4) { @@ -854,6 +859,10 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, ch[0] = ch_0 / 4; ch[1] = ch_1 / 4; +#if NO_INTERP + for (int i=0;i<12;i++) ((int32_t*)ul_ch)[i] = *(int32_t*)ch; + ul_ch+=24; +#else ul_ch[6] += (ch[0] * 1365)>>15; // 1/12*16384 ul_ch[7] += (ch[1] * 1365)>>15; // 1/12*16384 @@ -875,6 +884,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, ul_ch, 8); ul_ch -= 16; +#endif } // Last PRB ch_0 = ((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15; @@ -908,6 +918,10 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, ch[0] = ch_0 / 4; ch[1] = ch_1 / 4; +#if NO_INTERP + for (int i=0;i<12;i++) ((int32_t*)ul_ch)[i] = *(int32_t*)ch; + ul_ch+=24; +#else ul_ch[6] += (ch[0] * 1365)>>15; // 1/12*16384 ul_ch[7] += (ch[1] * 1365)>>15; // 1/12*16384 @@ -922,6 +936,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, ch, ul_ch, 8); +#endif } #ifdef DEBUG_PUSCH ul_ch = (int16_t *)&ul_ch_estimates[p*gNB->frame_parms.nb_antennas_rx+aarx][ch_offset]; 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 d15a10a9d9..c1e7e7fea7 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c @@ -33,6 +33,7 @@ //#define DEBUG_PDSCH //#define DEBUG_PDCCH +#define NO_INTERP 1 int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, @@ -690,7 +691,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue, k = bwp_start_subcarrier; int re_offset = k; -#ifdef DEBUG_CH +#ifdef DEBUG_PDSCH printf("PDSCH Channel Estimation : ThreadId %d, gNB_id %d ch_offset %d, symbol_offset %d OFDM size %d, Ncp=%d, Ns=%d, k=%d symbol %d\n",proc->thread_id, gNB_id,ch_offset,symbol_offset,ue->frame_parms.ofdm_symbol_size, ue->frame_parms.Ncp,Ns,k, symbol); #endif @@ -1243,6 +1244,10 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue, ch[0] = ch_0 / 6; ch[1] = ch_1 / 6; +#if NO_INTERP + for (int i=0;i<12;i++) ((int32_t*)dl_ch)[i] = *(int32_t*)ch; + dl_ch+=24; +#else multadd_real_vector_complex_scalar(filt8_avlip0, ch, dl_ch, @@ -1260,6 +1265,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue, dl_ch, 8); dl_ch -= 24; +#endif for (pilot_cnt=6; pilot_cnt<6*(nb_rb_pdsch-1); pilot_cnt += 6) { @@ -1307,6 +1313,11 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue, ch[0] = ch_0 / 6; ch[1] = ch_1 / 6; + +#if NO_INTERP + for (int i=0;i<12;i++) ((int32_t*)dl_ch)[i] = *(int32_t*)ch; + dl_ch+=24; +#else dl_ch[6] += (ch[0] * 1365)>>15; // 1/12*16384 dl_ch[7] += (ch[1] * 1365)>>15; // 1/12*16384 @@ -1328,6 +1339,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue, dl_ch, 8); dl_ch -= 16; +#endif } ch_0 = ((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15; ch_1 = ((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15; @@ -1374,6 +1386,10 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue, ch[0] = ch_0 / 6; ch[1] = ch_1 / 6; +#if NO_INTERP + for (int i=0;i<12;i++) ((int32_t*)dl_ch)[i] = *(int32_t*)ch; + dl_ch+=24; +#else dl_ch[6] += (ch[0] * 1365)>>15; // 1/12*16384 dl_ch[7] += (ch[1] * 1365)>>15; // 1/12*16384 @@ -1388,6 +1404,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue, ch, dl_ch, 8); +#endif } else { // this is case without frequency-domain linear interpolation, just take average of LS channel estimates of 4 DMRS REs and use a common value for the whole PRB int32_t ch_0, ch_1; @@ -1423,6 +1440,10 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue, ch[0] = ch_0 / 4; ch[1] = ch_1 / 4; +#if NO_INTERP + for (int i=0;i<12;i++) ((int32_t*)dl_ch)[i] = *(int32_t*)ch; + dl_ch+=24; +#else multadd_real_vector_complex_scalar(filt8_avlip0, ch, dl_ch, @@ -1440,6 +1461,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue, dl_ch, 8); dl_ch -= 24; +#endif for (pilot_cnt=4; pilot_cnt<4*(nb_rb_pdsch-1); pilot_cnt += 4) { int32_t ch_0, ch_1; @@ -1475,6 +1497,10 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue, ch[0] = ch_0 / 4; ch[1] = ch_1 / 4; +#if NO_INTERP + for (int i=0;i<12;i++) ((int32_t*)dl_ch)[i] = *(int32_t*)ch; + dl_ch+=24; +#else dl_ch[6] += (ch[0] * 1365)>>15; // 1/12*16384 dl_ch[7] += (ch[1] * 1365)>>15; // 1/12*16384 @@ -1496,6 +1522,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue, dl_ch, 8); dl_ch -= 16; +#endif } ch_0 = ((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15; @@ -1529,6 +1556,10 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue, ch[0] = ch_0 / 4; ch[1] = ch_1 / 4; +#if NO_INTERP + for (int i=0;i<12;i++) ((int32_t*)dl_ch)[i] = *(int32_t*)ch; + dl_ch+=24; +#else dl_ch[6] += (ch[0] * 1365)>>15; // 1/12*16384 dl_ch[7] += (ch[1] * 1365)>>15; // 1/12*16384 @@ -1543,6 +1574,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue, ch, dl_ch, 8); +#endif } #ifdef DEBUG_PDSCH dl_ch = (int16_t *)&dl_ch_estimates[p*ue->frame_parms.nb_antennas_rx+aarx][ch_offset];