From eae301e5d843526fbb81c44302a59e2021dba65d Mon Sep 17 00:00:00 2001 From: Ahmed Hussein <ahmed.hussein@iis.fraunhofer.de> Date: Thu, 16 Apr 2020 16:44:00 +0200 Subject: [PATCH] Fix regarding PTRS frequeny domain allocation --- openair1/PHY/NR_REFSIG/ptrs_nr.c | 10 +++++++--- openair1/PHY/NR_REFSIG/ptrs_nr.h | 5 +++-- openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c | 15 ++++++--------- openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c | 12 ++++-------- 4 files changed, 20 insertions(+), 22 deletions(-) diff --git a/openair1/PHY/NR_REFSIG/ptrs_nr.c b/openair1/PHY/NR_REFSIG/ptrs_nr.c index cdf61a3b62..88a44ae139 100644 --- a/openair1/PHY/NR_REFSIG/ptrs_nr.c +++ b/openair1/PHY/NR_REFSIG/ptrs_nr.c @@ -151,7 +151,7 @@ void set_ptrs_symb_idx(uint16_t *ptrs_symbols, * *********************************************************************/ -uint8_t is_ptrs_subcarrier(uint16_t k, uint8_t K_ptrs, uint16_t n_rnti, uint16_t N_RB, int16_t k_RE_ref, uint16_t start_sc) { +uint8_t is_ptrs_subcarrier(uint16_t k, uint8_t K_ptrs, uint16_t n_rnti, uint16_t N_RB, int16_t k_RE_ref, uint16_t start_sc, uint16_t ofdm_symbol_size) { uint16_t k_RB_ref; @@ -160,6 +160,9 @@ uint8_t is_ptrs_subcarrier(uint16_t k, uint8_t K_ptrs, uint16_t n_rnti, uint16_t else k_RB_ref = n_rnti % (N_RB % K_ptrs); + if (k < start_sc) + k += ofdm_symbol_size; + if ((k - k_RE_ref - k_RB_ref*NR_NB_SC_PER_RB - start_sc) % (K_ptrs*NR_NB_SC_PER_RB) == 0) return 1; @@ -196,10 +199,11 @@ uint8_t is_ptrs_symbol(uint8_t l, uint16_t ptrs_symbols, uint16_t start_sc, uint8_t pusch_dmrs_type, - uint8_t resourceElementOffset) + uint8_t resourceElementOffset, + uint16_t ofdm_symbol_size) { int16_t k_RE_ref = get_kRE_ref(dmrs_antenna_port, pusch_dmrs_type, resourceElementOffset); - uint8_t is_ptrs_freq = is_ptrs_subcarrier(k, K_ptrs, n_rnti, N_RB, k_RE_ref, start_sc); + uint8_t is_ptrs_freq = is_ptrs_subcarrier(k, K_ptrs, n_rnti, N_RB, k_RE_ref, start_sc, ofdm_symbol_size); if (is_ptrs_freq == 0) return 0; diff --git a/openair1/PHY/NR_REFSIG/ptrs_nr.h b/openair1/PHY/NR_REFSIG/ptrs_nr.h index c4ee337b3d..40d22e6733 100644 --- a/openair1/PHY/NR_REFSIG/ptrs_nr.h +++ b/openair1/PHY/NR_REFSIG/ptrs_nr.h @@ -55,7 +55,7 @@ void set_ptrs_symb_idx(uint16_t *ptrs_symbols, uint8_t L_ptrs, uint16_t ul_dmrs_symb_pos); -uint8_t is_ptrs_subcarrier(uint16_t k, uint8_t K_ptrs, uint16_t n_rnti, uint16_t N_RB, int16_t k_RE_ref, uint16_t start_sc); +uint8_t is_ptrs_subcarrier(uint16_t k, uint8_t K_ptrs, uint16_t n_rnti, uint16_t N_RB, int16_t k_RE_ref, uint16_t start_sc, uint16_t ofdm_symbol_size); uint8_t is_ptrs_symbol(uint8_t l, uint16_t k, @@ -66,7 +66,8 @@ uint8_t is_ptrs_symbol(uint8_t l, uint16_t ptrs_symbols, uint16_t start_sc, uint8_t pusch_dmrs_type, - uint8_t resourceElementOffset); + uint8_t resourceElementOffset, + uint16_t ofdm_symbol_size); diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c index 713bb1bd3b..acfbc7d49f 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c @@ -230,7 +230,7 @@ void nr_ulsch_extract_rbs_single(int32_t **rxdataF, nfapi_nr_pusch_pdu_t *pusch_pdu, NR_DL_FRAME_PARMS *frame_parms) { - unsigned short start_re, re, nb_re_pusch, k; + unsigned short start_re, re, nb_re_pusch; unsigned char aarx; uint8_t K_ptrs; uint32_t rxF_ext_index = 0; @@ -286,13 +286,8 @@ void nr_ulsch_extract_rbs_single(int32_t **rxdataF, if ( ((pusch_pdu->pdu_bit_map)>>2)& 0x01 ) { - if(((start_re + re) % frame_parms->ofdm_symbol_size) < start_re) - k = start_re + re; - else - k = (start_re + re) % frame_parms->ofdm_symbol_size; - is_ptrs_symbol_flag = is_ptrs_symbol(symbol, - k, + (start_re + re) % frame_parms->ofdm_symbol_size, n_rnti, pusch_pdu->rb_size, aarx, @@ -300,7 +295,8 @@ void nr_ulsch_extract_rbs_single(int32_t **rxdataF, pusch_vars->ptrs_symbols, start_re, pusch_pdu->dmrs_config_type, - pusch_pdu->pusch_ptrs.ptrs_ports_list[0].ptrs_re_offset); + pusch_pdu->pusch_ptrs.ptrs_ports_list[0].ptrs_re_offset, + frame_parms->ofdm_symbol_size); if (is_ptrs_symbol_flag == 1) num_ptrs_symbols++; @@ -1082,7 +1078,8 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB, gNB->pusch_vars[UE_id]->ptrs_symbols, 0, rel15_ul->dmrs_config_type, - rel15_ul->pusch_ptrs.ptrs_ports_list[0].ptrs_re_offset); + rel15_ul->pusch_ptrs.ptrs_ports_list[0].ptrs_re_offset, + frame_parms->ofdm_symbol_size); } if (ptrs_symbol_flag == 1){ diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c index 160a8a4c67..3035e39201 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c @@ -106,7 +106,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE, int32_t **txdataF; uint16_t start_sc, start_rb; int8_t Wf[2], Wt[2], l_prime[2], delta; - uint16_t rnti, n_dmrs, code_rate, number_dmrs_symbols, nb_rb, k, k_temp; + uint16_t rnti, n_dmrs, code_rate, number_dmrs_symbols, nb_rb, k; uint8_t dmrs_type, nb_dmrs_re_per_rb, number_of_symbols, mcs, Nl; int ap, start_symbol, Nid_cell, i; int sample_offsetF, N_RE_prime, N_PRB_oh; @@ -396,13 +396,8 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE, if ((harq_process_ul_ue->pusch_pdu.pdu_bit_map >> 2) & 0x01){ - if(k < start_sc) - k_temp = k + frame_parms->ofdm_symbol_size; - else - k_temp = k; - is_ptrs = is_ptrs_symbol(l, - k_temp, + k, rnti, nb_rb, ap, @@ -410,7 +405,8 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE, ulsch_ue->ptrs_symbols, start_sc, dmrs_type, - ptrs_Uplink_Config->resourceElementOffset); + ptrs_Uplink_Config->resourceElementOffset, + frame_parms->ofdm_symbol_size); } if (is_dmrs == 1) { -- 2.26.2