Commit f49dbf47 authored by Jaroslava Fiedlerova's avatar Jaroslava Fiedlerova

Merge remote-tracking branch 'origin/NR_UE_DCI_RX_improvements' into integration_2024_w18

parents af498835 114fb5db
...@@ -621,7 +621,7 @@ uint32_t polar_decoder_int16(int16_t *input, ...@@ -621,7 +621,7 @@ uint32_t polar_decoder_int16(int16_t *input,
uint8_t ones_flag, uint8_t ones_flag,
int8_t messageType, int8_t messageType,
uint16_t messageLength, uint16_t messageLength,
uint8_t aggregation_level ) uint8_t aggregation_level)
{ {
t_nrPolar_params *polarParams=nr_polar_params(messageType, messageLength, aggregation_level, true); t_nrPolar_params *polarParams=nr_polar_params(messageType, messageLength, aggregation_level, true);
...@@ -638,7 +638,13 @@ uint32_t polar_decoder_int16(int16_t *input, ...@@ -638,7 +638,13 @@ uint32_t polar_decoder_int16(int16_t *input,
#endif #endif
int16_t d_tilde[polarParams->N]; int16_t d_tilde[polarParams->N];
nr_polar_rate_matching_int16(input, d_tilde, polarParams->rate_matching_pattern, polarParams->K, polarParams->N, polarParams->encoderLength, polarParams->i_bil); nr_polar_rate_matching_int16(input,
d_tilde,
polarParams->rate_matching_pattern,
polarParams->K,
polarParams->N,
polarParams->encoderLength,
polarParams->i_bil);
for (int i=0; i<polarParams->N; i++) { for (int i=0; i<polarParams->N; i++) {
if (d_tilde[i]<-128) d_tilde[i]=-128; if (d_tilde[i]<-128) d_tilde[i]=-128;
...@@ -792,13 +798,20 @@ uint32_t polar_decoder_int16(int16_t *input, ...@@ -792,13 +798,20 @@ uint32_t polar_decoder_int16(int16_t *input,
printf("\n\n"); printf("\n\n");
#endif #endif
#if 0 #ifdef POLAR_CODING_DEBUG
printf("A %llx B %llx|%llx Cprime %llx|%llx (crc %x,rxcrc %llx %d)\n", printf("A %lx B %lx|%lx Cprime %lx|%lx (crc %x,rxcrc %lx, XOR %lx, bits%d)\n",
Ar, Ar,
B[1],B[0],Cprime[1],Cprime[0],crc, B[1],
rxcrc,polarParams->payloadBits); B[0],
Cprime[1],
Cprime[0],
crc,
rxcrc,
crc^rxcrc,
polarParams->payloadBits);
#endif #endif
out[0]=Ar;
out[0] = Ar;
polarReturn crc^rxcrc; polarReturn crc^rxcrc;
} }
...@@ -492,8 +492,8 @@ void polar_encoder_fast(uint64_t *A, ...@@ -492,8 +492,8 @@ void polar_encoder_fast(uint64_t *A,
uint8_t ones_flag, uint8_t ones_flag,
int8_t messageType, int8_t messageType,
uint16_t messageLength, uint16_t messageLength,
uint8_t aggregation_level) { uint8_t aggregation_level)
{
t_nrPolar_params *polarParams=nr_polar_params(messageType, messageLength, aggregation_level, false); t_nrPolar_params *polarParams=nr_polar_params(messageType, messageLength, aggregation_level, false);
#ifdef POLAR_CODING_DEBUG #ifdef POLAR_CODING_DEBUG
......
...@@ -680,36 +680,6 @@ static void nr_pdcch_unscrambling(c16_t *e_rx, ...@@ -680,36 +680,6 @@ static void nr_pdcch_unscrambling(c16_t *e_rx,
} }
} }
/* This function compares the received DCI bits with
* re-encoded DCI bits and returns the number of mismatched bits
*/
static uint16_t nr_dci_false_detection(uint64_t *dci,
int16_t *soft_in,
int encoded_length,
int rnti,
int8_t messageType,
uint16_t messageLength,
uint8_t aggregation_level)
{
uint32_t encoder_output[NR_MAX_DCI_SIZE_DWORD];
polar_encoder_fast(dci, (void *)encoder_output, rnti, 1, messageType, messageLength, aggregation_level);
uint8_t *enout_p = (uint8_t*)encoder_output;
uint16_t x = 0;
for (int i=0; i<encoded_length/8; i++) {
x += (enout_p[i] & 1) ^ ((soft_in[i * 8] >> 15) & 1);
x += ((enout_p[i] >> 1) & 1) ^ ((soft_in[i * 8 + 1] >> 15) & 1);
x += ((enout_p[i] >> 2) & 1) ^ ((soft_in[i * 8 + 2] >> 15) & 1);
x += ((enout_p[i] >> 3) & 1) ^ ((soft_in[i * 8 + 3] >> 15) & 1);
x += ((enout_p[i] >> 4) & 1) ^ ((soft_in[i * 8 + 4] >> 15) & 1);
x += ((enout_p[i] >> 5) & 1) ^ ((soft_in[i * 8 + 5] >> 15) & 1);
x += ((enout_p[i] >> 6) & 1) ^ ((soft_in[i * 8 + 6] >> 15) & 1);
x += ((enout_p[i] >> 7) & 1) ^ ((soft_in[i * 8 + 7] >> 15) & 1);
}
return x;
}
void nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue, void nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue,
const UE_nr_rxtx_proc_t *proc, const UE_nr_rxtx_proc_t *proc,
c16_t *pdcch_e_rx, c16_t *pdcch_e_rx,
...@@ -758,7 +728,7 @@ void nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue, ...@@ -758,7 +728,7 @@ void nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue,
rel15->coreset.pdcch_dmrs_scrambling_id, rel15->coreset.pdcch_dmrs_scrambling_id,
tmp_e); tmp_e);
uint16_t crc = polar_decoder_int16(tmp_e, dci_estimation, 1, NR_POLAR_DCI_MESSAGE_TYPE, dci_length, L); const uint32_t crc = polar_decoder_int16(tmp_e, dci_estimation, 1, NR_POLAR_DCI_MESSAGE_TYPE, dci_length, L);
rnti_t n_rnti = rel15->rnti; rnti_t n_rnti = rel15->rnti;
if (crc == n_rnti) { if (crc == n_rnti) {
...@@ -771,17 +741,6 @@ void nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue, ...@@ -771,17 +741,6 @@ void nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue,
CCEind, CCEind,
dci_length, dci_length,
*(unsigned long long *)dci_estimation); *(unsigned long long *)dci_estimation);
uint16_t mb = nr_dci_false_detection(dci_estimation, tmp_e, L * 108, n_rnti, NR_POLAR_DCI_MESSAGE_TYPE, dci_length, L);
ue->dci_thres = (ue->dci_thres + mb) / 2;
if (mb > (ue->dci_thres + 30)) {
LOG_W(NR_PHY_DCI,
"DCI false positive. Dropping DCI index %d. Mismatched bits: %d/%d. Current DCI threshold: %d\n",
j,
mb,
L * 108,
ue->dci_thres);
continue;
} else {
AssertFatal(dci_ind->number_of_dcis < sizeofArray(dci_ind->dci_list), "Fix allocation\n"); AssertFatal(dci_ind->number_of_dcis < sizeofArray(dci_ind->dci_list), "Fix allocation\n");
fapi_nr_dci_indication_pdu_t *dci = dci_ind->dci_list + dci_ind->number_of_dcis; fapi_nr_dci_indication_pdu_t *dci = dci_ind->dci_list + dci_ind->number_of_dcis;
*dci = (fapi_nr_dci_indication_pdu_t){ *dci = (fapi_nr_dci_indication_pdu_t){
...@@ -799,7 +758,6 @@ void nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue, ...@@ -799,7 +758,6 @@ void nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue,
memcpy(dci->payloadBits, dci_estimation, (dci_length + 7) / 8); memcpy(dci->payloadBits, dci_estimation, (dci_length + 7) / 8);
dci_ind->number_of_dcis++; dci_ind->number_of_dcis++;
break; // If DCI is found, no need to check for remaining DCI lengths break; // If DCI is found, no need to check for remaining DCI lengths
}
} else { } else {
LOG_D(NR_PHY_DCI, LOG_D(NR_PHY_DCI,
"(%i.%i) Decoded crc %x does not match rnti %x for DCI format %d\n", "(%i.%i) Decoded crc %x does not match rnti %x for DCI format %d\n",
......
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