From b6de2aeaaf6570faf840156685c793c0273ac968 Mon Sep 17 00:00:00 2001 From: Guy De Souza Date: Wed, 7 Nov 2018 16:20:38 +0100 Subject: [PATCH 01/12] MIB interleaving correction --- openair1/PHY/INIT/nr_init.c | 1 + openair1/PHY/NR_TRANSPORT/nr_pbch.c | 39 ++++++++++++----------- openair1/PHY/NR_TRANSPORT/nr_transport.h | 1 + openair1/PHY/defs_gNB.h | 3 ++ openair1/SCHED_NR/phy_procedures_nr_gNB.c | 10 +++++- 5 files changed, 34 insertions(+), 20 deletions(-) diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c index bce14e4f56..50e9454f1c 100644 --- a/openair1/PHY/INIT/nr_init.c +++ b/openair1/PHY/INIT/nr_init.c @@ -143,6 +143,7 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB, } nr_init_pdcch_dmrs(gNB, cfg->sch_config.physical_cell_id.value); + nr_init_pbch_interleaver(gNB->nr_pbch_interleaver); /* lte_gold(fp,gNB->lte_gold_table,fp->Nid_cell); diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c index 19765aa477..01f4e44535 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c @@ -39,9 +39,11 @@ //#define DEBUG_PBCH_ENCODING //#define DEBUG_PBCH_DMRS -//extern short nr_mod_table[NR_MOD_TABLE_SIZE_SHORT]; #include "PHY/NR_REFSIG/nr_mod_table.h" +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}; + int nr_generate_pbch_dmrs(uint32_t *gold_pbch_dmrs, int32_t **txdataF, int16_t amp, @@ -163,7 +165,7 @@ void nr_pbch_scrambling(NR_gNB_PBCH *pbch, x2 = Nid; // The Gold sequence is shifted by nushift* M, so we skip (nushift*M /32) double words for (int i=0; i<(uint16_t)ceil(((float)nushift*M)/32); i++) { -s = lte_gold_generic(&x1, &x2, reset); + s = lte_gold_generic(&x1, &x2, reset); reset = 0; } // Scrambling is now done with offset (nushift*M)%32 @@ -188,21 +190,19 @@ s = lte_gold_generic(&x1, &x2, reset); } } -// 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_init_interleaver(uint8_t *interleaver) { + uint8_t j_sfn=0, j_hrf=10, j_ssb=11, j_other=14; + memset((void*)interleaver,0, NR_POLAR_PBCH_PAYLOAD_BITS); -uint8_t nr_pbch_payload_interleaver(uint8_t i) { - uint8_t j_sfn=6, j_hrf=10, j_ssb=11, j_other=14; - - if (24<=i && i<=27) //Sfn bits - return nr_pbch_payload_interleaving_pattern[j_sfn + i -24]; - else if (i==28) // Hrf bit - return nr_pbch_payload_interleaving_pattern[j_hrf]; - else if (29<=i) // Ssb bits - return nr_pbch_payload_interleaving_pattern[j_ssb + (i-29)]; - else - return nr_pbch_payload_interleaving_pattern[(j_other + i)&0x1f]; + for (int i=0; i28) // Ssb bits + *(interleaver+j_ssb) = *(nr_pbch_payload_interleaving_pattern+i); + else + *(interleaver+j_other) = *(nr_pbch_payload_interleaving_pattern+i); } /*This pattern takes into account the adjustments for the field specific counters j_sfn, j_hrf, j_ssb and j_other*/ @@ -212,6 +212,7 @@ uint8_t nr_pbch_payload_interleaver(uint8_t i) { int nr_generate_pbch(NR_gNB_PBCH *pbch, t_nrPolar_paramsPtr polar_params, uint8_t *pbch_pdu, + uint8_t *interleaver, int32_t **txdataF, int16_t amp, uint8_t ssb_start_symbol, @@ -269,10 +270,10 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch, for (int i=0; i>3; i++) in |= (uint32_t)(pbch->pbch_a[i]<<((3-i)<<3)); - for (int i=0; i<32; i++) { - pbch->pbch_a_interleaved |= ((in>>i)&1)<<(nr_pbch_payload_interleaver(i));//nr_pbch_payload_interleaving_pattern[i] + for (int i=0; ipbch_a_interleaved |= ((in>>i)&1)<<(*(interleaver+i)); #ifdef DEBUG_PBCH_ENCODING - printf("i %d in 0x%08x out 0x%08x ilv %d (in>>i)&1) %d\n", i, in, pbch->pbch_a_interleaved, nr_pbch_payload_interleaver(i), (in>>i)&1); + printf("i %d in 0x%08x out 0x%08x ilv %d (in>>i)&1) %d\n", i, in, pbch->pbch_a_interleaved, *(interleaver+i), (in>>i)&1); #endif } diff --git a/openair1/PHY/NR_TRANSPORT/nr_transport.h b/openair1/PHY/NR_TRANSPORT/nr_transport.h index a051d776bd..d3c87aecea 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_transport.h +++ b/openair1/PHY/NR_TRANSPORT/nr_transport.h @@ -86,6 +86,7 @@ void nr_pbch_scrambling(NR_gNB_PBCH *pbch, int nr_generate_pbch(NR_gNB_PBCH *pbch, t_nrPolar_paramsPtr polar_params, uint8_t *pbch_pdu, + uint8_t *interleaver, int32_t **txdataF, int16_t amp, uint8_t ssb_start_symbol, diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index 18c2ba5cce..9c1cbaee25 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -315,6 +315,9 @@ typedef struct PHY_VARS_gNB_s { /// PBCH DMRS sequence uint32_t nr_gold_pbch_dmrs[2][64][NR_PBCH_DMRS_LENGTH_DWORD]; + /// PBCH interleaver + uint8_t nr_pbch_interleaver[NR_POLAR_PBCH_PAYLOAD_BITS]; + /// PDCCH DMRS sequence uint32_t ***nr_gold_pdcch_dmrs; diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index 36c441db26..228b364c27 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -146,7 +146,15 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame, int subframe) { gNB->pbch_configured = 0; } nr_generate_pbch_dmrs(gNB->nr_gold_pbch_dmrs[n_hf][ssb_index],txdataF, AMP_OVER_2, ssb_start_symbol, cfg, fp); - nr_generate_pbch(&gNB->pbch, gNB->nrPolar_params, pbch_pdu, txdataF, AMP_OVER_2, ssb_start_symbol, n_hf, Lmax, ssb_index, frame, cfg, fp); + nr_generate_pbch(&gNB->pbch, + gNB->nrPolar_params, + pbch_pdu, + gNB->nr_pbch_interleaver, + txdataF, + AMP_OVER_2, + ssb_start_symbol, + n_hf,Lmax,ssb_index, + frame, cfg, fp); } } From d5893eeae8d5654461a3bdb9c0da4f41b3d3e554 Mon Sep 17 00:00:00 2001 From: Guy De Souza Date: Wed, 7 Nov 2018 17:02:01 +0100 Subject: [PATCH 02/12] Interleaving init fix --- openair1/PHY/NR_TRANSPORT/nr_pbch.c | 10 +++++----- openair1/PHY/NR_TRANSPORT/nr_transport.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c index 01f4e44535..aa24cb099a 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c @@ -190,7 +190,7 @@ void nr_pbch_scrambling(NR_gNB_PBCH *pbch, } } -uint8_t nr_pbch_init_interleaver(uint8_t *interleaver) { +uint8_t nr_init_pbch_interleaver(uint8_t *interleaver) { uint8_t j_sfn=0, j_hrf=10, j_ssb=11, j_other=14; memset((void*)interleaver,0, NR_POLAR_PBCH_PAYLOAD_BITS); @@ -272,15 +272,15 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch, for (int i=0; ipbch_a_interleaved |= ((in>>i)&1)<<(*(interleaver+i)); -#ifdef DEBUG_PBCH_ENCODING +//#ifdef DEBUG_PBCH_ENCODING printf("i %d in 0x%08x out 0x%08x ilv %d (in>>i)&1) %d\n", i, in, pbch->pbch_a_interleaved, *(interleaver+i), (in>>i)&1); -#endif +//#endif } -#ifdef DEBUG_PBCH_ENCODING +//#ifdef DEBUG_PBCH_ENCODING printf("Interleaving:\n"); printf("pbch_a_interleaved: 0x%08x\n", pbch->pbch_a_interleaved); -#endif +//#endif // Scrambling M = (Lmax == 64)? (NR_POLAR_PBCH_PAYLOAD_BITS - 6) : (NR_POLAR_PBCH_PAYLOAD_BITS - 3); diff --git a/openair1/PHY/NR_TRANSPORT/nr_transport.h b/openair1/PHY/NR_TRANSPORT/nr_transport.h index d3c87aecea..57a4816fec 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_transport.h +++ b/openair1/PHY/NR_TRANSPORT/nr_transport.h @@ -103,6 +103,6 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch, @param bit index i of the input payload @returns the bit index of the output */ -uint8_t nr_pbch_payload_interleaver(uint8_t i); +uint8_t nr_init_pbch_interleaver(uint8_t *interleaver); #endif /*__NR_TRANSPORT__H__*/ From 096917794145ac7c15449dae95c80853794aceaf Mon Sep 17 00:00:00 2001 From: Guy De Souza Date: Thu, 8 Nov 2018 11:23:42 +0100 Subject: [PATCH 03/12] ilv j indexes increment --- openair1/PHY/NR_TRANSPORT/nr_pbch.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c index aa24cb099a..4d6f31bc24 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c @@ -200,9 +200,9 @@ uint8_t nr_init_pbch_interleaver(uint8_t *interleaver) { else if (i==28) // Hrf bit *(interleaver+j_hrf) = *(nr_pbch_payload_interleaving_pattern+i); else if (i>28) // Ssb bits - *(interleaver+j_ssb) = *(nr_pbch_payload_interleaving_pattern+i); + *(interleaver+j_ssb++) = *(nr_pbch_payload_interleaving_pattern+i); else - *(interleaver+j_other) = *(nr_pbch_payload_interleaving_pattern+i); + *(interleaver+j_other++) = *(nr_pbch_payload_interleaving_pattern+i); } /*This pattern takes into account the adjustments for the field specific counters j_sfn, j_hrf, j_ssb and j_other*/ From 603adf6a57d3b65fa16bd508a9f23f530988f0c2 Mon Sep 17 00:00:00 2001 From: Guy De Souza Date: Thu, 8 Nov 2018 14:13:35 +0100 Subject: [PATCH 04/12] ilv init update --- openair1/PHY/NR_TRANSPORT/nr_pbch.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c index 4d6f31bc24..6a857b699e 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c @@ -194,15 +194,17 @@ uint8_t nr_init_pbch_interleaver(uint8_t *interleaver) { uint8_t j_sfn=0, j_hrf=10, j_ssb=11, j_other=14; memset((void*)interleaver,0, NR_POLAR_PBCH_PAYLOAD_BITS); - for (int i=0; i28) // Ssb bits - *(interleaver+j_ssb++) = *(nr_pbch_payload_interleaving_pattern+i); - else - *(interleaver+j_other++) = *(nr_pbch_payload_interleaving_pattern+i); + *(interleaver+i) = *(nr_pbch_payload_interleaving_pattern+j_hrf); + else // Ssb bits + *(interleaver+i) = *(nr_pbch_payload_interleaving_pattern+j_ssb++); } /*This pattern takes into account the adjustments for the field specific counters j_sfn, j_hrf, j_ssb and j_other*/ From 66ea7db1b4742892c2f4d040212e65cec88da235 Mon Sep 17 00:00:00 2001 From: Guy De Souza Date: Thu, 8 Nov 2018 14:14:53 +0100 Subject: [PATCH 05/12] Debug clearing --- openair1/PHY/NR_TRANSPORT/nr_pbch.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c index 6a857b699e..5890ccd09a 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c @@ -274,15 +274,15 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch, for (int i=0; ipbch_a_interleaved |= ((in>>i)&1)<<(*(interleaver+i)); -//#ifdef DEBUG_PBCH_ENCODING +#ifdef DEBUG_PBCH_ENCODING printf("i %d in 0x%08x out 0x%08x ilv %d (in>>i)&1) %d\n", i, in, pbch->pbch_a_interleaved, *(interleaver+i), (in>>i)&1); -//#endif +#endif } -//#ifdef DEBUG_PBCH_ENCODING +#ifdef DEBUG_PBCH_ENCODING printf("Interleaving:\n"); printf("pbch_a_interleaved: 0x%08x\n", pbch->pbch_a_interleaved); -//#endif +#endif // Scrambling M = (Lmax == 64)? (NR_POLAR_PBCH_PAYLOAD_BITS - 6) : (NR_POLAR_PBCH_PAYLOAD_BITS - 3); From 0f897a8c26b09aaec1c074128289f27d99b63d4d Mon Sep 17 00:00:00 2001 From: Guy De Souza Date: Thu, 8 Nov 2018 16:44:51 +0100 Subject: [PATCH 06/12] UE interleaving pattern --- openair1/PHY/NR_TRANSPORT/nr_pbch.c | 4 ++-- openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c index 5890ccd09a..be3f9977ef 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c @@ -274,9 +274,9 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch, for (int i=0; ipbch_a_interleaved |= ((in>>i)&1)<<(*(interleaver+i)); -#ifdef DEBUG_PBCH_ENCODING +//#ifdef DEBUG_PBCH_ENCODING printf("i %d in 0x%08x out 0x%08x ilv %d (in>>i)&1) %d\n", i, in, pbch->pbch_a_interleaved, *(interleaver+i), (in>>i)&1); -#endif +//#endif } #ifdef DEBUG_PBCH_ENCODING diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c index d30b5badf3..a50aae4585 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c @@ -507,7 +507,7 @@ unsigned char sign(int8_t x) { } */ -uint8_t pbch_deinterleaving_pattern[32] = {28,0,31,30,1,29,25,27,22,2,24,3,4,5,6,7,18,21,20,8,9,10,11,19,26,12,13,14,15,16,23,17}; +uint8_t pbch_deinterleaving_pattern[32] = {28,6,31,30,7,29,25,27,4,8,24,9,10,11,12,13,0,3,2,14,15,16,17,1,26,18,19,20,21,22,5,23}; int nr_rx_pbch( PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, From 42ce8735eb7f8e12a0c9c004591e26b9d9eace1e Mon Sep 17 00:00:00 2001 From: Guy De Souza Date: Fri, 9 Nov 2018 14:51:00 +0100 Subject: [PATCH 07/12] cleanup --- openair1/PHY/NR_TRANSPORT/nr_pbch.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c index be3f9977ef..d6e7d36bf2 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c @@ -207,10 +207,6 @@ uint8_t nr_init_pbch_interleaver(uint8_t *interleaver) { *(interleaver+i) = *(nr_pbch_payload_interleaving_pattern+j_ssb++); } -/*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, t_nrPolar_paramsPtr polar_params, uint8_t *pbch_pdu, @@ -274,9 +270,9 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch, for (int i=0; ipbch_a_interleaved |= ((in>>i)&1)<<(*(interleaver+i)); -//#ifdef DEBUG_PBCH_ENCODING +#ifdef DEBUG_PBCH_ENCODING printf("i %d in 0x%08x out 0x%08x ilv %d (in>>i)&1) %d\n", i, in, pbch->pbch_a_interleaved, *(interleaver+i), (in>>i)&1); -//#endif +#endif } #ifdef DEBUG_PBCH_ENCODING From 6143fc3023093de1d75f24f0c75fc8fea3d096a8 Mon Sep 17 00:00:00 2001 From: Guy De Souza Date: Mon, 19 Nov 2018 16:14:09 +0100 Subject: [PATCH 08/12] PBCH payload restructuring gNB --- openair1/PHY/NR_TRANSPORT/nr_pbch.c | 84 +++++++++---------- openair1/PHY/NR_TRANSPORT/nr_transport.h | 3 +- openair1/PHY/TOOLS/tools_defs.h | 3 + openair1/PHY/defs_gNB.h | 2 +- .../CONF/gnb.band78.tm1.106PRB.usrpn300.conf | 10 +++ 5 files changed, 56 insertions(+), 46 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c index d6e7d36bf2..e22655ee59 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c @@ -154,25 +154,26 @@ void nr_pbch_scrambling(NR_gNB_PBCH *pbch, uint8_t nushift, uint16_t M, uint16_t length, - uint8_t encoded) + uint8_t encoded, + uint32_t unscrambling_mask) { uint8_t reset, offset; uint32_t x1, x2, s=0; uint32_t *pbch_e = pbch->pbch_e; - uint32_t unscrambling_mask = 0x100006D; + //uint32_t unscrambling_mask = 0x100006D; reset = 1; // x1 is set in lte_gold_generic x2 = Nid; // The Gold sequence is shifted by nushift* M, so we skip (nushift*M /32) double words - for (int i=0; i<(uint16_t)ceil(((float)nushift*M)/32); i++) { + for (int i=0; ipbch_a_prime ^= ((unscrambling_mask>>i)&1)? ((pbch->pbch_a_interleaved>>i)&1)<pbch_a_interleaved>>i)&1) ^ ((s>>((i+offset)&0x1f))&1))<pbch_a; - memset((void*) xbyte, 0, 1); - //uint8_t pbch_a_b[32]; + uint32_t unscrambling_mask; - // LOG_D(PHY, "PBCH generation started\n"); + LOG_I(PHY, "PBCH generation started\n"); + + ///Payload generation memset((void*)pbch, 0, sizeof(NR_gNB_PBCH)); - ///Payload generation - // Fix byte endian - if (!(sfn&7)) - for (int i=0; i<(NR_PBCH_PDU_BITS>>3); i++) - pbch->pbch_a[(NR_POLAR_PBCH_PAYLOAD_BITS>>3)-i-1] = pbch_pdu[i]; -#ifdef DEBUG_PBCH_ENCODING - printf("Byte endian fix:\n"); - for (int i=0; i<4; i++) - printf("pbch_a[%d]: 0x%02x\n", i, pbch->pbch_a[i]); -#endif + pbch->pbch_a=0; + for (int i=0; ipbch_a |= ((pbch_pdu[2-(i>>3)]>>(7-(i&7)))&1)<pbch_a); +//#endif // Extra byte generation for (int i=0; i<4; i++) - (*xbyte) ^= ((sfn>>i)&1)<pbch_a |= ((sfn>>(3-i))&1)<<(24+i); // resp. 4th, 3rd, 2nd ans 1st lsb of sfn - (*xbyte) ^= n_hf<<4; // half frame index bit + pbch->pbch_a |= n_hf<<28; // half frame index bit if (Lmax == 64) for (int i=0; i<3; i++) - (*xbyte) ^= ((ssb_index>>(3+i))&1)<<(5+i); // resp. 4th, 5th and 6th bits of ssb_index + pbch->pbch_a |= ((ssb_index>>(5-i))&1)<<(29+i); // resp. 6th, 5th and 4th bits of ssb_index else - (*xbyte) ^= ((config->sch_config.ssb_subcarrier_offset.value>>5)&1)<<5; //MSB of k_SSB -#ifdef DEBUG_PBCH_ENCODING - printf("Extra byte:\n"); - for (int i=0; i<4; i++) - printf("pbch_a[%d]: 0x%02x\n", i, pbch->pbch_a[i]); -#endif + pbch->pbch_a |= ((config->sch_config.ssb_subcarrier_offset.value>>4)&1)<<29; //MSB of k_SSB (bit index 4) + + LOG_I(PHY,"After extra byte: pbch_a = 0x%08x\n",pbch->pbch_a); // Payload interleaving - uint32_t in=0; - for (int i=0; i>3; i++) - in |= (uint32_t)(pbch->pbch_a[i]<<((3-i)<<3)); - + for (int i=0; ipbch_a_interleaved |= ((in>>i)&1)<<(*(interleaver+i)); -#ifdef DEBUG_PBCH_ENCODING - printf("i %d in 0x%08x out 0x%08x ilv %d (in>>i)&1) %d\n", i, in, pbch->pbch_a_interleaved, *(interleaver+i), (in>>i)&1); -#endif + pbch->pbch_a_interleaved |= ((pbch->pbch_a>>i)&1)<<(*(interleaver+i)); +//#ifdef DEBUG_PBCH_ENCODING + printf("i %d out 0x%08x ilv %d (in>>i)&1) %d\n", i, pbch->pbch_a_interleaved, *(interleaver+i), (pbch->pbch_a>>i)&1); +//#endif } #ifdef DEBUG_PBCH_ENCODING @@ -281,10 +276,11 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch, #endif // Scrambling + unscrambling_mask = (Lmax ==64)? 0x100006D:0x1000021; M = (Lmax == 64)? (NR_POLAR_PBCH_PAYLOAD_BITS - 6) : (NR_POLAR_PBCH_PAYLOAD_BITS - 3); nushift = (((sfn>>2)&1)<<1) ^ ((sfn>>1)&1); pbch->pbch_a_prime = 0; - nr_pbch_scrambling(pbch, (uint32_t)config->sch_config.physical_cell_id.value, nushift, M, NR_POLAR_PBCH_PAYLOAD_BITS, 0); + nr_pbch_scrambling(pbch, (uint32_t)config->sch_config.physical_cell_id.value, nushift, M, NR_POLAR_PBCH_PAYLOAD_BITS, 0, unscrambling_mask); #ifdef DEBUG_PBCH_ENCODING printf("Payload scrambling: nushift %d M %d sfn3 %d sfn2 %d\n", nushift, M, (sfn>>2)&1, (sfn>>1)&1); printf("pbch_a_prime: 0x%08x\n", pbch->pbch_a_prime); @@ -302,7 +298,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, nushift, M, NR_POLAR_PBCH_E, 1); + nr_pbch_scrambling(pbch, (uint32_t)config->sch_config.physical_cell_id.value, nushift, M, NR_POLAR_PBCH_E, 1, 0); #ifdef DEBUG_PBCH_ENCODING printf("Scrambling:\n"); for (int i=0; i #include "PHY/sse_intrin.h" +#define CEILIDIV(a,b) ((a+b-1)/b) +#define ROUNDIDIV(a,b) (((a<<1)+b)/(b<<1)) + struct complex { double x; diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index 29c027f437..c275bc9c2a 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -41,7 +41,7 @@ #define MAX_NUM_RU_PER_gNB MAX_NUM_RU_PER_eNB typedef struct { - uint8_t pbch_a[NR_POLAR_PBCH_PAYLOAD_BITS>>3]; + uint32_t pbch_a; uint32_t pbch_a_interleaved; uint32_t pbch_a_prime; uint32_t pbch_e[NR_POLAR_PBCH_E_DWORD]; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf index 258d6c5f03..9f8cc8bf27 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf @@ -259,6 +259,16 @@ RUs = ( } ); +THREAD_STRUCT = ( + { + #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" + parallel_config = "PARALLEL_SINGLE_THREAD"; + #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" + worker_config = "WORKER_ENABLE"; + } +); + + NETWORK_CONTROLLER : { FLEXRAN_ENABLED = "no"; From 858502c16b9340092a2baef1627400ecdda5022a Mon Sep 17 00:00:00 2001 From: Guy De Souza Date: Tue, 27 Nov 2018 10:23:43 +0100 Subject: [PATCH 09/12] MIB decoding fixes UE --- openair1/PHY/NR_TRANSPORT/nr_pbch.c | 16 ++++----- openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c | 36 +++++++++++--------- openair1/SCHED_NR_UE/fapi_nr_ue_l1.c | 2 +- openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 15 ++++---- 4 files changed, 37 insertions(+), 32 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c index e22655ee59..474bb0d505 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c @@ -160,7 +160,7 @@ void nr_pbch_scrambling(NR_gNB_PBCH *pbch, uint8_t reset, offset; uint32_t x1, x2, s=0; uint32_t *pbch_e = pbch->pbch_e; - //uint32_t unscrambling_mask = 0x100006D; + reset = 1; // x1 is set in lte_gold_generic x2 = Nid; @@ -171,9 +171,9 @@ void nr_pbch_scrambling(NR_gNB_PBCH *pbch, } // Scrambling is now done with offset (nushift*M)%32 offset = (nushift*M)&0x1f; -//#ifdef DEBUG_PBCH_ENCODING +#ifdef DEBUG_PBCH_ENCODING printf("Scrambling params: nushift %d M %d length %d encoded %d offset %d mask 0x%08x\n", nushift, M, length, encoded, offset, unscrambling_mask); -//#endif +#endif for (int i=0; ipbch_a=0; for (int i=0; ipbch_a |= ((pbch_pdu[2-(i>>3)]>>(7-(i&7)))&1)<pbch_a); -//#endif +#endif // Extra byte generation for (int i=0; i<4; i++) @@ -265,9 +265,9 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch, for (int i=0; ipbch_a_interleaved |= ((pbch->pbch_a>>i)&1)<<(*(interleaver+i)); -//#ifdef DEBUG_PBCH_ENCODING +#ifdef DEBUG_PBCH_ENCODING printf("i %d out 0x%08x ilv %d (in>>i)&1) %d\n", i, pbch->pbch_a_interleaved, *(interleaver+i), (pbch->pbch_a>>i)&1); -//#endif +#endif } #ifdef DEBUG_PBCH_ENCODING @@ -276,7 +276,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch, #endif // Scrambling - unscrambling_mask = (Lmax ==64)? 0x100006D:0x1000021; + unscrambling_mask = (Lmax ==64)? 0x100006D:0x1000041; M = (Lmax == 64)? (NR_POLAR_PBCH_PAYLOAD_BITS - 6) : (NR_POLAR_PBCH_PAYLOAD_BITS - 3); nushift = (((sfn>>2)&1)<<1) ^ ((sfn>>1)&1); pbch->pbch_a_prime = 0; diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c index a50aae4585..454c597f9f 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c @@ -436,14 +436,13 @@ void nr_pbch_unscrambling(NR_UE_PBCH *pbch, uint8_t nushift, uint16_t M, uint16_t length, - uint8_t bitwise) + uint8_t bitwise, + uint32_t unscrambling_mask) { uint8_t reset, offset; uint32_t x1, x2, s=0; int16_t *demod_pbch_e = pbch->llr; - uint32_t unscrambling_mask = 0x100006D; - reset = 1; // x1 is set in first call to lte_gold_generic @@ -507,7 +506,7 @@ unsigned char sign(int8_t x) { } */ -uint8_t pbch_deinterleaving_pattern[32] = {28,6,31,30,7,29,25,27,4,8,24,9,10,11,12,13,0,3,2,14,15,16,17,1,26,18,19,20,21,22,5,23}; +uint8_t pbch_deinterleaving_pattern[32] = {28,0,31,30,7,29,25,27,5,8,24,9,10,11,12,13,1,4,3,14,15,16,17,2,26,18,19,20,21,22,30,23}; int nr_rx_pbch( PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, @@ -647,7 +646,8 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue, //un-scrambling M = NR_POLAR_PBCH_E; nushift = (Lmax==4)? ssb_index&3 : ssb_index&7; - nr_pbch_unscrambling(nr_ue_pbch_vars,frame_parms->Nid_cell,nushift,M,NR_POLAR_PBCH_E,0); + uint32_t unscrambling_mask = (Lmax==64)?0x100006D:0x1000041; + nr_pbch_unscrambling(nr_ue_pbch_vars,frame_parms->Nid_cell,nushift,M,NR_POLAR_PBCH_E,0,0); @@ -664,18 +664,18 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue, if(decoderState == -1) return(decoderState); - //printf("polar decoder output 0x%08x\n",nr_ue_pbch_vars->pbch_a_prime); + printf("polar decoder output 0x%08x\n",nr_ue_pbch_vars->pbch_a_prime); //payload un-scrambling memset(&nr_ue_pbch_vars->pbch_a_interleaved, 0, sizeof(uint32_t) ); M = (Lmax == 64)? (NR_POLAR_PBCH_PAYLOAD_BITS - 6) : (NR_POLAR_PBCH_PAYLOAD_BITS - 3); - nushift = ((nr_ue_pbch_vars->pbch_a_prime>>6)&1) ^ (((nr_ue_pbch_vars->pbch_a_prime>>24)&1)<<1); - nr_pbch_unscrambling(nr_ue_pbch_vars,frame_parms->Nid_cell,nushift,M,NR_POLAR_PBCH_PAYLOAD_BITS,1); + nushift = ((nr_ue_pbch_vars->pbch_a_prime>>24)&1) ^ (((nr_ue_pbch_vars->pbch_a_prime>>6)&1)<<1); + nr_pbch_unscrambling(nr_ue_pbch_vars,frame_parms->Nid_cell,nushift,M,NR_POLAR_PBCH_PAYLOAD_BITS,1,unscrambling_mask); + printf("nushift %d sfn 3rd %d 2nd %d", nushift,((nr_ue_pbch_vars->pbch_a_prime>>6)&1), ((nr_ue_pbch_vars->pbch_a_prime>>24)&1) ); //payload deinterleaving //uint32_t in=0; uint32_t out=0; - for (int i=0; i<32; i++) { out |= ((nr_ue_pbch_vars->pbch_a_interleaved>>i)&1)<<(pbch_deinterleaving_pattern[i]); #ifdef DEBUG_PBCH @@ -683,14 +683,18 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue, #endif } - for (int i=0; i>3; i++) - decoded_output[i] = (uint8_t)((out>>(i<<3))&0xff); + uint32_t payload = 0; + uint8_t xtra_byte = 0; + xtra_byte = (out>>24)&0xff; + + for (int i=0; i>i)&1)<<(NR_POLAR_PBCH_PAYLOAD_BITS-i-1); + + for (int i=0; i<3; i++) + decoded_output[i] = (uint8_t)((payload>>((3-i)<<3))&0xff); - // Fix byte endian - // for (i=0; i<(NR_POLAR_PBCH_PAYLOAD_BITS>>3); i++) - // decoded_output[(NR_POLAR_PBCH_PAYLOAD_BITS>>3)-i-1] = pbch_a[i]; - #ifdef DEBUG_PBCH + printf("xtra_byte %x payload %x\n", xtra_byte, payload); for (i=0; i<(NR_POLAR_PBCH_PAYLOAD_BITS>>3); i++){ // printf("unscrambling pbch_a[%d] = %x \n", i,pbch_a[i]); printf("[PBCH] decoder payload[%d] = %x\n",i,decoded_output[i]); @@ -703,7 +707,7 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue, ue->rx_ind.rx_indication_body = (fapi_nr_rx_indication_body_t *)malloc(sizeof(fapi_nr_rx_indication_body_t)); ue->rx_ind.rx_indication_body->pdu_type = FAPI_NR_RX_PDU_TYPE_MIB; ue->rx_ind.rx_indication_body->mib_pdu.pdu = &decoded_output[0]; - ue->rx_ind.rx_indication_body->mib_pdu.additional_bits = decoded_output[3]; + ue->rx_ind.rx_indication_body->mib_pdu.additional_bits = xtra_byte; ue->rx_ind.rx_indication_body->mib_pdu.ssb_index = ssb_index; // confirm with TCL ue->rx_ind.rx_indication_body->mib_pdu.ssb_length = Lmax; // confirm with TCL ue->rx_ind.rx_indication_body->mib_pdu.cell_id = frame_parms->Nid_cell; // confirm with TCL diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index fd19e71b1b..bd83ea93a9 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -169,7 +169,7 @@ int8_t nr_ue_phy_config_request(nr_phy_config_t *phy_config){ printf("dmrs type A position: %d\n", phy_config->config_req.pbch_config.dmrs_type_a_position); printf("pdcch config sib1: %d\n", phy_config->config_req.pbch_config.pdcch_config_sib1); printf("cell barred: %d\n", phy_config->config_req.pbch_config.cell_barred); - printf("intra frequcney reselection: %d\n", phy_config->config_req.pbch_config.intra_frequency_reselection); + printf("intra frequency reselection: %d\n", phy_config->config_req.pbch_config.intra_frequency_reselection); printf("system frame number: %d\n", phy_config->config_req.pbch_config.system_frame_number); printf("ssb index: %d\n", phy_config->config_req.pbch_config.ssb_index); printf("half frame bit: %d\n", phy_config->config_req.pbch_config.half_frame_bit); diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 83970b7032..558a20252b 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -64,12 +64,14 @@ int8_t nr_ue_decode_mib( AssertFatal(mac->mib != NULL, "nr_ue_decode_mib() mac->mib == NULL\n"); //if(mac->mib != NULL){ - uint32_t frame = (mac->mib->systemFrameNumber.buf[0] >> mac->mib->systemFrameNumber.bits_unused); - uint32_t frame_number_4lsb = (uint32_t)(extra_bits & 0xf); // extra bits[0:3] - uint32_t half_frame_bit = (uint32_t)(( extra_bits >> 4 ) & 0x1 ); // extra bits[4] - uint32_t ssb_subcarrier_offset_msb = (uint32_t)(( extra_bits >> 5 ) & 0x1 ); // extra bits[5] + uint16_t frame = (mac->mib->systemFrameNumber.buf[0] >> mac->mib->systemFrameNumber.bits_unused); + uint16_t frame_number_4lsb = 0; + for (int i=0; i<4; i++) + frame_number_4lsb |= ((extra_bits>>i)&1)<<(3-i); + uint8_t half_frame_bit = ( extra_bits >> 4 ) & 0x1; // extra bits[4] + uint8_t ssb_subcarrier_offset_msb = ( extra_bits >> 5 ) & 0x1; // extra bits[5] - uint32_t ssb_subcarrier_offset = mac->mib->ssb_SubcarrierOffset; + uint8_t ssb_subcarrier_offset = (uint8_t)mac->mib->ssb_SubcarrierOffset; //uint32_t ssb_index = 0; // TODO: ssb_index should obtain from L1 in case Lssb != 64 @@ -92,7 +94,7 @@ int8_t nr_ue_decode_mib( printf("dmrs type A position: %d\n", (int)mac->mib->dmrs_TypeA_Position); printf("pdcch config sib1: %d\n", (int)mac->mib->pdcch_ConfigSIB1); printf("cell barred: %d\n", (int)mac->mib->cellBarred); - printf("intra frequcney reselection: %d\n", (int)mac->mib->intraFreqReselection); + printf("intra frequency reselection: %d\n", (int)mac->mib->intraFreqReselection); printf("half frame bit(extra bits): %d\n", (int)half_frame_bit); printf("ssb index(extra bits): %d\n", (int)ssb_index); #endif @@ -108,7 +110,6 @@ int8_t nr_ue_decode_mib( }else{ //NR_MIB__subCarrierSpacingCommon_scs30or120 scs_pdcch = scs_30kHz; } - scs_pdcch = 2; channel_bandwidth_t min_channel_bw = bw_40MHz; // deafult for testing From b16cab0884bd6f5ee65cc9d3edc16e365170f472 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Wed, 28 Nov 2018 09:00:02 +0100 Subject: [PATCH 10/12] adding thank you note to Son Dang for valuable contributions and testing --- openair1/PHY/NR_TRANSPORT/nr_pbch.c | 1 + 1 file changed, 1 insertion(+) diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c index 474bb0d505..f3957631a9 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c @@ -22,6 +22,7 @@ /*! \file PHY/NR_TRANSPORT/nr_pbch.c * \brief Top-level routines for generating the PBCH/BCH physical/transport channel V15.1 03/2018 * \author Guy De Souza +* \thanks Special Thanks to Son Dang for helpfull contributions and testing * \date 2018 * \version 0.1 * \company Eurecom From a044ec262732060cde5624f28b011f9e4d07e2fd Mon Sep 17 00:00:00 2001 From: Guy De Souza Date: Fri, 30 Nov 2018 11:33:43 +0100 Subject: [PATCH 11/12] scrambling fixes gNB/UE --- openair1/PHY/NR_TRANSPORT/nr_pbch.c | 61 +++++++++++++++++++++++++- openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c | 4 +- 2 files changed, 63 insertions(+), 2 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c index 474bb0d505..7aaecdc882 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c @@ -149,7 +149,7 @@ int nr_generate_pbch_dmrs(uint32_t *gold_pbch_dmrs, return 0; } -void nr_pbch_scrambling(NR_gNB_PBCH *pbch, +/*void nr_pbch_scrambling(NR_gNB_PBCH *pbch, uint32_t Nid, uint8_t nushift, uint16_t M, @@ -189,8 +189,67 @@ void nr_pbch_scrambling(NR_gNB_PBCH *pbch, else pbch_e[i>>5] ^= (((s>>((i+offset)&0x1f))&1)<<(i&0x1f)); } +}*/ + +void nr_pbch_scrambling(NR_gNB_PBCH *pbch, + uint32_t Nid, + uint8_t nushift, + uint16_t M, + uint16_t length, + uint8_t encoded, + uint32_t unscrambling_mask) { + uint8_t reset, offset; + uint32_t x1, x2, s=0; + uint32_t *pbch_e = pbch->pbch_e; + reset = 1; + // x1 is set in lte_gold_generic + x2 = Nid; + + // The Gold sequence is shifted by nushift* M, so we skip (nushift*M /32) double words + for (int i=0; i<(uint16_t)ceil(((float)nushift*M)/32); i++) { + s = lte_gold_generic(&x1, &x2, reset); + reset = 0; + } + + // Scrambling is now done with offset (nushift*M)%32 + offset = (nushift*M)&0x1f; +#ifdef DEBUG_PBCH_ENCODING + printf("Scrambling params: nushift %d M %d length %d encoded %d offset %d\n", nushift, M, length, encoded, offset); +#endif +#ifdef DEBUG_PBCH_ENCODING + printf("s: %04x\t", s); +#endif + int k = 0; + + if (!encoded) { + /// 1st Scrambling + for (int i = 0; i < length; ++i) { + if ((unscrambling_mask>>i)&1) + pbch->pbch_a_prime ^= ((pbch->pbch_a_interleaved>>i)&1)<pbch_a_prime ^= (((pbch->pbch_a_interleaved>>i)&1) ^ ((s>>((k+offset)&0x1f))&1))<>5] ^= (((s>>((i+offset)&0x1f))&1)<<(i&0x1f)); + } + } } + uint8_t nr_init_pbch_interleaver(uint8_t *interleaver) { uint8_t j_sfn=0, j_hrf=10, j_ssb=11, j_other=14; memset((void*)interleaver,0, NR_POLAR_PBCH_PAYLOAD_BITS); diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c index 454c597f9f..35a081a6f2 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c @@ -441,6 +441,7 @@ void nr_pbch_unscrambling(NR_UE_PBCH *pbch, { uint8_t reset, offset; uint32_t x1, x2, s=0; + uint8_t k=0; int16_t *demod_pbch_e = pbch->llr; @@ -468,7 +469,8 @@ void nr_pbch_unscrambling(NR_UE_PBCH *pbch, #endif if (bitwise) { - (pbch->pbch_a_interleaved) ^= ((unscrambling_mask>>i)&1)? ((pbch->pbch_a_prime>>i)&1)<pbch_a_prime>>i)&1) ^ ((s>>((i+offset)&0x1f))&1))<pbch_a_interleaved) ^= ((unscrambling_mask>>i)&1)? ((pbch->pbch_a_prime>>i)&1)<pbch_a_prime>>i)&1) ^ ((s>>((k+offset)&0x1f))&1))<>i)&1); } else { From 31d9cf59df92c66324ed709f8e4dd3677660010f Mon Sep 17 00:00:00 2001 From: Guy De Souza Date: Fri, 30 Nov 2018 11:50:50 +0100 Subject: [PATCH 12/12] Warning fixes --- openair1/PHY/NR_TRANSPORT/nr_pbch.c | 44 +----------------------- openair1/PHY/NR_TRANSPORT/nr_transport.h | 2 +- openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h | 4 +++ targets/RT/USER/nr-softmodem.c | 2 +- 4 files changed, 7 insertions(+), 45 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c index 7aaecdc882..fc8b586688 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c @@ -149,48 +149,6 @@ int nr_generate_pbch_dmrs(uint32_t *gold_pbch_dmrs, return 0; } -/*void nr_pbch_scrambling(NR_gNB_PBCH *pbch, - uint32_t Nid, - uint8_t nushift, - uint16_t M, - uint16_t length, - uint8_t encoded, - uint32_t unscrambling_mask) -{ - uint8_t reset, offset; - uint32_t x1, x2, s=0; - uint32_t *pbch_e = pbch->pbch_e; - - reset = 1; - // x1 is set in lte_gold_generic - x2 = Nid; - // The Gold sequence is shifted by nushift* M, so we skip (nushift*M /32) double words - for (int i=0; ipbch_a_prime ^= ((unscrambling_mask>>i)&1)? ((pbch->pbch_a_interleaved>>i)&1)<pbch_a_interleaved>>i)&1) ^ ((s>>((i+offset)&0x1f))&1))<>5] ^= (((s>>((i+offset)&0x1f))&1)<<(i&0x1f)); - } -}*/ - void nr_pbch_scrambling(NR_gNB_PBCH *pbch, uint32_t Nid, uint8_t nushift, @@ -250,7 +208,7 @@ void nr_pbch_scrambling(NR_gNB_PBCH *pbch, } -uint8_t nr_init_pbch_interleaver(uint8_t *interleaver) { +void nr_init_pbch_interleaver(uint8_t *interleaver) { uint8_t j_sfn=0, j_hrf=10, j_ssb=11, j_other=14; memset((void*)interleaver,0, NR_POLAR_PBCH_PAYLOAD_BITS); diff --git a/openair1/PHY/NR_TRANSPORT/nr_transport.h b/openair1/PHY/NR_TRANSPORT/nr_transport.h index eb25b8da6f..436ec10f79 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_transport.h +++ b/openair1/PHY/NR_TRANSPORT/nr_transport.h @@ -104,6 +104,6 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch, @param bit index i of the input payload @returns the bit index of the output */ -uint8_t nr_init_pbch_interleaver(uint8_t *interleaver); +void nr_init_pbch_interleaver(uint8_t *interleaver); #endif /*__NR_TRANSPORT__H__*/ diff --git a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h index c8c006a6b8..1799721325 100644 --- a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h +++ b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h @@ -167,4 +167,8 @@ typedef struct gNB_MAC_INST_s { time_stats_t schedule_pch; } gNB_MAC_INST; +void nr_schedule_css_dlsch_phytest(module_id_t module_idP, + frame_t frameP, + sub_frame_t subframeP); + #endif /*__LAYER2_NR_MAC_GNB_H__ */ diff --git a/targets/RT/USER/nr-softmodem.c b/targets/RT/USER/nr-softmodem.c index 481386a7c8..973362f327 100644 --- a/targets/RT/USER/nr-softmodem.c +++ b/targets/RT/USER/nr-softmodem.c @@ -191,7 +191,7 @@ int otg_enabled; //static NR_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]; -static nfapi_nr_config_request_t *config[MAX_NUM_CCs]; +//static nfapi_nr_config_request_t *config[MAX_NUM_CCs]; uint32_t target_dl_mcs = 28; //maximum allowed mcs uint32_t target_ul_mcs = 20; uint32_t timing_advance = 0;