Commit b0611cf4 authored by Ahmed Hussein's avatar Ahmed Hussein

Modifying get_L_ptrs and minor fixes

parent 15629f12
...@@ -399,7 +399,7 @@ void processSlotTX( PHY_VARS_NR_UE *UE, UE_nr_rxtx_proc_t *proc) { ...@@ -399,7 +399,7 @@ void processSlotTX( PHY_VARS_NR_UE *UE, UE_nr_rxtx_proc_t *proc) {
ptrs_mcs3 = 10; ptrs_mcs3 = 10;
n_rb0 = 25; n_rb0 = 25;
n_rb1 = 75; n_rb1 = 75;
ptrs_time_density = get_L_ptrs(ptrs_mcs1, ptrs_mcs2, ptrs_mcs3, mcs_index); ptrs_time_density = get_L_ptrs(ptrs_mcs1, ptrs_mcs2, ptrs_mcs3, mcs_index, mcs_table);
ptrs_freq_density = get_K_ptrs(n_rb0, n_rb1, rb_size); ptrs_freq_density = get_K_ptrs(n_rb0, n_rb1, rb_size);
//------------------------------------------------------------------------------// //------------------------------------------------------------------------------//
......
...@@ -285,7 +285,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE, ...@@ -285,7 +285,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
if (UE->ptrs_configured == 1) { if (UE->ptrs_configured == 1) {
K_ptrs = harq_process_ul_ue->pusch_pdu.pusch_ptrs.ptrs_freq_density; K_ptrs = harq_process_ul_ue->pusch_pdu.pusch_ptrs.ptrs_freq_density;
L_ptrs = harq_process_ul_ue->pusch_pdu.pusch_ptrs.ptrs_time_density; L_ptrs = 1<<harq_process_ul_ue->pusch_pdu.pusch_ptrs.ptrs_time_density;
beta_ptrs = 1; // temp value until power control is implemented beta_ptrs = 1; // temp value until power control is implemented
......
...@@ -506,11 +506,15 @@ int main(int argc, char **argv) ...@@ -506,11 +506,15 @@ int main(int argc, char **argv)
uint8_t ptrs_mcs3 = 10; uint8_t ptrs_mcs3 = 10;
uint16_t n_rb0 = 25; uint16_t n_rb0 = 25;
uint16_t n_rb1 = 75; uint16_t n_rb1 = 75;
uint8_t mcs_table = 0;
uint8_t length_dmrs = pusch_len1; // [hna] remove dmrs struct uint8_t length_dmrs = pusch_len1; // [hna] remove dmrs struct
uint16_t l_prime_mask = get_l_prime(nb_symb_sch, typeB, pusch_dmrs_pos0, length_dmrs); // [hna] remove dmrs struct uint16_t l_prime_mask = get_l_prime(nb_symb_sch, typeB, pusch_dmrs_pos0, length_dmrs); // [hna] remove dmrs struct
uint8_t ptrs_time_density = get_L_ptrs(ptrs_mcs1, ptrs_mcs2, ptrs_mcs3, Imcs); uint8_t ptrs_time_density = get_L_ptrs(ptrs_mcs1, ptrs_mcs2, ptrs_mcs3, Imcs, mcs_table);
uint8_t ptrs_freq_density = get_K_ptrs(n_rb0, n_rb1, nb_rb); uint8_t ptrs_freq_density = get_K_ptrs(n_rb0, n_rb1, nb_rb);
printf("time_density = %d\n", ptrs_time_density);
printf("freq_density = %d\n", ptrs_freq_density);
for (i = 0; i < nb_symb_sch; i++) { for (i = 0; i < nb_symb_sch; i++) {
number_dmrs_symbols += (l_prime_mask >> i) & 0x01; number_dmrs_symbols += (l_prime_mask >> i) & 0x01;
} }
...@@ -552,7 +556,7 @@ int main(int argc, char **argv) ...@@ -552,7 +556,7 @@ int main(int argc, char **argv)
pusch_pdu->pdu_bit_map = PUSCH_PDU_BITMAP_PUSCH_DATA; pusch_pdu->pdu_bit_map = PUSCH_PDU_BITMAP_PUSCH_DATA;
pusch_pdu->rnti = n_rnti; pusch_pdu->rnti = n_rnti;
pusch_pdu->mcs_index = Imcs; pusch_pdu->mcs_index = Imcs;
pusch_pdu->mcs_table = 0; pusch_pdu->mcs_table = mcs_table;
pusch_pdu->target_code_rate = code_rate; pusch_pdu->target_code_rate = code_rate;
pusch_pdu->qam_mod_order = mod_order; pusch_pdu->qam_mod_order = mod_order;
pusch_pdu->transform_precoding = 0; pusch_pdu->transform_precoding = 0;
...@@ -598,7 +602,7 @@ int main(int argc, char **argv) ...@@ -598,7 +602,7 @@ int main(int argc, char **argv)
ul_config.ul_config_list[0].pusch_config_pdu.ul_dmrs_symb_pos = l_prime_mask; ul_config.ul_config_list[0].pusch_config_pdu.ul_dmrs_symb_pos = l_prime_mask;
ul_config.ul_config_list[0].pusch_config_pdu.dmrs_config_type = 0; ul_config.ul_config_list[0].pusch_config_pdu.dmrs_config_type = 0;
ul_config.ul_config_list[0].pusch_config_pdu.mcs_index = Imcs; ul_config.ul_config_list[0].pusch_config_pdu.mcs_index = Imcs;
ul_config.ul_config_list[0].pusch_config_pdu.mcs_table = 0; ul_config.ul_config_list[0].pusch_config_pdu.mcs_table = mcs_table;
ul_config.ul_config_list[0].pusch_config_pdu.pusch_data.new_data_indicator = 0; ul_config.ul_config_list[0].pusch_config_pdu.pusch_data.new_data_indicator = 0;
ul_config.ul_config_list[0].pusch_config_pdu.pusch_data.rv_index = 0; ul_config.ul_config_list[0].pusch_config_pdu.pusch_data.rv_index = 0;
ul_config.ul_config_list[0].pusch_config_pdu.nrOfLayers = precod_nbr_layers; ul_config.ul_config_list[0].pusch_config_pdu.nrOfLayers = precod_nbr_layers;
......
...@@ -606,29 +606,38 @@ int32_t get_l_prime(uint8_t duration_in_symbols, uint8_t mapping_type, pusch_dmr ...@@ -606,29 +606,38 @@ int32_t get_l_prime(uint8_t duration_in_symbols, uint8_t mapping_type, pusch_dmr
* *
* NAME : get_L_ptrs * NAME : get_L_ptrs
* *
* PARAMETERS : ptrs_UplinkConfig PTRS uplink configuration * PARAMETERS : mcs(i) higher layer parameter in PTRS-UplinkConfig
* I_mcs MCS index used for PUSCH * I_mcs MCS index used for PUSCH
* mcs_table 0 for table 5.1.3.1-1, 1 for table 5.1.3.1-1
* *
* RETURN : the parameter L_ptrs * RETURN : the parameter L_ptrs
* *
* DESCRIPTION : 3GPP TS 38.214 6.2.3 Table 6.2.3.1-1 * DESCRIPTION : 3GPP TS 38.214 section 6.2.3.1
* *
*********************************************************************/ *********************************************************************/
uint8_t get_L_ptrs(uint8_t mcs1, uint8_t mcs2, uint8_t mcs3, uint8_t I_mcs) { uint8_t get_L_ptrs(uint8_t mcs1, uint8_t mcs2, uint8_t mcs3, uint8_t I_mcs, uint8_t mcs_table) {
if (mcs1 == 0 || mcs2 == 0 || mcs3 == 0) uint8_t mcs4;
return 1;
if(mcs_table == 0)
mcs4 = 29;
else
mcs4 = 28;
if (I_mcs < mcs1) { if (I_mcs < mcs1) {
LOG_I(PHY,"PUSH PT-RS is not present.\n"); LOG_I(PHY, "PUSH PT-RS is not present.\n");
return 0; return -1;
} else if (I_mcs >= mcs1 && I_mcs < mcs2) } else if (I_mcs >= mcs1 && I_mcs < mcs2)
return 4;
else if (I_mcs >= mcs2 && I_mcs < mcs3)
return 2; return 2;
else else if (I_mcs >= mcs2 && I_mcs < mcs3)
return 1; return 1;
else if (I_mcs >= mcs3 && I_mcs < mcs4)
return 0;
else {
LOG_I(PHY, "PT-RS time-density determination is obtained from the DCI for the same transport block in the initial transmission\n");
return -1;
}
} }
/******************************************************************* /*******************************************************************
......
...@@ -788,12 +788,12 @@ void nr_schedule_uss_ulsch_phytest(int Mod_idP, ...@@ -788,12 +788,12 @@ void nr_schedule_uss_ulsch_phytest(int Mod_idP,
// -------------------- // --------------------
// ------- PTRS ------- // ------- PTRS -------
// -------------------- // --------------------
uint8_t ptrs_mcs1 = 2; uint8_t ptrs_mcs1 = 2; // higher layer parameter in PTRS-UplinkConfig
uint8_t ptrs_mcs2 = 4; uint8_t ptrs_mcs2 = 4; // higher layer parameter in PTRS-UplinkConfig
uint8_t ptrs_mcs3 = 10; uint8_t ptrs_mcs3 = 10; // higher layer parameter in PTRS-UplinkConfig
uint16_t n_rb0 = 25; uint16_t n_rb0 = 25;
uint16_t n_rb1 = 75; uint16_t n_rb1 = 75;
pusch_pdu->pusch_ptrs.ptrs_time_density = get_L_ptrs(ptrs_mcs1, ptrs_mcs2, ptrs_mcs3, pusch_pdu->mcs_index); pusch_pdu->pusch_ptrs.ptrs_time_density = get_L_ptrs(ptrs_mcs1, ptrs_mcs2, ptrs_mcs3, pusch_pdu->mcs_index, pusch_pdu->mcs_table);
pusch_pdu->pusch_ptrs.ptrs_freq_density = get_K_ptrs(n_rb0, n_rb1, pusch_pdu->rb_size); pusch_pdu->pusch_ptrs.ptrs_freq_density = get_K_ptrs(n_rb0, n_rb1, pusch_pdu->rb_size);
// -------------------------------------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------------------------------------
......
...@@ -165,7 +165,7 @@ int get_num_dmrs(uint16_t dmrs_mask ); ...@@ -165,7 +165,7 @@ int get_num_dmrs(uint16_t dmrs_mask );
uint8_t get_l0_ul(uint8_t mapping_type, uint8_t dmrs_typeA_position); uint8_t get_l0_ul(uint8_t mapping_type, uint8_t dmrs_typeA_position);
int32_t get_l_prime(uint8_t duration_in_symbols, uint8_t mapping_type, pusch_dmrs_AdditionalPosition_t additional_pos, pusch_maxLength_t pusch_maxLength); int32_t get_l_prime(uint8_t duration_in_symbols, uint8_t mapping_type, pusch_dmrs_AdditionalPosition_t additional_pos, pusch_maxLength_t pusch_maxLength);
uint8_t get_L_ptrs(uint8_t mcs1, uint8_t mcs2, uint8_t mcs3, uint8_t I_mcs); uint8_t get_L_ptrs(uint8_t mcs1, uint8_t mcs2, uint8_t mcs3, uint8_t I_mcs, uint8_t mcs_table);
uint8_t get_K_ptrs(uint16_t nrb0, uint16_t nrb1, uint16_t N_RB); uint8_t get_K_ptrs(uint16_t nrb0, uint16_t nrb1, uint16_t N_RB);
uint16_t nr_dci_size(nr_dci_format_t format, uint16_t nr_dci_size(nr_dci_format_t format,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment