Commit f9a81c17 authored by Hongzhi's avatar Hongzhi

TBS bg1 for sib1/2

parent 0933c1c7
...@@ -65,7 +65,7 @@ int32_t nr_segmentation(unsigned char *input_buffer, ...@@ -65,7 +65,7 @@ int32_t nr_segmentation(unsigned char *input_buffer,
// Find K+ // Find K+
Bprime_by_C = Bprime/(*C); Bprime_by_C = Bprime/(*C);
if (Bprime <=192) { /*if (Bprime <=192) {
Kb = 6; Kb = 6;
} else if (Bprime <=560) { } else if (Bprime <=560) {
Kb = 8; Kb = 8;
...@@ -73,9 +73,9 @@ int32_t nr_segmentation(unsigned char *input_buffer, ...@@ -73,9 +73,9 @@ int32_t nr_segmentation(unsigned char *input_buffer,
Kb = 9; Kb = 9;
} else if (Bprime <=3840) { } else if (Bprime <=3840) {
Kb = 10;; Kb = 10;;
} else { } else {*/
Kb = 22; Kb = 22;
} //}
if ((Bprime_by_C%Kb) > 0) if ((Bprime_by_C%Kb) > 0)
...@@ -83,7 +83,7 @@ if ((Bprime_by_C%Kb) > 0) ...@@ -83,7 +83,7 @@ if ((Bprime_by_C%Kb) > 0)
else else
Z = (Bprime_by_C/Kb); Z = (Bprime_by_C/Kb);
//printf("nr segmetation B %d Bprime %d Bprime_by_C %d z %d \n", B, Bprime, Bprime_by_C, Z); printf("nr segmetation B %d Bprime %d Bprime_by_C %d z %d \n", B, Bprime, Bprime_by_C, Z);
if (Z <= 2) { if (Z <= 2) {
*Kplus = 2; *Kplus = 2;
...@@ -141,7 +141,7 @@ else ...@@ -141,7 +141,7 @@ else
*F = ((*C)*(*Kplus) - (Bprime)); *F = ((*C)*(*Kplus) - (Bprime));
//printf("final nr seg output Z %d Kplus %d F %d \n", *Zout, *Kplus, *F); printf("final nr seg output Z %d Kplus %d F %d \n", *Zout, *Kplus, *F);
#ifdef DEBUG_SEGMENTATION #ifdef DEBUG_SEGMENTATION
printf("C %d, Kplus %d, Kminus %d, Bprime_bytes %d, Bprime %d, F %d\n",*C,*Kplus,*Kminus,Bprime>>3,Bprime,*F); printf("C %d, Kplus %d, Kminus %d, Bprime_bytes %d, Bprime %d, F %d\n",*C,*Kplus,*Kminus,Bprime>>3,Bprime,*F);
#endif #endif
......
...@@ -352,7 +352,6 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, ...@@ -352,7 +352,6 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
} }
kb = harq_process->Kplus/harq_process->Z; kb = harq_process->Kplus/harq_process->Z;
// p_decParams->Z = 128;
if ( kb==22){ if ( kb==22){
p_decParams->BG = 1; p_decParams->BG = 1;
p_decParams->R = 13; p_decParams->R = 13;
...@@ -364,7 +363,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, ...@@ -364,7 +363,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
kc = 52; kc = 52;
} }
p_decParams->numMaxIter = 5; p_decParams->numMaxIter = 10;
Kr = p_decParams->Z*kb; Kr = p_decParams->Z*kb;
p_decParams->outMode= 0; p_decParams->outMode= 0;
...@@ -627,16 +626,16 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, ...@@ -627,16 +626,16 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
llrProcBuf, llrProcBuf,
p_procTime); p_procTime);
ret = no_iteration_ldpc; // ret = no_iteration_ldpc;
nb_total_decod++; nb_total_decod++;
if (no_iteration_ldpc > 5){ if (no_iteration_ldpc > 5){
nb_error_decod++; nb_error_decod++;
} }
//if (!nb_total_decod%10000){ if (!nb_total_decod%10000){
printf("Error number of iteration LPDC %d %ld/%ld \n", no_iteration_ldpc, nb_error_decod,nb_total_decod);fflush(stdout); printf("Error number of iteration LPDC %d %ld/%ld \n", no_iteration_ldpc, nb_error_decod,nb_total_decod);fflush(stdout);
//} }
//else //else
//printf("OK number of iteration LPDC %d\n", no_iteration_ldpc); //printf("OK number of iteration LPDC %d\n", no_iteration_ldpc);
...@@ -650,11 +649,11 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, ...@@ -650,11 +649,11 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
#endif #endif
//#ifdef DEBUG_DLSCH_DECODING //#ifdef DEBUG_DLSCH_DECODING
printf("output decoder %d %d %d %d %d \n", harq_process->c[r][0], harq_process->c[r][1], harq_process->c[r][2],harq_process->c[r][3], harq_process->c[r][4]); printf("output decoder %d %d %d %d %d \n", harq_process->c[r][0], harq_process->c[r][1], harq_process->c[r][2],harq_process->c[r][3], harq_process->c[r][4]);
printf("no_iterations_ldpc %d\n",no_iteration_ldpc); printf("no_iterations_ldpc %d\n",no_iteration_ldpc);
write_output("dec_output.m","dec0",harq_process->c[0],Kr_bytes,1,4); //write_output("dec_output.m","dec0",harq_process->c[0],Kr_bytes,1,4);
//#endif //#endif
#if UE_TIMING_TRACE #if UE_TIMING_TRACE
...@@ -945,7 +944,7 @@ uint32_t dlsch_decoding_mthread(PHY_VARS_UE *phy_vars_ue, ...@@ -945,7 +944,7 @@ uint32_t dlsch_decoding_mthread(PHY_VARS_UE *phy_vars_ue,
uint16_t iind; uint16_t iind;
// uint8_t dummy_channel_output[(3*8*block_length)+12]; // uint8_t dummy_channel_output[(3*8*block_length)+12];
short dummy_w[MAX_NUM_DLSCH_SEGMENTS][3*(8448+64)]; short dummy_w[MAX_NUM_DLSCH_SEGMENTS][3*(8448+64)];
uint32_t r,r_offset=0,Kr,Kr_bytes,err_flag=0; uint32_t r,r_offset=0,Kr,Kr_bytes,err_flag=0,Kr_int,kb,kc;
uint8_t crc_type; uint8_t crc_type;
//UE_rxtx_proc_t *proc = &phy_vars_ue->proc; //UE_rxtx_proc_t *proc = &phy_vars_ue->proc;
int32_t no_iteration_ldpc; int32_t no_iteration_ldpc;
...@@ -1116,12 +1115,21 @@ uint32_t dlsch_decoding_mthread(PHY_VARS_UE *phy_vars_ue, ...@@ -1116,12 +1115,21 @@ uint32_t dlsch_decoding_mthread(PHY_VARS_UE *phy_vars_ue,
} }
// p_decParams->Z = 128; kb = harq_process->Kplus/harq_process->Z;
p_decParams->BG = 1; if ( kb==22){
p_decParams->R = 89; p_decParams->BG = 1;
p_decParams->numMaxIter = 5; p_decParams->R = 13;
Kr = p_decParams->Z*22; kc = 68;
p_decParams->outMode= 0; }
else{
p_decParams->BG = 2;
p_decParams->R = 13;
kc = 52;
}
p_decParams->numMaxIter = 10;
Kr = p_decParams->Z*kb;
p_decParams->outMode= 0;
/* /*
else { else {
...@@ -1301,6 +1309,12 @@ if (harq_process->C>1) { // wakeup worker if more than 1 segment ...@@ -1301,6 +1309,12 @@ if (harq_process->C>1) { // wakeup worker if more than 1 segment
Kr_bytes = Kr>>3; Kr_bytes = Kr>>3;
//workaround for nr ldpc using lte interleaving
if (dlsch->harq_processes[harq_pid]->C >= 2)
Kr_int = G/(3*dlsch->harq_processes[harq_pid]->C);
else
Kr_int = Kr;
if (Kr_bytes<=64) if (Kr_bytes<=64)
iind = (Kr_bytes-5); iind = (Kr_bytes-5);
else if (Kr_bytes <=128) else if (Kr_bytes <=128)
...@@ -1310,8 +1324,8 @@ if (harq_process->C>1) { // wakeup worker if more than 1 segment ...@@ -1310,8 +1324,8 @@ if (harq_process->C>1) { // wakeup worker if more than 1 segment
else if (Kr_bytes <= 768) else if (Kr_bytes <= 768)
iind = 123 + ((Kr_bytes-256)>>3); iind = 123 + ((Kr_bytes-256)>>3);
else { else {
printf("dlsch_decoding: Illegal codeword size %d!!!\n",Kr_bytes); //printf("dlsch_decoding: Illegal codeword size %d!!!\n",Kr_bytes);
return(dlsch->max_turbo_iterations); //return(dlsch->max_turbo_iterations);
} }
#ifdef DEBUG_DLSCH_DECODING #ifdef DEBUG_DLSCH_DECODING
...@@ -1322,7 +1336,7 @@ if (harq_process->C>1) { // wakeup worker if more than 1 segment ...@@ -1322,7 +1336,7 @@ if (harq_process->C>1) { // wakeup worker if more than 1 segment
start_meas(dlsch_rate_unmatching_stats); start_meas(dlsch_rate_unmatching_stats);
#endif #endif
memset(&dummy_w[r][0],0,3*(8448+64)*sizeof(short)); memset(&dummy_w[r][0],0,3*(8448+64)*sizeof(short));
harq_process->RTC[r] = generate_dummy_w(4+(Kr_bytes*8), harq_process->RTC[r] = generate_dummy_w(Kr_int,
(uint8_t*) &dummy_w[r][0], (uint8_t*) &dummy_w[r][0],
(r==0) ? harq_process->F : 0); (r==0) ? harq_process->F : 0);
...@@ -1368,6 +1382,7 @@ if (harq_process->C>1) { // wakeup worker if more than 1 segment ...@@ -1368,6 +1382,7 @@ if (harq_process->C>1) { // wakeup worker if more than 1 segment
#endif #endif
} }
r_offset += E; r_offset += E;
//printf("main thread r_offset %d\n",r_offset);
/* /*
printf("Subblock deinterleaving, d %p w %p\n", printf("Subblock deinterleaving, d %p w %p\n",
...@@ -1482,7 +1497,7 @@ if (harq_process->C>1) { // wakeup worker if more than 1 segment ...@@ -1482,7 +1497,7 @@ if (harq_process->C>1) { // wakeup worker if more than 1 segment
llrProcBuf, llrProcBuf,
p_procTime); p_procTime);
if (no_iteration_ldpc > 2) if (no_iteration_ldpc > 10)
printf("Error number of iteration LPDC %d\n", no_iteration_ldpc); printf("Error number of iteration LPDC %d\n", no_iteration_ldpc);
//else //else
//printf("OK number of iteration LPDC %d\n", no_iteration_ldpc); //printf("OK number of iteration LPDC %d\n", no_iteration_ldpc);
...@@ -1850,7 +1865,7 @@ uint32_t dlsch_decoding_2thread0(void *arg) ...@@ -1850,7 +1865,7 @@ uint32_t dlsch_decoding_2thread0(void *arg)
uint16_t iind; uint16_t iind;
// uint8_t dummy_channel_output[(3*8*block_length)+12]; // uint8_t dummy_channel_output[(3*8*block_length)+12];
short dummy_w[MAX_NUM_DLSCH_SEGMENTS][3*(8448+64)]; short dummy_w[MAX_NUM_DLSCH_SEGMENTS][3*(8448+64)];
uint32_t r,r_offset=0,Kr,Kr_bytes,err_flag=0; uint32_t r,r_offset=0,Kr,Kr_bytes,err_flag=0,Kr_int;
uint8_t crc_type; uint8_t crc_type;
uint8_t C; uint8_t C;
uint8_t Qm; uint8_t Qm;
...@@ -1986,8 +2001,8 @@ uint32_t dlsch_decoding_2thread0(void *arg) ...@@ -1986,8 +2001,8 @@ uint32_t dlsch_decoding_2thread0(void *arg)
// p_decParams->Z = 128; // p_decParams->Z = 128;
p_decParams->BG = 1; p_decParams->BG = 1;
p_decParams->R = 89; p_decParams->R = 13;
p_decParams->numMaxIter = 5; p_decParams->numMaxIter = 2;
Kr = p_decParams->Z*22; Kr = p_decParams->Z*22;
p_decParams->outMode= 0; p_decParams->outMode= 0;
...@@ -2045,6 +2060,8 @@ uint32_t dlsch_decoding_2thread0(void *arg) ...@@ -2045,6 +2060,8 @@ uint32_t dlsch_decoding_2thread0(void *arg)
r_offset = Nl*Qm * (Gp/C); r_offset = Nl*Qm * (Gp/C);
else else
r_offset = Nl*Qm * ((GpmodC==0?0:1) + (Gp/C)); r_offset = Nl*Qm * ((GpmodC==0?0:1) + (Gp/C));
printf("thread0 r_offset %d\n",r_offset);
//for (r=(harq_process->C/2); r<harq_process->C; r++) { //for (r=(harq_process->C/2); r<harq_process->C; r++) {
r=1; //(harq_process->C/2); r=1; //(harq_process->C/2);
...@@ -2061,6 +2078,12 @@ uint32_t dlsch_decoding_2thread0(void *arg) ...@@ -2061,6 +2078,12 @@ uint32_t dlsch_decoding_2thread0(void *arg)
Kr_bytes = Kr>>3; Kr_bytes = Kr>>3;
//workaround for nr ldpc using lte interleaving
if (dlsch->harq_processes[harq_pid]->C >= 2)
Kr_int = G/(3*dlsch->harq_processes[harq_pid]->C);
else
Kr_int = Kr;
if (Kr_bytes<=64) if (Kr_bytes<=64)
iind = (Kr_bytes-5); iind = (Kr_bytes-5);
else if (Kr_bytes <=128) else if (Kr_bytes <=128)
...@@ -2070,7 +2093,7 @@ uint32_t dlsch_decoding_2thread0(void *arg) ...@@ -2070,7 +2093,7 @@ uint32_t dlsch_decoding_2thread0(void *arg)
else if (Kr_bytes <= 768) else if (Kr_bytes <= 768)
iind = 123 + ((Kr_bytes-256)>>3); iind = 123 + ((Kr_bytes-256)>>3);
else { else {
printf("dlsch_decoding: Illegal codeword size %d!!!\n",Kr_bytes); //printf("dlsch_decoding: Illegal codeword size %d!!!\n",Kr_bytes);
//return(dlsch->max_turbo_iterations); //return(dlsch->max_turbo_iterations);
} }
...@@ -2082,7 +2105,7 @@ uint32_t dlsch_decoding_2thread0(void *arg) ...@@ -2082,7 +2105,7 @@ uint32_t dlsch_decoding_2thread0(void *arg)
start_meas(dlsch_rate_unmatching_stats); start_meas(dlsch_rate_unmatching_stats);
#endif #endif
memset(&dummy_w[r][0],0,3*(8448+64)*sizeof(short)); memset(&dummy_w[r][0],0,3*(8448+64)*sizeof(short));
harq_process->RTC[r] = generate_dummy_w(4+(Kr_bytes*8), harq_process->RTC[r] = generate_dummy_w(Kr_int,
(uint8_t*) &dummy_w[r][0], (uint8_t*) &dummy_w[r][0],
(r==0) ? harq_process->F : 0); (r==0) ? harq_process->F : 0);
...@@ -2603,8 +2626,8 @@ uint32_t dlsch_decoding_2thread1(void *arg) ...@@ -2603,8 +2626,8 @@ uint32_t dlsch_decoding_2thread1(void *arg)
uint32_t ret,offset; uint32_t ret,offset;
uint16_t iind; uint16_t iind;
// uint8_t dummy_channel_output[(3*8*block_length)+12]; // uint8_t dummy_channel_output[(3*8*block_length)+12];
short dummy_w[MAX_NUM_DLSCH_SEGMENTS][3*(6144+64)]; short dummy_w[MAX_NUM_DLSCH_SEGMENTS][3*(8448+64)];
uint32_t r,r_offset=0,Kr,Kr_bytes,err_flag=0; uint32_t r,r_offset=0,Kr,Kr_bytes,err_flag=0,Kr_int;
uint8_t crc_type; uint8_t crc_type;
uint8_t C; uint8_t C;
uint8_t Qm; uint8_t Qm;
...@@ -2746,7 +2769,7 @@ uint32_t dlsch_decoding_2thread1(void *arg) ...@@ -2746,7 +2769,7 @@ uint32_t dlsch_decoding_2thread1(void *arg)
// p_decParams->Z = 128; // p_decParams->Z = 128;
p_decParams->BG = 1; p_decParams->BG = 1;
p_decParams->R = 89; p_decParams->R = 89;
p_decParams->numMaxIter = 5; p_decParams->numMaxIter = 2;
Kr = p_decParams->Z*22; Kr = p_decParams->Z*22;
p_decParams->outMode= 0; p_decParams->outMode= 0;
/* /*
...@@ -2824,6 +2847,12 @@ uint32_t dlsch_decoding_2thread1(void *arg) ...@@ -2824,6 +2847,12 @@ uint32_t dlsch_decoding_2thread1(void *arg)
Kr_bytes = Kr>>3; Kr_bytes = Kr>>3;
//workaround for nr ldpc using lte interleaving
if (dlsch->harq_processes[harq_pid]->C >= 2)
Kr_int = G/(3*dlsch->harq_processes[harq_pid]->C);
else
Kr_int = Kr;
if (Kr_bytes<=64) if (Kr_bytes<=64)
iind = (Kr_bytes-5); iind = (Kr_bytes-5);
else if (Kr_bytes <=128) else if (Kr_bytes <=128)
...@@ -2833,7 +2862,7 @@ uint32_t dlsch_decoding_2thread1(void *arg) ...@@ -2833,7 +2862,7 @@ uint32_t dlsch_decoding_2thread1(void *arg)
else if (Kr_bytes <= 768) else if (Kr_bytes <= 768)
iind = 123 + ((Kr_bytes-256)>>3); iind = 123 + ((Kr_bytes-256)>>3);
else { else {
printf("dlsch_decoding: Illegal codeword size %d!!!\n",Kr_bytes); //printf("dlsch_decoding: Illegal codeword size %d!!!\n",Kr_bytes);
//return(dlsch->max_turbo_iterations); //return(dlsch->max_turbo_iterations);
} }
...@@ -2844,8 +2873,8 @@ uint32_t dlsch_decoding_2thread1(void *arg) ...@@ -2844,8 +2873,8 @@ uint32_t dlsch_decoding_2thread1(void *arg)
#if UE_TIMING_TRACE #if UE_TIMING_TRACE
start_meas(dlsch_rate_unmatching_stats); start_meas(dlsch_rate_unmatching_stats);
#endif #endif
memset(&dummy_w[r][0],0,3*(6144+64)*sizeof(short)); memset(&dummy_w[r][0],0,3*(8448+64)*sizeof(short));
harq_process->RTC[r] = generate_dummy_w(4+(Kr_bytes*8), harq_process->RTC[r] = generate_dummy_w(Kr_int,
(uint8_t*) &dummy_w[r][0], (uint8_t*) &dummy_w[r][0],
(r==0) ? harq_process->F : 0); (r==0) ? harq_process->F : 0);
......
This diff is collapsed.
...@@ -73,8 +73,8 @@ ...@@ -73,8 +73,8 @@
#define openair_free(y,x) free((y)) #define openair_free(y,x) free((y))
#define PAGE_SIZE 4096 #define PAGE_SIZE 4096
#define RX_NB_TH_MAX 2 #define RX_NB_TH_MAX 3
#define RX_NB_TH 2 #define RX_NB_TH 3
//#ifdef SHRLIBDEV //#ifdef SHRLIBDEV
......
...@@ -37,8 +37,8 @@ ...@@ -37,8 +37,8 @@
#include "types.h" #include "types.h"
//#include "defs.h" //#include "defs.h"
#define RX_NB_TH_MAX 2 #define RX_NB_TH_MAX 3
#define RX_NB_TH 2 #define RX_NB_TH 3
#define LTE_SLOTS_PER_SUBFRAME 2 #define LTE_SLOTS_PER_SUBFRAME 2
......
...@@ -3044,7 +3044,7 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin ...@@ -3044,7 +3044,7 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin
else{ else{
if (ue->pbch_vars[eNB_id]->pdu_errors_conseq>=100) { if (ue->pbch_vars[eNB_id]->pdu_errors_conseq>=100) {
LOG_E(PHY,"More that 100 consecutive PBCH errors! Exiting!\n"); LOG_E(PHY,"More that 100 consecutive PBCH errors! Exiting!\n");
mac_xface->macphy_exit("More that 100 consecutive PBCH errors!"); //mac_xface->macphy_exit("More that 100 consecutive PBCH errors!");
} }
} }
} }
......
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