Esempio n. 1
0
int srslte_ue_dl_decode_fft_estimate_noguru(srslte_ue_dl_t*     q,
                                            srslte_dl_sf_cfg_t* sf,
                                            srslte_ue_dl_cfg_t* cfg,
                                            cf_t*               input[SRSLTE_MAX_PORTS])
{
  if (q && input) {
    /* Run FFT for all subframe data */
    for (int j = 0; j < q->nof_rx_antennas; j++) {
      if (sf->sf_type == SRSLTE_SF_MBSFN) {
        srslte_ofdm_rx_sf_ng(&q->fft_mbsfn, input[j], q->sf_symbols[j]);
      } else {
        srslte_ofdm_rx_sf_ng(&q->fft[j], input[j], q->sf_symbols[j]);
      }
    }
    return estimate_pdcch_pcfich(q, sf, cfg);
  } else {
    return SRSLTE_ERROR_INVALID_INPUTS;
  }
}
Esempio n. 2
0
int srslte_ue_dl_decode_fft_estimate_noguru(srslte_ue_dl_t *q, cf_t *input[SRSLTE_MAX_PORTS], uint32_t sf_idx, uint32_t *cfi)
{
  if (input && q && sf_idx < SRSLTE_NSUBFRAMES_X_FRAME) {

    /* Run FFT for all subframe data */
    for (int j=0;j<q->nof_rx_antennas;j++) {
      srslte_ofdm_rx_sf_ng(&q->fft[j], input[j], q->sf_symbols_m[j]);

      /* Correct SFO multiplying by complex exponential in the time domain */
      if (q->sample_offset) {
        int nsym = SRSLTE_CP_NSYMB(q->cell.cp);
        for (int i=0;i<2*nsym;i++) {
          srslte_cfo_correct(&q->sfo_correct,
                             &q->sf_symbols_m[j][i*q->cell.nof_prb*SRSLTE_NRE],
                             &q->sf_symbols_m[j][i*q->cell.nof_prb*SRSLTE_NRE],
                             q->sample_offset / q->fft[j].symbol_sz);
        }
      }
    }
    return srslte_ue_dl_decode_estimate_mbsfn(q, sf_idx, cfi, SRSLTE_SF_NORM);
  } else {
    return SRSLTE_ERROR_INVALID_INPUTS;
  }
}