From 123f87456183834568985f16a2739b49cb86ed1d Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Fri, 26 Oct 2018 08:33:25 +0200 Subject: [PATCH] addition of initialization of first two polar encoder tables (up to rate matching) --- .../CODING/nrPolar_tools/nr_polar_encoder.c | 22 +++++++++++++++---- openair1/PHY/CODING/nr_polar_init.c | 1 + 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c b/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c index 0c175af39c..483d5ed5f7 100644 --- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c +++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c @@ -325,21 +325,35 @@ void build_polar_tables(t_nrPolar_paramsPtr polarParams) { AssertFatal(polarParams->K > 32, "K = %d < 33, is not supported yet\n",polarParams->K); AssertFatal(polarParams->K < 65, "K = %d > 64, is not supported yet\n",polarParams->K); - int bit_i; - for (int byte=0;byte<8;byte++) { - for (int val=0;val<256;val++) { - for (int i=0;i<8;i++) { + int bit_i,ip; + int numbytes = polarParams->K>>3; + int residue = polarParams->K&7; + int numbits; + if (residue>0) numbytes++; + for (int byte=0;byteK>>3)) numbits=8; + else numbits=residue; + for (int i=0;iinterleaving_pattern[(8*byte)+i]; + printf("input (%d,%d) %d ip %d\n",byte,i,(8*byte)+i,ip); + AssertFatal(ip<64,"ip = %d\n",ip); + for (int val=0;val<256;val++) { bit_i=(val>>i)&1; polarParams->cprime_tab[byte][val] |= (bit_i<interleaving_pattern[(8*byte)+i]); } } + for (int val=0;val<255;val++) + printf("cprime_tab[%d][%d] = %llx\n",byte,val,polarParams->cprime_tab[byte][val]); + } AssertFatal(polarParams->N==512,"N = %d, not done yet\n",polarParams->N); // build G bit vectors for information bit positions and convert the bit as bytes tables in nr_polar_kronecker_power_matrices.c to 64 bit packed vectors. // keep only rows of G which correspond to information/crc bits + polarParams->G_N_tab = (uint64_t**)malloc(polarParams->K * sizeof(int64_t*)); for (int i=0;iK;i++) { + polarParams->G_N_tab[i] = (uint64_t*)memalign(32,(polarParams->N/64)*sizeof(uint64_t)); memset((void*)polarParams->G_N_tab[i],0,(polarParams->N/64)*sizeof(uint64_t)); for (int j=0;jN;j++) polarParams->G_N_tab[i][j/64] |= polarParams->G_N[polarParams->Q_I_N[i]][j]<<(j&63); diff --git a/openair1/PHY/CODING/nr_polar_init.c b/openair1/PHY/CODING/nr_polar_init.c index 72e487a738..8e3dea83ed 100644 --- a/openair1/PHY/CODING/nr_polar_init.c +++ b/openair1/PHY/CODING/nr_polar_init.c @@ -148,6 +148,7 @@ void nr_polar_init(t_nrPolar_paramsPtr *polarParams, free(J); build_decoder_tree(newPolarInitNode); + build_polar_tables(newPolarInitNode); printf("decoder tree nodes %d\n",newPolarInitNode->tree.num_nodes); } else {