Commit c1963645 authored by hongzhi's avatar hongzhi

Merge branch 'ldpc_encoder_decoder' into oai_ue_mwc18_integration

parents a02683dc 13ecf0ec
......@@ -574,5 +574,5 @@ void phy_viterbi_dot11(int8_t *,uint8_t *,uint16_t);
//short *ldpc_decoder(short *msgChannel,short block_length,short No_iteration,double rate);
//short *ldpc_encoder(char *test_input,char* channel_input,short block_length,double rate);
int ldpc_encoder(unsigned char *test_input,unsigned char* channel_input,short block_length,double rate);
int ldpc_encoder_multi_segment(unsigned char **test_input,unsigned char **channel_input,short block_length,double rate,uint8_t n_segments);
#endif
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -65,7 +65,7 @@ int32_t nr_segmentation(unsigned char *input_buffer,
// Find K+
Bprime_by_C = Bprime/(*C);
/*if (Bprime <=192) {
if (Bprime <=192) {
Kb = 6;
} else if (Bprime <=560) {
Kb = 8;
......@@ -73,9 +73,9 @@ int32_t nr_segmentation(unsigned char *input_buffer,
Kb = 9;
} else if (Bprime <=3840) {
Kb = 10;;
} else {*/
} else {
Kb = 22;
//}
}
if ((Bprime_by_C%Kb) > 0)
......
......@@ -1037,7 +1037,7 @@ void phy_init_lte_ue__PDSCH( LTE_UE_PDSCH* const pdsch, const LTE_DL_FRAME_PARMS
AssertFatal( pdsch, "pdsch==0" );
pdsch->pmi_ext = (uint8_t*)malloc16_clear( fp->N_RB_DL );
pdsch->llr[0] = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
pdsch->llr[0] = (int16_t*)malloc16_clear( (8*((3*8*8448)+12))*sizeof(int16_t) );
pdsch->llr128 = (int16_t**)malloc16_clear( sizeof(int16_t*) );
// FIXME! no further allocation for (int16_t*)pdsch->llr128 !!! expect SIGSEGV
// FK, 11-3-2015: this is only as a temporary pointer, no memory is stored there
......@@ -1198,7 +1198,7 @@ int phy_init_lte_ue(PHY_VARS_UE *ue,
for (th_id=0; th_id<RX_NB_TH_MAX; th_id++) {
(*pdsch_vars_th)[th_id][eNB_id]->llr_shifts = (uint8_t*)malloc16_clear(7*2*fp->N_RB_DL*12);
(*pdsch_vars_th)[th_id][eNB_id]->llr_shifts_p = (*pdsch_vars_th)[0][eNB_id]->llr_shifts;
(*pdsch_vars_th)[th_id][eNB_id]->llr[1] = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
(*pdsch_vars_th)[th_id][eNB_id]->llr[1] = (int16_t*)malloc16_clear( (8*((3*8*8448)+12))*sizeof(int16_t) );
(*pdsch_vars_th)[th_id][eNB_id]->llr128_2ndstream = (int16_t**)malloc16_clear( sizeof(int16_t*) );
(*pdsch_vars_th)[th_id][eNB_id]->rho = (int32_t**)malloc16_clear( fp->nb_antennas_rx*sizeof(int32_t*) );
}
......@@ -1319,7 +1319,7 @@ int phy_init_lte_ue(PHY_VARS_UE *ue,
if (abstraction_flag == 0) {
for (th_id=0; th_id<RX_NB_TH_MAX; th_id++) {
phy_init_lte_ue__PDSCH( (*pdsch_vars_th)[th_id][eNB_id], fp );
(*pdsch_vars_th)[th_id][eNB_id]->llr[1] = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
(*pdsch_vars_th)[th_id][eNB_id]->llr[1] = (int16_t*)malloc16_clear( (8*((3*8*8448)+12))*sizeof(int16_t) );
}
} else { //abstraction == 1
......@@ -1583,7 +1583,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
}
} //eNB_id
pusch_vars[UE_id]->llr = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
pusch_vars[UE_id]->llr = (int16_t*)malloc16_clear( (8*((3*8*8448)+12))*sizeof(int16_t) );
} // abstraction_flag
} //UE_id
......
......@@ -145,7 +145,7 @@ typedef struct {
/// Turbo-code outputs (36-212 V8.6 2009-03, p.12
uint8_t *d[MAX_NUM_DLSCH_SEGMENTS];//[(96+3+(3*6144))];
/// Sub-block interleaver outputs (36-212 V8.6 2009-03, p.16-17)
uint8_t w[MAX_NUM_DLSCH_SEGMENTS][3*6144];
uint8_t w[MAX_NUM_DLSCH_SEGMENTS][3*8448];
/// Number of code segments (for definition see 36-212 V8.6 2009-03, p.9)
uint32_t C;
/// Number of "small" code segments (for definition see 36-212 V8.6 2009-03, p.10)
......@@ -553,9 +553,9 @@ typedef struct {
/// MIMO mode for this DLSCH
MIMO_mode_t mimo_mode;
/// soft bits for each received segment ("w"-sequence)(for definition see 36-212 V8.6 2009-03, p.15)
int16_t w[MAX_NUM_DLSCH_SEGMENTS][3*(6144+64)];
int16_t w[MAX_NUM_DLSCH_SEGMENTS][3*(8448+64)];
/// for abstraction soft bits for each received segment ("w"-sequence)(for definition see 36-212 V8.6 2009-03, p.15)
double w_abs[MAX_NUM_DLSCH_SEGMENTS][3*(6144+64)];
double w_abs[MAX_NUM_DLSCH_SEGMENTS][3*(8448+64)];
/// soft bits for each received segment ("d"-sequence)(for definition see 36-212 V8.6 2009-03, p.15)
int16_t *d[MAX_NUM_DLSCH_SEGMENTS];
/// Number of code segments (for definition see 36-212 V8.6 2009-03, p.9)
......
......@@ -94,11 +94,11 @@ void free_eNB_dlsch(LTE_eNB_DLSCH_t *dlsch)
#endif
if (dlsch->harq_processes[i]->c[r]) {
free16(dlsch->harq_processes[i]->c[r],((r==0)?8:0) + 3+768);
free16(dlsch->harq_processes[i]->c[r],((r==0)?8:0) + 3+1056);
dlsch->harq_processes[i]->c[r] = NULL;
}
if (dlsch->harq_processes[i]->d[r]) {
free16(dlsch->harq_processes[i]->d[r],(96+12+3+(3*6144)));
free16(dlsch->harq_processes[i]->d[r],(96+12+3+(3*8448)));
dlsch->harq_processes[i]->d[r] = NULL;
}
......@@ -189,16 +189,16 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,uint32_
if (abstraction_flag==0) {
for (r=0; r<MAX_NUM_DLSCH_SEGMENTS/bw_scaling; r++) {
// account for filler in first segment and CRCs for multiple segment case
dlsch->harq_processes[i]->c[r] = (uint8_t*)malloc16(((r==0)?8:0) + 3+ 768);
dlsch->harq_processes[i]->d[r] = (uint8_t*)malloc16((96+12+3+(3*6144)));
dlsch->harq_processes[i]->c[r] = (uint8_t*)malloc16(((r==0)?8:0) + 3+ 1056);
dlsch->harq_processes[i]->d[r] = (uint8_t*)malloc16((96+12+3+(3*8448)));
if (dlsch->harq_processes[i]->c[r]) {
bzero(dlsch->harq_processes[i]->c[r],((r==0)?8:0) + 3+ 768);
bzero(dlsch->harq_processes[i]->c[r],((r==0)?8:0) + 3+ 1056);
} else {
printf("Can't get c\n");
exit_flag=2;
}
if (dlsch->harq_processes[i]->d[r]) {
bzero(dlsch->harq_processes[i]->d[r],(96+12+3+(3*6144)));
bzero(dlsch->harq_processes[i]->d[r],(96+12+3+(3*8448)));
} else {
printf("Can't get d\n");
exit_flag=2;
......@@ -582,6 +582,7 @@ int dlsch_encoding(PHY_VARS_eNB *eNB,
unsigned int Kr=0,Kr_bytes,r,r_offset=0;
unsigned short m=dlsch->harq_processes[harq_pid]->mcs;
uint8_t beamforming_mode=0;
uint8_t *d_tmp[MAX_NUM_DLSCH_SEGMENTS];
double rate = 0.33;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ENCODING, VCD_FUNCTION_IN);
......@@ -646,10 +647,11 @@ int dlsch_encoding(PHY_VARS_eNB *eNB,
&dlsch->harq_processes[harq_pid]->F);
#endif
printf("Encoder: B %d F %d harq_pid %d \n",dlsch->harq_processes[harq_pid]->B, dlsch->harq_processes[harq_pid]->F, harq_pid);
for (r=0; r<dlsch->harq_processes[harq_pid]->C; r++) {
//printf("Encoder: B %d F %d \n",dlsch->harq_processes[harq_pid]->B, dlsch->harq_processes[harq_pid]->F);
#ifdef TD_DECODING
for (r=0; r<dlsch->harq_processes[harq_pid]->C; r++) {
if (r<dlsch->harq_processes[harq_pid]->Cminus)
Kr = dlsch->harq_processes[harq_pid]->Kminus;
else
......@@ -691,17 +693,6 @@ int dlsch_encoding(PHY_VARS_eNB *eNB,
printf("Encoding ... iind %d f1 %d, f2 %d\n",iind,f1f2mat_old[iind*2],f1f2mat_old[(iind*2)+1]);
#endif
start_meas(te_stats);
/*printf("start turbo encoder kr %d kr>>3 %d\n", Kr, Kr>>3);
for (int tbc_counter = 0; tbc_counter< 8; tbc_counter++){
printf("turbo tbc number %d input %d\n",tbc_counter, dlsch->harq_processes[harq_pid]->c[r][tbc_counter]);
}*/
printf("start encoder kr %d kr>>3 %d segment %d total segments %d rate %.2f\n", Kr, Kr>>3, r, dlsch->harq_processes[harq_pid]->C,rate);
for (int tbs_counter = 0; tbs_counter< 8; tbs_counter++){
printf("%d ", dlsch->harq_processes[harq_pid]->c[r][tbs_counter]);
}
printf("end encoder \n");
#ifdef TD_DECODING
threegpplte_turbo_encoder(dlsch->harq_processes[harq_pid]->c[r],
......@@ -711,38 +702,47 @@ int dlsch_encoding(PHY_VARS_eNB *eNB,
f1f2mat_old[iind*2], // f1 (see 36121-820, page 14)
f1f2mat_old[(iind*2)+1] // f2 (see 36121-820, page 14)
);
stop_meas(te_stats);
}
#else
printf("start ldpc encoder\n");
printf("input %d %d %d %d %d \n", dlsch->harq_processes[harq_pid]->c[r][0], dlsch->harq_processes[harq_pid]->c[r][1], dlsch->harq_processes[harq_pid]->c[r][2],dlsch->harq_processes[harq_pid]->c[r][3], dlsch->harq_processes[harq_pid]->c[r][4]);
//ldpc_encoder((char*)dlsch->harq_processes[harq_pid]->c[r],(char*)&dlsch->harq_processes[harq_pid]->d[r][96],dlsch->harq_processes[harq_pid]->B,rate);
ldpc_encoder((unsigned char*)dlsch->harq_processes[harq_pid]->c[r],&dlsch->harq_processes[harq_pid]->d[r][96],Kr,rate);
Kr = dlsch->harq_processes[harq_pid]->Kplus;
Kr_bytes = Kr>>3;
for (r=0; r<dlsch->harq_processes[harq_pid]->C; r++) {
d_tmp[r] = &dlsch->harq_processes[harq_pid]->d[r][96];
#ifdef DEBUG_DLSCH_CODING
printf("start ldpc encoder segment %d/%d\n",r,dlsch->harq_processes[harq_pid]->C);
printf("input %d %d %d %d %d \n", dlsch->harq_processes[harq_pid]->c[r][0], dlsch->harq_processes[harq_pid]->c[r][1], dlsch->harq_processes[harq_pid]->c[r][2],dlsch->harq_processes[harq_pid]->c[r][3], dlsch->harq_processes[harq_pid]->c[r][4]);
#endif
/*printf("end ldpc encoder -- output\n");
/*printf("output %d %d %d %d %d \n", dlsch->harq_processes[harq_pid]->d[r][96], dlsch->harq_processes[harq_pid]->d[r][96+1], dlsch->harq_processes[harq_pid]->d[r][96+2],dlsch->harq_processes[harq_pid]->d[r][96+3], dlsch->harq_processes[harq_pid]->d[r][96+4]);
for (int cnt =0 ; cnt < 66*(*pz); cnt ++){
printf("%d \n", dlsch->harq_processes[harq_pid]->d[r][96+cnt]);
//ldpc_encoder((unsigned char*)dlsch->harq_processes[harq_pid]->c[r],&dlsch->harq_processes[harq_pid]->d[r][96],Kr,rate);
}
start_meas(te_stats);
ldpc_encoder_multi_segment(dlsch->harq_processes[harq_pid]->c,d_tmp,Kr,rate,dlsch->harq_processes[harq_pid]->C);
stop_meas(te_stats);
#endif
/*printf("end ldpc encoder -- output\n");
}
printf("\n");*/
stop_meas(te_stats);
#ifdef DEBUG_DLSCH_CODING
if (r==0)
write_output("enc_output0.m","enc0",&dlsch->harq_processes[harq_pid]->d[r][96],(3*8*Kr_bytes)+12,1,4);
printf("output %d %d %d %d %d \n", dlsch->harq_processes[harq_pid]->d[r][96], dlsch->harq_processes[harq_pid]->d[r][96+1], dlsch->harq_processes[harq_pid]->d[r][96+2],dlsch->harq_processes[harq_pid]->d[r][96+3], dlsch->harq_processes[harq_pid]->d[r][96+4]);
for (int cnt =0 ; cnt < 66*(*pz); cnt ++){
printf("%d \n", dlsch->harq_processes[harq_pid]->d[r][96+cnt]);
}
printf("\n");*/
#ifdef DEBUG_DLSCH_CODING
write_output("enc_output0.m","enc0",&dlsch->harq_processes[harq_pid]->d[0][96],(3*8*Kr_bytes)+12,1,4);
#endif
start_meas(i_stats);
dlsch->harq_processes[harq_pid]->RTC[r] =
sub_block_interleaving_turbo(4+(Kr_bytes*8),
&dlsch->harq_processes[harq_pid]->d[r][96],
dlsch->harq_processes[harq_pid]->w[r]);
for (r=0; r<dlsch->harq_processes[harq_pid]->C; r++) {
dlsch->harq_processes[harq_pid]->RTC[r] =
sub_block_interleaving_turbo(4+(Kr_bytes*8),
&dlsch->harq_processes[harq_pid]->d[r][96],
dlsch->harq_processes[harq_pid]->w[r]);
}
stop_meas(i_stats);
}
}
......
......@@ -42,7 +42,7 @@
//#define DEBUG_DLSCH_DECODING
//#define TD_DECODING
#define OAI_LDPC_MAX_NUM_LLR 26112 // NR_LDPC_NCOL_BG1*NR_LDPC_ZMAX
#define OAI_LDPC_MAX_NUM_LLR 27000//26112 // NR_LDPC_NCOL_BG1*NR_LDPC_ZMAX
static int8_t llrRes [OAI_LDPC_MAX_NUM_LLR] __attribute__ ((aligned(32)));
static int8_t llrProcBuf[OAI_LDPC_MAX_NUM_LLR] __attribute__ ((aligned(32)));
......@@ -68,13 +68,13 @@ void free_ue_dlsch(LTE_UE_DLSCH_t *dlsch)
}
for (r=0; r<MAX_NUM_DLSCH_SEGMENTS; r++) {
free16(dlsch->harq_processes[i]->c[r],((r==0)?8:0) + 3+768);
free16(dlsch->harq_processes[i]->c[r],((r==0)?8:0) + 3+1056);
dlsch->harq_processes[i]->c[r] = NULL;
}
for (r=0; r<MAX_NUM_DLSCH_SEGMENTS; r++)
if (dlsch->harq_processes[i]->d[r]) {
free16(dlsch->harq_processes[i]->d[r],((3*8*6144)+12+96)*sizeof(short));
free16(dlsch->harq_processes[i]->d[r],((3*8*8448)+12+96)*sizeof(short));
dlsch->harq_processes[i]->d[r] = NULL;
}
......@@ -139,17 +139,17 @@ LTE_UE_DLSCH_t *new_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint8_
if (abstraction_flag == 0) {
for (r=0; r<MAX_NUM_DLSCH_SEGMENTS/bw_scaling; r++) {
dlsch->harq_processes[i]->c[r] = (uint8_t*)malloc16(((r==0)?8:0) + 3+ 768);
dlsch->harq_processes[i]->c[r] = (uint8_t*)malloc16(((r==0)?8:0) + 3+ 1056);
if (dlsch->harq_processes[i]->c[r])
memset(dlsch->harq_processes[i]->c[r],0,((r==0)?8:0) + 3+ 768);
memset(dlsch->harq_processes[i]->c[r],0,((r==0)?8:0) + 3+ 1056);
else
exit_flag=2;
dlsch->harq_processes[i]->d[r] = (short*)malloc16(((3*8*6144)+12+96)*sizeof(short));
dlsch->harq_processes[i]->d[r] = (short*)malloc16(((3*8*8448)+12+96)*sizeof(short));
if (dlsch->harq_processes[i]->d[r])
memset(dlsch->harq_processes[i]->d[r],0,((3*8*6144)+12+96)*sizeof(short));
memset(dlsch->harq_processes[i]->d[r],0,((3*8*8448)+12+96)*sizeof(short));
else
exit_flag=2;
}
......@@ -193,7 +193,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
uint16_t iind;
int32_t no_iteration_ldpc;
// 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;
uint8_t crc_type;
t_nrLDPC_dec_params decParams;
......@@ -205,6 +205,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
//__m128i l;
int16_t inv_d [68*384];
int16_t *p_invd =&inv_d;
uint8_t kb, kc;
uint32_t i,j;
uint32_t k;
......@@ -212,11 +213,6 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
__m128i *pv = (__m128i*)&z;
__m128i *pl = (__m128i*)&l;
#ifdef DEBUG_DLSCH_DECODING
uint16_t i;
#endif
//#ifdef __AVX2__
#if 0
int Kr_last,skipped_last=0;
......@@ -355,11 +351,20 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
}
kb = harq_process->Kplus/harq_process->Z;
// p_decParams->Z = 128;
p_decParams->BG = 1;
p_decParams->R = 89;
if ( kb==22){
p_decParams->BG = 1;
p_decParams->R = 13;
kc = 68;}
else{
p_decParams->BG = 2;
p_decParams->R = 15;
kc = 52;
}
p_decParams->numMaxIter = 5;
Kr = p_decParams->Z*22;
Kr = p_decParams->Z*kb;
p_decParams->outMode= 0;
/*
......@@ -425,8 +430,8 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
else if (Kr_bytes <= 768)
iind = 123 + ((Kr_bytes-256)>>3);
else {
printf("dlsch_decoding: Illegal codeword size %d!!!\n",Kr_bytes);
return(dlsch->max_turbo_iterations);
//printf("dlsch_decoding: Illegal codeword size %d!!!\n",Kr_bytes);
//return(dlsch->max_turbo_iterations);
}
#ifdef DEBUG_DLSCH_DECODING
......@@ -436,7 +441,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
#if UE_TIMING_TRACE
start_meas(dlsch_rate_unmatching_stats);
#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),
(uint8_t*) &dummy_w[r][0],
(r==0) ? harq_process->F : 0);
......@@ -554,16 +559,16 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
//66*p_decParams->Z
//if (A < 1000){
for (int cnt =0; cnt < 66*p_decParams->Z; cnt++){
for (int cnt =0; cnt < (kc-2)*p_decParams->Z; cnt++){
inv_d[cnt] = (-1)*harq_process->d[r][96+cnt];
}
//}
/*for (int cnt =0; cnt < 8; cnt++){
for (int cnt =0; cnt < 8; cnt++){
printf("dr %d inv_d %d \n", harq_process->d[r][96+cnt], inv_d[cnt]);
}
printf(" \n");*/
printf(" \n");
/*printf("end dr \n");
for (int cnt =(50*p_decParams->Z-16) ; cnt < 50*p_decParams->Z; cnt++){
......@@ -595,13 +600,13 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
memset(pv,0,2*p_decParams->Z*sizeof(int16_t));
//memset(pl,0,2*p_decParams->Z*sizeof(int8_t));
for (i=2*p_decParams->Z/8, j = 0; i < (68*p_decParams->Z/8+1); i++, j++)
for (i=2*p_decParams->Z/8, j = 0; i < (kc*p_decParams->Z/8+1); i++, j++)
{
pv[i]= _mm_loadu_si128((__m128i*)(&inv_d[8*j]));
}
for (i=0, j=0; j < (68*p_decParams->Z/16); i+=2, j++)
for (i=0, j=0; j < (kc*p_decParams->Z/16); i+=2, j++)
{
pl[j] = _mm_packs_epi16(pv[i],pv[i+1]);
......@@ -612,7 +617,8 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
&pl[0],
llrProcBuf,
p_procTime);
ret = no_iteration_ldpc;
//ret = no_iteration_ldpc;
nb_total_decod++;
......@@ -620,8 +626,9 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
nb_error_decod++;
}
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);}
//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);
//}
//else
//printf("OK number of iteration LPDC %d\n", no_iteration_ldpc);
......@@ -633,13 +640,19 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
#endif
#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("no_iterations_ldpc %d\n",no_iteration_ldpc);
#endif
#if UE_TIMING_TRACE
stop_meas(dlsch_turbo_decoding_stats);
#endif
}
#else
#else //1
if ((harq_process->C == 1) ||
((r==harq_process->C-1) && (skipped_last==0))) { // last segment with odd number of segments
......@@ -785,7 +798,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
}
}
}
#endif
#endif //1
/*printf("Segmentation: C %d r %d, dlsch_rate_unmatching_stats %5.3f dlsch_deinterleaving_stats %5.3f dlsch_turbo_decoding_stats %5.3f \n",
harq_process->C,
......@@ -922,7 +935,7 @@ uint32_t dlsch_decoding_mthread(PHY_VARS_UE *phy_vars_ue,
uint32_t ret,offset;
uint16_t iind;
// 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;
uint8_t crc_type;
//UE_rxtx_proc_t *proc = &phy_vars_ue->proc;
......@@ -1299,7 +1312,7 @@ if (harq_process->C>1) { // wakeup worker if more than 1 segment
#if UE_TIMING_TRACE
start_meas(dlsch_rate_unmatching_stats);
#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),
(uint8_t*) &dummy_w[r][0],
(r==0) ? harq_process->F : 0);
......@@ -1827,7 +1840,7 @@ uint32_t dlsch_decoding_2thread0(void *arg)
uint32_t ret,offset;
uint16_t iind;
// 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;
uint8_t crc_type;
uint8_t C;
......@@ -2059,7 +2072,7 @@ uint32_t dlsch_decoding_2thread0(void *arg)
#if UE_TIMING_TRACE
start_meas(dlsch_rate_unmatching_stats);
#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),
(uint8_t*) &dummy_w[r][0],
(r==0) ? harq_process->F : 0);
......
......@@ -25,32 +25,32 @@
* (Table 7.1.7.2.1-1 in 3GPP TS 36.213 V8.6.0)
*/
unsigned int TBStable[TBStable_rowCnt][110] = {{16,32,152,88,120,152,176,208,224,256,288,328,344,376,392,424,456,488,504,536,568,600,616,648,680,712,744,776,776,808,840,872,904,936,968,1000,1032,1032,1064,1096,1128,1160,1192,1224,1256,1256,1288,1320,1352,1384,1416,1416,1480,1480,1544,1544,1608,1608,1608,1672,1672,1736,1736,1800,1800,1800,1864,1864,1928,1928,1992,1992,2024,2088,2088,2088,2152,2152,2216,2216,2280,2280,2280,2344,2344,2408,2408,2472,2472,2536,2536,2536,2600,2600,2664,2664,2728,2728,2728,2792,2792,2856,2856,2856,2984,2984,2984,2984,2984,3112},
{24,56,88,144,176,208,224,256,328,344,376,424,456,488,520,568,600,632,680,712,744,776,808,872,904,936,968,1000,1032,1064,1128,1160,1192,1224,1256,1288,1352,1384,1416,1416,1480,1544,1544,1608,1608,1672,1736,1736,1800,1800,1864,1864,1928,1992,1992,2024,2088,2088,2152,2152,2216,2280,2280,2344,2344,2408,2472,2472,2536,2536,2600,2600,2664,2728,2728,2792,2792,2856,2856,2856,2984,2984,2984,3112,3112,3112,3240,3240,3240,3240,3368,3368,3368,3496,3496,3496,3496,3624,3624,3624,3752,3752,3752,3752,3880,3880,3880,4008,4008,4008},
{32,72,152,176,208,256,296,328,376,424,472,520,568,616,648,696,744,776,840,872,936,968,1000,1064,1096,1160,1192,1256,1288,1320,1384,1416,1480,1544,1544,1608,1672,1672,1736,1800,1800,1864,1928,1992,2024,2088,2088,2152,2216,2216,2280,2344,2344,2408,2472,2536,2536,2600,2664,2664,2728,2792,2856,2856,2856,2984,2984,3112,3112,3112,3240,3240,3240,3368,3368,3368,3496,3496,3496,3624,3624,3624,3752,3752,3880,3880,3880,4008,4008,4008,4136,4136,4136,4264,4264,4264,4392,4392,4392,4584,4584,4584,4584,4584,4776,4776,4776,4776,4968,4968},
{40,104,176,208,256,328,392,440,504,568,616,680,744,808,872,904,968,1032,1096,1160,1224,1256,1320,1384,1416,1480,1544,1608,1672,1736,1800,1864,1928,1992,2024,2088,2152,2216,2280,2344,2408,2472,2536,2536,2600,2664,2728,2792,2856,2856,2984,2984,3112,3112,3240,3240,3368,3368,3496,3496,3624,3624,3624,3752,3752,3880,3880,4008,4008,4136,4136,4264,4264,4392,4392,4392,4584,4584,4584,4776,4776,4776,4776,4968,4968,4968,5160,5160,5160,5352,5352,5352,5352,5544,5544,5544,5736,5736,5736,5736,5992,5992,5992,5992,6200,6200,6200,6200,6456,6456},
{56,120,208,256,328,408,488,552,632,696,776,840,904,1000,1064,1128,1192,1288,1352,1416,1480,1544,1608,1736,1800,1864,1928,1992,2088,2152,2216,2280,2344,2408,2472,2600,2664,2728,2792,2856,2984,2984,3112,3112,3240,3240,3368,3496,3496,3624,3624,3752,3752,3880,4008,4008,4136,4136,4264,4264,4392,4392,4584,4584,4584,4776,4776,4968,4968,4968,5160,5160,5160,5352,5352,5544,5544,5544,5736,5736,5736,5992,5992,5992,5992,6200,6200,6200,6456,6456,6456,6456,6712,6712,6712,6968,6968,6968,6968,5608,7224,7224,7480,7480,7480,7480,7736,7736,7736,7992},
{72,144,224,328,424,504,600,680,776,872,968,1032,1128,1224,1320,1384,1480,1544,1672,1736,1864,1928,2024,2088,2216,2280,2344,2472,2536,2664,2728,2792,2856,2984,3112,3112,3240,3368,3496,3496,3624,3752,3752,3880,4008,4008,4136,4264,4392,4392,4584,4584,4776,4776,4776,4968,4968,5160,5160,5352,5352,5544,5544,5736,5736,5736,5992,5992,5992,6200,6200,6200,6456,6456,6712,6712,6712,6968,6968,6968,7224,7224,7224,7480,7480,7480,7736,7736,7736,7992,7992,7992,8248,8248,8248,8504,8504,8760,8760,8760,8760,9144,9144,9144,9144,9528,9528,9528,9528,9528},
{328,176,328,392,504,600,712,808,936,1032,1128,1224,1352,1480,1544,1672,1736,1864,1992,2088,2216,2280,2408,2472,2600,2728,2792,2984,2984,3112,3240,3368,3496,3496,3624,3752,3880,4008,4136,4136,4264,4392,4584,4584,4776,4776,4968,4968,5160,5160,5352,5352,5544,5736,5736,5992,5992,5992,6200,6200,6456,6456,6456,6712,6712,6968,6968,6968,7224,7224,7480,7480,7736,7736,7736,7992,7992,8248,8248,8248,8504,8504,8760,8760,8760,9144,9144,9144,9144,9528,9528,9528,9528,9912,9912,9912,10296,10296,10296,11192,10680,10680,10680,10680,11064,11064,11064,11448,11448,11448},
{104,224,328,680,584,712,840,968,1096,1224,1320,1480,1608,1672,1800,1928,2088,2216,2344,2472,2536,2664,2792,2984,3112,3240,3368,3368,3496,3624,3752,3880,4008,4136,4264,4392,4584,4584,4776,4968,4968,5160,5352,5352,5544,5736,5736,5992,5992,6200,6200,6456,6456,6712,6712,6712,6968,6968,7224,7224,7480,7480,7736,7736,7992,7992,8248,8248,8504,8504,8760,8760,8760,9144,9144,9144,9528,9528,9528,9912,9912,9912,10296,10296,10296,10680,10680,10680,11064,11064,11064,11448,11448,11448,11448,11832,11832,11832,12216,12216,12216,12576,12576,12576,12960,12960,12960,12960,13536,13536},
{120,256,392,536,680,808,968,1096,1256,1384,1544,1672,1800,1928,2088,2216,2344,2536,2664,2792,2984,3112,3240,3368,3496,3624,3752,3880,4008,4264,4392,4584,4584,4776,4968,4968,5160,5352,5544,5544,5736,5992,5992,6200,6200,6456,6456,6712,6968,6968,7224,7224,7480,7480,7736,7736,7992,7992,8248,8504,8504,8760,8760,9144,9144,9144,9528,9528,9528,9912,9912,9912,10296,10296,10680,10680,10680,11064,11064,11064,11448,11448,11448,11832,11832,12216,12216,12216,12576,12576,12576,12960,12960,12960,13536,13536,13536,13536,14112,14112,14112,14112,14688,14688,14688,14688,15264,15264,15264,15264},
{136,296,456,616,776,936,1096,1256,1416,1544,1736,1864,2024,2216,2344,2536,2664,2856,2984,3112,3368,3496,3624,3752,4008,4136,4264,4392,4584,4776,4968,5160,5160,5352,5544,5736,5736,5992,6200,6200,6456,6712,6712,6968,6968,7224,7480,7480,7736,7992,7992,8248,8248,8504,8760,8760,9144,9144,9144,9528,9528,9912,9912,10296,10296,10296,10680,10680,11064,11064,11064,11448,11448,11832,11832,11832,12216,12216,12576,12576,12960,12960,12960,13536,13536,13536,13536,14112,14112,14112,14112,14688,14688,14688,15264,15264,15264,15264,15840,15840,15840,16416,16416,16416,16416,16992,16992,16992,16992,17568},
{144,328,504,680,872,1032,1224,1384,1544,1736,1928,2088,2280,2472,2664,2792,2984,3112,3368,3496,3752,3880,4008,4264,4392,4584,4776,4968,5160,5352,5544,5736,5736,5992,6200,6200,6456,6712,6712,6968,7224,7480,7480,7736,7992,7992,8248,8504,8504,8760,9144,9144,9144,9528,9528,9912,9912,10296,10296,10680,10680,11064,11064,11448,11448,11448,11832,11832,12216,12216,12576,12576,12960,12960,12960,13536,13536,13536,14112,14112,14112,14688,14688,14688,14688,15264,15264,15264,15840,15840,15840,16416,16416,16416,16992,16992,16992,16992,17568,17568,17568,18336,18336,18336,18336,18336,19080,19080,19080,19080},
{176,376,584,776,1000,1192,1384,1608,1800,2024,2216,2408,2600,2792,2984,3240,3496,3624,3880,4008,4264,4392,4584,4776,4968,5352,5544,5736,5992,5992,6200,6456,6712,6968,6968,7224,7480,7736,7736,7992,8248,8504,8760,8760,9144,9144,9528,9528,9912,9912,10296,10680,10680,11064,11064,11448,11448,11832,11832,12216,12216,12576,12576,12960,12960,13536,13536,13536,14112,14112,14112,14688,14688,14688,15264,15264,15840,15840,15840,16416,16416,16416,16992,16992,16992,17568,17568,17568,18336,18336,18336,18336,19080,19080,19080,19080,19848,19848,19848,19848,20616,20616,20616,21384,21384,21384,21384,22152,22152,22152},
{208,440,680,904,1128,1352,1608,1800,2024,2280,2472,2728,2984,3240,3368,3624,3880,4136,4392,4584,4776,4968,5352,5544,5736,5992,6200,6456,6712,6712,6968,7224,7480,7736,7992,8248,8504,8760,8760,9144,9528,9528,9912,9912,10296,10680,10680,11064,11064,11448,11832,11832,12216,12216,12576,12576,12960,12960,13536,13536,14112,14112,14112,14688,14688,15264,15264,15264,15840,15840,16416,16416,16416,16992,16992,17568,17568,17568,18336,18336,18336,19080,19080,19080,19080,19848,19848,19848,20616,20616,20616,21384,21384,21384,21384,22152,22152,22152,22920,22920,22920,23688,23688,23688,23688,24496,24496,24496,24496,25456},
{224,488,744,1000,1256,1544,1800,2024,2280,2536,2856,3112,3368,3624,3880,4136,4392,4584,4968,5160,5352,5736,5992,6200,6456,6712,6968,7224,7480,7736,7992,8248,8504,8760,9144,9144,9528,9912,9912,10296,10680,10680,11064,11448,11448,11832,12216,12216,12576,12960,12960,13536,13536,14112,14112,14688,14688,14688,15264,15264,15840,15840,16416,16416,16992,16992,16992,17568,17568,18336,18336,18336,19080,19080,19080,19848,19848,19848,20616,20616,20616,21384,21384,21384,22152,22152,22152,22920,22920,22920,23688,23688,23688,24496,24496,24496,25456,25456,25456,25456,26416,26416,26416,26416,27376,27376,27376,27376,28336,28336},
{256,552,840,1128,1416,1736,1992,2280,2600,2856,3112,3496,3752,4008,4264,4584,4968,5160,5544,5736,5992,6200,6456,6968,7224,7480,7736,7992,8248,8504,8760,9144,9528,9912,9912,10296,10680,11064,11064,11448,11832,12216,12216,12576,12960,12960,13536,13536,14112,14112,14688,14688,15264,15264,15840,15840,16416,16416,16992,16992,17568,17568,18336,18336,18336,19080,19080,19848,19848,19848,20616,20616,20616,21384,21384,22152,22152,22152,22920,22920,22920,23688,23688,24496,24496,24496,25456,25456,25456,25456,26416,26416,26416,27376,27376,27376,28336,28336,28336,28336,29296,29296,29296,29296,30576,30576,30576,30576,31704,31704},
{280,600,904,1224,1544,1800,2152,2472,2728,3112,3368,3624,4008,4264,4584,4968,5160,5544,5736,6200,6456,6712,6968,7224,7736,7992,8248,8504,8760,9144,9528,9912,10296,10296,10680,11064,11448,11832,11832,12216,12576,12960,12960,13536,13536,14112,14688,14688,15264,15264,15840,15840,16416,16416,16992,16992,17568,17568,18336,18336,18336,19080,19080,19848,19848,20616,20616,20616,21384,21384,22152,22152,22152,22920,22920,23688,23688,23688,24496,24496,24496,25456,25456,25456,26416,26416,26416,27376,27376,27376,28336,28336,28336,29296,29296,29296,29296,30576,30576,30576,30576,31704,31704,31704,31704,32856,32856,32856,34008,34008},
{328,632,968,1288,1608,1928,2280,2600,2984,3240,3624,3880,4264,4584,4968,5160,5544,5992,6200,6456,6712,7224,7480,7736,7992,8504,8760,9144,9528,9912,9912,10296,10680,11064,11448,11832,12216,12216,12576,12960,13536,13536,14112,14112,14688,14688,15264,15840,15840,16416,16416,16992,16992,17568,17568,18336,18336,19080,19080,19848,19848,19848,20616,20616,21384,21384,22152,22152,22152,22920,22920,23688,23688,24496,24496,24496,25456,25456,25456,26416,26416,26416,27376,27376,27376,28336,28336,28336,29296,29296,29296,30576,30576,30576,30576,31704,31704,31704,31704,32856,32856,32856,34008,34008,34008,34008,35160,35160,35160,35160},
{336,696,1064,1416,1800,2152,2536,2856,3240,3624,4008,4392,4776,5160,5352,5736,6200,6456,6712,7224,7480,7992,8248,8760,9144,9528,9912,10296,10296,10680,11064,11448,11832,12216,12576,12960,13536,13536,14112,14688,14688,15264,15264,15840,16416,16416,16992,17568,17568,18336,18336,19080,19080,19848,19848,20616,20616,20616,21384,21384,22152,22152,22920,22920,23688,23688,24496,24496,24496,25456,25456,26416,26416,26416,27376,27376,27376,28336,28336,29296,29296,29296,30576,30576,30576,30576,31704,31704,31704,32856,32856,32856,34008,34008,34008,35160,35160,35160,35160,36696,36696,36696,36696,37888,37888,37888,39232,39232,39232,39232},
{376,776,1160,1544,1992,2344,2792,3112,3624,4008,4392,4776,5160,5544,5992,6200,6712,7224,7480,7992,8248,8760,9144,9528,9912,10296,10680,11064,11448,11832,12216,12576,12960,13536,14112,14112,14688,15264,15264,15840,16416,16416,16992,17568,17568,18336,18336,19080,19080,19848,19848,20616,21384,21384,22152,22152,22920,22920,23688,23688,24496,24496,24496,25456,25456,26416,26416,27376,27376,27376,28336,28336,29296,29296,29296,30576,30576,30576,31704,31704,31704,32856,32856,32856,34008,34008,34008,35160,35160,35160,36696,36696,36696,37888,37888,37888,37888,39232,39232,39232,40576,40576,40576,40576,42368,42368,42368,42368,43816,43816},
{408,840,1288,1736,2152,2600,2984,3496,3880,4264,4776,5160,5544,5992,6456,6968,7224,7736,8248,8504,9144,9528,9912,10296,10680,11064,11448,12216,12576,12960,13536,13536,14112,14688,15264,15264,15840,16416,16992,16992,17568,18336,18336,19080,19080,19848,20616,20616,21384,21384,22152,22152,22920,22920,23688,24496,24496,25456,25456,25456,26416,26416,27376,27376,28336,28336,29296,29296,29296,30576,30576,30576,31704,31704,32856,32856,32856,34008,34008,34008,35160,35160,35160,36696,36696,36696,37888,37888,37888,39232,39232,39232,40576,40576,40576,40576,42368,42368,42368,43816,43816,43816,43816,45352,45352,45352,46888,46888,46888,46888},
{440,904,1384,1864,2344,2792,3240,3752,4136,4584,5160,5544,5992,6456,6968,7480,7992,8248,8760,9144,9912,10296,10680,11064,11448,12216,12576,12960,13536,14112,14688,14688,15264,15840,16416,16992,16992,17568,18336,18336,19080,19848,19848,20616,20616,21384,22152,22152,22920,22920,23688,24496,24496,25456,25456,26416,26416,27376,27376,28336,28336,29296,29296,29296,30576,30576,31704,31704,31704,32856,32856,34008,34008,34008,35160,35160,35160,36696,36696,36696,37888,37888,39232,39232,39232,40576,40576,40576,42368,42368,42368,42368,43816,43816,43816,45352,45352,45352,46888,46888,46888,46888,48936,48936,48936,48936,48936,51024,51024,51024},
{488,1000,1480,1992,2472,2984,3496,4008,4584,4968,5544,5992,6456,6968,7480,7992,8504,9144,9528,9912,10680,11064,11448,12216,12576,12960,13536,14112,14688,15264,15840,15840,16416,16992,17568,18336,18336,19080,19848,19848,20616,21384,21384,22152,22920,22920,23688,24496,24496,25456,25456,26416,26416,27376,27376,28336,28336,29296,29296,30576,30576,31704,31704,31704,32856,32856,34008,34008,35160,35160,35160,36696,36696,36696,37888,37888,39232,39232,39232,40576,40576,40576,42368,42368,42368,43816,43816,43816,45352,45352,45352,46888,46888,46888,46888,48936,48936,48936,48936,51024,51024,51024,51024,52752,52752,52752,52752,55056,55056,55056},
{520,1064,1608,2152,2664,3240,3752,4264,4776,5352,5992,6456,6968,7480,7992,8504,9144,9528,10296,10680,11448,11832,12576,12960,13536,14112,14688,15264,15840,16416,16992,16992,17568,18336,19080,19080,19848,20616,21384,21384,22152,22920,22920,23688,24496,24496,25456,25456,26416,27376,27376,28336,28336,29296,29296,30576,30576,31704,31704,32856,32856,34008,34008,34008,35160,35160,36696,36696,36696,37888,37888,39232,39232,40576,40576,40576,42368,42368,42368,43816,43816,43816,45352,45352,45352,46888,46888,46888,48936,48936,48936,48936,51024,51024,51024,51024,52752,52752,52752,55056,55056,55056,55056,57336,57336,57336,57336,59256,59256,59256},
{552,1128,1736,2280,2856,3496,4008,4584,5160,5736,6200,6968,7480,7992,8504,9144,9912,10296,11064,11448,12216,12576,12960,13536,14112,14688,15264,15840,16416,16992,17568,18336,19080,19848,19848,20616,21384,22152,22152,22920,23688,24496,24496,25456,25456,26416,27376,27376,28336,28336,29296,29296,30576,30576,31704,31704,32856,32856,34008,34008,35160,35160,36696,36696,37888,37888,37888,39232,39232,40576,40576,40576,42368,42368,43816,43816,43816,45352,45352,45352,46888,46888,46888,48936,48936,48936,51024,51024,51024,51024,52752,52752,52752,55056,55056,55056,55056,57336,57336,57336,57336,59256,59256,59256,59256,61664,61664,61664,61664,63776},
{584,1192,1800,2408,2984,3624,4264,4968,5544,5992,6712,7224,7992,8504,9144,9912,10296,11064,11448,12216,12960,13536,14112,14688,15264,15840,16416,16992,17568,18336,19080,19848,19848,20616,21384,22152,22920,22920,23688,24496,25456,25456,26416,26416,27376,28336,28336,29296,29296,30576,31704,31704,32856,32856,34008,34008,35160,35160,36696,36696,36696,37888,37888,39232,39232,40576,40576,42368,42368,42368,43816,43816,45352,45352,45352,46888,46888,46888,48936,48936,48936,51024,51024,51024,52752,52752,52752,52752,55056,55056,55056,57336,57336,57336,57336,59256,59256,59256,61664,61664,61664,61664,63776,63776,63776,63776,66592,66592,66592,66592},
{616,1256,1864,2536,3112,3752,4392,5160,5736,6200,6968,7480,8248,8760,9528,10296,10680,11448,12216,12576,13536,14112,14688,15264,15840,16416,16992,17568,18336,19080,19848,20616,20616,21384,22152,22920,23688,24496,24496,25456,26416,26416,27376,28336,28336,29296,29296,30576,31704,31704,32856,32856,34008,34008,35160,35160,36696,36696,37888,37888,39232,39232,40576,40576,40576,42368,42368,43816,43816,43816,45352,45352,46888,46888,46888,48936,48936,48936,51024,51024,51024,52752,52752,52752,55056,55056,55056,55056,57336,57336,57336,59256,59256,59256,61664,61664,61664,61664,63776,63776,63776,63776,66592,66592,66592,66592,68808,68808,68808,71112},
{712,1480,2216,2984,3752,4392,5160,5992,6712,7480,8248,8760,9528,10296,11064,11832,12576,13536,14112,14688,15264,16416,16992,17568,18336,19080,19848,20616,21384,22152,22920,23688,24496,25456,25456,26416,27376,28336,29296,29296,30576,30576,31704,32856,32856,34008,35160,35160,36696,36696,37888,37888,39232,40576,40576,40576,42368,42368,43816,43816,45352,45352,46888,46888,48936,48936,48936,51024,51024,52752,52752,52752,55056,55056,55056,55056,57336,57336,57336,59256,59256,59256,61664,61664,61664,63776,63776,63776,66592,66592,66592,68808,68808,68808,71112,71112,71112,73712,73712,75792,75376,75376,75376,75376,75376,75376,75376,75376,75376,75376}
{24,56,88,144,176,208,224,256,328,344,376,424,456,488,520,568,600,632,680,712,744,776,808,872,904,936,968,1000,1032,1064,1128,1160,1192,1224,1256,1288,1352,1384,1416,1416,1480,1544,1544,1608,1608,1672,1736,1736,1800,1800,1864,1864,1928,1992,1992,2024,2088,2088,2152,2152,2216,2280,2280,2344,2344,2408,2472,2472,2536,2536,2600,2600,2664,2728,2728,2792,2792,2856,2856,2856,2984,2984,2984,3112,3112,3112,3240,3240,3240,3240,3368,3368,3368,3496,3496,3496,3496,3624,3624,3624,3752,3752,3752,3752,3848,3848,3848,3848,3848,3848},
{32,72,152,176,208,256,296,328,376,424,472,520,568,616,648,696,744,776,840,872,936,968,1000,1064,1096,1160,1192,1256,1288,1320,1384,1416,1480,1544,1544,1608,1672,1672,1736,1800,1800,1864,1928,1992,2024,2088,2088,2152,2216,2216,2280,2344,2344,2408,2472,2536,2536,2600,2664,2664,2728,2792,2856,2856,2856,2984,2984,3112,3112,3112,3240,3240,3240,3368,3368,3368,3496,3496,3496,3624,3624,3624,3752,3752,3848,3848,3848,3848,3848,3848,3848,3848,3848,4200,4200,4200,4200,4200,4200,4552,4552,4552,4552,4552,4552,4552,4552,4552,4904,4904},
{40,104,176,208,256,328,392,440,504,568,616,680,744,808,872,904,968,1032,1096,1160,1224,1256,1320,1384,1416,1480,1544,1608,1672,1736,1800,1864,1928,1992,2024,2088,2152,2216,2280,2344,2408,2472,2536,2536,2600,2664,2728,2792,2856,2856,2984,2984,3112,3112,3240,3240,3368,3368,3496,3496,3624,3624,3624,3752,3752,3848,3848,3848,3848,3848,3848,4200,4200,4200,4200,4200,4552,4552,4552,4552,4552,4552,4552,4904,4904,4904,4904,4904,4904,5256,5256,5256,5256,5256,5256,5256,5608,5608,5608,5608,5608,5608,5608,5608,5608,5608,5608,5608,6312,6312},
{56,120,208,256,328,408,488,552,632,696,776,840,904,1000,1064,1128,1192,1288,1352,1416,1480,1544,1608,1736,1800,1864,1928,1992,2088,2152,2216,2280,2344,2408,2472,2600,2664,2728,2792,2856,2984,2984,3112,3112,3240,3240,3368,3496,3496,3624,3624,3752,3752,3848,3848,3848,3848,3848,4200,4200,4200,4200,4552,4552,4552,4552,4552,4904,4904,4904,4904,4904,4904,5256,5256,5256,5256,5256,5608,5608,5608,5608,5608,5608,5608,5608,5608,5608,6312,6312,6312,6312,6312,6312,6312,6312,6312,6312,6312,5608,7016,7016,7016,7016,7016,7016,7720,7720,7720,7720},
{72,144,224,328,424,504,600,680,776,872,968,1032,1128,1224,1320,1384,1480,1544,1672,1736,1864,1928,2024,2088,2216,2280,2344,2472,2536,2664,2728,2792,2856,2984,3112,3112,3240,3368,3496,3496,3624,3752,3752,3848,3848,3848,3848,4200,4200,4200,4552,4552,4552,4552,4552,4904,4904,4904,4904,5256,5256,5256,5256,5608,5608,5608,5608,5608,5608,5608,5608,5608,6312,6312,6312,6312,6312,6312,6312,6312,7016,7016,7016,7016,7016,7016,7720,7720,7720,7720,7720,7720,7720,7720,7720,8424,8424,8424,8424,8424,8424,9080,9080,9080,9080,9080,9080,9080,9080,9080},
{328,176,328,392,504,600,712,808,936,1032,1128,1224,1352,1480,1544,1672,1736,1864,1992,2088,2216,2280,2408,2472,2600,2728,2792,2984,2984,3112,3240,3368,3496,3496,3624,3752,3848,3848,3848,3848,4200,4200,4552,4552,4552,4552,4904,4904,4904,4904,5256,5256,5256,5608,5608,5608,5608,5608,5608,5608,6312,6312,6312,6312,6312,6312,6312,6312,7016,7016,7016,7016,7720,7720,7720,7720,7720,7720,7720,7720,8424,8424,8424,8424,8424,9080,9080,9080,9080,9080,9080,9080,9080,9784,9784,9784,9784,9784,9784,11192,10488,10488,10488,10488,10488,10488,10488,11192,11192,11192},
{104,224,328,680,584,712,840,968,1096,1224,1320,1480,1608,1672,1800,1928,2088,2216,2344,2472,2536,2664,2792,2984,3112,3240,3368,3368,3496,3624,3752,3848,3848,3848,4200,4200,4552,4552,4552,4904,4904,4904,5256,5256,5256,5608,5608,5608,5608,5608,5608,6312,6312,6312,6312,6312,6312,6312,7016,7016,7016,7016,7720,7720,7720,7720,7720,7720,8424,8424,8424,8424,8424,9080,9080,9080,9080,9080,9080,9784,9784,9784,9784,9784,9784,10488,10488,10488,10488,10488,10488,11192,11192,11192,11192,11192,11192,11192,11192,11192,11192,11192,11192,11192,12600,12600,12600,12600,12600,12600},
{120,256,392,536,680,808,968,1096,1256,1384,1544,1672,1800,1928,2088,2216,2344,2536,2664,2792,2984,3112,3240,3368,3496,3624,3752,3848,3848,4200,4200,4552,4552,4552,4904,4904,4904,5256,5256,5256,5608,5608,5608,5608,5608,6312,6312,6312,6312,6312,7016,7016,7016,7016,7720,7720,7720,7720,7720,8424,8424,8424,8424,9080,9080,9080,9080,9080,9080,9784,9784,9784,9784,9784,10488,10488,10488,10488,10488,10488,11192,11192,11192,11192,11192,11192,11192,11192,11192,11192,11192,12600,12600,12600,12600,12600,12600,12600,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008},
{136,296,456,616,776,936,1096,1256,1416,1544,1736,1864,2024,2216,2344,2536,2664,2856,2984,3112,3368,3496,3624,3752,3848,3848,4200,4200,4552,4552,4904,4904,4904,5256,5256,5608,5608,5608,5608,5608,6312,6312,6312,6312,6312,7016,7016,7016,7720,7720,7720,7720,7720,8424,8424,8424,9080,9080,9080,9080,9080,9784,9784,9784,9784,9784,10488,10488,10488,10488,10488,11192,11192,11192,11192,11192,11192,11192,11192,11192,12600,12600,12600,12600,12600,12600,12600,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,15416,15416,15416,15416,15416,15416,15416,16824,16824,16824,16824,16824},
{144,328,504,680,872,1032,1224,1384,1544,1736,1928,2088,2280,2472,2664,2792,2984,3112,3368,3496,3752,3848,3848,4200,4200,4552,4552,4904,4904,5256,5256,5608,5608,5608,5608,5608,6312,6312,6312,6312,7016,7016,7016,7720,7720,7720,7720,8424,8424,8424,9080,9080,9080,9080,9080,9784,9784,9784,9784,10488,10488,10488,10488,11192,11192,11192,11192,11192,11192,11192,11192,11192,12600,12600,12600,12600,12600,12600,14008,14008,14008,14008,14008,14008,14008,14008,14008,14008,15416,15416,15416,15416,15416,15416,16824,16824,16824,16824,16824,16824,16824,16824,16824,16824,16824,16824,18912,18912,18912,18912},
{176,376,584,776,1000,1192,1384,1608,1800,2024,2216,2408,2600,2792,2984,3240,3496,3624,3848,3848,4200,4200,4552,4552,4904,5256,5256,5608,5608,5608,5608,6312,6312,6312,6312,7016,7016,7720,7720,7720,7720,8424,8424,8424,9080,9080,9080,9080,9784,9784,9784,10488,10488,10488,10488,11192,11192,11192,11192,11192,11192,11192,11192,12600,12600,12600,12600,12600,14008,14008,14008,14008,14008,14008,14008,14008,15416,15416,15416,15416,15416,15416,16824,16824,16824,16824,16824,16824,16824,16824,16824,16824,18912,18912,18912,18912,18912,18912,18912,18912,18912,18912,18912,21024,21024,21024,21024,21024,21024,21024},
{208,440,680,904,1128,1352,1608,1800,2024,2280,2472,2728,2984,3240,3368,3624,3848,3848,4200,4552,4552,4904,5256,5256,5608,5608,5608,6312,6312,6312,6312,7016,7016,7720,7720,7720,8424,8424,8424,9080,9080,9080,9784,9784,9784,10488,10488,10488,10488,11192,11192,11192,11192,11192,11192,11192,12600,12600,12600,12600,14008,14008,14008,14008,14008,14008,14008,14008,15416,15416,15416,15416,15416,16824,16824,16824,16824,16824,16824,16824,16824,18912,18912,18912,18912,18912,18912,18912,18912,18912,18912,21024,21024,21024,21024,21024,21024,21024,21024,21024,21024,23136,23136,23136,23136,23136,23136,23136,23136,25248},
{224,488,744,1000,1256,1544,1800,2024,2280,2536,2856,3112,3368,3624,3848,3848,4200,4552,4904,4904,5256,5608,5608,5608,6312,6312,6312,7016,7016,7720,7720,7720,8424,8424,9080,9080,9080,9784,9784,9784,10488,10488,10488,11192,11192,11192,11192,11192,11192,12600,12600,12600,12600,14008,14008,14008,14008,14008,14008,14008,15416,15416,15416,15416,16824,16824,16824,16824,16824,16824,16824,16824,18912,18912,18912,18912,18912,18912,18912,18912,18912,21024,21024,21024,21024,21024,21024,21024,21024,21024,23136,23136,23136,23136,23136,23136,25248,25248,25248,25248,25248,25248,25248,25248,25248,25248,25248,25248,28040,28040},
{256,552,840,1128,1416,1736,1992,2280,2600,2856,3112,3496,3752,3848,4200,4552,4904,4904,5256,5608,5608,5608,6312,6312,7016,7016,7720,7720,7720,8424,8424,9080,9080,9784,9784,9784,10488,10488,10488,11192,11192,11192,11192,11192,12600,12600,12600,12600,14008,14008,14008,14008,14008,14008,15416,15416,15416,15416,16824,16824,16824,16824,16824,16824,16824,18912,18912,18912,18912,18912,18912,18912,18912,21024,21024,21024,21024,21024,21024,21024,21024,23136,23136,23136,23136,23136,25248,25248,25248,25248,25248,25248,25248,25248,25248,25248,28040,28040,28040,28040,28040,28040,28040,28040,28040,28040,28040,28040,30856,30856},
{280,600,904,1224,1544,1800,2152,2472,2728,3112,3368,3624,3848,4200,4552,4904,4904,5256,5608,5608,6312,6312,6312,7016,7720,7720,7720,8424,8424,9080,9080,9784,9784,9784,10488,10488,11192,11192,11192,11192,11192,12600,12600,12600,12600,14008,14008,14008,14008,14008,15416,15416,15416,15416,16824,16824,16824,16824,16824,16824,16824,18912,18912,18912,18912,18912,18912,18912,21024,21024,21024,21024,21024,21024,21024,23136,23136,23136,23136,23136,23136,25248,25248,25248,25248,25248,25248,25248,25248,25248,28040,28040,28040,28040,28040,28040,28040,28040,28040,28040,28040,30856,30856,30856,30856,30856,30856,30856,33672,33672},
{328,632,968,1288,1608,1928,2280,2600,2984,3240,3624,3848,4200,4552,4904,4904,5256,5608,5608,6312,6312,7016,7016,7720,7720,8424,8424,9080,9080,9784,9784,9784,10488,10488,11192,11192,11192,11192,11192,12600,12600,12600,14008,14008,14008,14008,14008,15416,15416,15416,15416,16824,16824,16824,16824,16824,16824,18912,18912,18912,18912,18912,18912,18912,21024,21024,21024,21024,21024,21024,21024,23136,23136,23136,23136,23136,25248,25248,25248,25248,25248,25248,25248,25248,25248,28040,28040,28040,28040,28040,28040,28040,28040,28040,28040,30856,30856,30856,30856,30856,30856,30856,33672,33672,33672,33672,35056,35056,35056,35056},
{336,696,1064,1416,1800,2152,2536,2856,3240,3624,3848,4200,4552,4904,5256,5608,5608,6312,6312,7016,7016,7720,7720,8424,9080,9080,9784,9784,9784,10488,10488,11192,11192,11192,11192,12600,12600,12600,14008,14008,14008,14008,14008,15416,15416,15416,16824,16824,16824,16824,16824,18912,18912,18912,18912,18912,18912,18912,21024,21024,21024,21024,21024,21024,23136,23136,23136,23136,23136,25248,25248,25248,25248,25248,25248,25248,25248,28040,28040,28040,28040,28040,28040,28040,28040,28040,30856,30856,30856,30856,30856,30856,33672,33672,33672,35056,35056,35056,35056,35056,35056,35056,35056,35056,35056,35056,38576,38576,38576,38576},
{376,776,1160,1544,1992,2344,2792,3112,3624,3848,4200,4552,4904,5256,5608,5608,6312,7016,7016,7720,7720,8424,9080,9080,9784,9784,10488,10488,11192,11192,11192,11192,12600,12600,14008,14008,14008,14008,14008,15416,15416,15416,16824,16824,16824,16824,16824,18912,18912,18912,18912,18912,21024,21024,21024,21024,21024,21024,23136,23136,23136,23136,23136,25248,25248,25248,25248,25248,25248,25248,28040,28040,28040,28040,28040,28040,28040,28040,30856,30856,30856,30856,30856,30856,33672,33672,33672,35056,35056,35056,35056,35056,35056,35056,35056,35056,35056,38576,38576,38576,38576,38576,38576,38576,42096,42096,42096,42096,42096,42096},
{408,840,1288,1736,2152,2600,2984,3496,3848,4200,4552,4904,5256,5608,6312,6312,7016,7720,7720,8424,9080,9080,9784,9784,10488,10488,11192,11192,11192,12600,12600,12600,14008,14008,14008,14008,15416,15416,16824,16824,16824,16824,16824,18912,18912,18912,18912,18912,21024,21024,21024,21024,21024,21024,23136,23136,23136,25248,25248,25248,25248,25248,25248,25248,28040,28040,28040,28040,28040,28040,28040,28040,30856,30856,30856,30856,30856,33672,33672,33672,35056,35056,35056,35056,35056,35056,35056,35056,35056,38576,38576,38576,38576,38576,38576,38576,42096,42096,42096,42096,42096,42096,42096,42096,42096,42096,46296,46296,46296,46296},
{440,904,1384,1864,2344,2792,3240,3752,3848,4552,4904,5256,5608,6312,6312,7016,7720,7720,8424,9080,9784,9784,10488,10488,11192,11192,11192,12600,12600,14008,14008,14008,14008,15416,15416,16824,16824,16824,16824,16824,18912,18912,18912,18912,18912,21024,21024,21024,21024,21024,23136,23136,23136,25248,25248,25248,25248,25248,25248,28040,28040,28040,28040,28040,28040,28040,30856,30856,30856,30856,30856,33672,33672,33672,35056,35056,35056,35056,35056,35056,35056,35056,38576,38576,38576,38576,38576,38576,42096,42096,42096,42096,42096,42096,42096,42096,42096,42096,46296,46296,46296,46296,46296,46296,46296,46296,46296,50520,50520,50520},
{488,1000,1480,1992,2472,2984,3496,3848,4552,4904,5256,5608,6312,6312,7016,7720,8424,9080,9080,9784,10488,10488,11192,11192,11192,12600,12600,14008,14008,14008,15416,15416,15416,16824,16824,16824,16824,18912,18912,18912,18912,21024,21024,21024,21024,21024,23136,23136,23136,25248,25248,25248,25248,25248,25248,28040,28040,28040,28040,28040,28040,30856,30856,30856,30856,30856,33672,33672,35056,35056,35056,35056,35056,35056,35056,35056,38576,38576,38576,38576,38576,38576,42096,42096,42096,42096,42096,42096,42096,42096,42096,46296,46296,46296,46296,46296,46296,46296,46296,50520,50520,50520,50520,50520,50520,50520,50520,54016,54016,54016},
{520,1064,1608,2152,2664,3240,3752,4200,4552,5256,5608,6312,6312,7016,7720,8424,9080,9080,9784,10488,11192,11192,11192,12600,12600,14008,14008,14008,15416,15416,16824,16824,16824,16824,18912,18912,18912,18912,21024,21024,21024,21024,21024,23136,23136,23136,25248,25248,25248,25248,25248,28040,28040,28040,28040,28040,28040,30856,30856,30856,30856,33672,33672,33672,35056,35056,35056,35056,35056,35056,35056,38576,38576,38576,38576,38576,42096,42096,42096,42096,42096,42096,42096,42096,42096,46296,46296,46296,46296,46296,46296,46296,50520,50520,50520,50520,50520,50520,50520,54016,54016,54016,54016,54016,54016,54016,54016,58944,58944,58944},
{552,1128,1736,2280,2856,3496,3848,4552,4904,5608,5608,6312,7016,7720,8424,9080,9784,9784,10488,11192,11192,11192,12600,12600,14008,14008,14008,15416,15416,16824,16824,16824,18912,18912,18912,18912,21024,21024,21024,21024,23136,23136,23136,25248,25248,25248,25248,25248,28040,28040,28040,28040,28040,28040,30856,30856,30856,30856,33672,33672,35056,35056,35056,35056,35056,35056,35056,38576,38576,38576,38576,38576,42096,42096,42096,42096,42096,42096,42096,42096,46296,46296,46296,46296,46296,46296,50520,50520,50520,50520,50520,50520,50520,54016,54016,54016,54016,54016,54016,54016,54016,58944,58944,58944,58944,58944,58944,58944,58944,61736},
{584,1192,1800,2408,2984,3624,4200,4904,5256,5608,6312,7016,7720,8424,9080,9784,9784,10488,11192,11192,12600,12600,14008,14008,14008,15416,15416,16824,16824,16824,18912,18912,18912,18912,21024,21024,21024,21024,23136,23136,25248,25248,25248,25248,25248,28040,28040,28040,28040,28040,30856,30856,30856,30856,33672,33672,35056,35056,35056,35056,35056,35056,35056,38576,38576,38576,38576,42096,42096,42096,42096,42096,42096,42096,42096,46296,46296,46296,46296,46296,46296,50520,50520,50520,50520,50520,50520,50520,54016,54016,54016,54016,54016,54016,54016,58944,58944,58944,58944,58944,58944,58944,61736,61736,61736,61736,61736,61736,61736,61736},
{616,1256,1864,2536,3112,3752,4200,4904,5608,5608,6312,7016,7720,8424,9080,9784,10488,11192,11192,11192,12600,14008,14008,14008,15416,15416,16824,16824,16824,18912,18912,18912,18912,21024,21024,21024,23136,23136,23136,25248,25248,25248,25248,28040,28040,28040,28040,28040,30856,30856,30856,30856,33672,33672,35056,35056,35056,35056,35056,35056,38576,38576,38576,38576,38576,42096,42096,42096,42096,42096,42096,42096,46296,46296,46296,46296,46296,46296,50520,50520,50520,50520,50520,50520,54016,54016,54016,54016,54016,54016,54016,58944,58944,58944,58944,58944,58944,58944,61736,61736,61736,61736,61736,61736,61736,61736,67368,67368,67368,69456},
{712,1480,2216,2984,3752,4200,4904,5608,6312,7016,7720,8424,9080,9784,10488,11192,11192,12600,14008,14008,14008,15416,16824,16824,16824,18912,18912,18912,21024,21024,21024,23136,23136,25248,25248,25248,25248,28040,28040,28040,28040,28040,30856,30856,30856,33672,35056,35056,35056,35056,35056,35056,38576,38576,38576,38576,42096,42096,42096,42096,42096,42096,46296,46296,46296,46296,46296,50520,50520,50520,50520,50520,54016,54016,54016,54016,54016,54016,54016,58944,58944,58944,58944,58944,58944,61736,61736,61736,61736,61736,61736,67368,67368,67368,69456,69456,69456,69456,69456,75792,69456,69456,69456,69456,69456,69456,69456,69456,69456,69456}
};
unsigned int TBStable1C[32] = {40, 56, 72, 120, 136, 144, 176, 208, 224, 256, 280, 296, 328, 336, 392, 488, 552, 600, 632, 696, 776, 840, 904, 1000, 1064, 1128, 1224, 1288, 1384, 1480, 1608, 1736};
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