Exemple #1
0
/* Free DFT plans for transform precoding */
void srslte_dft_precoding_free(srslte_dft_precoding_t  *q) 
{
  for (uint32_t i=1;i<=q->max_prb;i++) {
    if(srslte_dft_precoding_valid_prb(i)) {      
      srslte_dft_plan_free(&q->dft_plan[i]);
      srslte_dft_plan_free(&q->idft_plan[i]);        
    }
  }  
  bzero(q, sizeof(srslte_dft_precoding_t));
}
Exemple #2
0
int srslte_pss_synch_init_N_id_2(cf_t *pss_signal_freq, cf_t *pss_signal_time, 
                                 uint32_t N_id_2, uint32_t fft_size, int cfo_i) {
  srslte_dft_plan_t plan;
  cf_t pss_signal_pad[2048];
  int ret = SRSLTE_ERROR_INVALID_INPUTS;
  
  if (srslte_N_id_2_isvalid(N_id_2)    && 
      fft_size                  <= 2048) 
  {
    
    srslte_pss_generate(pss_signal_freq, N_id_2);

    bzero(pss_signal_pad, fft_size * sizeof(cf_t));
    bzero(pss_signal_time, fft_size * sizeof(cf_t));
    memcpy(&pss_signal_pad[(fft_size-SRSLTE_PSS_LEN)/2+cfo_i], pss_signal_freq, SRSLTE_PSS_LEN * sizeof(cf_t));

    /* Convert signal into the time domain */    
    if (srslte_dft_plan(&plan, fft_size, SRSLTE_DFT_BACKWARD, SRSLTE_DFT_COMPLEX)) {
      return SRSLTE_ERROR;
    }
    
    srslte_dft_plan_set_mirror(&plan, true);
    srslte_dft_plan_set_dc(&plan, true);
    srslte_dft_plan_set_norm(&plan, true);
    srslte_dft_run_c(&plan, pss_signal_pad, pss_signal_time);

    srslte_vec_conj_cc(pss_signal_time, pss_signal_time, fft_size);
    srslte_vec_sc_prod_cfc(pss_signal_time, 1.0/SRSLTE_PSS_LEN, pss_signal_time, fft_size);

    srslte_dft_plan_free(&plan);
        
    ret = SRSLTE_SUCCESS;
  }
  return ret;
}
Exemple #3
0
void srslte_conv_fft_cc_free(srslte_conv_fft_cc_t *q) {
  if (q->input_fft) {
    free(q->input_fft);
  }
  if (q->filter_fft) {
    free(q->filter_fft);
  }
  if (q->output_fft) {
    free(q->output_fft);
  }
  srslte_dft_plan_free(&q->input_plan);
  srslte_dft_plan_free(&q->filter_plan);
  srslte_dft_plan_free(&q->output_plan);
  
  bzero(q, sizeof(srslte_conv_fft_cc_t));

}
Exemple #4
0
void srslte_pss_free(srslte_pss_t *q) {
  uint32_t i;

  if (q) {
    for (i=0;i<3;i++) {
      if (q->pss_signal_time[i]) {
        free(q->pss_signal_time[i]);
      }
      if(q->pss_signal_freq_full[i]){
        free(q->pss_signal_freq_full[i]);
      }
    }
  #ifdef CONVOLUTION_FFT
    srslte_conv_fft_cc_free(&q->conv_fft);

  #endif
    if (q->tmp_input) {
      free(q->tmp_input);
    }
    if (q->conv_output) {
      free(q->conv_output);
    }
    if (q->conv_output_abs) {
      free(q->conv_output_abs);
    }
    if (q->conv_output_avg) {
      free(q->conv_output_avg);
    }

    srslte_dft_plan_free(&q->dftp_input);
    srslte_dft_plan_free(&q->idftp_input);

    if(q->decimate > 1)
    {
        srslte_filt_decim_cc_free(&q->filter);
        free(q->filter.filter_output);
        free(q->filter.downsampled_input);
    }


    bzero(q, sizeof(srslte_pss_t));
  }
}
Exemple #5
0
void srslte_ofdm_free_(srslte_ofdm_t *q) {
  srslte_dft_plan_free(&q->fft_plan);
  if (q->tmp) {
    free(q->tmp);
  }
  if (q->shift_buffer) {
    free(q->shift_buffer);
  }
  bzero(q, sizeof(srslte_ofdm_t));
}
Exemple #6
0
int srslte_prach_free(srslte_prach_t *p) {
  free(p->prach_bins);
  free(p->corr_spec);
  free(p->corr);
  srslte_dft_plan_free(p->ifft);
  free(p->ifft);
  free(p->ifft_in);
  free(p->ifft_out);
  srslte_dft_plan_free(p->fft);
  free(p->fft);
  srslte_dft_plan_free(p->zc_fft);
  free(p->zc_fft);
  srslte_dft_plan_free(p->zc_ifft);
  free(p->zc_ifft);

  bzero(p, sizeof(srslte_prach_t));

  return 0;
}
Exemple #7
0
int srslte_sss_synch_realloc(srslte_sss_synch_t *q, uint32_t fft_size) {
  if (q                 != NULL  &&
      fft_size          <= 2048)
  {
    srslte_dft_plan_free(&q->dftp_input);
    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_norm(&q->dftp_input, true);
    srslte_dft_plan_set_dc(&q->dftp_input, true);
    
    q->fft_size = fft_size;
    return SRSLTE_SUCCESS;
  }
  return SRSLTE_ERROR_INVALID_INPUTS;
}
Exemple #8
0
void srslte_sss_synch_free(srslte_sss_synch_t *q) {
  srslte_dft_plan_free(&q->dftp_input);
  bzero(q, sizeof(srslte_sss_synch_t));
}