Commit ec4429c1 authored by Wolfgang A. Mozart's avatar Wolfgang A. Mozart

gNB: making n_ssb_crb a function of n_rb_dl (this should become a config paramerter later)

nr-UE: bugfixes
pbchsim: adding options to input/output signal files
parent cf8b9fed
...@@ -419,7 +419,7 @@ void nr_phy_config_request(NR_PHY_Config_t *phy_config) ...@@ -419,7 +419,7 @@ void nr_phy_config_request(NR_PHY_Config_t *phy_config)
gNB_config->rf_config.ul_carrier_bandwidth.value = phy_config->cfg->rf_config.ul_carrier_bandwidth.value;//106; gNB_config->rf_config.ul_carrier_bandwidth.value = phy_config->cfg->rf_config.ul_carrier_bandwidth.value;//106;
gNB_config->sch_config.half_frame_index.value = 0; gNB_config->sch_config.half_frame_index.value = 0;
gNB_config->sch_config.ssb_subcarrier_offset.value = phy_config->cfg->sch_config.ssb_subcarrier_offset.value;//0; gNB_config->sch_config.ssb_subcarrier_offset.value = phy_config->cfg->sch_config.ssb_subcarrier_offset.value;//0;
gNB_config->sch_config.n_ssb_crb.value = 86; gNB_config->sch_config.n_ssb_crb.value = (phy_config->cfg->rf_config.dl_carrier_bandwidth.value-20)>>1;
gNB_config->sch_config.physical_cell_id.value = phy_config->cfg->sch_config.physical_cell_id.value; gNB_config->sch_config.physical_cell_id.value = phy_config->cfg->sch_config.physical_cell_id.value;
if (phy_config->cfg->subframe_config.duplex_mode.value == 0) { if (phy_config->cfg->subframe_config.duplex_mode.value == 0) {
......
...@@ -838,14 +838,15 @@ int pss_search_time_nr(int **rxdata, ///rx data in time domain ...@@ -838,14 +838,15 @@ int pss_search_time_nr(int **rxdata, ///rx data in time domain
/* Search pss in the received buffer each 4 samples which ensures a memory alignment on 128 bits (32 bits x 4 ) */ /* Search pss in the received buffer each 4 samples which ensures a memory alignment on 128 bits (32 bits x 4 ) */
/* This is required by SIMD (single instruction Multiple Data) Extensions of Intel processors. */ /* This is required by SIMD (single instruction Multiple Data) Extensions of Intel processors. */
/* Correlation computation is based on a a dot product which is realized thank to SIMS extensions */ /* Correlation computation is based on a a dot product which is realized thank to SIMS extensions */
for (int pss_index = 0; pss_index < NUMBER_PSS_SEQUENCE; pss_index++) avg[pss_index]=0; for (int pss_index = 0; pss_index < NUMBER_PSS_SEQUENCE; pss_index++) {
avg[pss_index]=0;
memset(pss_corr_ue[pss_index],0,length*sizeof(int64_t));
}
for (n=0; n < length; n+=4) { for (n=0; n < length; n+=4) { //
for (int pss_index = 0; pss_index < NUMBER_PSS_SEQUENCE; pss_index++) { for (int pss_index = 0; pss_index < NUMBER_PSS_SEQUENCE; pss_index++) {
pss_corr_ue[pss_index][n] = 0; /* clean correlation for position n */
if ( n < (length - frame_parms->ofdm_symbol_size)) { if ( n < (length - frame_parms->ofdm_symbol_size)) {
/* calculate dot product of primary_synchro_time_nr and rxdata[ar][n] (ar=0..nb_ant_rx) and store the sum in temp[n]; */ /* calculate dot product of primary_synchro_time_nr and rxdata[ar][n] (ar=0..nb_ant_rx) and store the sum in temp[n]; */
...@@ -886,24 +887,19 @@ int pss_search_time_nr(int **rxdata, ///rx data in time domain ...@@ -886,24 +887,19 @@ int pss_search_time_nr(int **rxdata, ///rx data in time domain
LOG_I(PHY,"[UE] nr_synchro_time: Sync source = %d, Peak found at pos %d, val = %llu (%d dB) avg %d dB\n", pss_source, peak_position, (unsigned long long)peak_value, dB_fixed64(peak_value),dB_fixed64(avg[pss_source])); LOG_I(PHY,"[UE] nr_synchro_time: Sync source = %d, Peak found at pos %d, val = %llu (%d dB) avg %d dB\n", pss_source, peak_position, (unsigned long long)peak_value, dB_fixed64(peak_value),dB_fixed64(avg[pss_source]));
//#ifdef DEBUG_PSS_NR if (peak_value < 5*avg[pss_source])
#define PSS_DETECTION_FLOOR_NR (31)
if (peak_value < 5*avg[pss_source]) { //PSS_DETECTION_FLOOR_NR)
return(-1); return(-1);
}
//#endif
#ifdef DBG_PSS_NR #ifdef DBG_PSS_NR
static debug_cnt = 0; static int debug_cnt = 0;
if (debug_cnt == 0) { if (debug_cnt == 0) {
/* LOG_M("pss_corr_ue0.m","pss_corr_ue0",pss_corr_ue[0],length,1,6); LOG_M("pss_corr_ue0.m","pss_corr_ue0",pss_corr_ue[0],length,1,6);
LOG_M("pss_corr_ue1.m","pss_corr_ue1",pss_corr_ue[1],length,1,6); LOG_M("pss_corr_ue1.m","pss_corr_ue1",pss_corr_ue[1],length,1,6);
LOG_M("pss_corr_ue2.m","pss_corr_ue2",pss_corr_ue[2],length,1,6); LOG_M("pss_corr_ue2.m","pss_corr_ue2",pss_corr_ue[2],length,1,6);
LOG_M("rxdata0.m","rxd0",rxdata[0],length,1,1); */ LOG_M("rxdata0.m","rxd0",rxdata[0],length,1,1);
} else { } else {
debug_cnt++; debug_cnt++;
} }
......
...@@ -379,7 +379,7 @@ int main(int argc, char **argv) ...@@ -379,7 +379,7 @@ int main(int argc, char **argv)
exit(-1); exit(-1);
} }
frame_length_complex_samples = frame_parms->samples_per_subframe; frame_length_complex_samples = frame_parms->samples_per_subframe*NR_NUMBER_OF_SUBFRAMES_PER_FRAME;
frame_length_complex_samples_no_prefix = frame_parms->samples_per_subframe_wCP; frame_length_complex_samples_no_prefix = frame_parms->samples_per_subframe_wCP;
s_re = malloc(2*sizeof(double*)); s_re = malloc(2*sizeof(double*));
...@@ -432,34 +432,47 @@ int main(int argc, char **argv) ...@@ -432,34 +432,47 @@ int main(int argc, char **argv)
gNB->pbch_configured = 1; gNB->pbch_configured = 1;
for (int i=0;i<4;i++) gNB->pbch_pdu[i]=i+1; for (int i=0;i<4;i++) gNB->pbch_pdu[i]=i+1;
nr_common_signal_procedures (gNB,frame,subframe); nr_common_signal_procedures (gNB,frame,subframe);
}
/* /*
LOG_M("txsigF0.m","txsF0", gNB->common_vars.txdataF[0],frame_length_complex_samples_no_prefix,1,1); LOG_M("txsigF0.m","txsF0", gNB->common_vars.txdataF[0],frame_length_complex_samples_no_prefix,1,1);
if (gNB->frame_parms.nb_antennas_tx>1) if (gNB->frame_parms.nb_antennas_tx>1)
LOG_M("txsigF1.m","txsF1", gNB->common_vars.txdataF[1],frame_length_complex_samples_no_prefix,1,1); LOG_M("txsigF1.m","txsF1", gNB->common_vars.txdataF[1],frame_length_complex_samples_no_prefix,1,1);
*/ */
//TODO: loop over slots //TODO: loop over slots
for (aa=0; aa<gNB->frame_parms.nb_antennas_tx; aa++) { for (aa=0; aa<gNB->frame_parms.nb_antennas_tx; aa++) {
if (gNB_config->subframe_config.dl_cyclic_prefix_type.value == 1) { if (gNB_config->subframe_config.dl_cyclic_prefix_type.value == 1) {
PHY_ofdm_mod(gNB->common_vars.txdataF[aa], PHY_ofdm_mod(gNB->common_vars.txdataF[aa],
txdata[aa], txdata[aa],
frame_parms->ofdm_symbol_size, frame_parms->ofdm_symbol_size,
12, 12,
frame_parms->nb_prefix_samples, frame_parms->nb_prefix_samples,
CYCLIC_PREFIX); CYCLIC_PREFIX);
} else { } else {
nr_normal_prefix_mod(gNB->common_vars.txdataF[aa], nr_normal_prefix_mod(gNB->common_vars.txdataF[aa],
txdata[aa], txdata[aa],
14, 14,
frame_parms); frame_parms);
}
}
} else {
printf("Reading %d samples from file to antenna buffer %d\n",frame_length_complex_samples,0);
if (fread(txdata[0],
sizeof(int32_t),
frame_length_complex_samples,
input_fd) != frame_length_complex_samples) {
printf("error reading from file\n");
exit(-1);
} }
} }
/*
LOG_M("txsig0.m","txs0", txdata[0],frame_length_complex_samples,1,1); LOG_M("txsig0.m","txs0", txdata[0],frame_length_complex_samples,1,1);
if (gNB->frame_parms.nb_antennas_tx>1) if (gNB->frame_parms.nb_antennas_tx>1)
LOG_M("txsig1.m","txs1", txdata[1],frame_length_complex_samples,1,1); LOG_M("txsig1.m","txs1", txdata[1],frame_length_complex_samples,1,1);
*/
if (output_fd)
fwrite(txdata[0],sizeof(int32_t),frame_length_complex_samples,output_fd);
int txlev = signal_energy(&txdata[0][5*frame_parms->ofdm_symbol_size + 4*frame_parms->nb_prefix_samples + frame_parms->nb_prefix_samples0], int txlev = signal_energy(&txdata[0][5*frame_parms->ofdm_symbol_size + 4*frame_parms->nb_prefix_samples + frame_parms->nb_prefix_samples0],
frame_parms->ofdm_symbol_size + frame_parms->nb_prefix_samples); frame_parms->ofdm_symbol_size + frame_parms->nb_prefix_samples);
...@@ -568,9 +581,12 @@ int main(int argc, char **argv) ...@@ -568,9 +581,12 @@ int main(int argc, char **argv)
free(r_im); free(r_im);
free(txdata); free(txdata);
if (write_output_file) if (output_fd)
fclose(output_fd); fclose(output_fd);
if (input_fd)
fclose(input_fd);
return(n_errors); return(n_errors);
} }
......
...@@ -435,7 +435,7 @@ static void *UE_thread_synch(void *arg) { ...@@ -435,7 +435,7 @@ static void *UE_thread_synch(void *arg) {
#endif #endif
if (nr_initial_sync( UE, UE->mode ) == 0) { if (nr_initial_sync( UE, UE->mode ) == 0) {
hw_slot_offset = (UE->rx_offset<<1) / UE->frame_parms.samples_per_tti; hw_slot_offset = (UE->rx_offset<<1) / UE->frame_parms.samples_per_subframe;
printf("Got synch: hw_slot_offset %d, carrier off %d Hz, rxgain %d (DL %u, UL %u), UE_scan_carrier %d\n", printf("Got synch: hw_slot_offset %d, carrier off %d Hz, rxgain %d (DL %u, UL %u), UE_scan_carrier %d\n",
hw_slot_offset, hw_slot_offset,
freq_offset, freq_offset,
...@@ -488,15 +488,17 @@ static void *UE_thread_synch(void *arg) { ...@@ -488,15 +488,17 @@ static void *UE_thread_synch(void *arg) {
break; break;
} }
UE->rfdevice.trx_set_freq_func(&UE->rfdevice,&openair0_cfg[0],0); if (UE->mode != loop_through_memory) {
//UE->rfdevice.trx_set_gains_func(&openair0,&openair0_cfg[0]); UE->rfdevice.trx_set_freq_func(&UE->rfdevice,&openair0_cfg[0],0);
//UE->rfdevice.trx_stop_func(&UE->rfdevice); //UE->rfdevice.trx_set_gains_func(&openair0,&openair0_cfg[0]);
// sleep(1); //UE->rfdevice.trx_stop_func(&UE->rfdevice);
//nr_init_frame_parms_ue(&UE->frame_parms); // sleep(1);
/*if (UE->rfdevice.trx_start_func(&UE->rfdevice) != 0 ) { //nr_init_frame_parms_ue(&UE->frame_parms);
LOG_E(HW,"Could not start the device\n"); /*if (UE->rfdevice.trx_start_func(&UE->rfdevice) != 0 ) {
oai_exit=1; LOG_E(HW,"Could not start the device\n");
}*/ oai_exit=1;
}*/
}
if (UE->UE_scan_carrier == 1) { if (UE->UE_scan_carrier == 1) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment