From b12d6b73409598abf8da26ae6ab79f10788a6506 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Mon, 17 Dec 2018 10:26:40 +0100 Subject: [PATCH 1/6] adding payload check to nr_pbchsim --- maketags | 2 +- openair1/PHY/NR_TRANSPORT/nr_pbch.c | 2 +- openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c | 4 ++-- openair1/PHY/defs_gNB.h | 9 +++++++++ openair1/SIMULATION/NR_PHY/pbchsim.c | 8 ++++++++ 5 files changed, 21 insertions(+), 4 deletions(-) diff --git a/maketags b/maketags index 361adc5d67..ac8d4151d4 100755 --- a/maketags +++ b/maketags @@ -1,4 +1,4 @@ #!/bin/sh echo "building ctags for openair1 and openair2 ..." -ctags -e -R --exclude=openair1/DOCS/ --exclude=openair2/DOCS/ --exclude=openair2/RRC/CELLULAR/ --exclude=openair2/NAS/DRIVER/CELLULAR/ --exclude=openair2/SIMULATION/ --exclude=targets/DOCS/ --exclude=targets/PROJECTS/ openair1 openair2 openair3 targets cmake_targets common +ctags -e -R --exclude=openair1/DOCS/ --exclude=openair2/DOCS/ --exclude=openair2/RRC/CELLULAR/ --exclude=openair2/NAS/DRIVER/CELLULAR/ --exclude=openair2/SIMULATION/ --exclude=targets/DOCS/ --exclude=targets/PROJECTS/ openair1 openair2 openair3 targets cmake_targets common nfapi diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c index d2b917f809..e526ab0dc7 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c @@ -37,7 +37,7 @@ #include "PHY/sse_intrin.h" //#define DEBUG_PBCH -//#define DEBUG_PBCH_ENCODING +#define DEBUG_PBCH_ENCODING //#define DEBUG_PBCH_DMRS #include "PHY/NR_REFSIG/nr_mod_table.h" diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c index c613a22ab3..58761bb618 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c @@ -36,7 +36,7 @@ #include "PHY/LTE_REFSIG/lte_refsig.h" //#define DEBUG_PBCH 1 -//#define DEBUG_PBCH_ENCODING +#define DEBUG_PBCH_ENCODING #ifdef OPENAIR2 //#include "PHY_INTERFACE/defs.h" @@ -673,7 +673,7 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue, M = (Lmax == 64)? (NR_POLAR_PBCH_PAYLOAD_BITS - 6) : (NR_POLAR_PBCH_PAYLOAD_BITS - 3); 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) ); + printf("nushift %d sfn 3rd %d 2nd %d\n", 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; diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index c275bc9c2a..08945a4695 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -47,6 +47,15 @@ typedef struct { uint32_t pbch_e[NR_POLAR_PBCH_E_DWORD]; } NR_gNB_PBCH; +typedef struct { + uint8_t ssb_start_symbol; + uint8_t n_hf; + uint8_t Lmax; + uint8_t ssb_index; + int32_t sfn; +} NR_PBCH_parms_t; + + typedef struct { /// Length of DCI payload in bits uint16_t size; diff --git a/openair1/SIMULATION/NR_PHY/pbchsim.c b/openair1/SIMULATION/NR_PHY/pbchsim.c index 4fbb3429ef..a9d1d989f8 100644 --- a/openair1/SIMULATION/NR_PHY/pbchsim.c +++ b/openair1/SIMULATION/NR_PHY/pbchsim.c @@ -567,6 +567,14 @@ int main(int argc, char **argv) SISO, UE->high_speed_flag); + if (ret==0) { + //UE->rx_ind.rx_indication_body->mib_pdu.ssb_index; //not yet detected automatically + //UE->rx_ind.rx_indication_body->mib_pdu.ssb_length; //Lmax, not yet detected automatically + for (i=0;i<3;i++) + printf("pdu byte %d gNB: 0x%02x UE: 0x%02x\n",i,((uint8_t*)&gNB->pbch.pbch_a)[i], UE->rx_ind.rx_indication_body->mib_pdu.pdu[i]); + printf("xtra byte gNB: 0x%02x UE: 0x%02x\n",((uint8_t*)&gNB->pbch.pbch_a)[3], UE->rx_ind.rx_indication_body->mib_pdu.additional_bits); + } + if (ret<0) n_errors++; } } //noise trials From 91a47eb94a989e87d10d2309e6880faf6b7c3591 Mon Sep 17 00:00:00 2001 From: Guy De Souza Date: Mon, 17 Dec 2018 14:12:54 +0100 Subject: [PATCH 2/6] Payload check in pbchsim --- openair1/PHY/NR_TRANSPORT/nr_pbch.c | 3 ++- openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c | 9 ++++----- openair1/SIMULATION/NR_PHY/pbchsim.c | 25 +++++++++++++++++++------ 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c index e526ab0dc7..36f6fb1ab2 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c @@ -277,7 +277,8 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch, else 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); + //LOG_I(PHY,"After extra byte: pbch_a = 0x%08x\n",pbch->pbch_a); + printf("After extra byte: pbch_a = 0x%08x\n",pbch->pbch_a); // Payload interleaving diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c index 58761bb618..0a52e80564 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c @@ -36,7 +36,7 @@ #include "PHY/LTE_REFSIG/lte_refsig.h" //#define DEBUG_PBCH 1 -#define DEBUG_PBCH_ENCODING +//#define DEBUG_PBCH_ENCODING #ifdef OPENAIR2 //#include "PHY_INTERFACE/defs.h" @@ -508,7 +508,7 @@ unsigned char sign(int8_t x) { } */ -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}; +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,6,23}; int nr_rx_pbch( PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, @@ -673,16 +673,15 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue, M = (Lmax == 64)? (NR_POLAR_PBCH_PAYLOAD_BITS - 6) : (NR_POLAR_PBCH_PAYLOAD_BITS - 3); 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\n", 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 +//#ifdef DEBUG_PBCH printf("i %d in 0x%08x out 0x%08x ilv %d (in>>i)&1) 0x%08x\n", i, nr_ue_pbch_vars->pbch_a_interleaved, out, pbch_deinterleaving_pattern[i], (nr_ue_pbch_vars->pbch_a_interleaved>>i)&1); -#endif +//#endif } uint32_t payload = 0; diff --git a/openair1/SIMULATION/NR_PHY/pbchsim.c b/openair1/SIMULATION/NR_PHY/pbchsim.c index a9d1d989f8..7dab23d7df 100644 --- a/openair1/SIMULATION/NR_PHY/pbchsim.c +++ b/openair1/SIMULATION/NR_PHY/pbchsim.c @@ -122,13 +122,13 @@ int main(int argc, char **argv) unsigned char frame_type = 0; unsigned char pbch_phase = 0; - int frame=0,subframe=0; + int frame=8,subframe=0; int frame_length_complex_samples; int frame_length_complex_samples_no_prefix; NR_DL_FRAME_PARMS *frame_parms; nfapi_nr_config_request_t *gNB_config; - int ret; + int ret, payload_ret=0; int run_initial_sync=0; int loglvl=OAILOG_WARNING; @@ -570,9 +570,17 @@ int main(int argc, char **argv) if (ret==0) { //UE->rx_ind.rx_indication_body->mib_pdu.ssb_index; //not yet detected automatically //UE->rx_ind.rx_indication_body->mib_pdu.ssb_length; //Lmax, not yet detected automatically - for (i=0;i<3;i++) - printf("pdu byte %d gNB: 0x%02x UE: 0x%02x\n",i,((uint8_t*)&gNB->pbch.pbch_a)[i], UE->rx_ind.rx_indication_body->mib_pdu.pdu[i]); - printf("xtra byte gNB: 0x%02x UE: 0x%02x\n",((uint8_t*)&gNB->pbch.pbch_a)[3], UE->rx_ind.rx_indication_body->mib_pdu.additional_bits); + uint8_t gNB_xtra_byte=0; + for (int i=0; i<8; i++) + gNB_xtra_byte |= ((gNB->pbch.pbch_a>>(31-i))&1)<<(7-i); + + payload_ret += (UE->rx_ind.rx_indication_body->mib_pdu.additional_bits == gNB_xtra_byte); + for (i=0;i<3;i++){ + payload_ret += (UE->rx_ind.rx_indication_body->mib_pdu.pdu[i] == gNB->pbch_pdu[2-i]); + //printf("pdu byte %d gNB: 0x%02x UE: 0x%02x\n",i,gNB->pbch_pdu[i], UE->rx_ind.rx_indication_body->mib_pdu.pdu[i]); + } + //printf("xtra byte gNB: 0x%02x UE: 0x%02x\n",gNB_xtra_byte, UE->rx_ind.rx_indication_body->mib_pdu.additional_bits); + //printf("ret %d\n", payload_ret); } if (ret<0) n_errors++; @@ -582,7 +590,12 @@ int main(int argc, char **argv) printf("SNR %f : n_errors (negative CRC) = %d/%d\n", SNR,n_errors,n_trials); if ((float)n_errors/(float)n_trials <= target_error_rate) { - printf("PBCH test OK\n"); + if (payload_ret==4) { + printf("Payload OK\n"); + printf("PBCH test OK\n"); + } + else + printf("Payload NOK\n"); break; } From 1a6331ceeaa153d6f5650d7c888dd3b9cfe1c7ad Mon Sep 17 00:00:00 2001 From: Guy De Souza Date: Mon, 17 Dec 2018 14:16:20 +0100 Subject: [PATCH 3/6] Log disabling --- openair1/PHY/NR_TRANSPORT/nr_pbch.c | 3 +-- openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c | 4 ++-- openair1/SIMULATION/NR_PHY/pbchsim.c | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c index 36f6fb1ab2..e526ab0dc7 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c @@ -277,8 +277,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch, else 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); - printf("After extra byte: pbch_a = 0x%08x\n",pbch->pbch_a); + LOG_I(PHY,"After extra byte: pbch_a = 0x%08x\n",pbch->pbch_a); // Payload interleaving diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c index 0a52e80564..afb29815d0 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c @@ -679,9 +679,9 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue, 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 +#ifdef DEBUG_PBCH printf("i %d in 0x%08x out 0x%08x ilv %d (in>>i)&1) 0x%08x\n", i, nr_ue_pbch_vars->pbch_a_interleaved, out, pbch_deinterleaving_pattern[i], (nr_ue_pbch_vars->pbch_a_interleaved>>i)&1); -//#endif +#endif } uint32_t payload = 0; diff --git a/openair1/SIMULATION/NR_PHY/pbchsim.c b/openair1/SIMULATION/NR_PHY/pbchsim.c index 7dab23d7df..6429b3f26b 100644 --- a/openair1/SIMULATION/NR_PHY/pbchsim.c +++ b/openair1/SIMULATION/NR_PHY/pbchsim.c @@ -122,7 +122,7 @@ int main(int argc, char **argv) unsigned char frame_type = 0; unsigned char pbch_phase = 0; - int frame=8,subframe=0; + int frame=0,subframe=0; int frame_length_complex_samples; int frame_length_complex_samples_no_prefix; NR_DL_FRAME_PARMS *frame_parms; From 70d241fb0fd7f061bea9b7d99cd2d91d1f66f9e9 Mon Sep 17 00:00:00 2001 From: Guy De Souza Date: Mon, 17 Dec 2018 15:59:44 +0100 Subject: [PATCH 4/6] PBCH encoding debug deactivated --- openair1/PHY/NR_TRANSPORT/nr_pbch.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c index e526ab0dc7..d2b917f809 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c @@ -37,7 +37,7 @@ #include "PHY/sse_intrin.h" //#define DEBUG_PBCH -#define DEBUG_PBCH_ENCODING +//#define DEBUG_PBCH_ENCODING //#define DEBUG_PBCH_DMRS #include "PHY/NR_REFSIG/nr_mod_table.h" From b6b2531d98029bb9a4114a35f4d8eebb654d5709 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Mon, 17 Dec 2018 16:28:36 +0100 Subject: [PATCH 5/6] fix payload check in nr_pbchsim for >1 iterations --- openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c | 2 +- openair1/SIMULATION/NR_PHY/pbchsim.c | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c index afb29815d0..20dea4369c 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c @@ -666,7 +666,7 @@ 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) ); diff --git a/openair1/SIMULATION/NR_PHY/pbchsim.c b/openair1/SIMULATION/NR_PHY/pbchsim.c index 6429b3f26b..07424c56b1 100644 --- a/openair1/SIMULATION/NR_PHY/pbchsim.c +++ b/openair1/SIMULATION/NR_PHY/pbchsim.c @@ -570,17 +570,17 @@ int main(int argc, char **argv) if (ret==0) { //UE->rx_ind.rx_indication_body->mib_pdu.ssb_index; //not yet detected automatically //UE->rx_ind.rx_indication_body->mib_pdu.ssb_length; //Lmax, not yet detected automatically - uint8_t gNB_xtra_byte=0; - for (int i=0; i<8; i++) - gNB_xtra_byte |= ((gNB->pbch.pbch_a>>(31-i))&1)<<(7-i); - - payload_ret += (UE->rx_ind.rx_indication_body->mib_pdu.additional_bits == gNB_xtra_byte); + uint8_t gNB_xtra_byte=0; + for (int i=0; i<8; i++) + gNB_xtra_byte |= ((gNB->pbch.pbch_a>>(31-i))&1)<<(7-i); + + payload_ret = (UE->rx_ind.rx_indication_body->mib_pdu.additional_bits == gNB_xtra_byte); for (i=0;i<3;i++){ - payload_ret += (UE->rx_ind.rx_indication_body->mib_pdu.pdu[i] == gNB->pbch_pdu[2-i]); - //printf("pdu byte %d gNB: 0x%02x UE: 0x%02x\n",i,gNB->pbch_pdu[i], UE->rx_ind.rx_indication_body->mib_pdu.pdu[i]); - } + payload_ret += (UE->rx_ind.rx_indication_body->mib_pdu.pdu[i] == gNB->pbch_pdu[2-i]); + //printf("pdu byte %d gNB: 0x%02x UE: 0x%02x\n",i,gNB->pbch_pdu[i], UE->rx_ind.rx_indication_body->mib_pdu.pdu[i]); + } //printf("xtra byte gNB: 0x%02x UE: 0x%02x\n",gNB_xtra_byte, UE->rx_ind.rx_indication_body->mib_pdu.additional_bits); - //printf("ret %d\n", payload_ret); + //printf("ret %d\n", payload_ret); } if (ret<0) n_errors++; From 4faf96d689b44d11353604b0df0d5c223f91ad67 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Mon, 17 Dec 2018 16:43:43 +0100 Subject: [PATCH 6/6] fixed to previous commit --- openair1/SIMULATION/NR_PHY/pbchsim.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/openair1/SIMULATION/NR_PHY/pbchsim.c b/openair1/SIMULATION/NR_PHY/pbchsim.c index 07424c56b1..52a9f48481 100644 --- a/openair1/SIMULATION/NR_PHY/pbchsim.c +++ b/openair1/SIMULATION/NR_PHY/pbchsim.c @@ -99,7 +99,7 @@ int main(int argc, char **argv) int freq_offset; // int subframe_offset; // char fname[40], vname[40]; - int trial,n_trials=1,n_errors,n_errors2,n_alamouti; + int trial,n_trials=1,n_errors,n_errors_payload; uint8_t transmission_mode = 1,n_tx=1,n_rx=1; uint16_t Nid_cell=0; @@ -499,8 +499,7 @@ int main(int argc, char **argv) for (SNR=snr0; SNRrx_ind.rx_indication_body->mib_pdu.additional_bits); //printf("ret %d\n", payload_ret); + if (payload_ret!=4) + n_errors_payload++; } if (ret<0) n_errors++; } } //noise trials - printf("SNR %f : n_errors (negative CRC) = %d/%d\n", SNR,n_errors,n_trials); + printf("SNR %f: trials %d, n_errors_crc = %d, n_errors_payload %d\n", SNR,n_trials,n_errors,n_errors_payload); - if ((float)n_errors/(float)n_trials <= target_error_rate) { - if (payload_ret==4) { - printf("Payload OK\n"); - printf("PBCH test OK\n"); - } - else - printf("Payload NOK\n"); + if (((float)n_errors/(float)n_trials <= target_error_rate) && (n_errors_payload==0)) { + printf("PBCH test OK\n"); break; }