Fixed calculation of num dmrs per prb at gnb side
- the param was hardcoded to 12 at gNB side while it was computed at UE side - the same function used at UE side has been moved to the common file - now the computation at gNB side is consistent with the UE
This commit is contained in:
@@ -143,7 +143,13 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
|||||||
|
|
||||||
ulsch_ue->Nid_cell = Nid_cell;
|
ulsch_ue->Nid_cell = Nid_cell;
|
||||||
|
|
||||||
get_num_re_dmrs(pusch_pdu, &nb_dmrs_re_per_rb, &number_dmrs_symbols);
|
get_num_re_dmrs(pusch_pdu->start_symbol_index,
|
||||||
|
pusch_pdu->nr_of_symbols,
|
||||||
|
pusch_pdu->ul_dmrs_symb_pos,
|
||||||
|
pusch_pdu->dmrs_config_type,
|
||||||
|
pusch_pdu->num_dmrs_cdm_grps_no_data,
|
||||||
|
&nb_dmrs_re_per_rb,
|
||||||
|
&number_dmrs_symbols);
|
||||||
|
|
||||||
LOG_D(PHY,"ulsch %x : start_rb %d bwp_start %d start_sc %d start_symbol %d num_symbols %d cdmgrpsnodata %d num_dmrs %d dmrs_re_per_rb %d\n",
|
LOG_D(PHY,"ulsch %x : start_rb %d bwp_start %d start_sc %d start_symbol %d num_symbols %d cdmgrpsnodata %d num_dmrs %d dmrs_re_per_rb %d\n",
|
||||||
rnti,start_rb,pusch_pdu->bwp_start,start_sc,start_symbol,number_of_symbols,cdm_grps_no_data,number_dmrs_symbols,nb_dmrs_re_per_rb);
|
rnti,start_rb,pusch_pdu->bwp_start,start_sc,start_symbol,number_of_symbols,cdm_grps_no_data,number_dmrs_symbols,nb_dmrs_re_per_rb);
|
||||||
|
|||||||
@@ -4294,3 +4294,22 @@ bool set_ul_ptrs_values(NR_PTRS_UplinkConfig_t *ul_ptrs_config,
|
|||||||
return valid;
|
return valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void get_num_re_dmrs(int start_symbol,
|
||||||
|
uint8_t number_of_symbols,
|
||||||
|
uint16_t ul_dmrs_symb_pos,
|
||||||
|
uint8_t dmrs_type,
|
||||||
|
uint8_t cdm_grps_no_data,
|
||||||
|
uint8_t *nb_dmrs_re_per_rb,
|
||||||
|
uint16_t *number_dmrs_symbols){
|
||||||
|
|
||||||
|
*number_dmrs_symbols = 0;
|
||||||
|
|
||||||
|
for (int i = start_symbol; i < start_symbol + number_of_symbols; i++) {
|
||||||
|
if((ul_dmrs_symb_pos >> i) & 0x01){
|
||||||
|
*number_dmrs_symbols += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*nb_dmrs_re_per_rb = ((dmrs_type == pusch_dmrs_type1) ? 6 : 4) * cdm_grps_no_data;
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -62,6 +62,15 @@ uint16_t nr_dci_size(const NR_BWP_DownlinkCommon_t *initialDLBWP,
|
|||||||
uint16_t N_RB,
|
uint16_t N_RB,
|
||||||
int bwp_id);
|
int bwp_id);
|
||||||
|
|
||||||
|
|
||||||
|
void get_num_re_dmrs(int start_symbol,
|
||||||
|
uint8_t number_of_symbols,
|
||||||
|
uint16_t ul_dmrs_symb_pos,
|
||||||
|
uint8_t dmrs_type,
|
||||||
|
uint8_t cdm_grps_no_data,
|
||||||
|
uint8_t *nb_dmrs_re_per_rb,
|
||||||
|
uint16_t *number_dmrs_symbols);
|
||||||
|
|
||||||
void find_aggregation_candidates(uint8_t *aggregation_level,
|
void find_aggregation_candidates(uint8_t *aggregation_level,
|
||||||
uint8_t *nr_of_candidates,
|
uint8_t *nr_of_candidates,
|
||||||
NR_SearchSpace_t *ss,
|
NR_SearchSpace_t *ss,
|
||||||
|
|||||||
@@ -390,10 +390,6 @@ int8_t nr_ue_process_dci_freq_dom_resource_assignment(nfapi_nr_ue_pusch_pdu_t *p
|
|||||||
void config_dci_pdu(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15, fapi_nr_dl_config_request_t *dl_config, int rnti_type, int ss_id);
|
void config_dci_pdu(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15, fapi_nr_dl_config_request_t *dl_config, int rnti_type, int ss_id);
|
||||||
void fill_dci_search_candidates(NR_SearchSpace_t *ss,fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15);
|
void fill_dci_search_candidates(NR_SearchSpace_t *ss,fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15);
|
||||||
|
|
||||||
void get_num_re_dmrs(nfapi_nr_ue_pusch_pdu_t *pusch_pdu,
|
|
||||||
uint8_t *nb_dmrs_re_per_rb,
|
|
||||||
uint16_t *number_dmrs_symbols);
|
|
||||||
|
|
||||||
void build_ssb_to_ro_map(NR_UE_MAC_INST_t *mac);
|
void build_ssb_to_ro_map(NR_UE_MAC_INST_t *mac);
|
||||||
|
|
||||||
void config_bwp_ue(NR_UE_MAC_INST_t *mac, uint16_t *bwp_ind, uint8_t *dci_format);
|
void config_bwp_ue(NR_UE_MAC_INST_t *mac, uint16_t *bwp_ind, uint8_t *dci_format);
|
||||||
|
|||||||
@@ -160,26 +160,6 @@ int nr_get_Po_NOMINAL_PUSCH(NR_PRACH_RESOURCES_t *prach_resources, module_id_t m
|
|||||||
return receivedTargerPower;
|
return receivedTargerPower;
|
||||||
}
|
}
|
||||||
|
|
||||||
void get_num_re_dmrs(nfapi_nr_ue_pusch_pdu_t *pusch_pdu,
|
|
||||||
uint8_t *nb_dmrs_re_per_rb,
|
|
||||||
uint16_t *number_dmrs_symbols){
|
|
||||||
|
|
||||||
int start_symbol = pusch_pdu->start_symbol_index;
|
|
||||||
uint8_t number_of_symbols = pusch_pdu->nr_of_symbols;
|
|
||||||
uint16_t ul_dmrs_symb_pos = pusch_pdu->ul_dmrs_symb_pos;
|
|
||||||
uint8_t dmrs_type = pusch_pdu->dmrs_config_type;
|
|
||||||
uint8_t cdm_grps_no_data = pusch_pdu->num_dmrs_cdm_grps_no_data;
|
|
||||||
|
|
||||||
*number_dmrs_symbols = 0;
|
|
||||||
for (int i = start_symbol; i < start_symbol + number_of_symbols; i++) {
|
|
||||||
if((ul_dmrs_symb_pos >> i) & 0x01)
|
|
||||||
*number_dmrs_symbols += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
*nb_dmrs_re_per_rb = ((dmrs_type == pusch_dmrs_type1) ? 6:4)*cdm_grps_no_data;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Implementation of 6.2.4 Configured ransmitted power
|
// Implementation of 6.2.4 Configured ransmitted power
|
||||||
// 3GPP TS 38.101-1 version 16.5.0 Release 16
|
// 3GPP TS 38.101-1 version 16.5.0 Release 16
|
||||||
// -
|
// -
|
||||||
|
|||||||
@@ -842,7 +842,13 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
get_num_re_dmrs(pusch_config_pdu, &nb_dmrs_re_per_rb, &number_dmrs_symbols);
|
get_num_re_dmrs(pusch_config_pdu->start_symbol_index,
|
||||||
|
pusch_config_pdu->nr_of_symbols,
|
||||||
|
pusch_config_pdu->ul_dmrs_symb_pos,
|
||||||
|
pusch_config_pdu->dmrs_config_type,
|
||||||
|
pusch_config_pdu->num_dmrs_cdm_grps_no_data,
|
||||||
|
&nb_dmrs_re_per_rb,
|
||||||
|
&number_dmrs_symbols);
|
||||||
|
|
||||||
// Compute TBS
|
// Compute TBS
|
||||||
pusch_config_pdu->pusch_data.tb_size = nr_compute_tbs(pusch_config_pdu->qam_mod_order,
|
pusch_config_pdu->pusch_data.tb_size = nr_compute_tbs(pusch_config_pdu->qam_mod_order,
|
||||||
|
|||||||
@@ -968,6 +968,9 @@ void fill_msg3_pusch_pdu(nfapi_nr_pusch_pdu_t *pusch_pdu,
|
|||||||
|
|
||||||
|
|
||||||
int start_symbol_index,nr_of_symbols;
|
int start_symbol_index,nr_of_symbols;
|
||||||
|
uint8_t nb_dmrs_re_per_rb = 0;
|
||||||
|
uint16_t number_dmrs_symbols = 0;
|
||||||
|
|
||||||
SLIV2SL(startSymbolAndLength, &start_symbol_index, &nr_of_symbols);
|
SLIV2SL(startSymbolAndLength, &start_symbol_index, &nr_of_symbols);
|
||||||
|
|
||||||
pusch_pdu->pdu_bit_map = PUSCH_PDU_BITMAP_PUSCH_DATA;
|
pusch_pdu->pdu_bit_map = PUSCH_PDU_BITMAP_PUSCH_DATA;
|
||||||
@@ -1013,11 +1016,20 @@ void fill_msg3_pusch_pdu(nfapi_nr_pusch_pdu_t *pusch_pdu,
|
|||||||
pusch_pdu->pusch_data.harq_process_id = 0;
|
pusch_pdu->pusch_data.harq_process_id = 0;
|
||||||
pusch_pdu->pusch_data.new_data_indicator = 1;
|
pusch_pdu->pusch_data.new_data_indicator = 1;
|
||||||
pusch_pdu->pusch_data.num_cb = 0;
|
pusch_pdu->pusch_data.num_cb = 0;
|
||||||
|
|
||||||
|
get_num_re_dmrs(pusch_pdu->start_symbol_index,
|
||||||
|
pusch_pdu->nr_of_symbols,
|
||||||
|
pusch_pdu->ul_dmrs_symb_pos,
|
||||||
|
pusch_pdu->dmrs_config_type,
|
||||||
|
pusch_pdu->num_dmrs_cdm_grps_no_data,
|
||||||
|
&nb_dmrs_re_per_rb,
|
||||||
|
&number_dmrs_symbols);
|
||||||
|
|
||||||
pusch_pdu->pusch_data.tb_size = nr_compute_tbs(pusch_pdu->qam_mod_order,
|
pusch_pdu->pusch_data.tb_size = nr_compute_tbs(pusch_pdu->qam_mod_order,
|
||||||
pusch_pdu->target_code_rate,
|
pusch_pdu->target_code_rate,
|
||||||
pusch_pdu->rb_size,
|
pusch_pdu->rb_size,
|
||||||
pusch_pdu->nr_of_symbols,
|
pusch_pdu->nr_of_symbols,
|
||||||
12, // nb dmrs set for no data in dmrs symbol
|
nb_dmrs_re_per_rb*number_dmrs_symbols, // nb dmrs set for no data in dmrs symbol
|
||||||
0, //nb_rb_oh
|
0, //nb_rb_oh
|
||||||
0, // to verify tb scaling
|
0, // to verify tb scaling
|
||||||
pusch_pdu->nrOfLayers)>>3;
|
pusch_pdu->nrOfLayers)>>3;
|
||||||
|
|||||||
Reference in New Issue
Block a user