int sync_init(sync_t *q, int frame_size) { int N_id_2; bzero(q, sizeof(sync_t)); q->force_N_id_2 = -1; q->threshold = 1.5; q->pss_mode = PEAK_MEAN; q->detect_cp = true; q->sss_en = true; for (N_id_2=0;N_id_2<3;N_id_2++) { if (pss_synch_init(&q->pss[N_id_2], frame_size)) { fprintf(stderr, "Error initializing PSS object\n"); return -1; } if (pss_synch_set_N_id_2(&q->pss[N_id_2], N_id_2)) { fprintf(stderr, "Error initializing N_id_2\n"); return -1; } if (sss_synch_init(&q->sss[N_id_2])) { fprintf(stderr, "Error initializing SSS object\n"); return -1; } if (sss_synch_set_N_id_2(&q->sss[N_id_2], N_id_2)) { fprintf(stderr, "Error initializing N_id_2\n"); return -1; } DEBUG("PSS and SSS initiated N_id_2=%d\n", N_id_2); } return 0; }
int sss_synch_initialize(sss_synch_hl* h) { if (sss_synch_init(&h->obj, 128)) { return LIBLTE_ERROR; } sss_synch_set_N_id_2(&h->obj, h->init.N_id_2); return LIBLTE_SUCCESS; }
int sss_synch_initialize(sss_synch_hl* h) { if (sss_synch_init(&h->obj)) { return -1; } sss_synch_set_N_id_2(&h->obj, h->init.N_id_2); return 0; }
/* Returns 1 if the SSS is found, 0 if not and -1 if there is not enough space * to correlate */ int sync_sss(sync_t *q, cf_t *input, uint32_t peak_pos, lte_cp_t cp) { int sss_idx, ret; sss_synch_set_N_id_2(&q->sss, q->N_id_2); /* Make sure we have enough room to find SSS sequence */ sss_idx = (int) peak_pos-2*q->fft_size-CP(q->fft_size, (CP_ISNORM(q->cp)?CPNORM_LEN:CPEXT_LEN)); if (sss_idx < 0) { INFO("Not enough room to decode CP SSS (sss_idx=%d, peak_pos=%d)\n", sss_idx, peak_pos); return LIBLTE_ERROR; } DEBUG("Searching SSS around sss_idx: %d, peak_pos: %d\n", sss_idx, peak_pos); switch(q->sss_alg) { case SSS_DIFF: sss_synch_m0m1_diff(&q->sss, &input[sss_idx], &q->m0, &q->m0_value, &q->m1, &q->m1_value); break; case SSS_PARTIAL_3: sss_synch_m0m1_partial(&q->sss, &input[sss_idx], 3, NULL, &q->m0, &q->m0_value, &q->m1, &q->m1_value); break; case SSS_FULL: sss_synch_m0m1_partial(&q->sss, &input[sss_idx], 1, NULL, &q->m0, &q->m0_value, &q->m1, &q->m1_value); break; } q->sf_idx = sss_synch_subframe(q->m0, q->m1); ret = sss_synch_N_id_1(&q->sss, q->m0, q->m1); if (ret >= 0) { q->N_id_1 = (uint32_t) ret; DEBUG("SSS detected N_id_1=%d, sf_idx=%d, %s CP\n", q->N_id_1, q->sf_idx, CP_ISNORM(q->cp)?"Normal":"Extended"); return 1; } else { q->N_id_1 = 1000; return LIBLTE_SUCCESS; } }