void srslte_pdsch_free(srslte_pdsch_t *q) { int i; if (q->e) { free(q->e); } if (q->d) { free(q->d); } for (i = 0; i < q->cell.nof_ports; i++) { if (q->ce[i]) { free(q->ce[i]); } if (q->x[i]) { free(q->x[i]); } if (q->symbols[i]) { free(q->symbols[i]); } } for (i = 0; i < SRSLTE_NSUBFRAMES_X_FRAME; i++) { srslte_sequence_free(&q->seq[i]); } for (i = 0; i < 4; i++) { srslte_modem_table_free(&q->mod[i]); } srslte_precoding_free(&q->precoding); srslte_sch_free(&q->dl_sch); bzero(q, sizeof(srslte_pdsch_t)); }
void srslte_pcfich_free(srslte_pcfich_t *q) { for (int ns = 0; ns < SRSLTE_NSUBFRAMES_X_FRAME; ns++) { srslte_sequence_free(&q->seq[ns]); } srslte_modem_table_free(&q->mod); bzero(q, sizeof(srslte_pcfich_t)); }
void srslte_pucch_free(srslte_pucch_t *q) { if (q->rnti_is_set) { for (uint32_t sf_idx=0;sf_idx<SRSLTE_NSUBFRAMES_X_FRAME;sf_idx++) { srslte_sequence_free(&q->seq_f2[sf_idx]); } } srslte_modem_table_free(&q->mod); bzero(q, sizeof(srslte_pucch_t)); }
void srslte_pdsch_free(srslte_pdsch_t *q) { for (int i = 0; i < SRSLTE_MAX_CODEWORDS; i++) { if (q->e[i]) { free(q->e[i]); } if (q->d[i]) { free(q->d[i]); } if (q->csi[i]) { free(q->csi[i]); } } /* Free sch objects */ srslte_sch_free(&q->dl_sch); for (int i = 0; i < SRSLTE_MAX_PORTS; i++) { if (q->x[i]) { free(q->x[i]); } if (q->symbols[i]) { free(q->symbols[i]); } if (q->is_ue) { for (int j = 0; j < SRSLTE_MAX_PORTS; j++) { if (q->ce[i][j]) { free(q->ce[i][j]); } } } } if (q->users) { if (q->is_ue) { srslte_pdsch_free_rnti(q, 0); } else { for (int u=0;u<=SRSLTE_SIRNTI;u++) { if (q->users[u]) { srslte_pdsch_free_rnti(q, u); } } } free(q->users); } srslte_sequence_free(&q->tmp_seq); for (int i = 0; i < 4; i++) { srslte_modem_table_free(&q->mod[i]); } bzero(q, sizeof(srslte_pdsch_t)); }
void srslte_pmch_free(srslte_pmch_t *q) { uint16_t i; if (q->e) { free(q->e); } if (q->d) { free(q->d); } for (i = 0; i < SRSLTE_MAX_PORTS; i++) { if (q->x[i]) { free(q->x[i]); } for (int j=0;j<q->nof_rx_antennas;j++) { if (q->ce[i][j]) { free(q->ce[i][j]); } } } for (i=0;i<q->nof_rx_antennas;i++) { if (q->symbols[i]) { free(q->symbols[i]); } } if (q->seqs) { for (i=0; i<SRSLTE_MAX_MBSFN_AREA_IDS; i++) { if (q->seqs[i]) { srslte_pmch_free_area_id(q, i); } } free(q->seqs); } for (i = 0; i < 4; i++) { srslte_modem_table_free(&q->mod[i]); } srslte_sch_free(&q->dl_sch); bzero(q, sizeof(srslte_pmch_t)); }
int mod_stop(srslte_mod_hl* hl) { srslte_modem_table_free(&hl->obj); return 0; }
int main(int argc, char **argv) { int i; srslte_modem_table_t mod; uint8_t *input, *input_bytes, *output; cf_t *symbols, *symbols_bytes; float *llr, *llr2; parse_args(argc, argv); /* initialize objects */ if (srslte_modem_table_lte(&mod, modulation)) { fprintf(stderr, "Error initializing modem table\n"); exit(-1); } srslte_modem_table_bytes(&mod); /* check that num_bits is multiple of num_bits x symbol */ if (num_bits % mod.nbits_x_symbol) { fprintf(stderr, "Error num_bits must be multiple of %d\n", mod.nbits_x_symbol); exit(-1); } /* allocate buffers */ input = srslte_vec_malloc(sizeof(uint8_t) * num_bits); if (!input) { perror("malloc"); exit(-1); } input_bytes = srslte_vec_malloc(sizeof(uint8_t) * num_bits/8); if (!input_bytes) { perror("malloc"); exit(-1); } output = srslte_vec_malloc(sizeof(uint8_t) * num_bits); if (!output) { perror("malloc"); exit(-1); } symbols = srslte_vec_malloc(sizeof(cf_t) * num_bits / mod.nbits_x_symbol); if (!symbols) { perror("malloc"); exit(-1); } symbols_bytes = srslte_vec_malloc(sizeof(cf_t) * num_bits / mod.nbits_x_symbol); if (!symbols_bytes) { perror("malloc"); exit(-1); } llr = srslte_vec_malloc(sizeof(float) * num_bits); if (!llr) { perror("malloc"); exit(-1); } llr2 = srslte_vec_malloc(sizeof(float) * num_bits); if (!llr2) { perror("malloc"); exit(-1); } /* generate random data */ for (i=0;i<num_bits;i++) { input[i] = rand()%2; } /* modulate */ struct timeval t[3]; gettimeofday(&t[1], NULL); int ntrials = 100; for (int i=0;i<ntrials;i++) { srslte_mod_modulate(&mod, input, symbols, num_bits); } gettimeofday(&t[2], NULL); get_time_interval(t); printf("Bit: %d us\n", t[0].tv_usec); /* Test packed implementation */ srslte_bit_pack_vector(input, input_bytes, num_bits); gettimeofday(&t[1], NULL); for (int i=0;i<ntrials;i++) { srslte_mod_modulate_bytes(&mod, input_bytes, symbols_bytes, num_bits); } gettimeofday(&t[2], NULL); get_time_interval(t); printf("Byte: %d us\n", t[0].tv_usec); for (int i=0;i<num_bits/mod.nbits_x_symbol;i++) { if (symbols[i] != symbols_bytes[i]) { printf("error in symbol %d\n", i); exit(-1); } } printf("Symbols OK\n"); /* demodulate */ gettimeofday(&x, NULL); srslte_demod_soft_demodulate(modulation, symbols, llr, num_bits / mod.nbits_x_symbol); gettimeofday(&y, NULL); printf("\nElapsed time [ns]: %d\n", (int) y.tv_usec - (int) x.tv_usec); for (i=0;i<num_bits;i++) { output[i] = llr[i]>=0 ? 1 : 0; } /* check errors */ for (i=0;i<num_bits;i++) { if (input[i] != output[i]) { fprintf(stderr, "Error in bit %d\n", i); exit(-1); } } free(llr); free(symbols); free(symbols_bytes); free(output); free(input); free(input_bytes); srslte_modem_table_free(&mod); printf("Ok\n"); exit(0); }
void srslte_modem_table_reset(srslte_modem_table_t* q) { srslte_modem_table_free(q); srslte_modem_table_init(q); }