From 1fd43c289ac479b2db03a9ede6392934b28688db Mon Sep 17 00:00:00 2001 From: Guy De Souza Date: Thu, 12 Jul 2018 15:48:18 +0200 Subject: [PATCH] Interleaving optimization --- openair1/PHY/NR_TRANSPORT/nr_pbch.c | 15 ++++++++++----- openair1/SCHED_NR/nr_ru_procedures.c | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c index fc3e10c3c4..db273086e3 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c @@ -143,7 +143,7 @@ void nr_pbch_scrambling(NR_gNB_PBCH *pbch, uint8_t *pbch_e = pbch->pbch_e; uint32_t *pbch_a_prime = (uint32_t*)pbch->pbch_a_prime; uint32_t *pbch_a_interleaved = (uint32_t*)pbch->pbch_a_interleaved; - uint32_t unscrambling_mask = 0x87002D; + uint32_t unscrambling_mask = 0x100006D; reset = 1; // x1 is set in lte_gold_generic @@ -177,7 +177,8 @@ void nr_pbch_scrambling(NR_gNB_PBCH *pbch, } } -uint8_t nr_pbch_payload_interleaving_pattern[32] = {16, 23, 18, 17, 8, 30, 10, 6, 24, 7, 0, 5, 3, 2, 1, 4, +/* This portion of code is temporarily kept until the optimized version is validated + * uint8_t nr_pbch_payload_interleaving_pattern[32] = {16, 23, 18, 17, 8, 30, 10, 6, 24, 7, 0, 5, 3, 2, 1, 4, 9, 11, 12, 13, 14, 15, 19, 20, 21, 22, 25, 26, 27, 28, 29, 31}; uint8_t nr_pbch_payload_interleaver(uint8_t i) { @@ -191,7 +192,11 @@ uint8_t nr_pbch_payload_interleaver(uint8_t i) { return nr_pbch_payload_interleaving_pattern[j_ssb + (i-29)]; else return nr_pbch_payload_interleaving_pattern[j_other + i]; -} +}*/ + +/*This pattern takes into account the adjustments for the field specific counters j_sfn, j_hrf, j_ssb and j_other*/ +uint8_t nr_pbch_payload_interleaving_pattern[32] = {1,4,9,11,12,13,14,15,19,20,21,22,25,26,27,28, + 29,31,16,23,18,17,8,30,10,6,24,7,0,5,3,2}; int nr_generate_pbch(NR_gNB_PBCH *pbch, uint8_t *pbch_pdu, @@ -251,7 +256,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch, in |= (uint32_t)(pbch->pbch_a[i]<<((3-i)<<3)); for (int i=0; i<32; i++) { - out |= ((in>>i)&1)<<(nr_pbch_payload_interleaver(i)); + out |= ((in>>i)&1)<<(nr_pbch_payload_interleaving_pattern[i]); #ifdef DEBUG_PBCH_ENCODING printf("i %d in 0x%08x out 0x%08x ilv %d (in>>i)&1) 0x%08x\n", i, in, out, nr_pbch_payload_interleaver(i), (in>>i)&1); #endif @@ -289,7 +294,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch, /// Scrambling M = NR_POLAR_PBCH_E; nushift = (Lmax==4)? ssb_index&3 : ssb_index&7; - nr_pbch_scrambling(pbch, (uint32_t)config->sch_config.physical_cell_id.value, (Lmax), M, NR_POLAR_PBCH_E, 0); + nr_pbch_scrambling(pbch, (uint32_t)config->sch_config.physical_cell_id.value, nushift, M, NR_POLAR_PBCH_E, 0); #ifdef DEBUG_PBCH_ENCODING printf("Scrambling:\n"); for (int i=0; i>3; i++) diff --git a/openair1/SCHED_NR/nr_ru_procedures.c b/openair1/SCHED_NR/nr_ru_procedures.c index fe0fac0558..52b651fc25 100644 --- a/openair1/SCHED_NR/nr_ru_procedures.c +++ b/openair1/SCHED_NR/nr_ru_procedures.c @@ -238,7 +238,7 @@ void nr_feptx_ofdm(RU_t *ru) { } // if S-subframe generate first slot only - if (nr_subframe_select(fp,subframe) == SF_S) + if (nr_subframe_select(cfg,subframe) == SF_S) len = fp->samples_per_subframe / fp->slots_per_subframe; else len = fp->samples_per_subframe;