Updated/Optimized nrLDPC_llrRes2llrOut
This commit is contained in:
@@ -456,7 +456,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP
|
|||||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||||
start_meas(&p_profiler->llrRes2llrOut);
|
start_meas(&p_profiler->llrRes2llrOut);
|
||||||
#endif
|
#endif
|
||||||
nrLDPC_llrRes2llrOut(p_lut, p_llrOut, p_procBuf, numLLR);
|
nrLDPC_llrRes2llrOut(p_lut, p_llrOut, p_procBuf, numLLR, Z, BG);
|
||||||
#ifdef NR_LDPC_PROFILER_DETAIL
|
#ifdef NR_LDPC_PROFILER_DETAIL
|
||||||
stop_meas(&p_profiler->llrRes2llrOut);
|
stop_meas(&p_profiler->llrRes2llrOut);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -165,6 +165,26 @@ static inline void nrLDPC_llr2CnProcBuf(t_nrLDPC_lut* p_lut, int8_t* llr, t_nrLD
|
|||||||
cnProcBuf[*p_lutEntry++] = llr[i];
|
cnProcBuf[*p_lutEntry++] = llr[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test
|
||||||
|
// =====================================================================
|
||||||
|
// CN group with 3 BNs
|
||||||
|
//const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups;
|
||||||
|
/*
|
||||||
|
const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups;
|
||||||
|
const uint16_t (*lut_circShift_CNG3) [lut_numCnInCnGroups_BG1_R13[0]] = (uint16_t(*)[lut_numCnInCnGroups_BG1_R13[0]]) p_lut->circShift[0];
|
||||||
|
int8_t* p_cnProcBuf;
|
||||||
|
uint32_t bitOffsetInGroup;
|
||||||
|
bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX;
|
||||||
|
|
||||||
|
const uint8_t lut_CNG3[3] = {0, 1, 26};
|
||||||
|
for (j=0; j<2; j++)
|
||||||
|
{
|
||||||
|
p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[0] + j*bitOffsetInGroup];
|
||||||
|
|
||||||
|
nrLDPC_inv_circ_memcpy(p_cnProcBuf, &llr[lut_CNG3[j]*Z], Z, lut_circShift_CNG3[j][0]);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -870,16 +890,37 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf
|
|||||||
\param llrOut Pointer to output LLRs
|
\param llrOut Pointer to output LLRs
|
||||||
\param numLLR Number of LLR values
|
\param numLLR Number of LLR values
|
||||||
*/
|
*/
|
||||||
static inline void nrLDPC_llrRes2llrOut(t_nrLDPC_lut* p_lut, int8_t* llrOut, t_nrLDPC_procBuf* p_procBuf, uint16_t numLLR)
|
static inline void nrLDPC_llrRes2llrOut(t_nrLDPC_lut* p_lut, int8_t* llrOut, t_nrLDPC_procBuf* p_procBuf, uint16_t numLLR,uint16_t Z, uint8_t BG)
|
||||||
{
|
{
|
||||||
const uint16_t* lut_llr2llrProcBuf = p_lut->llr2llrProcBuf;
|
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
const uint8_t numBn2CnG1 = p_lut->numBnInBnGroups[0];
|
||||||
|
uint32_t colG1 = NR_LDPC_START_COL_PARITY_BG1*Z;
|
||||||
|
|
||||||
|
const uint16_t* lut_llr2llrProcBufAddr = p_lut->llr2llrProcBufAddr;
|
||||||
|
const uint8_t* lut_llr2llrProcBufNumBn = p_lut->llr2llrProcBufNumBn;
|
||||||
|
const uint8_t* lut_llr2llrProcBufNumEl = p_lut->llr2llrProcBufNumEl;
|
||||||
|
|
||||||
|
uint16_t numLlr = 0;
|
||||||
int8_t* llrRes = p_procBuf->llrRes;
|
int8_t* llrRes = p_procBuf->llrRes;
|
||||||
|
int8_t* p_llrOut = &llrOut[0];
|
||||||
|
|
||||||
for (i=0; i<numLLR; i++)
|
if (BG == 2)
|
||||||
{
|
{
|
||||||
llrOut[i] = llrRes[lut_llr2llrProcBuf[i]];
|
colG1 = NR_LDPC_START_COL_PARITY_BG2*Z;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy LLRs connected to 1 CN
|
||||||
|
if (numBn2CnG1 > 0)
|
||||||
|
{
|
||||||
|
memcpy(&llrOut[colG1], llrRes, numBn2CnG1*Z);
|
||||||
|
}
|
||||||
|
|
||||||
|
// First 2 columns might be set to zero directly if it's true they always belong to the groups with highest number of connected CNs...
|
||||||
|
for (i=0; i<(*lut_llr2llrProcBufNumEl); i++)
|
||||||
|
{
|
||||||
|
numLlr = lut_llr2llrProcBufNumBn[i]*Z;
|
||||||
|
memcpy(p_llrOut, &llrRes[lut_llr2llrProcBufAddr[i]], numLlr);
|
||||||
|
p_llrOut+=numLlr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user