Пример #1
0
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;
}
Пример #2
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;
}
Пример #3
0
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;
}
Пример #4
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;
  }
}