int srslte_sss_synch_init(srslte_sss_synch_t *q, uint32_t fft_size) { if (q != NULL && fft_size <= 2048) { uint32_t N_id_2; srslte_sss_tables_t sss_tables; bzero(q, sizeof(srslte_sss_synch_t)); if (srslte_dft_plan(&q->dftp_input, fft_size, SRSLTE_DFT_FORWARD, SRSLTE_DFT_COMPLEX)) { srslte_sss_synch_free(q); return SRSLTE_ERROR; } srslte_dft_plan_set_mirror(&q->dftp_input, true); srslte_dft_plan_set_dc(&q->dftp_input, true); q->fft_size = fft_size; generate_N_id_1_table(q->N_id_1_table); for (N_id_2=0;N_id_2<3;N_id_2++) { generate_sss_all_tables(&sss_tables, N_id_2); convert_tables(&q->fc_tables[N_id_2], &sss_tables); } q->N_id_2 = 0; return SRSLTE_SUCCESS; } return SRSLTE_ERROR_INVALID_INPUTS; }
int initialize() { input_len=0; param_get_int_name("input_len",&input_len); sss_pos_in_frame=960-2*137; param_get_int_name("sss_pos_in_frame",&sss_pos_in_frame); sss_pos_in_symbol=33; param_get_int_name("sss_pos_in_symbol",&sss_pos_in_symbol); correlation_threshold=3000; param_get_int_name("correlation_threshold",&correlation_threshold); N_id_2=0; param_get_int_name("N_id_2",&N_id_2); dft_plan(SSS_DFT_LEN,COMPLEX_2_COMPLEX,FORWARD,&plan); plan.options = DFT_MIRROR_POS | DFT_DC_OFFSET; generate_sss_all_tables(&sss_tables,N_id_2); convert_tables(&sss_tables); #ifdef _COMPILE_ALOE sf_pm_idx = oesr_get_variable_idx(ctx, "ctrl","subframe_rx"); if (sf_pm_idx < 0) { moderror("Error getting remote parameter subframe_rx\n"); } moddebug("Remote subframe_rx parameter is a at %d\n",sf_pm_idx); #endif first=1; return 0; }
/** Initializes the SSS sequences for the given N_id_2 */ int sss_synch_set_N_id_2(sss_synch_t *q, int N_id_2) { if (N_id_2 < 0 || N_id_2 > 2) { fprintf(stderr, "Invalid N_id_2 %d\n", N_id_2); return -1; } struct sss_tables sss_tables; generate_sss_all_tables(&sss_tables,N_id_2); convert_tables(&q->fc_tables, &sss_tables); return 0; }