CCE-to-REG mapping extended for 2 or more DCI symbols at UE
This commit is contained in:
@@ -182,7 +182,7 @@ void nr_generate_dci(PHY_VARS_gNB *gNB,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*Mapping the encoded DCI along with the DMRS */
|
/*Mapping the encoded DCI along with the DMRS */
|
||||||
for(int symbol = 0; symbol < pdcch_pdu_rel15->DurationSymbols; symbol++) {
|
for(int symbol_idx = 0; symbol_idx < pdcch_pdu_rel15->DurationSymbols; symbol_idx++) {
|
||||||
for (int cce_count = 0; cce_count < dci_pdu->AggregationLevel; cce_count+=pdcch_pdu_rel15->DurationSymbols) {
|
for (int cce_count = 0; cce_count < dci_pdu->AggregationLevel; cce_count+=pdcch_pdu_rel15->DurationSymbols) {
|
||||||
|
|
||||||
int8_t cce_idx = reg_list_order[cce_count];
|
int8_t cce_idx = reg_list_order[cce_count];
|
||||||
@@ -194,7 +194,7 @@ void nr_generate_dci(PHY_VARS_gNB *gNB,
|
|||||||
if (k >= frame_parms.ofdm_symbol_size)
|
if (k >= frame_parms.ofdm_symbol_size)
|
||||||
k -= frame_parms.ofdm_symbol_size;
|
k -= frame_parms.ofdm_symbol_size;
|
||||||
|
|
||||||
l = cset_start_symb + symbol;
|
l = cset_start_symb + symbol_idx;
|
||||||
|
|
||||||
// dmrs index depends on reference point for k according to 38.211 7.4.1.3.2
|
// dmrs index depends on reference point for k according to 38.211 7.4.1.3.2
|
||||||
if (pdcch_pdu_rel15->CoreSetType == NFAPI_NR_CSET_CONFIG_PDCCH_CONFIG)
|
if (pdcch_pdu_rel15->CoreSetType == NFAPI_NR_CSET_CONFIG_PDCCH_CONFIG)
|
||||||
@@ -239,7 +239,7 @@ void nr_generate_dci(PHY_VARS_gNB *gNB,
|
|||||||
} // m
|
} // m
|
||||||
} // reg_in_cce_idx
|
} // reg_in_cce_idx
|
||||||
} // cce_count
|
} // cce_count
|
||||||
} // symbol
|
} // symbol_idx
|
||||||
|
|
||||||
LOG_D(PHY,
|
LOG_D(PHY,
|
||||||
"DCI: payloadSize = %d | payload = %llx\n",
|
"DCI: payloadSize = %d | payload = %llx\n",
|
||||||
|
|||||||
@@ -142,7 +142,7 @@ void nr_pdcch_demapping_deinterleaving(uint32_t *llr,
|
|||||||
|
|
||||||
if (reg_bundle_size_L != 0) { // interleaving will be done only if reg_bundle_size_L != 0
|
if (reg_bundle_size_L != 0) { // interleaving will be done only if reg_bundle_size_L != 0
|
||||||
coreset_interleaved = 1;
|
coreset_interleaved = 1;
|
||||||
coreset_C = (uint32_t) ((coreset_nbr_rb * coreset_time_dur) / (coreset_interleaver_size_R * reg_bundle_size_L));
|
coreset_C = (uint32_t) (coreset_nbr_rb / (coreset_interleaver_size_R * reg_bundle_size_L));
|
||||||
} else {
|
} else {
|
||||||
reg_bundle_size_L = 6;
|
reg_bundle_size_L = 6;
|
||||||
}
|
}
|
||||||
@@ -150,7 +150,7 @@ void nr_pdcch_demapping_deinterleaving(uint32_t *llr,
|
|||||||
|
|
||||||
int f_bundle_j_list[NR_MAX_PDCCH_AGG_LEVEL] = {};
|
int f_bundle_j_list[NR_MAX_PDCCH_AGG_LEVEL] = {};
|
||||||
|
|
||||||
for (int reg = 0; reg < ((coreset_nbr_rb * coreset_time_dur)); reg++) {
|
for (int reg = 0; reg < coreset_nbr_rb; reg++) {
|
||||||
if ((reg % reg_bundle_size_L) == 0) {
|
if ((reg % reg_bundle_size_L) == 0) {
|
||||||
if (r == coreset_interleaver_size_R) {
|
if (r == coreset_interleaver_size_R) {
|
||||||
r = 0;
|
r = 0;
|
||||||
@@ -158,7 +158,7 @@ void nr_pdcch_demapping_deinterleaving(uint32_t *llr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
bundle_j = (c * coreset_interleaver_size_R) + r;
|
bundle_j = (c * coreset_interleaver_size_R) + r;
|
||||||
f_bundle_j = ((r * coreset_C) + c + n_shift) % ((coreset_nbr_rb * coreset_time_dur) / reg_bundle_size_L);
|
f_bundle_j = ((r * coreset_C) + c + n_shift) % (coreset_nbr_rb / reg_bundle_size_L);
|
||||||
|
|
||||||
if (coreset_interleaved == 0) f_bundle_j = bundle_j;
|
if (coreset_interleaved == 0) f_bundle_j = bundle_j;
|
||||||
|
|
||||||
@@ -184,22 +184,28 @@ void nr_pdcch_demapping_deinterleaving(uint32_t *llr,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int reg=0; reg<((coreset_nbr_rb*coreset_time_dur)); reg++) {
|
int rb = 0;
|
||||||
|
for (int c_id = 0; c_id < number_of_candidates; c_id++ ) {
|
||||||
|
for (int symbol_idx = 0; symbol_idx < coreset_time_dur; symbol_idx++) {
|
||||||
|
for (int cce_count = CCE[c_id/coreset_time_dur]+c_id%coreset_time_dur; cce_count < CCE[c_id/coreset_time_dur]+c_id%coreset_time_dur+L[c_id]; cce_count += coreset_time_dur) {
|
||||||
|
for (int reg_in_cce_idx = 0; reg_in_cce_idx < NR_NB_REG_PER_CCE; reg_in_cce_idx++) {
|
||||||
|
|
||||||
f_reg = (f_bundle_j_list_ord[reg/6]*reg_bundle_size_L)+(reg%reg_bundle_size_L);
|
f_reg = (f_bundle_j_list_ord[cce_count] * reg_bundle_size_L) + reg_in_cce_idx;
|
||||||
index_z = 9*reg;
|
index_z = 9 * rb;
|
||||||
index_llr = 9*((uint16_t)floor(f_reg/coreset_time_dur)+((f_reg%coreset_time_dur)*(coreset_nbr_rb)));
|
index_llr = (uint16_t) (f_reg + symbol_idx * coreset_nbr_rb) * 9;
|
||||||
|
|
||||||
for (int i=0; i<9; i++) {
|
for (int i = 0; i < 9; i++) {
|
||||||
z[index_z + i] = llr[index_llr + i];
|
z[index_z + i] = llr[index_llr + i];
|
||||||
#ifdef NR_PDCCH_DCI_DEBUG
|
#ifdef NR_PDCCH_DCI_DEBUG
|
||||||
LOG_D(PHY,"[reg=%d,bundle_j=%d] z[%d]=(%d,%d) <-> \t[f_reg=%d,fbundle_j=%d] llr[%d]=(%d,%d) \n",
|
LOG_I(PHY,"[cce_count=%d,reg_in_cce_idx=%d,bundle_j=%d,symbol_idx=%d,candidate=%d] z[%d]=(%d,%d) <-> \t[f_reg=%d,fbundle_j=%d] llr[%d]=(%d,%d) \n",
|
||||||
reg,bundle_j,(index_z + i),*(int16_t *) &z[index_z + i],*(1 + (int16_t *) &z[index_z + i]),
|
cce_count,reg_in_cce_idx,bundle_j,symbol_idx,c_id,(index_z + i),*(int16_t *) &z[index_z + i],*(1 + (int16_t *) &z[index_z + i]),
|
||||||
f_reg,f_bundle_j,(index_llr + i),*(int16_t *) &llr[index_llr + i], *(1 + (int16_t *) &llr[index_llr + i]));
|
f_reg,f_bundle_j,(index_llr + i),*(int16_t *) &llr[index_llr + i], *(1 + (int16_t *) &llr[index_llr + i]));
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
rb++;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((reg%reg_bundle_size_L) == 0) r++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user