From 8ee10be2532b2adf584bb792c4d35078f3f8a643 Mon Sep 17 00:00:00 2001 From: Hongzhi Wang Date: Mon, 9 Jul 2018 17:08:08 +0200 Subject: [PATCH] ue nr pdcch channel est update --- openair1/PHY/MODULATION/slot_fep.c | 8 +++++++- .../nr_dl_channel_estimation.c | 18 +++++++++++------- openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h | 12 +++++++----- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/openair1/PHY/MODULATION/slot_fep.c b/openair1/PHY/MODULATION/slot_fep.c index f46ad35bd7..84a1c85c56 100644 --- a/openair1/PHY/MODULATION/slot_fep.c +++ b/openair1/PHY/MODULATION/slot_fep.c @@ -23,6 +23,7 @@ #include "PHY/defs_nr_UE.h" #include "modulation_UE.h" #include "PHY/LTE_ESTIMATION/lte_estimation.h" +#include "PHY/NR_UE_ESTIMATION/nr_estimation.h" //#define DEBUG_FEP @@ -48,6 +49,9 @@ int nr_slot_fep(PHY_VARS_NR_UE *ue, int i; unsigned int frame_length_samples = frame_parms->samples_per_subframe * 10; unsigned int rx_offset; + //NR_UE_PDCCH *pdcch_vars = ue->pdcch_vars[ue->current_thread_id[Ns>>1]][0]; + uint16_t coreset_start_subcarrier = frame_parms->first_carrier_offset; + uint16_t nb_rb_coreset = 24; /*LTE_UE_DLSCH_t **dlsch_ue = phy_vars_ue->dlsch_ue[eNB_id]; unsigned char harq_pid = dlsch_ue[0]->current_harq_pid; @@ -242,7 +246,9 @@ int nr_slot_fep(PHY_VARS_NR_UE *ue, Ns, aa, l, - symbol); + symbol, + coreset_start_subcarrier, + nb_rb_coreset); #if UE_TIMING_TRACE stop_meas(&ue->dlsch_channel_estimation_stats); #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 fae1a42d8b..11a50ca20f 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c @@ -229,6 +229,7 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue, unsigned char p, unsigned char l, unsigned char symbol, + unsigned short coreset_start_subcarrier, unsigned short nb_rb_coreset) { int pilot[2][200] __attribute__((aligned(16))); @@ -241,8 +242,8 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue, //uint16_t Nid_cell = (eNB_offset == 0) ? ue->frame_parms.Nid_cell : ue->measurements.adj_cell_id[eNB_offset-1]; uint8_t nushift; - int **dl_ch_estimates =ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[Ns]].dl_ch_estimates[eNB_offset]; - int **rxdataF=ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[Ns]].rxdataF; + int **dl_ch_estimates =ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].dl_ch_estimates[eNB_offset]; + int **rxdataF=ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].rxdataF; nushift = 1; ue->frame_parms.nushift = nushift; @@ -254,7 +255,7 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue, symbol_offset = ue->frame_parms.ofdm_symbol_size*symbol; - k = nushift; + k = coreset_start_subcarrier; #ifdef DEBUG_CH printf("PBCH Channel Estimation : ThreadId %d, eNB_offset %d cell_id %d ch_offset %d, OFDM size %d, Ncp=%d, l=%d, Ns=%d, k=%d symbol %d\n",ue->current_thread_id[Ns>>1], eNB_offset,Nid_cell,ch_offset,ue->frame_parms.ofdm_symbol_size, @@ -271,7 +272,7 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue, for (aarx=0; aarxframe_parms.nb_antennas_rx; aarx++) { pil = (int16_t *)&pilot[p][0]; - rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+(ue->frame_parms.ofdm_symbol_size-12*(nb_rb_coreset>>1)))]; + rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+nushift)]; dl_ch = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]; memset(dl_ch,0,4*(ue->frame_parms.ofdm_symbol_size)); @@ -329,11 +330,13 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue, pil+=2; rxF+=8; dl_ch+=24; + k+=12; - for (pilot_cnt=3; pilot_cnt<(3*24); pilot_cnt+=3) { + for (pilot_cnt=3; pilot_cnt<(3*nb_rb_coreset); pilot_cnt+=3) { - if (pilot_cnt == 36) - rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k)]; + if (k >= ue->frame_parms.ofdm_symbol_size){ + k-=ue->frame_parms.ofdm_symbol_size; + rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+nushift)];} 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); @@ -377,6 +380,7 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue, pil+=2; rxF+=8; dl_ch+=24; + k+=12; } diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h b/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h index 7ec222727b..fdc184918d 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h @@ -19,12 +19,12 @@ * contact@openairinterface.org */ -#ifndef __LTE_ESTIMATION_DEFS__H__ -#define __LTE_ESTIMATION_DEFS__H__ +#ifndef __NR_ESTIMATION_DEFS__H__ +#define __NR_ESTIMATION_DEFS__H__ #include "PHY/defs_nr_UE.h" -#include "PHY/defs_gNB.h" +//#include "PHY/defs_gNB.h" /** @addtogroup _PHY_PARAMETER_ESTIMATION_BLOCKS_ * @{ */ @@ -42,13 +42,15 @@ \param l symbol within slot \param symbol symbol within frame */ -int nr_dl_channel_estimation(PHY_VARS_NR_UE *ue, +int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue, uint8_t eNB_id, uint8_t eNB_offset, unsigned char Ns, unsigned char p, unsigned char l, - unsigned char symbol); + unsigned char symbol, + unsigned short coreset_start_subcarrier, + unsigned short nb_rb_coreset); int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue, uint8_t eNB_id,