From 5b990899973519bca96adc42f53df355be2b99d5 Mon Sep 17 00:00:00 2001 From: yilmazt Date: Mon, 13 Aug 2018 20:00:23 +0200 Subject: [PATCH 01/15] Minor warning fixes --- openair1/PHY/CODING/TESTBENCH/polartest.c | 2 +- openair1/PHY/CODING/nr_polar_init.c | 11 +++-------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/openair1/PHY/CODING/TESTBENCH/polartest.c b/openair1/PHY/CODING/TESTBENCH/polartest.c index b9d52d849f..aa811399a0 100644 --- a/openair1/PHY/CODING/TESTBENCH/polartest.c +++ b/openair1/PHY/CODING/TESTBENCH/polartest.c @@ -38,7 +38,7 @@ int main(int argc, char *argv[]) { double SNR, SNR_lin; int16_t nBitError = 0; // -1 = Decoding failed (All list entries have failed the CRC checks). int8_t decoderState=0, blockErrorState=0; //0 = Success, -1 = Decoding failed, 1 = Block Error. - uint16_t testLength, coderLength, blockErrorCumulative=0, bitErrorCumulative=0; + uint16_t testLength = 0, coderLength = 0, blockErrorCumulative=0, bitErrorCumulative=0; double timeEncoderCumulative = 0, timeDecoderCumulative = 0; uint8_t aggregation_level, decoderListSize = 8, pathMetricAppr = 0; //0 --> eq. (8a) and (11b), 1 --> eq. (9) and (12) diff --git a/openair1/PHY/CODING/nr_polar_init.c b/openair1/PHY/CODING/nr_polar_init.c index c0dcdf7b0b..a4a86389cc 100644 --- a/openair1/PHY/CODING/nr_polar_init.c +++ b/openair1/PHY/CODING/nr_polar_init.c @@ -31,16 +31,11 @@ void nr_polar_init(t_nrPolar_paramsPtr *polarParams, uint8_t aggregation_level) { t_nrPolar_paramsPtr currentPtr = *polarParams; - t_nrPolar_paramsPtr previousPtr = NULL; //Parse the list. If the node is already created, return without initialization. while (currentPtr != NULL) { - if (currentPtr->idx == (messageType * messageLength)) { - return; - } else { - previousPtr = currentPtr; - currentPtr = currentPtr->nextPtr; - } + if (currentPtr->idx == (messageType * messageLength)) return; + else currentPtr = currentPtr->nextPtr; } //Else, initialize and add node to the end of the linked list. @@ -174,7 +169,7 @@ t_nrPolar_paramsPtr nr_polar_params (t_nrPolar_paramsPtr polarParams, int8_t messageType, uint16_t messageLength) { - t_nrPolar_paramsPtr currentPtr; + t_nrPolar_paramsPtr currentPtr = NULL; while (polarParams != NULL) { if (polarParams->idx == (messageType * messageLength)) { From d409ed1adbcdb2a9c0b78c6ee2ed64d7475a7036 Mon Sep 17 00:00:00 2001 From: yilmazt Date: Mon, 13 Aug 2018 21:40:54 +0200 Subject: [PATCH 02/15] trial --- targets/RT/USER/nr-softmodem.c | 1 + 1 file changed, 1 insertion(+) diff --git a/targets/RT/USER/nr-softmodem.c b/targets/RT/USER/nr-softmodem.c index cf34804e1c..99d45e1ba1 100644 --- a/targets/RT/USER/nr-softmodem.c +++ b/targets/RT/USER/nr-softmodem.c @@ -888,6 +888,7 @@ static void wait_nfapi_init(char *thread_name) { int main( int argc, char **argv ) { + printf( "HEREHERE"); int i; #if defined (XFORMS) //void *status; From 3c9a89576d5632706eec657f5d8ac1c5f64f3ee3 Mon Sep 17 00:00:00 2001 From: yilmazt Date: Tue, 14 Aug 2018 11:36:59 +0200 Subject: [PATCH 03/15] Debug changes --- openair1/PHY/CODING/TESTBENCH/polartest.c | 11 +++++++++++ openair1/PHY/INIT/nr_init.c | 2 +- openair1/PHY/NR_TRANSPORT/nr_dci.c | 12 ++++++++++-- openair1/PHY/defs_gNB.h | 9 ++++----- targets/RT/USER/nr-softmodem.c | 1 - 5 files changed, 26 insertions(+), 9 deletions(-) diff --git a/openair1/PHY/CODING/TESTBENCH/polartest.c b/openair1/PHY/CODING/TESTBENCH/polartest.c index aa811399a0..32bfc23529 100644 --- a/openair1/PHY/CODING/TESTBENCH/polartest.c +++ b/openair1/PHY/CODING/TESTBENCH/polartest.c @@ -11,6 +11,8 @@ #include "PHY/defs_gNB.h" #include "SIMULATION/TOOLS/sim.h" +#define DEBUG_POLAR_PARAMS + int main(int argc, char *argv[]) { //Initiate timing. (Results depend on CPU Frequency. Therefore, might change due to performance variances during simulation.) @@ -125,6 +127,15 @@ int main(int argc, char *argv[]) { t_nrPolar_paramsPtr nrPolar_params = NULL; nr_polar_init(&nrPolar_params, polarMessageType, testLength, aggregation_level); +#ifdef DEBUG_POLAR_PARAMS + nr_polar_init(&nrPolar_params, polarMessageType, testLength, aggregation_level); + nr_polar_init(&nrPolar_params, 1, 20, 1); + nr_polar_init(&nrPolar_params, 1, 21, 1); + nr_polar_init(&nrPolar_params, polarMessageType, testLength, aggregation_level); + nr_polar_print_polarParams(nrPolar_params); + return (0); +#endif + t_nrPolar_paramsPtr currentPtr = nr_polar_params(nrPolar_params, polarMessageType, testLength); // We assume no a priori knowledge available about the payload. diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c index d15c39e222..29e10410be 100644 --- a/openair1/PHY/INIT/nr_init.c +++ b/openair1/PHY/INIT/nr_init.c @@ -119,7 +119,7 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB, // PBCH DMRS gold sequences generation nr_init_pbch_dmrs(gNB); // Polar encoder init for PBCH - nr_polar_init(&fp->pbch_polar_params, + nr_polar_init(&gNB->nrPolar_params, NR_POLAR_PBCH_MESSAGE_TYPE, NR_POLAR_PBCH_PAYLOAD_BITS, NR_POLAR_PBCH_AGGREGATION_LEVEL); diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.c b/openair1/PHY/NR_TRANSPORT/nr_dci.c index f58561fecc..e31b63a26f 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dci.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dci.c @@ -202,8 +202,14 @@ uint8_t nr_generate_dci_top(NR_gNB_PDCCH pdcch_vars, /// DCI payload processing //channel coding - /*uint8_t *encoderInput = malloc(sizeof(uint8_t) * dci_alloc.size); +#ifdef DEBUG_POLAR_PARAMS + uint8_t *encoderInput = malloc(sizeof(uint8_t) * dci_alloc.size); + printf("\ndci_alloc.dci_pdu\n[0]=%d [1]=%d [2]=%d [3]=%d\n",dci_alloc.dci_pdu[0],dci_alloc.dci_pdu[1],dci_alloc.dci_pdu[2],dci_alloc.dci_pdu[3]); nr_bit2byte(dci_alloc.dci_pdu, dci_alloc.size, encoderInput); + printf("\ndci_alloc.dci_pdu\n[0]=%d [1]=%d [2]=%d [3]=%d\n",dci_alloc.dci_pdu[0],dci_alloc.dci_pdu[1],dci_alloc.dci_pdu[2],dci_alloc.dci_pdu[3]); + for (int i=0;iencoderLength); polar_encoder(encoderInput, encoderOutput, currentPtr); uint32_t encoded_payload[4]; - nr_byte2bit(encoderOutput,currentPtr->encoderLength,encoded_payload);*/ + nr_byte2bit(encoderOutput,currentPtr->encoderLength,encoded_payload); + return (0); +#endif // scrambling uint32_t scrambled_payload[NR_MAX_DCI_SIZE_DWORD]; diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index bf023867ab..d622536042 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -283,15 +283,16 @@ typedef struct PHY_VARS_gNB_s { /// NFAPI PRACH information nfapi_preamble_pdu_t preamble_list[MAX_NUM_RX_PRACH_PREAMBLES]; - Sched_Rsp_t Sched_INFO; + Sched_Rsp_t Sched_INFO; NR_gNB_PDCCH pdcch_vars; + NR_gNB_PBCH pbch; + t_nrPolar_paramsPtr nrPolar_params; nfapi_nr_dl_config_pdcch_parameters_rel15_t pdcch_type0_params; - LTE_eNB_PHICH phich_vars[2]; + LTE_eNB_PHICH phich_vars[2]; NR_gNB_COMMON common_vars; LTE_eNB_UCI uci_vars[NUMBER_OF_UE_MAX]; LTE_eNB_SRS srs_vars[NUMBER_OF_UE_MAX]; - NR_gNB_PBCH pbch; LTE_eNB_PUSCH *pusch_vars[NUMBER_OF_UE_MAX]; LTE_eNB_PRACH prach_vars; LTE_eNB_DLSCH_t *dlsch[NUMBER_OF_UE_MAX][2]; // Nusers times two spatial streams @@ -462,8 +463,6 @@ typedef struct PHY_VARS_gNB_s { int32_t pusch_stats_mcs[NUMBER_OF_UE_MAX][10240]; int32_t pusch_stats_bsr[NUMBER_OF_UE_MAX][10240]; int32_t pusch_stats_BO[NUMBER_OF_UE_MAX][10240]; - - t_nrPolar_paramsPtr nrPolar_params; } PHY_VARS_gNB; #endif diff --git a/targets/RT/USER/nr-softmodem.c b/targets/RT/USER/nr-softmodem.c index 99d45e1ba1..cf34804e1c 100644 --- a/targets/RT/USER/nr-softmodem.c +++ b/targets/RT/USER/nr-softmodem.c @@ -888,7 +888,6 @@ static void wait_nfapi_init(char *thread_name) { int main( int argc, char **argv ) { - printf( "HEREHERE"); int i; #if defined (XFORMS) //void *status; From 67eec34a5cc03107f4af4a392189f83b9bdb46f1 Mon Sep 17 00:00:00 2001 From: yilmazt Date: Tue, 14 Aug 2018 16:25:51 +0200 Subject: [PATCH 04/15] Minor fixes --- openair1/PHY/NR_TRANSPORT/nr_dci.c | 1 + openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h | 2 +- openair2/GNB_APP/gnb_config.c | 4 ++-- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c | 2 +- targets/RT/USER/nr-ru.c | 2 +- targets/RT/USER/nr-softmodem.c | 4 ++-- 6 files changed, 8 insertions(+), 7 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.c b/openair1/PHY/NR_TRANSPORT/nr_dci.c index e31b63a26f..25bafe6051 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dci.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dci.c @@ -34,6 +34,7 @@ //#define DEBUG_PDCCH_DMRS //#define DEBUG_DCI +#define DEBUG_POLAR_PARAMS extern short nr_mod_table[NR_MOD_TABLE_SIZE_SHORT]; diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h index 96806fbe82..cf50c71634 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h @@ -48,7 +48,7 @@ * @{ */ -#define SHRT_MAX 32767 +//#define SHRT_MAX 32767 typedef struct { /// Indicator of first transmission diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c index 9699dbada6..cbdf102bd1 100644 --- a/openair2/GNB_APP/gnb_config.c +++ b/openair2/GNB_APP/gnb_config.c @@ -606,11 +606,11 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { paramdef_t GNBParams[] = GNBPARAMS_DESC; paramlist_def_t GNBParamList = {GNB_CONFIG_STRING_GNB_LIST,NULL,0}; ////////// Physical parameters - checkedparam_t config_check_CCparams[] = NRCCPARAMS_CHECK; + //checkedparam_t config_check_CCparams[] = NRCCPARAMS_CHECK; paramdef_t CCsParams[] = NRCCPARAMS_DESC; paramlist_def_t CCsParamList = {GNB_CONFIG_STRING_COMPONENT_CARRIERS,NULL,0}; - paramdef_t SRB1Params[] = SRB1PARAMS_DESC; + //paramdef_t SRB1Params[] = SRB1PARAMS_DESC; /* get global parameters, defined outside any section in the config file */ diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c index 339cb14151..2a59863977 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c @@ -42,7 +42,7 @@ void nr_schedule_css_dlsch_phytest(module_id_t module_idP, uint8_t CC_id; gNB_MAC_INST *nr_mac = RC.nrmac[module_idP]; - NR_COMMON_channels_t *cc = nr_mac->common_channels; + //NR_COMMON_channels_t *cc = nr_mac->common_channels; nfapi_nr_dl_config_request_body_t *dl_req; nfapi_nr_dl_config_request_pdu_t *dl_config_pdu; nfapi_tx_request_pdu_t *TX_req; diff --git a/targets/RT/USER/nr-ru.c b/targets/RT/USER/nr-ru.c index cbec8b7999..a9622df32d 100644 --- a/targets/RT/USER/nr-ru.c +++ b/targets/RT/USER/nr-ru.c @@ -604,7 +604,7 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *subframe) { RU_proc_t *proc = &ru->proc; uint16_t packet_type; - uint32_t symbol_number,symbol_mask,symbol_mask_full; + uint32_t symbol_number,symbol_mask,symbol_mask_full=0; int subframe_tx,frame_tx; LOG_D(PHY, "%s(ru:%p frame, subframe)\n", __FUNCTION__, ru); diff --git a/targets/RT/USER/nr-softmodem.c b/targets/RT/USER/nr-softmodem.c index cf34804e1c..d2f43b2cb8 100644 --- a/targets/RT/USER/nr-softmodem.c +++ b/targets/RT/USER/nr-softmodem.c @@ -396,8 +396,8 @@ static void *scope_thread(void *arg) { for(CC_id=0; CC_id Date: Thu, 16 Aug 2018 15:20:36 +0200 Subject: [PATCH 05/15] Debug changes --- openair1/PHY/NR_TRANSPORT/nr_dci.c | 2 ++ openair2/GNB_APP/gnb_config.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.c b/openair1/PHY/NR_TRANSPORT/nr_dci.c index 25bafe6051..949f8807f2 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dci.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dci.c @@ -205,6 +205,8 @@ uint8_t nr_generate_dci_top(NR_gNB_PDCCH pdcch_vars, //channel coding #ifdef DEBUG_POLAR_PARAMS uint8_t *encoderInput = malloc(sizeof(uint8_t) * dci_alloc.size); + printf("\n[TY]DCI PDU: [0]->0x%08x \t [1]->0x%08x \t [2]->0x%08x \t [3]->0x%08x\n", + dci_alloc.dci_pdu[0], dci_alloc.dci_pdu[1], dci_alloc.dci_pdu[2], dci_alloc.dci_pdu[3]); printf("\ndci_alloc.dci_pdu\n[0]=%d [1]=%d [2]=%d [3]=%d\n",dci_alloc.dci_pdu[0],dci_alloc.dci_pdu[1],dci_alloc.dci_pdu[2],dci_alloc.dci_pdu[3]); nr_bit2byte(dci_alloc.dci_pdu, dci_alloc.size, encoderInput); printf("\ndci_alloc.dci_pdu\n[0]=%d [1]=%d [2]=%d [3]=%d\n",dci_alloc.dci_pdu[0],dci_alloc.dci_pdu[1],dci_alloc.dci_pdu[2],dci_alloc.dci_pdu[3]); diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c index cbdf102bd1..455a1c0a83 100644 --- a/openair2/GNB_APP/gnb_config.c +++ b/openair2/GNB_APP/gnb_config.c @@ -592,12 +592,12 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { int32_t RateMatchPatternLTE_CRS_radioframeAllocationOffset = 0; char* RateMatchPatternLTE_CRS_subframeAllocation_choice = NULL; - int32_t srb1_timer_poll_retransmit = 0; + /*int32_t srb1_timer_poll_retransmit = 0; int32_t srb1_timer_reordering = 0; int32_t srb1_timer_status_prohibit = 0; int32_t srb1_poll_pdu = 0; int32_t srb1_poll_byte = 0; - int32_t srb1_max_retx_threshold = 0; + int32_t srb1_max_retx_threshold = 0;*/ //int32_t my_int; From 948eb6f1ca6b61a1e2831e27c679e6b17730a44e Mon Sep 17 00:00:00 2001 From: yilmazt Date: Thu, 16 Aug 2018 15:43:23 +0200 Subject: [PATCH 06/15] Debug changes2 --- openair1/PHY/NR_TRANSPORT/nr_dci_tools.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c b/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c index fb75415bf3..4890ce5510 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c @@ -31,6 +31,7 @@ */ #include "nr_dci.h" +#define DEBUG_NFAPI_NR_RNTI_RA void nr_fill_cce_list(NR_gNB_DCI_ALLOC_t* dci_alloc, uint16_t n_shift, uint8_t m) { @@ -128,6 +129,9 @@ void nr_fill_dci_and_dlsch(PHY_VARS_gNB *gNB, case NFAPI_NR_DL_DCI_FORMAT_1_0: switch(params_rel15->rnti_type) { case NFAPI_NR_RNTI_RA: +#ifdef DEBUG_NFAPI_NR_RNTI_RA +printf("\npdu_rel15->frequency_domain_assignment = %d = 0x%x",pdu_rel15->frequency_domain_assignment,pdu_rel15->frequency_domain_assignment); +#endif // Freq domain assignment fsize = (int)ceil( log2( (N_RB*(N_RB+1))>>1 ) ); for (int i=0; i Date: Thu, 16 Aug 2018 16:01:17 +0200 Subject: [PATCH 07/15] Debug changes3 --- openair1/PHY/NR_TRANSPORT/nr_dci_tools.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c b/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c index 4890ce5510..6e0b019cfe 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c @@ -130,7 +130,15 @@ void nr_fill_dci_and_dlsch(PHY_VARS_gNB *gNB, switch(params_rel15->rnti_type) { case NFAPI_NR_RNTI_RA: #ifdef DEBUG_NFAPI_NR_RNTI_RA -printf("\npdu_rel15->frequency_domain_assignment = %d = 0x%x",pdu_rel15->frequency_domain_assignment,pdu_rel15->frequency_domain_assignment); +printf("frequency_domain_assignment = %05d = %#08x\n" + " time_domain_assignment = %05d = %#08x\n" + " vrb_to_prb_mapping = %05d = %#08x\n" + " MCS = %05d = %#08x\n" + " tb_scaling = %05d = %#08x\n", + pdu_rel15->frequency_domain_assignment,pdu_rel15->frequency_domain_assignment, + pdu_rel15->time_domain_assignment,pdu_rel15->time_domain_assignment, + pdu_rel15->vrb_to_prb_mapping,pdu_rel15->vrb_to_prb_mapping, + pdu_rel15->mcs,pdu_rel15->mcs,pdu_rel15->tb_scaling,pdu_rel15->tb_scaling); #endif // Freq domain assignment fsize = (int)ceil( log2( (N_RB*(N_RB+1))>>1 ) ); From b31a0b42ec1f32ee714b71401f11f5b5bf22c76b Mon Sep 17 00:00:00 2001 From: yilmazt Date: Thu, 16 Aug 2018 16:55:08 +0200 Subject: [PATCH 08/15] Debug changes4 --- openair1/PHY/NR_TRANSPORT/nr_dci.c | 7 +++++-- openair1/PHY/NR_TRANSPORT/nr_dci_tools.c | 10 +++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.c b/openair1/PHY/NR_TRANSPORT/nr_dci.c index 949f8807f2..36616b6e21 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dci.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dci.c @@ -204,16 +204,19 @@ uint8_t nr_generate_dci_top(NR_gNB_PDCCH pdcch_vars, /// DCI payload processing //channel coding #ifdef DEBUG_POLAR_PARAMS + dci_alloc.dci_pdu[1]=10; uint8_t *encoderInput = malloc(sizeof(uint8_t) * dci_alloc.size); printf("\n[TY]DCI PDU: [0]->0x%08x \t [1]->0x%08x \t [2]->0x%08x \t [3]->0x%08x\n", dci_alloc.dci_pdu[0], dci_alloc.dci_pdu[1], dci_alloc.dci_pdu[2], dci_alloc.dci_pdu[3]); - printf("\ndci_alloc.dci_pdu\n[0]=%d [1]=%d [2]=%d [3]=%d\n",dci_alloc.dci_pdu[0],dci_alloc.dci_pdu[1],dci_alloc.dci_pdu[2],dci_alloc.dci_pdu[3]); nr_bit2byte(dci_alloc.dci_pdu, dci_alloc.size, encoderInput); - printf("\ndci_alloc.dci_pdu\n[0]=%d [1]=%d [2]=%d [3]=%d\n",dci_alloc.dci_pdu[0],dci_alloc.dci_pdu[1],dci_alloc.dci_pdu[2],dci_alloc.dci_pdu[3]); for (int i=0;i0x%08x \t [1]->0x%08x \t [2]->0x%08x \t [3]->0x%08x\n", + dci_alloc.dci_pdu[0], dci_alloc.dci_pdu[1], dci_alloc.dci_pdu[2], dci_alloc.dci_pdu[3]); return (0); + nr_polar_init(&nrPolar_params, NR_POLAR_DCI_MESSAGE_TYPE, dci_alloc.size, pdcch_params.aggregation_level); t_nrPolar_paramsPtr currentPtr = nr_polar_params(nrPolar_params, NR_POLAR_DCI_MESSAGE_TYPE, diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c b/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c index 6e0b019cfe..e3504ea64e 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c @@ -130,11 +130,11 @@ void nr_fill_dci_and_dlsch(PHY_VARS_gNB *gNB, switch(params_rel15->rnti_type) { case NFAPI_NR_RNTI_RA: #ifdef DEBUG_NFAPI_NR_RNTI_RA -printf("frequency_domain_assignment = %05d = %#08x\n" - " time_domain_assignment = %05d = %#08x\n" - " vrb_to_prb_mapping = %05d = %#08x\n" - " MCS = %05d = %#08x\n" - " tb_scaling = %05d = %#08x\n", +printf("frequency_domain_assignment = %05d = %#010x\n" + " time_domain_assignment = %05d = %#010x\n" + " vrb_to_prb_mapping = %05d = %#010x\n" + " MCS = %05d = %#010x\n" + " tb_scaling = %05d = %#010x\n", pdu_rel15->frequency_domain_assignment,pdu_rel15->frequency_domain_assignment, pdu_rel15->time_domain_assignment,pdu_rel15->time_domain_assignment, pdu_rel15->vrb_to_prb_mapping,pdu_rel15->vrb_to_prb_mapping, From ca207808df6f84f65f0ad5905f66f049674796c7 Mon Sep 17 00:00:00 2001 From: yilmazt Date: Thu, 16 Aug 2018 21:57:33 +0200 Subject: [PATCH 09/15] Debug changes5 --- openair1/PHY/CODING/TESTBENCH/polartest.c | 8 +++++ .../nrPolar_tools/nr_bitwise_operations.c | 34 +++++++------------ .../PHY/CODING/nrPolar_tools/nr_polar_defs.h | 5 ++- openair1/PHY/NR_TRANSPORT/nr_dci.c | 6 ++-- 4 files changed, 26 insertions(+), 27 deletions(-) diff --git a/openair1/PHY/CODING/TESTBENCH/polartest.c b/openair1/PHY/CODING/TESTBENCH/polartest.c index 32bfc23529..eeca32df78 100644 --- a/openair1/PHY/CODING/TESTBENCH/polartest.c +++ b/openair1/PHY/CODING/TESTBENCH/polartest.c @@ -133,6 +133,14 @@ int main(int argc, char *argv[]) { nr_polar_init(&nrPolar_params, 1, 21, 1); nr_polar_init(&nrPolar_params, polarMessageType, testLength, aggregation_level); nr_polar_print_polarParams(nrPolar_params); + + uint32_t in[4]; + in[0]=0x01189400; + in[1]=0xffffff0f; + uint8_t *out = malloc(sizeof(uint8_t) * 41); + nr_bit2byte(in, 41, out); + for (int i=0;i<41;i++) + printf("out[%d]=%d\n",i,out[i]); return (0); #endif diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_bitwise_operations.c b/openair1/PHY/CODING/nrPolar_tools/nr_bitwise_operations.c index ea47405d5b..032eca98d3 100644 --- a/openair1/PHY/CODING/nrPolar_tools/nr_bitwise_operations.c +++ b/openair1/PHY/CODING/nrPolar_tools/nr_bitwise_operations.c @@ -21,29 +21,21 @@ #include "PHY/CODING/nrPolar_tools/nr_polar_defs.h" -void nr_byte2bit_uint8(uint8_t *array, uint8_t arraySize, uint8_t *bitArray) { - //First 2 parameters are in bytes. - - for (int i = 0; i < arraySize; i++) { - bitArray[(7 + (i * 8))] = (array[i] >> 0 & 0x01); - bitArray[(6 + (i * 8))] = (array[i] >> 1 & 0x01); - bitArray[(5 + (i * 8))] = (array[i] >> 2 & 0x01); - bitArray[(4 + (i * 8))] = (array[i] >> 3 & 0x01); - bitArray[(3 + (i * 8))] = (array[i] >> 4 & 0x01); - bitArray[(2 + (i * 8))] = (array[i] >> 5 & 0x01); - bitArray[(1 + (i * 8))] = (array[i] >> 6 & 0x01); - bitArray[(i * 8)] = (array[i] >> 7 & 0x01); +void nr_bit2byte_uint32_8_t(uint32_t *in, uint16_t arraySize, uint8_t *out) { + uint8_t arrayInd = ceil(arraySize / 32.0); + for (int i = 0; i < arrayInd; i++) { + for (int j = 0; j < 32; j++) { + out[j+(i*32)] = (in[i] >> j) & 1; + } } } -void nr_bit2byte(uint32_t *in, uint16_t arraySize, uint8_t *out) { - for (int i = 0; i < arraySize; i++) { - out[i] = ((*in) >> i) & 1; - } -} - -void nr_byte2bit(uint8_t *in, uint16_t arraySize, uint32_t *out) { - for (int i = 0; i < arraySize; i++) { - *out = (*out) << i | in[i]; +void nr_byte2bit_uint8_32_t(uint8_t *in, uint16_t arraySize, uint32_t *out) { + uint8_t arrayInd = ceil(arraySize / 32.0); + for (int i = 0; i < arrayInd; i++) { + for (int j = 0; j < 32; j++) { + out[i]|=in[j+(i*32)]; + out[i]<<=1; + } } } diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h b/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h index 574b199c50..464f91d7ce 100644 --- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h +++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h @@ -113,9 +113,8 @@ void nr_polar_info_bit_pattern(uint8_t *ibp, int16_t *Q_I_N, int16_t *Q_F_N, void nr_polar_info_bit_extraction(uint8_t *input, uint8_t *output, uint8_t *pattern, uint16_t size); -void nr_byte2bit(uint8_t *in, uint16_t arraySize, uint32_t *out); -void nr_byte2bit_uint8(uint8_t *array, uint8_t arraySize, uint8_t *bitArray); -void nr_bit2byte(uint32_t *in, uint16_t arraySize, uint8_t *out); +void nr_bit2byte_uint32_8_t(uint32_t *in, uint16_t arraySize, uint8_t *out); +void nr_byte2bit_uint8_32_t(uint8_t *in, uint16_t arraySize, uint32_t *out); void nr_polar_bit_insertion(uint8_t *input, uint8_t *output, uint16_t N, uint16_t K, int16_t *Q_I_N, int16_t *Q_PC_N, uint8_t n_PC); diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.c b/openair1/PHY/NR_TRANSPORT/nr_dci.c index 36616b6e21..a857aa7fb0 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dci.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dci.c @@ -204,15 +204,15 @@ uint8_t nr_generate_dci_top(NR_gNB_PDCCH pdcch_vars, /// DCI payload processing //channel coding #ifdef DEBUG_POLAR_PARAMS - dci_alloc.dci_pdu[1]=10; + dci_alloc.dci_pdu[1]=0xffffffff; uint8_t *encoderInput = malloc(sizeof(uint8_t) * dci_alloc.size); - printf("\n[TY]DCI PDU: [0]->0x%08x \t [1]->0x%08x \t [2]->0x%08x \t [3]->0x%08x\n", + printf("[TY]DCI PDU: [0]->0x%08x \t [1]->0x%08x \t [2]->0x%08x \t [3]->0x%08x\n", dci_alloc.dci_pdu[0], dci_alloc.dci_pdu[1], dci_alloc.dci_pdu[2], dci_alloc.dci_pdu[3]); nr_bit2byte(dci_alloc.dci_pdu, dci_alloc.size, encoderInput); for (int i=0;i0x%08x \t [1]->0x%08x \t [2]->0x%08x \t [3]->0x%08x\n", + printf("[TY]DCI PDU: [0]->0x%08x \t [1]->0x%08x \t [2]->0x%08x \t [3]->0x%08x\n", dci_alloc.dci_pdu[0], dci_alloc.dci_pdu[1], dci_alloc.dci_pdu[2], dci_alloc.dci_pdu[3]); return (0); From 76b1ee89fa5225d6a2a61e97f04276fe2c5f188f Mon Sep 17 00:00:00 2001 From: yilmazt Date: Fri, 17 Aug 2018 11:22:13 +0200 Subject: [PATCH 10/15] Working polartest.c --- openair1/PHY/CODING/TESTBENCH/polartest.c | 7 +++++-- openair1/PHY/CODING/nrPolar_tools/nr_bitwise_operations.c | 6 ++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/openair1/PHY/CODING/TESTBENCH/polartest.c b/openair1/PHY/CODING/TESTBENCH/polartest.c index eeca32df78..0a5a4f7aba 100644 --- a/openair1/PHY/CODING/TESTBENCH/polartest.c +++ b/openair1/PHY/CODING/TESTBENCH/polartest.c @@ -11,7 +11,7 @@ #include "PHY/defs_gNB.h" #include "SIMULATION/TOOLS/sim.h" -#define DEBUG_POLAR_PARAMS +//#define DEBUG_POLAR_PARAMS int main(int argc, char *argv[]) { @@ -138,9 +138,12 @@ int main(int argc, char *argv[]) { in[0]=0x01189400; in[1]=0xffffff0f; uint8_t *out = malloc(sizeof(uint8_t) * 41); - nr_bit2byte(in, 41, out); + nr_bit2byte_uint32_8_t(in, 41, out); for (int i=0;i<41;i++) printf("out[%d]=%d\n",i,out[i]); + uint32_t inn[4]; + nr_byte2bit_uint8_32_t(out, 41, inn); + printf("inn[0]=%#x, inn[1]=%#x\n",inn[0],inn[1]); return (0); #endif diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_bitwise_operations.c b/openair1/PHY/CODING/nrPolar_tools/nr_bitwise_operations.c index 032eca98d3..4394a2ffff 100644 --- a/openair1/PHY/CODING/nrPolar_tools/nr_bitwise_operations.c +++ b/openair1/PHY/CODING/nrPolar_tools/nr_bitwise_operations.c @@ -33,9 +33,11 @@ void nr_bit2byte_uint32_8_t(uint32_t *in, uint16_t arraySize, uint8_t *out) { void nr_byte2bit_uint8_32_t(uint8_t *in, uint16_t arraySize, uint32_t *out) { uint8_t arrayInd = ceil(arraySize / 32.0); for (int i = 0; i < arrayInd; i++) { - for (int j = 0; j < 32; j++) { - out[i]|=in[j+(i*32)]; + out[i]=0; + for (int j = 31; j > 0; j--) { + out[i]|=in[(i*32)+j]; out[i]<<=1; } + out[i]|=in[(i*32)]; } } From 77b155c3b9798bc24f135287e4b2bae1a5ff5257 Mon Sep 17 00:00:00 2001 From: yilmazt Date: Fri, 17 Aug 2018 13:59:59 +0200 Subject: [PATCH 11/15] Debug changes1 --- openair1/PHY/NR_TRANSPORT/nr_dci.c | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.c b/openair1/PHY/NR_TRANSPORT/nr_dci.c index a857aa7fb0..5496ca13fe 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dci.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dci.c @@ -204,36 +204,29 @@ uint8_t nr_generate_dci_top(NR_gNB_PDCCH pdcch_vars, /// DCI payload processing //channel coding #ifdef DEBUG_POLAR_PARAMS - dci_alloc.dci_pdu[1]=0xffffffff; - uint8_t *encoderInput = malloc(sizeof(uint8_t) * dci_alloc.size); - printf("[TY]DCI PDU: [0]->0x%08x \t [1]->0x%08x \t [2]->0x%08x \t [3]->0x%08x\n", - dci_alloc.dci_pdu[0], dci_alloc.dci_pdu[1], dci_alloc.dci_pdu[2], dci_alloc.dci_pdu[3]); - nr_bit2byte(dci_alloc.dci_pdu, dci_alloc.size, encoderInput); - for (int i=0;i0x%08x \t [1]->0x%08x \t [2]->0x%08x \t [3]->0x%08x\n", - dci_alloc.dci_pdu[0], dci_alloc.dci_pdu[1], dci_alloc.dci_pdu[2], dci_alloc.dci_pdu[3]); - return (0); - - nr_polar_init(&nrPolar_params, NR_POLAR_DCI_MESSAGE_TYPE, dci_alloc.size, pdcch_params.aggregation_level); t_nrPolar_paramsPtr currentPtr = nr_polar_params(nrPolar_params, NR_POLAR_DCI_MESSAGE_TYPE, dci_alloc.size); + uint8_t *encoderInput = malloc(sizeof(uint8_t) * dci_alloc.size); uint8_t *encoderOutput = malloc(sizeof(uint8_t) * currentPtr->encoderLength); + printf("[TY]DCI PDU: [0]->0x%08x \t [1]->0x%08x \t [2]->0x%08x \t [3]->0x%08x\n", + dci_alloc.dci_pdu[0], dci_alloc.dci_pdu[1], dci_alloc.dci_pdu[2], dci_alloc.dci_pdu[3]); + nr_bit2byte_uint32_8_t(dci_alloc.dci_pdu,dci_alloc.size,encoderInput); polar_encoder(encoderInput, encoderOutput, currentPtr); uint32_t encoded_payload[4]; - nr_byte2bit(encoderOutput,currentPtr->encoderLength,encoded_payload); + nr_byte2bit_uint8_32_t(encoderOutput, currentPtr->encoderLength, encoded_payload); + printf("[TY]Encoded Payload: [0]->0x%08x \t [1]->0x%08x \t [2]->0x%08x \t [3]->0x%08x\n", + encoded_payload[0], encoded_payload[1], encoded_payload[2], encoded_payload[3]); return (0); #endif - + // scrambling uint32_t scrambled_payload[NR_MAX_DCI_SIZE_DWORD]; uint32_t Nid = (pdcch_params.search_space_type == NFAPI_NR_SEARCH_SPACE_TYPE_UE_SPECIFIC)? pdcch_params.scrambling_id : config.sch_config.physical_cell_id.value; uint32_t n_RNTI = (pdcch_params.search_space_type == NFAPI_NR_SEARCH_SPACE_TYPE_UE_SPECIFIC)? pdcch_params.rnti : 0; - nr_pdcch_scrambling(dci_alloc.dci_pdu, dci_alloc.size, Nid, n_RNTI, scrambled_payload); + nr_pdcch_scrambling(encoded_payload, dci_alloc.size, Nid, n_RNTI, scrambled_payload); // QPSK modulation int16_t mod_dci[NR_MAX_DCI_SIZE>>1]; From 48bd667b672a07475687e19754b83b7ba11ec635 Mon Sep 17 00:00:00 2001 From: yilmazt Date: Fri, 17 Aug 2018 15:08:09 +0200 Subject: [PATCH 12/15] Minor fix --- openair1/PHY/NR_TRANSPORT/nr_dci.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.c b/openair1/PHY/NR_TRANSPORT/nr_dci.c index 5496ca13fe..b004ccb12b 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dci.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dci.c @@ -204,10 +204,8 @@ uint8_t nr_generate_dci_top(NR_gNB_PDCCH pdcch_vars, /// DCI payload processing //channel coding #ifdef DEBUG_POLAR_PARAMS - nr_polar_init(&nrPolar_params, NR_POLAR_DCI_MESSAGE_TYPE, dci_alloc.size, pdcch_params.aggregation_level); - t_nrPolar_paramsPtr currentPtr = nr_polar_params(nrPolar_params, - NR_POLAR_DCI_MESSAGE_TYPE, - dci_alloc.size); + nr_polar_init(nrPolar_params, NR_POLAR_DCI_MESSAGE_TYPE, dci_alloc.size, dci_alloc.L); + t_nrPolar_paramsPtr currentPtr = nr_polar_params(nrPolar_params, NR_POLAR_DCI_MESSAGE_TYPE,dci_alloc.size); uint8_t *encoderInput = malloc(sizeof(uint8_t) * dci_alloc.size); uint8_t *encoderOutput = malloc(sizeof(uint8_t) * currentPtr->encoderLength); From 866c2fedc8f2416223fccfa318ea01b4c48d1b0f Mon Sep 17 00:00:00 2001 From: yilmazt Date: Fri, 17 Aug 2018 15:26:22 +0200 Subject: [PATCH 13/15] Minor fix2 --- openair1/PHY/NR_TRANSPORT/nr_dci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.c b/openair1/PHY/NR_TRANSPORT/nr_dci.c index b004ccb12b..7cf1f61eb8 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dci.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dci.c @@ -205,7 +205,7 @@ uint8_t nr_generate_dci_top(NR_gNB_PDCCH pdcch_vars, //channel coding #ifdef DEBUG_POLAR_PARAMS nr_polar_init(nrPolar_params, NR_POLAR_DCI_MESSAGE_TYPE, dci_alloc.size, dci_alloc.L); - t_nrPolar_paramsPtr currentPtr = nr_polar_params(nrPolar_params, NR_POLAR_DCI_MESSAGE_TYPE,dci_alloc.size); + t_nrPolar_paramsPtr currentPtr = nr_polar_params(*nrPolar_params, NR_POLAR_DCI_MESSAGE_TYPE, dci_alloc.size); uint8_t *encoderInput = malloc(sizeof(uint8_t) * dci_alloc.size); uint8_t *encoderOutput = malloc(sizeof(uint8_t) * currentPtr->encoderLength); From e6e99716adb990e4eae273e893d0f4ed244f7ee6 Mon Sep 17 00:00:00 2001 From: yilmazt Date: Fri, 17 Aug 2018 15:35:01 +0200 Subject: [PATCH 14/15] Minor fix3 --- openair1/PHY/NR_TRANSPORT/nr_dci.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.c b/openair1/PHY/NR_TRANSPORT/nr_dci.c index 7cf1f61eb8..7276d48592 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dci.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dci.c @@ -203,21 +203,22 @@ uint8_t nr_generate_dci_top(NR_gNB_PDCCH pdcch_vars, /// DCI payload processing //channel coding -#ifdef DEBUG_POLAR_PARAMS nr_polar_init(nrPolar_params, NR_POLAR_DCI_MESSAGE_TYPE, dci_alloc.size, dci_alloc.L); t_nrPolar_paramsPtr currentPtr = nr_polar_params(*nrPolar_params, NR_POLAR_DCI_MESSAGE_TYPE, dci_alloc.size); uint8_t *encoderInput = malloc(sizeof(uint8_t) * dci_alloc.size); uint8_t *encoderOutput = malloc(sizeof(uint8_t) * currentPtr->encoderLength); - printf("[TY]DCI PDU: [0]->0x%08x \t [1]->0x%08x \t [2]->0x%08x \t [3]->0x%08x\n", - dci_alloc.dci_pdu[0], dci_alloc.dci_pdu[1], dci_alloc.dci_pdu[2], dci_alloc.dci_pdu[3]); + uint32_t encoded_payload[4]; + nr_bit2byte_uint32_8_t(dci_alloc.dci_pdu,dci_alloc.size,encoderInput); polar_encoder(encoderInput, encoderOutput, currentPtr); - uint32_t encoded_payload[4]; nr_byte2bit_uint8_32_t(encoderOutput, currentPtr->encoderLength, encoded_payload); - printf("[TY]Encoded Payload: [0]->0x%08x \t [1]->0x%08x \t [2]->0x%08x \t [3]->0x%08x\n", + +#ifdef DEBUG_POLAR_PARAMS + printf("DCI PDU: [0]->0x%08x \t [1]->0x%08x \t [2]->0x%08x \t [3]->0x%08x\n", + dci_alloc.dci_pdu[0], dci_alloc.dci_pdu[1], dci_alloc.dci_pdu[2], dci_alloc.dci_pdu[3]); + printf("Encoded Payload: [0]->0x%08x \t [1]->0x%08x \t [2]->0x%08x \t [3]->0x%08x\n", encoded_payload[0], encoded_payload[1], encoded_payload[2], encoded_payload[3]); - return (0); #endif // scrambling From 5b42e83df2d4b6111d20d70202a0f2de7bbf26b7 Mon Sep 17 00:00:00 2001 From: yilmazt Date: Sun, 19 Aug 2018 19:24:14 +0200 Subject: [PATCH 15/15] Putting byte2bit operations within polar coders --- openair1/PHY/CODING/TESTBENCH/polartest.c | 29 +- .../CODING/nrPolar_tools/nr_polar_decoder.c | 269 +++++++++++++++++- .../PHY/CODING/nrPolar_tools/nr_polar_defs.h | 41 ++- .../CODING/nrPolar_tools/nr_polar_encoder.c | 65 ++++- .../CODING/nrPolar_tools/nr_polar_pbch_defs.h | 21 +- openair1/PHY/CODING/nr_polar_init.c | 15 +- openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c | 7 +- 7 files changed, 386 insertions(+), 61 deletions(-) diff --git a/openair1/PHY/CODING/TESTBENCH/polartest.c b/openair1/PHY/CODING/TESTBENCH/polartest.c index 0a5a4f7aba..a78146042b 100644 --- a/openair1/PHY/CODING/TESTBENCH/polartest.c +++ b/openair1/PHY/CODING/TESTBENCH/polartest.c @@ -7,8 +7,6 @@ #include #include "PHY/CODING/nrPolar_tools/nr_polar_defs.h" -#include "PHY/NR_TRANSPORT/nr_dci.h" -#include "PHY/defs_gNB.h" #include "SIMULATION/TOOLS/sim.h" //#define DEBUG_POLAR_PARAMS @@ -22,16 +20,6 @@ int main(int argc, char *argv[]) { reset_meas(&timeEncoder); reset_meas(&timeDecoder); - //gNB scheduler - /*PHY_VARS_gNB *gNB = RC.gNB[0][0]; - NR_DL_FRAME_PARMS *fp = &gNB->frame_parms; - nfapi_nr_config_request_t *cfg = &gNB->gNB_config; - - nfapi_nr_dl_config_request_pdu_t *pdu; - nfapi_nr_dl_config_pdcch_parameters_rel15_t *params_rel15 = &pdu->dci_dl_pdu.pdcch_params_rel15; - params_rel15->rnti_type = NFAPI_NR_RNTI_RA; - params_rel15->dci_format = NFAPI_NR_DL_DCI_FORMAT_1_0;*/ - randominit(0); //Default simulation values (Aim for iterations = 1000000.) int itr, iterations = 1000, arguments, polarMessageType = 0; //0=PBCH, 1=DCI, -1=UCI @@ -42,8 +30,7 @@ int main(int argc, char *argv[]) { int8_t decoderState=0, blockErrorState=0; //0 = Success, -1 = Decoding failed, 1 = Block Error. uint16_t testLength = 0, coderLength = 0, blockErrorCumulative=0, bitErrorCumulative=0; double timeEncoderCumulative = 0, timeDecoderCumulative = 0; - - uint8_t aggregation_level, decoderListSize = 8, pathMetricAppr = 0; //0 --> eq. (8a) and (11b), 1 --> eq. (9) and (12) + uint8_t aggregation_level; while ((arguments = getopt (argc, argv, "s:d:f:m:i:l:a:")) != -1) switch (arguments) @@ -171,16 +158,24 @@ int main(int argc, char *argv[]) { modulatedInput[i]=(-1)/sqrt(2); channelOutput[i] = modulatedInput[i] + (gaussdouble(0.0,1.0) * (1/sqrt(2*SNR_lin))); + printf("%f\n",channelOutput[i]); } + start_meas(&timeDecoder); - decoderState = polar_decoder(channelOutput, + /*decoderState = polar_decoder(channelOutput, estimatedOutput, currentPtr, - decoderListSize, + NR_POLAR_DECODER_LISTSIZE, aPrioriArray, - pathMetricAppr); + NR_POLAR_DECODER_PATH_METRIC_APPROXIMATION);*/ + decoderState = polar_decoder_aPriori(channelOutput, + estimatedOutput, + currentPtr, + NR_POLAR_DECODER_LISTSIZE, + NR_POLAR_DECODER_PATH_METRIC_APPROXIMATION, + aPrioriArray); stop_meas(&timeDecoder); //calculate errors diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c b/openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c index 9232f74e15..438044b447 100644 --- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c +++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c @@ -19,6 +19,17 @@ * contact@openairinterface.org */ +/*!\file PHY/CODING/nrPolar_tools/nr_polar_decoder.c + * \brief + * \author Turker Yilmaz + * \date 2018 + * \version 0.1 + * \company EURECOM + * \email turker.yilmaz@eurecom.fr + * \note + * \warning +*/ + /* * Return values: * 0 --> Success @@ -26,16 +37,255 @@ */ #include "PHY/CODING/nrPolar_tools/nr_polar_defs.h" -#include "PHY/CODING/nrPolar_tools/nr_polar_pbch_defs.h" int8_t polar_decoder( double *input, - uint8_t *output, + uint32_t *out, t_nrPolar_paramsPtr polarParams, uint8_t listSize, - double *aPrioriPayload, uint8_t pathMetricAppr) { + //Assumes no a priori knowledge. + + uint8_t ***bit = nr_alloc_uint8_t_3D_array(polarParams->N, (polarParams->n+1), 2*listSize); + uint8_t **bitUpdated = nr_alloc_uint8_t_2D_array(polarParams->N, (polarParams->n+1)); //0=False, 1=True + uint8_t **llrUpdated = nr_alloc_uint8_t_2D_array(polarParams->N, (polarParams->n+1)); //0=False, 1=True + double ***llr = nr_alloc_double_3D_array(polarParams->N, (polarParams->n+1), 2*listSize); + uint8_t **crcChecksum = nr_alloc_uint8_t_2D_array(polarParams->crcParityBits, 2*listSize); + double *pathMetric = malloc(sizeof(double)*(2*listSize)); + uint8_t *crcState = malloc(sizeof(uint8_t)*(2*listSize)); //0=False, 1=True + + for (int i=0; i<(2*listSize); i++) { + pathMetric[i] = 0; + crcState[i]=1; + } + for (int i=0; iN; i++) { + llrUpdated[i][polarParams->n]=1; + bitUpdated[i][0]=((polarParams->information_bit_pattern[i]+1) % 2); + } + + uint8_t **extended_crc_generator_matrix = malloc(polarParams->K * sizeof(uint8_t *)); //G_P3 + uint8_t **tempECGM = malloc(polarParams->K * sizeof(uint8_t *)); //G_P2 + for (int i = 0; i < polarParams->K; i++){ + extended_crc_generator_matrix[i] = malloc(polarParams->crcParityBits * sizeof(uint8_t)); + tempECGM[i] = malloc(polarParams->crcParityBits * sizeof(uint8_t)); + } + + for (int i=0; ipayloadBits; i++) { + for (int j=0; jcrcParityBits; j++) { + tempECGM[i][j]=polarParams->crc_generator_matrix[i][j]; + } + } + for (int i=polarParams->payloadBits; iK; i++) { + for (int j=0; jcrcParityBits; j++) { + if( (i-polarParams->payloadBits) == j ){ + tempECGM[i][j]=1; + } else { + tempECGM[i][j]=0; + } + } + } + + for (int i=0; iK; i++) { + for (int j=0; jcrcParityBits; j++) { + extended_crc_generator_matrix[i][j]=tempECGM[polarParams->interleaving_pattern[i]][j]; + } + } + + //The index of the last 1-valued bit that appears in each column. + uint16_t last1ind[polarParams->crcParityBits]; + for (int j=0; jcrcParityBits; j++) { + for (int i=0; iK; i++) { + if (extended_crc_generator_matrix[i][j]==1) last1ind[j]=i; + } + } + + double *d_tilde = malloc(sizeof(double) * polarParams->N); + nr_polar_rate_matching(input, d_tilde, polarParams->rate_matching_pattern, polarParams->K, polarParams->N, polarParams->encoderLength); + for (int j = 0; j < polarParams->N; j++) llr[j][polarParams->n][0]=d_tilde[j]; + + + /* + * SCL polar decoder. + */ + + uint32_t nonFrozenBit=0; + uint8_t currentListSize=1; + uint8_t decoderIterationCheck=0; + int16_t checkCrcBits=-1; + uint8_t listIndex[2*listSize], copyIndex; + + for (uint16_t currentBit=0; currentBitN; currentBit++){ + updateLLR(llr, llrUpdated, bit, bitUpdated, currentListSize, currentBit, 0, polarParams->N, (polarParams->n+1), pathMetricAppr); + if (polarParams->information_bit_pattern[currentBit]==0) { //Frozen bit. + updatePathMetric(pathMetric, llr, currentListSize, 0, currentBit, pathMetricAppr); //approximation=0 --> 11b, approximation=1 --> 12 + } else { //Information or CRC bit. + updatePathMetric2(pathMetric, llr, currentListSize, currentBit, pathMetricAppr); + + for (int i = 0; i < currentListSize; i++) { + for (int j = 0; j < polarParams->N; j++) { + for (int k = 0; k < (polarParams->n+1); k++) { + bit[j][k][i+currentListSize]=bit[j][k][i]; + llr[j][k][i+currentListSize]=llr[j][k][i];}}} + for (int i = 0; i < currentListSize; i++) { + bit[currentBit][0][i]=0; + crcState[i+currentListSize]=crcState[i]; + } + for (int i = currentListSize; i < 2*currentListSize; i++) bit[currentBit][0][i]=1; + bitUpdated[currentBit][0]=1; + updateCrcChecksum2(crcChecksum, extended_crc_generator_matrix, currentListSize, nonFrozenBit, polarParams->crcParityBits); + currentListSize*=2; + + //Keep only the best "listSize" number of entries. + if (currentListSize > listSize) { + for (uint8_t i = 0; i < 2*listSize; i++) listIndex[i]=i; + nr_sort_asc_double_1D_array_ind(pathMetric, listIndex, currentListSize); + + //sort listIndex[listSize, ..., 2*listSize-1] in descending order. + uint8_t swaps, tempInd; + for (uint8_t i = 0; i < listSize; i++) { + swaps = 0; + for (uint8_t j = listSize; j < (2*listSize - i) - 1; j++) { + if (listIndex[j+1] > listIndex[j]) { + tempInd = listIndex[j]; + listIndex[j] = listIndex[j + 1]; + listIndex[j + 1] = tempInd; + swaps++; + } + } + if (swaps == 0) + break; + } + + //First, backup the best "listSize" number of entries. + for (int k=(listSize-1); k>0; k--) { + for (int i=0; iN; i++) { + for (int j=0; j<(polarParams->n+1); j++) { + bit[i][j][listIndex[(2*listSize-1)-k]]=bit[i][j][listIndex[k]]; + llr[i][j][listIndex[(2*listSize-1)-k]]=llr[i][j][listIndex[k]]; + } + } + } + for (int k=(listSize-1); k>0; k--) { + for (int i = 0; i < polarParams->crcParityBits; i++) { + crcChecksum[i][listIndex[(2*listSize-1)-k]] = crcChecksum[i][listIndex[k]]; + } + } + for (int k=(listSize-1); k>0; k--) crcState[listIndex[(2*listSize-1)-k]]=crcState[listIndex[k]]; + + //Copy the best "listSize" number of entries to the first indices. + for (int k = 0; k < listSize; k++) { + if (k > listIndex[k]) { + copyIndex = listIndex[(2*listSize-1)-k]; + } else { //Use the backup. + copyIndex = listIndex[k]; + } + for (int i = 0; i < polarParams->N; i++) { + for (int j = 0; j < (polarParams->n + 1); j++) { + bit[i][j][k] = bit[i][j][copyIndex]; + llr[i][j][k] = llr[i][j][copyIndex]; + } + } + } + for (int k = 0; k < listSize; k++) { + if (k > listIndex[k]) { + copyIndex = listIndex[(2*listSize-1)-k]; + } else { //Use the backup. + copyIndex = listIndex[k]; + } + for (int i = 0; i < polarParams->crcParityBits; i++) { + crcChecksum[i][k]=crcChecksum[i][copyIndex]; + } + } + for (int k = 0; k < listSize; k++) { + if (k > listIndex[k]) { + copyIndex = listIndex[(2*listSize-1)-k]; + } else { //Use the backup. + copyIndex = listIndex[k]; + } + crcState[k]=crcState[copyIndex]; + } + currentListSize = listSize; + } + + + for (int i=0; icrcParityBits; i++) { + if (last1ind[i]==nonFrozenBit) { + checkCrcBits=i; + break; + } + } + + if ( checkCrcBits > (-1) ) { + for (uint8_t i = 0; i < currentListSize; i++) { + if (crcChecksum[checkCrcBits][i]==1) { + crcState[i]=0; //0=False, 1=True + } + } + } + + for (uint8_t i = 0; i < currentListSize; i++) decoderIterationCheck+=crcState[i]; + if (decoderIterationCheck==0) { + //perror("[SCL polar decoder] All list entries have failed the CRC checks."); + free(d_tilde); + free(pathMetric); + free(crcState); + nr_free_uint8_t_3D_array(bit, polarParams->N, (polarParams->n+1)); + nr_free_double_3D_array(llr, polarParams->N, (polarParams->n+1)); + nr_free_uint8_t_2D_array(crcChecksum, polarParams->crcParityBits); + return(-1); + } + + nonFrozenBit++; + decoderIterationCheck=0; + checkCrcBits=-1; + } + } + + for (uint8_t i = 0; i < 2*listSize; i++) listIndex[i]=i; + nr_sort_asc_double_1D_array_ind(pathMetric, listIndex, currentListSize); + + for (uint8_t i = 0; i < fmin(listSize, (pow(2,polarParams->crcCorrectionBits)) ); i++) { + if ( crcState[listIndex[i]] == 1 ) { + for (int j = 0; j < polarParams->N; j++) polarParams->nr_polar_u[j]=bit[j][0][listIndex[i]]; + + //Extract the information bits (û to ĉ) + nr_polar_info_bit_extraction(polarParams->nr_polar_u, polarParams->nr_polar_cPrime, polarParams->information_bit_pattern, polarParams->N); + + //Deinterleaving (ĉ to b) + nr_polar_deinterleaver(polarParams->nr_polar_cPrime, polarParams->nr_polar_b, polarParams->interleaving_pattern, polarParams->K); + + //Remove the CRC (â) + for (int j = 0; j < polarParams->payloadBits; j++) polarParams->nr_polar_a[j]=polarParams->nr_polar_b[j]; + + break; + } + } + + free(d_tilde); + free(pathMetric); + free(crcState); + nr_free_uint8_t_3D_array(bit, polarParams->N, (polarParams->n+1)); + nr_free_double_3D_array(llr, polarParams->N, (polarParams->n+1)); + nr_free_uint8_t_2D_array(crcChecksum, polarParams->crcParityBits); + nr_free_uint8_t_2D_array(extended_crc_generator_matrix, polarParams->K); + nr_free_uint8_t_2D_array(tempECGM, polarParams->K); + + /* + * Return bits. + */ + nr_byte2bit_uint8_32_t(polarParams->nr_polar_a, polarParams->payloadBits, out); + return(0); +} + +int8_t polar_decoder_aPriori( + double *input, + uint32_t *out, + t_nrPolar_paramsPtr polarParams, + uint8_t listSize, + uint8_t pathMetricAppr, + double *aPrioriPayload) +{ uint8_t ***bit = nr_alloc_uint8_t_3D_array(polarParams->N, (polarParams->n+1), 2*listSize); uint8_t **bitUpdated = nr_alloc_uint8_t_2D_array(polarParams->N, (polarParams->n+1)); //0=False, 1=True @@ -110,11 +360,13 @@ int8_t polar_decoder( if (polarParams->information_bit_pattern[currentBit]==0) { //Frozen bit. updatePathMetric(pathMetric, llr, currentListSize, 0, currentBit, pathMetricAppr); //approximation=0 --> 11b, approximation=1 --> 12 } else { //Information or CRC bit. - if ( (polarParams->interleaving_pattern[nonFrozenBit] <= polarParams->payloadBits) && (aPrioriPayload[polarParams->interleaving_pattern[nonFrozenBit]] == 0) ) { + if ( (polarParams->interleaving_pattern[nonFrozenBit] <= polarParams->payloadBits) && + (aPrioriPayload[polarParams->interleaving_pattern[nonFrozenBit]] == 0) ) { //Information bit with known value of "0". updatePathMetric(pathMetric, llr, currentListSize, 0, currentBit, pathMetricAppr); bitUpdated[currentBit][0]=1; //0=False, 1=True - } else if ( (polarParams->interleaving_pattern[nonFrozenBit] <= polarParams->payloadBits) && (aPrioriPayload[polarParams->interleaving_pattern[nonFrozenBit]] == 1) ) { + } else if ( (polarParams->interleaving_pattern[nonFrozenBit] <= polarParams->payloadBits) && + (aPrioriPayload[polarParams->interleaving_pattern[nonFrozenBit]] == 1) ) { //Information bit with known value of "1". updatePathMetric(pathMetric, llr, currentListSize, 1, currentBit, pathMetricAppr); for (uint8_t i=0; inr_polar_cPrime, polarParams->nr_polar_b, polarParams->interleaving_pattern, polarParams->K); //Remove the CRC (â) - for (int j = 0; j < polarParams->payloadBits; j++) output[j]=polarParams->nr_polar_b[j]; + for (int j = 0; j < polarParams->payloadBits; j++) polarParams->nr_polar_a[j]=polarParams->nr_polar_b[j]; break; } @@ -271,5 +523,10 @@ int8_t polar_decoder( nr_free_uint8_t_2D_array(crcChecksum, polarParams->crcParityBits); nr_free_uint8_t_2D_array(extended_crc_generator_matrix, polarParams->K); nr_free_uint8_t_2D_array(tempECGM, polarParams->K); + + /* + * Return bits. + */ + nr_byte2bit_uint8_32_t(polarParams->nr_polar_a, polarParams->payloadBits, out); return(0); } diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h b/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h index 464f91d7ce..a76639810f 100644 --- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h +++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h @@ -19,6 +19,17 @@ * contact@openairinterface.org */ +/*!\file PHY/CODING/nrPolar_tools/nr_polar_defs.h + * \brief + * \author Turker Yilmaz + * \date 2018 + * \version 0.1 + * \company EURECOM + * \email turker.yilmaz@eurecom.fr + * \note + * \warning +*/ + #ifndef __NR_POLAR_DEFS__H__ #define __NR_POLAR_DEFS__H__ @@ -32,6 +43,9 @@ #include "PHY/CODING/nrPolar_tools/nr_polar_uci_defs.h" #include "PHY/CODING/nrPolar_tools/nr_polar_pbch_defs.h" +#define NR_POLAR_DECODER_LISTSIZE 8 //uint8_t +#define NR_POLAR_DECODER_PATH_METRIC_APPROXIMATION 0 //uint8_t; 0 --> eq. (8a) and (11b), 1 --> eq. (9) and (12) + static const uint8_t nr_polar_subblock_interleaver_pattern[32] = { 0, 1, 2, 4, 3, 5, 6, 7, 8, 16, 9, 17, 10, 18, 11, 19, 12, 20, 13, 21, 14, 22, 15, 23, 24, 25, 26, 28, 27, 29, 30, 31 }; struct nrPolar_params { @@ -65,20 +79,33 @@ struct nrPolar_params { uint8_t **crc_generator_matrix; //G_P uint8_t **G_N; - //polar_encoder vectors: + //polar_encoder vectors uint8_t *nr_polar_crc; - uint8_t *nr_polar_b; - uint8_t *nr_polar_cPrime; - uint8_t *nr_polar_u; uint8_t *nr_polar_d; + uint8_t *nr_polar_e; + + //Polar Coding vectors + uint8_t *nr_polar_a; + uint8_t *nr_polar_cPrime; + uint8_t *nr_polar_b; + uint8_t *nr_polar_u; } __attribute__ ((__packed__)); typedef struct nrPolar_params t_nrPolar_params; typedef t_nrPolar_params *t_nrPolar_paramsPtr; -void polar_encoder(uint8_t *input, uint8_t *output, t_nrPolar_paramsPtr polarParams); +void polar_encoder(uint32_t *input, uint32_t *output, t_nrPolar_paramsPtr polarParams); -int8_t polar_decoder(double *input, uint8_t *output, t_nrPolar_paramsPtr polarParams, - uint8_t listSize, double *aPrioriPayload, uint8_t pathMetricAppr); +int8_t polar_decoder(double *input, + uint32_t *output, + t_nrPolar_paramsPtr polarParams, + uint8_t listSize, + uint8_t pathMetricAppr); +int8_t polar_decoder_aPriori(double *input, + uint32_t *output, + t_nrPolar_paramsPtr polarParams, + uint8_t listSize, + uint8_t pathMetricAppr, + double *aPrioriPayload); void nr_polar_init(t_nrPolar_paramsPtr *polarParams, int8_t messageType, diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c b/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c index eafb45cab4..81a94864c6 100644 --- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c +++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c @@ -19,40 +19,75 @@ * contact@openairinterface.org */ +/*!\file PHY/CODING/nrPolar_tools/nr_polar_encoder.c + * \brief + * \author Turker Yilmaz + * \date 2018 + * \version 0.1 + * \company EURECOM + * \email turker.yilmaz@eurecom.fr + * \note + * \warning +*/ + #include "PHY/CODING/nrPolar_tools/nr_polar_defs.h" -void polar_encoder( - uint8_t *input, - uint8_t *output, - t_nrPolar_paramsPtr polarParams) +void polar_encoder(uint32_t *in, + uint32_t *out, + t_nrPolar_paramsPtr polarParams) { + nr_bit2byte_uint32_8_t(in, polarParams->payloadBits, polarParams->nr_polar_a); /* * Bytewise operations */ - //Calculate CRC. - nr_matrix_multiplication_uint8_t_1D_uint8_t_2D(input, polarParams->crc_generator_matrix, - polarParams->nr_polar_crc, polarParams->payloadBits, polarParams->crcParityBits); - for (uint8_t i = 0; i < polarParams->crcParityBits; i++) polarParams->nr_polar_crc[i] = (polarParams->nr_polar_crc[i] % 2); + nr_matrix_multiplication_uint8_t_1D_uint8_t_2D(polarParams->nr_polar_a, + polarParams->crc_generator_matrix, + polarParams->nr_polar_crc, + polarParams->payloadBits, + polarParams->crcParityBits); + for (uint8_t i = 0; i < polarParams->crcParityBits; i++) + polarParams->nr_polar_crc[i] = (polarParams->nr_polar_crc[i] % 2); //Attach CRC to the Transport Block. (a to b) - for (uint16_t i = 0; i < polarParams->payloadBits; i++) polarParams->nr_polar_b[i] = input[i]; + for (uint16_t i = 0; i < polarParams->payloadBits; i++) polarParams->nr_polar_b[i] = polarParams->nr_polar_a[i]; for (uint16_t i = polarParams->payloadBits; i < polarParams->K; i++) polarParams->nr_polar_b[i]= polarParams->nr_polar_crc[i-(polarParams->payloadBits)]; //Interleaving (c to c') - nr_polar_interleaver(polarParams->nr_polar_b, polarParams->nr_polar_cPrime, polarParams->interleaving_pattern, polarParams->K); + nr_polar_interleaver(polarParams->nr_polar_b, + polarParams->nr_polar_cPrime, + polarParams->interleaving_pattern, + polarParams->K); //Bit insertion (c' to u) - nr_polar_bit_insertion(polarParams->nr_polar_cPrime, polarParams->nr_polar_u, polarParams->N, polarParams->K, - polarParams->Q_I_N, polarParams->Q_PC_N, polarParams->n_pc); + nr_polar_bit_insertion(polarParams->nr_polar_cPrime, + polarParams->nr_polar_u, + polarParams->N, + polarParams->K, + polarParams->Q_I_N, + polarParams->Q_PC_N, + polarParams->n_pc); //Encoding (u to d) - nr_matrix_multiplication_uint8_t_1D_uint8_t_2D(polarParams->nr_polar_u, polarParams->G_N, polarParams->nr_polar_d, polarParams->N, polarParams->N); - for (uint16_t i = 0; i < polarParams->N; i++) polarParams->nr_polar_d[i] = (polarParams->nr_polar_d[i] % 2); + nr_matrix_multiplication_uint8_t_1D_uint8_t_2D(polarParams->nr_polar_u, + polarParams->G_N, + polarParams->nr_polar_d, + polarParams->N, + polarParams->N); + for (uint16_t i = 0; i < polarParams->N; i++) + polarParams->nr_polar_d[i] = (polarParams->nr_polar_d[i] % 2); //Rate matching //Sub-block interleaving (d to y) and Bit selection (y to e) - nr_polar_rate_matcher(polarParams->nr_polar_d, output, polarParams->rate_matching_pattern, polarParams->encoderLength); + nr_polar_rate_matcher(polarParams->nr_polar_d, + polarParams->nr_polar_e, + polarParams->rate_matching_pattern, + polarParams->encoderLength); + + /* + * Return bits. + */ + nr_byte2bit_uint8_32_t(polarParams->nr_polar_e, polarParams->encoderLength, out); } diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_pbch_defs.h b/openair1/PHY/CODING/nrPolar_tools/nr_polar_pbch_defs.h index aa32b03e35..e910b881cb 100644 --- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_pbch_defs.h +++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_pbch_defs.h @@ -19,15 +19,15 @@ * contact@openairinterface.org */ -/*! \file PHY/CODING/nrPolar_tools/nr_polar_dci_defs.h -* \brief Defines the constant variables for polar coding of the PBCH from 38-212, V15.1.1 2018-04. -* \author -* \date 2018 -* \version 0.1 -* \company Eurecom -* \email: -* \note -* \warning +/*!\file PHY/CODING/nrPolar_tools/nr_polar_defs.h + * \brief Defines the constant variables for polar coding of the PBCH from 38-212, V15.1.1 2018-04. + * \author Turker Yilmaz + * \date 2018 + * \version 0.1 + * \company EURECOM + * \email turker.yilmaz@eurecom.fr + * \note + * \warning */ #ifndef __NR_POLAR_PBCH_DEFS__H__ @@ -52,9 +52,6 @@ #define NR_POLAR_PBCH_I_BIL 0 //uint8_t #define NR_POLAR_PBCH_E 864 //uint16_t -//#define NR_POLAR_PBCH_L 5 //uint8_t -#define NR_POLAR_PBCH_PATH_METRIC_APPROXIMATION 0 //uint8_t; 0 --> eq. (8a) and (11b), 1 --> eq. (9) and (12) - /* * TEST CODE */ diff --git a/openair1/PHY/CODING/nr_polar_init.c b/openair1/PHY/CODING/nr_polar_init.c index a4a86389cc..425e53e8b3 100644 --- a/openair1/PHY/CODING/nr_polar_init.c +++ b/openair1/PHY/CODING/nr_polar_init.c @@ -19,6 +19,17 @@ * contact@openairinterface.org */ +/*!\file PHY/CODING/nr_polar_init.h + * \brief + * \author Turker Yilmaz + * \date 2018 + * \version 0.1 + * \company EURECOM + * \email turker.yilmaz@eurecom.fr + * \note + * \warning +*/ + #include "nrPolar_tools/nr_polar_defs.h" #include "PHY/CODING/nrPolar_tools/nr_polar_dci_defs.h" #include "PHY/CODING/nrPolar_tools/nr_polar_uci_defs.h" @@ -83,13 +94,15 @@ void nr_polar_init(t_nrPolar_paramsPtr *polarParams, //polar_encoder vectors: newPolarInitNode->nr_polar_crc = malloc(sizeof(uint8_t) * newPolarInitNode->crcParityBits); - newPolarInitNode->nr_polar_cPrime = malloc(sizeof(uint8_t) * newPolarInitNode->K); newPolarInitNode->nr_polar_d = malloc(sizeof(uint8_t) * newPolarInitNode->N); + newPolarInitNode->nr_polar_e = malloc(sizeof(uint8_t) * newPolarInitNode->encoderLength); //Polar Coding vectors newPolarInitNode->nr_polar_u = malloc(sizeof(uint8_t) * newPolarInitNode->N); //Decoder: nr_polar_uHat newPolarInitNode->nr_polar_cPrime = malloc(sizeof(uint8_t) * newPolarInitNode->K); //Decoder: nr_polar_cHat newPolarInitNode->nr_polar_b = malloc(sizeof(uint8_t) * newPolarInitNode->K); //Decoder: nr_polar_bHat + newPolarInitNode->nr_polar_a = malloc(sizeof(uint8_t) * newPolarInitNode->payloadBits); //Decoder: nr_polar_aHat + newPolarInitNode->Q_0_Nminus1 = nr_polar_sequence_pattern(newPolarInitNode->n); diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c index 3c062dbfa7..187aca9705 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c @@ -501,13 +501,13 @@ uint16_t nr_rx_pbch( PHY_VARS_NR_UE *ue, unsigned short idx_demod =0; int8_t decoderState=0; uint8_t decoderListSize = 8, pathMetricAppr = 0; - double aPrioriArray[frame_parms->pbch_polar_params.payloadBits]; // assume no a priori knowledge available about the payload. memset(&pbch_a[0], 0, sizeof(uint8_t) * NR_POLAR_PBCH_PAYLOAD_BITS); //printf("nr_pbch_ue nid_cell %d\n",frame_parms->Nid_cell); - for (int i=0; ipbch_polar_params.payloadBits; i++) aPrioriArray[i] = NAN; + /*double aPrioriArray[frame_parms->pbch_polar_params.payloadBits]; // assume no a priori knowledge available about the payload. + for (int i=0; ipbch_polar_params.payloadBits; i++) aPrioriArray[i] = NAN;*/ int subframe_rx = proc->subframe_rx; @@ -605,7 +605,8 @@ uint16_t nr_rx_pbch( PHY_VARS_NR_UE *ue, //polar decoding de-rate matching - decoderState = polar_decoder(demod_pbch_e, pbch_a, &frame_parms->pbch_polar_params, decoderListSize, aPrioriArray, pathMetricAppr); + decoderState = polar_decoder(demod_pbch_e, pbch_a, &frame_parms->pbch_polar_params, decoderListSize, pathMetricAppr); + //decoderState = polar_decoder_aPriori(demod_pbch_e, pbch_a, &frame_parms->pbch_polar_params, decoderListSize, aPrioriArray, pathMetricAppr); //for (i=0; i