From 3f38b447c69399dae7d165222823cc68fcbfcb2d Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Sat, 4 Jul 2020 12:58:18 +0200 Subject: [PATCH] prachsim functional for format A2 and 0. added format 0 test to CI autotests --- cmake_targets/autotests/test_case_list.xml | 14 ++++++----- openair1/PHY/NR_TRANSPORT/nr_prach.c | 3 +-- openair1/PHY/NR_TRANSPORT/nr_prach_common.c | 2 +- openair1/SIMULATION/NR_PHY/prachsim.c | 23 +++++++++---------- openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c | 3 +++ 5 files changed, 24 insertions(+), 21 deletions(-) diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml index 346aa8bfef..14435934f5 100644 --- a/cmake_targets/autotests/test_case_list.xml +++ b/cmake_targets/autotests/test_case_list.xml @@ -1299,18 +1299,20 @@ execution - nr_prachsim Test cases. (Test1: 106 PRBs), - (Test2: 217 PRBs), - (Test3: 273 PRBs) + nr_prachsim Test cases. (Test1: 106 PRBs - Prach format A2), + (Test2: 217 PRBs - Prach format A2), + (Test3: 273 PRBs - Prach format A2), + (Test4: 106 PRBs - Prach format 0) $OPENAIR_DIR/cmake_targets/build_oai --phy_simulators -c $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash $OPENAIR_DIR/targets/bin/nr_prachsim.Rel15 - -a -s -30 -n 100 -p 16 -R 106 - -a -s -30 -n 100 -p 16 -R 217 - -a -s -30 -n 100 -p 16 -R 273 + -a -s -30 -n 100 -p 63 -R 106 + -a -s -30 -n 100 -p 63 -R 217 + -a -s -30 -n 100 -p 63 -R 273 + -a -s -30 -n 100 -p 63 -R 106 -c 4 nr_prachsim.test1 nr_prachsim.test2 nr_prachsim.test3 PRACH test OK segmentation fault|assertion|exiting|fatal diff --git a/openair1/PHY/NR_TRANSPORT/nr_prach.c b/openair1/PHY/NR_TRANSPORT/nr_prach.c index dc754fb3b0..e4d79822f9 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_prach.c +++ b/openair1/PHY/NR_TRANSPORT/nr_prach.c @@ -752,8 +752,7 @@ void rx_nr_prach(PHY_VARS_gNB *gNB, // check energy in nth time shift, for preamble_shift2 = ((preamble_shift==0) ? 0 : ((preamble_shift< u=%d\n",index,u); inv_u = nr_ZC_inv[u]; // multiplicative inverse of u diff --git a/openair1/SIMULATION/NR_PHY/prachsim.c b/openair1/SIMULATION/NR_PHY/prachsim.c index 2df54ca1cf..2db5bc905c 100644 --- a/openair1/SIMULATION/NR_PHY/prachsim.c +++ b/openair1/SIMULATION/NR_PHY/prachsim.c @@ -339,6 +339,8 @@ int main(int argc, char **argv){ if (config_index<67) { prach_sequence_length=0; slot = subframe*2; slot_gNB = 1+(subframe*2); } + uint16_t N_ZC; + N_ZC = prach_sequence_length == 0 ? 839 : 139; printf("Config_index %d, prach_sequence_length %d\n",config_index,prach_sequence_length); @@ -485,8 +487,8 @@ int main(int argc, char **argv){ prach_config->num_prach_fd_occasions_list[fd_occasion].k1.value = msg1_frequencystart; prach_config->restricted_set_config.value = restrictedSetConfig; prach_config->prach_sequence_length.value = prach_sequence_length; - prach_config->num_prach_fd_occasions_list[fd_occasion].num_root_sequences.value = num_root_sequences; prach_pdu->num_cs = get_NCS(NCS_config, format0, restrictedSetConfig); + prach_config->num_prach_fd_occasions_list[fd_occasion].num_root_sequences.value = 1+(64/(N_ZC/prach_pdu->num_cs)); prach_pdu->prach_format = prach_format; memcpy((void*)&ru->config,(void*)&RC.gNB[0]->gNB_config,sizeof(ru->config)); @@ -525,7 +527,7 @@ int main(int argc, char **argv){ ue_prach_config->prach_sub_c_spacing = mu; ue_prach_config->prach_sequence_length = prach_sequence_length; ue_prach_config->restricted_set_config = restrictedSetConfig; - ue_prach_config->num_prach_fd_occasions_list[fd_occasion].num_root_sequences = num_root_sequences; + ue_prach_config->num_prach_fd_occasions_list[fd_occasion].num_root_sequences = prach_config->num_prach_fd_occasions_list[fd_occasion].num_root_sequences.value ; ue_prach_config->num_prach_fd_occasions_list[fd_occasion].prach_root_sequence_index = rootSequenceIndex; ue_prach_config->num_prach_fd_occasions_list[fd_occasion].k1 = msg1_frequencystart; @@ -601,13 +603,10 @@ int main(int argc, char **argv){ /* tx_lev_dB not used later, no need to set */ //tx_lev_dB = (unsigned int) dB_fixed(tx_lev); - samp_count=0; - for (int s=0; sget_samples_per_slot(s,frame_parms); - - prach_start = samp_count - UE->N_TA_offset; + prach_start = subframe*frame_parms->samples_per_subframe-UE->N_TA_offset; #ifdef NR_PRACH_DEBUG - LOG_M("txsig0.m", "txs0", &txdata[0][prach_start], frame_parms->samples_per_subframe, 1, 1); + LOG_M("txsig0.m", "txs0", &txdata[0][subframe*frame_parms->samples_per_subframe], frame_parms->samples_per_subframe, 1, 1); LOG_M("txsig0_frame.m","txs0", txdata[0],frame_parms->samples_per_frame,1,1); #endif @@ -651,8 +650,8 @@ int main(int argc, char **argv){ rx_prach_start = subframe*frame_parms->samples_per_subframe; if (n_frames==1) printf("slot %d, rx_prach_start %d\n",slot,rx_prach_start); - uint16_t preamble_rx, preamble_energy, N_ZC; - N_ZC = prach_sequence_length == 0 ? 839 : 139; + uint16_t preamble_rx, preamble_energy; + for (SNR=snr0; SNRprach_vars.rxsigF = ru->prach_rxsigF; - + if (n_frames == 1) printf("ncs %d,num_seq %d\n",prach_pdu->num_cs, prach_config->num_prach_fd_occasions_list[fd_occasion].num_root_sequences.value); rx_nr_prach(gNB, prach_pdu, frame, subframe, &preamble_rx, &preamble_energy, &preamble_delay); // printf(" preamble_energy %d preamble_rx %d preamble_tx %d \n", preamble_energy, preamble_rx, preamble_tx); @@ -720,8 +719,8 @@ int main(int argc, char **argv){ #ifdef NR_PRACH_DEBUG LOG_M("prach0.m","prach0", &txdata[0][prach_start], frame_parms->samples_per_subframe, 1, 1); LOG_M("prachF0.m","prachF0", &gNB->prach_vars.prachF[0], N_ZC, 1, 1); - LOG_M("rxsig0.m","rxs0", &gNB->common_vars.rxdata[0][rx_prach_start], frame_parms->samples_per_subframe, 1, 1); - LOG_M("ru_rxsig0.m","rxs0", &ru->common.rxdata[0][rx_prach_start], frame_parms->samples_per_subframe, 1, 1); + LOG_M("rxsig0.m","rxs0", &gNB->common_vars.rxdata[0][subframe*frame_parms->samples_per_subframe], frame_parms->samples_per_subframe, 1, 1); + LOG_M("ru_rxsig0.m","rxs0", &ru->common.rxdata[0][subframe*frame_parms->samples_per_subframe], frame_parms->samples_per_subframe, 1, 1); LOG_M("rxsigF0.m","rxsF0", gNB->prach_vars.rxsigF[0], N_ZC, 1, 1); LOG_M("prach_preamble.m","prachp", &gNB->X_u[0], N_ZC, 1, 1); LOG_M("ue_prach_preamble.m","prachp", &UE->X_u[0], N_ZC, 1, 1); diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c index fd45a791c4..8ff0aff5dc 100644 --- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c +++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c @@ -52,6 +52,9 @@ const char *prachfmt03[]={"0","1","2","3"}; uint16_t get_NCS(uint8_t index, uint16_t format0, uint8_t restricted_set_config) { + LOG_D(MAC,"get_NCS: indx %d,format0 %d, restriced_set_config %d\n", + index,format0,restricted_set_config); + if (format0 < 3) { switch(restricted_set_config){ case 0: