fix(nrLDPC_decoder): Cleaning LDPC iteration accounting in NR
The idea is to make LDPC iteration accounting more standard from a C coding perspective by making two changes: 1. Now the iteration counter starts at 0 for the first iteration and goes up to max_ldpc_iterations - 1 for the last iteration. If it is equal to max_ldpc_iterations, it means that decoding failed. 2. A chain of useless returns in the UE DLSCH decoding call chain was removed.
This commit is contained in:
@@ -187,7 +187,7 @@ int32_t LDPCdecoder(t_nrLDPC_dec_params* p_decParams,
|
||||
|
||||
// Launch LDPC decoder core for one segment
|
||||
int numIter = nrLDPC_decoder_core(p_llr, p_out, numLLR, p_lut, p_decParams, p_profiler, ab);
|
||||
if (numIter > p_decParams->numMaxIter) {
|
||||
if (numIter >= p_decParams->numMaxIter) {
|
||||
LOG_D(PHY, "set abort: %d, %d\n", numIter, p_decParams->numMaxIter);
|
||||
set_abort(ab, true);
|
||||
}
|
||||
@@ -549,11 +549,11 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr,
|
||||
// estimated after only one iteration
|
||||
|
||||
// First iteration finished
|
||||
uint32_t numIter = 1;
|
||||
uint32_t numIter = 0;
|
||||
int32_t pcRes = 1; // pcRes is 0 if the ldpc decoder is succesful
|
||||
while ((numIter <= numMaxIter) && (pcRes != 0)) {
|
||||
while ((numIter < numMaxIter) && (pcRes != 0)) {
|
||||
if (check_abort(ab)) {
|
||||
numIter = numMaxIter + 2;
|
||||
numIter = numMaxIter;
|
||||
break;
|
||||
}
|
||||
// CN processing
|
||||
@@ -845,7 +845,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr,
|
||||
pcRes = nrLDPC_cnProcPc_BG2(p_lut, cnProcBuf, cnProcBufRes, Z);
|
||||
NR_LDPC_PROFILER_DETAIL(stop_meas(&p_profiler->cnProcPc));
|
||||
} else {
|
||||
if (numIter > 1) {
|
||||
if (numIter > 0) {
|
||||
int8_t llrOut[NR_LDPC_MAX_NUM_LLR] __attribute__((aligned(64))) = {0};
|
||||
int8_t* p_llrOut = outMode == nrLDPC_outMode_LLRINT8 ? p_out : llrOut;
|
||||
nrLDPC_llrRes2llrOut(p_lut, p_llrOut, llrRes, Z, BG);
|
||||
|
||||
Reference in New Issue
Block a user