Merge remote-tracking branch 'origin/ldpc-coderate-round-fix' into integration_2022_wk40
This commit is contained in:
@@ -13,12 +13,12 @@ Ref :
|
|||||||
feptx_total : 59.0
|
feptx_total : 59.0
|
||||||
L1 Tx processing : 210.0
|
L1 Tx processing : 210.0
|
||||||
DLSCH encoding : 129.0
|
DLSCH encoding : 129.0
|
||||||
L1 Rx processing : 287.0
|
L1 Rx processing : 359.0
|
||||||
PUSCH inner-receiver : 166.0
|
PUSCH inner-receiver : 166.0
|
||||||
PUSCH decoding : 176.0
|
PUSCH decoding : 270.0
|
||||||
Schedule Response : 42.0
|
Schedule Response : 52.0
|
||||||
DL & UL scheduling timing : 13.0
|
DL & UL scheduling timing : 13.0
|
||||||
UL Indication : 55.0
|
UL Indication : 65.0
|
||||||
Threshold :
|
Threshold :
|
||||||
feprx : 1.25
|
feprx : 1.25
|
||||||
feptx_prec : 1.25
|
feptx_prec : 1.25
|
||||||
|
|||||||
@@ -13,12 +13,12 @@ Ref :
|
|||||||
feptx_total : 62.0
|
feptx_total : 62.0
|
||||||
L1 Tx processing : 170.0
|
L1 Tx processing : 170.0
|
||||||
DLSCH encoding : 118.0
|
DLSCH encoding : 118.0
|
||||||
L1 Rx processing : 223.0
|
L1 Rx processing : 275.0
|
||||||
PUSCH inner-receiver : 107.0
|
PUSCH inner-receiver : 107.0
|
||||||
PUSCH decoding : 170.0
|
PUSCH decoding : 246.0
|
||||||
Schedule Response : 15.0
|
Schedule Response : 22.0
|
||||||
DL & UL scheduling timing : 10.0
|
DL & UL scheduling timing : 10.0
|
||||||
UL Indication : 27.0
|
UL Indication : 34.0
|
||||||
Threshold :
|
Threshold :
|
||||||
feprx : 1.25
|
feprx : 1.25
|
||||||
feptx_prec : 1.25
|
feptx_prec : 1.25
|
||||||
|
|||||||
@@ -472,6 +472,13 @@ void nr_interleaving_ldpc(uint32_t E, uint8_t Qm, uint8_t *e,uint8_t *f);
|
|||||||
|
|
||||||
void nr_deinterleaving_ldpc(uint32_t E, uint8_t Qm, int16_t *e,int16_t *f);
|
void nr_deinterleaving_ldpc(uint32_t E, uint8_t Qm, int16_t *e,int16_t *f);
|
||||||
|
|
||||||
|
int nr_get_R_ldpc_decoder(int rvidx,
|
||||||
|
int E,
|
||||||
|
int BG,
|
||||||
|
int Z,
|
||||||
|
int *llrLen,
|
||||||
|
int round);
|
||||||
|
|
||||||
int nr_rate_matching_ldpc(uint32_t Tbslbrm,
|
int nr_rate_matching_ldpc(uint32_t Tbslbrm,
|
||||||
uint8_t BG,
|
uint8_t BG,
|
||||||
uint16_t Z,
|
uint16_t Z,
|
||||||
|
|||||||
@@ -386,6 +386,39 @@ void nr_deinterleaving_ldpc(uint32_t E, uint8_t Qm, int16_t *e,int16_t *f)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int nr_get_R_ldpc_decoder(int rvidx,
|
||||||
|
int E,
|
||||||
|
int BG,
|
||||||
|
int Z,
|
||||||
|
int *llrLen,
|
||||||
|
int round) {
|
||||||
|
AssertFatal(BG == 1 || BG == 2, "Unknown BG %d\n", BG);
|
||||||
|
|
||||||
|
int Ncb = (BG==1)?(66*Z):(50*Z);
|
||||||
|
int infoBits = (index_k0[BG-1][rvidx] * Z + E);
|
||||||
|
|
||||||
|
if (round == 0) *llrLen = infoBits;
|
||||||
|
if (infoBits > Ncb) infoBits = Ncb;
|
||||||
|
if (infoBits > *llrLen) *llrLen = infoBits;
|
||||||
|
|
||||||
|
int sysBits = (BG==1)?(22*Z):(10*Z);
|
||||||
|
float decoderR = (float)sysBits/(infoBits + 2*Z);
|
||||||
|
|
||||||
|
if (BG == 2)
|
||||||
|
if (decoderR < 0.3333)
|
||||||
|
return 15;
|
||||||
|
else if (decoderR < 0.6667)
|
||||||
|
return 13;
|
||||||
|
else
|
||||||
|
return 23;
|
||||||
|
else
|
||||||
|
if (decoderR < 0.6667)
|
||||||
|
return 13;
|
||||||
|
else if (decoderR < 0.8889)
|
||||||
|
return 23;
|
||||||
|
else
|
||||||
|
return 89;
|
||||||
|
}
|
||||||
|
|
||||||
int nr_rate_matching_ldpc(uint32_t Tbslbrm,
|
int nr_rate_matching_ldpc(uint32_t Tbslbrm,
|
||||||
uint8_t BG,
|
uint8_t BG,
|
||||||
|
|||||||
@@ -234,6 +234,12 @@ void nr_processULSegment(void* arg) {
|
|||||||
short* ulsch_llr = rdata->ulsch_llr;
|
short* ulsch_llr = rdata->ulsch_llr;
|
||||||
int max_ldpc_iterations = p_decoderParms->numMaxIter;
|
int max_ldpc_iterations = p_decoderParms->numMaxIter;
|
||||||
int8_t llrProcBuf[OAI_UL_LDPC_MAX_NUM_LLR] __attribute__ ((aligned(32)));
|
int8_t llrProcBuf[OAI_UL_LDPC_MAX_NUM_LLR] __attribute__ ((aligned(32)));
|
||||||
|
p_decoderParms->R = nr_get_R_ldpc_decoder(rv_index,
|
||||||
|
E,
|
||||||
|
p_decoderParms->BG,
|
||||||
|
p_decoderParms->Z,
|
||||||
|
&ulsch_harq->llrLen,
|
||||||
|
ulsch_harq->round);
|
||||||
|
|
||||||
int16_t z [68*384 + 16] __attribute__ ((aligned(16)));
|
int16_t z [68*384 + 16] __attribute__ ((aligned(16)));
|
||||||
int8_t l [68*384 + 16] __attribute__ ((aligned(16)));
|
int8_t l [68*384 + 16] __attribute__ ((aligned(16)));
|
||||||
@@ -465,26 +471,8 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
|
|||||||
int kc;
|
int kc;
|
||||||
if (p_decParams->BG == 2){
|
if (p_decParams->BG == 2){
|
||||||
kc = 52;
|
kc = 52;
|
||||||
if (Coderate < 0.3333) {
|
|
||||||
p_decParams->R = 15;
|
|
||||||
}
|
|
||||||
else if (Coderate <0.6667) {
|
|
||||||
p_decParams->R = 13;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
p_decParams->R = 23;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
kc = 68;
|
kc = 68;
|
||||||
if (Coderate < 0.6667) {
|
|
||||||
p_decParams->R = 13;
|
|
||||||
}
|
|
||||||
else if (Coderate <0.8889) {
|
|
||||||
p_decParams->R = 23;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
p_decParams->R = 89;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NR_gNB_SCH_STATS_t *stats=NULL;
|
NR_gNB_SCH_STATS_t *stats=NULL;
|
||||||
|
|||||||
@@ -251,6 +251,12 @@ void nr_processDLSegment(void* arg) {
|
|||||||
short* dlsch_llr = rdata->dlsch_llr;
|
short* dlsch_llr = rdata->dlsch_llr;
|
||||||
rdata->decodeIterations = dlsch->max_ldpc_iterations + 1;
|
rdata->decodeIterations = dlsch->max_ldpc_iterations + 1;
|
||||||
int8_t llrProcBuf[OAI_UL_LDPC_MAX_NUM_LLR] __attribute__ ((aligned(32)));
|
int8_t llrProcBuf[OAI_UL_LDPC_MAX_NUM_LLR] __attribute__ ((aligned(32)));
|
||||||
|
p_decoderParms->R = nr_get_R_ldpc_decoder(rdata->rv_index,
|
||||||
|
E,
|
||||||
|
p_decoderParms->BG,
|
||||||
|
p_decoderParms->Z,
|
||||||
|
&harq_process->llrLen,
|
||||||
|
harq_process->DLround);
|
||||||
|
|
||||||
int16_t z [68*384 + 16] __attribute__ ((aligned(16)));
|
int16_t z [68*384 + 16] __attribute__ ((aligned(16)));
|
||||||
int8_t l [68*384 + 16] __attribute__ ((aligned(16)));
|
int8_t l [68*384 + 16] __attribute__ ((aligned(16)));
|
||||||
@@ -476,25 +482,9 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
|
|||||||
if ((A <=292) || ((A <= NR_MAX_PDSCH_TBS) && (Coderate <= 0.6667)) || Coderate <= 0.25) {
|
if ((A <=292) || ((A <= NR_MAX_PDSCH_TBS) && (Coderate <= 0.6667)) || Coderate <= 0.25) {
|
||||||
p_decParams->BG = 2;
|
p_decParams->BG = 2;
|
||||||
kc = 52;
|
kc = 52;
|
||||||
|
|
||||||
if (Coderate < 0.3333) {
|
|
||||||
p_decParams->R = 15;
|
|
||||||
} else if (Coderate <0.6667) {
|
|
||||||
p_decParams->R = 13;
|
|
||||||
} else {
|
|
||||||
p_decParams->R = 23;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
p_decParams->BG = 1;
|
p_decParams->BG = 1;
|
||||||
kc = 68;
|
kc = 68;
|
||||||
|
|
||||||
if (Coderate < 0.6667) {
|
|
||||||
p_decParams->R = 13;
|
|
||||||
} else if (Coderate <0.8889) {
|
|
||||||
p_decParams->R = 23;
|
|
||||||
} else {
|
|
||||||
p_decParams->R = 89;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (harq_process->first_rx == 1) {
|
if (harq_process->first_rx == 1) {
|
||||||
|
|||||||
@@ -259,6 +259,9 @@ typedef struct {
|
|||||||
uint16_t dlDmrsScramblingId;
|
uint16_t dlDmrsScramblingId;
|
||||||
/// PDU BITMAP
|
/// PDU BITMAP
|
||||||
uint16_t pduBitmap;
|
uint16_t pduBitmap;
|
||||||
|
/// Last index of LLR buffer that contains information.
|
||||||
|
/// Used for computing LDPC decoder R
|
||||||
|
int llrLen;
|
||||||
} NR_DL_UE_HARQ_t;
|
} NR_DL_UE_HARQ_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|||||||
@@ -342,6 +342,9 @@ typedef struct {
|
|||||||
int16_t q_RI[MAX_RI_PAYLOAD];
|
int16_t q_RI[MAX_RI_PAYLOAD];
|
||||||
/// Temporary h sequence to flag PUSCH_x/PUSCH_y symbols which are not scrambled
|
/// Temporary h sequence to flag PUSCH_x/PUSCH_y symbols which are not scrambled
|
||||||
uint8_t h[MAX_NUM_CHANNEL_BITS];
|
uint8_t h[MAX_NUM_CHANNEL_BITS];
|
||||||
|
/// Last index of LLR buffer that contains information.
|
||||||
|
/// Used for computing LDPC decoder R
|
||||||
|
int llrLen;
|
||||||
//////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////
|
||||||
} NR_UL_gNB_HARQ_t;
|
} NR_UL_gNB_HARQ_t;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user