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; } }
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; } }