mirror of https://github.com/PentHertz/srsLTE.git
Fixed PDSCH test with OFDM
This commit is contained in:
parent
31496ab44c
commit
63df8d4c19
|
@ -142,6 +142,7 @@ void parse_args(int argc, char **argv) {
|
|||
static uint8_t *data_tx[SRSLTE_MAX_CODEWORDS] = {NULL};
|
||||
static uint8_t *data_rx[SRSLTE_MAX_CODEWORDS] = {NULL};
|
||||
cf_t *ce[SRSLTE_MAX_PORTS][SRSLTE_MAX_PORTS];
|
||||
cf_t *ce_dummy[SRSLTE_MAX_PORTS][SRSLTE_MAX_PORTS];
|
||||
srslte_softbuffer_rx_t *softbuffers_rx[SRSLTE_MAX_CODEWORDS];
|
||||
srslte_ra_dl_grant_t grant;
|
||||
srslte_pdsch_cfg_t pdsch_cfg;
|
||||
|
@ -152,7 +153,8 @@ cf_t *rx_sf_symbols[SRSLTE_MAX_PORTS];
|
|||
cf_t *tx_slot_symbols[SRSLTE_MAX_PORTS];
|
||||
cf_t *rx_slot_symbols[SRSLTE_MAX_PORTS];
|
||||
srslte_pdsch_t pdsch_tx, pdsch_rx;
|
||||
srslte_ofdm_t ofdm_tx, ofdm_rx;
|
||||
srslte_ofdm_t ofdm_tx[SRSLTE_MAX_PORTS], ofdm_rx[SRSLTE_MAX_PORTS];
|
||||
srslte_chest_dl_t chest_dl;
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
uint32_t i, j, k;
|
||||
|
@ -169,6 +171,7 @@ int main(int argc, char **argv) {
|
|||
bzero(&pdsch_rx, sizeof(srslte_pdsch_t));
|
||||
bzero(&pdsch_cfg, sizeof(srslte_pdsch_cfg_t));
|
||||
bzero(ce, sizeof(cf_t*)*SRSLTE_MAX_PORTS);
|
||||
bzero(ce_dummy, sizeof(cf_t*)*SRSLTE_MAX_PORTS);
|
||||
bzero(tx_slot_symbols, sizeof(cf_t*)*SRSLTE_MAX_PORTS);
|
||||
bzero(rx_slot_symbols, sizeof(cf_t*)*SRSLTE_MAX_PORTS);
|
||||
|
||||
|
@ -213,22 +216,6 @@ int main(int argc, char **argv) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
#ifdef DO_OFDM
|
||||
srslte_ofdm_tx_init(&ofdm_tx, cell.cp, cell.nof_prb);
|
||||
srslte_ofdm_rx_init(&ofdm_rx, cell.cp, cell.nof_prb);
|
||||
|
||||
srslte_ofdm_set_normalize(&ofdm_tx, true);
|
||||
srslte_ofdm_set_normalize(&ofdm_rx, true);
|
||||
|
||||
for (i = 0; i < cell.nof_ports; i++) {
|
||||
tx_sf_symbols[i] = srslte_vec_malloc(sizeof(cf_t) * SRSLTE_SF_LEN_PRB(cell.nof_prb));
|
||||
}
|
||||
|
||||
for (i = 0; i < nof_rx_antennas; i++) {
|
||||
rx_sf_symbols[i] = srslte_vec_malloc(sizeof(cf_t) * SRSLTE_SF_LEN_PRB(cell.nof_prb));
|
||||
}
|
||||
#endif /* DO_OFDM */
|
||||
|
||||
/* Configure PDSCH */
|
||||
if (srslte_pdsch_cfg_mimo(&pdsch_cfg, cell, &grant, cfi, subframe, rv_idx, mimo_type, pmi)) {
|
||||
fprintf(stderr, "Error configuring PDSCH\n");
|
||||
|
@ -243,6 +230,11 @@ int main(int argc, char **argv) {
|
|||
perror("srslte_vec_malloc");
|
||||
goto quit;
|
||||
}
|
||||
ce_dummy[i][j] = srslte_vec_malloc(sizeof(cf_t) * NOF_CE_SYMBOLS);
|
||||
if (!ce_dummy[i][j]) {
|
||||
perror("srslte_vec_malloc");
|
||||
goto quit;
|
||||
}
|
||||
for (k = 0; k < NOF_CE_SYMBOLS; k++) {
|
||||
ce[i][j][k] = (i == j) ? 1.0f : 0.0f;
|
||||
}
|
||||
|
@ -254,6 +246,42 @@ int main(int argc, char **argv) {
|
|||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < cell.nof_ports; i++) {
|
||||
tx_slot_symbols[i] = calloc(SRSLTE_SF_LEN_RE(cell.nof_prb, cell.cp), sizeof(cf_t));
|
||||
if (!tx_slot_symbols[i]) {
|
||||
perror("srslte_vec_malloc");
|
||||
goto quit;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DO_OFDM
|
||||
for (i = 0; i < cell.nof_ports; i++) {
|
||||
tx_sf_symbols[i] = srslte_vec_malloc(sizeof(cf_t) * SRSLTE_SF_LEN_PRB(cell.nof_prb));
|
||||
}
|
||||
|
||||
for (i = 0; i < nof_rx_antennas; i++) {
|
||||
rx_sf_symbols[i] = srslte_vec_malloc(sizeof(cf_t) * SRSLTE_SF_LEN_PRB(cell.nof_prb));
|
||||
}
|
||||
|
||||
for (k = 0; k < cell.nof_ports; k++) {
|
||||
srslte_ofdm_tx_init(&ofdm_tx[k], cell.cp, tx_slot_symbols[k], tx_sf_symbols[k], cell.nof_prb);
|
||||
srslte_ofdm_set_normalize(&ofdm_tx[k], true);
|
||||
}
|
||||
|
||||
for (k = 0; k < nof_rx_antennas; k++) {
|
||||
srslte_ofdm_rx_init(&ofdm_rx[k], cell.cp, rx_sf_symbols[k], rx_slot_symbols[k], cell.nof_prb);
|
||||
srslte_ofdm_set_normalize(&ofdm_rx[k], true);
|
||||
}
|
||||
|
||||
|
||||
if (srslte_chest_dl_init(&chest_dl, cell.nof_prb)) {
|
||||
goto quit;
|
||||
}
|
||||
|
||||
srslte_chest_dl_set_cell(&chest_dl, cell);
|
||||
srslte_chest_dl_set_smooth_filter_gauss(&chest_dl, 4, 1.0f);
|
||||
srslte_chest_dl_average_subframe(&chest_dl, true);
|
||||
#endif /* DO_OFDM */
|
||||
|
||||
for (i = 0; i < SRSLTE_MAX_TB; i++) {
|
||||
if (grant.tb_en[i]) {
|
||||
|
@ -376,14 +404,6 @@ int main(int argc, char **argv) {
|
|||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < cell.nof_ports; i++) {
|
||||
tx_slot_symbols[i] = calloc(SRSLTE_SF_LEN_RE(cell.nof_prb, cell.cp), sizeof(cf_t));
|
||||
if (!tx_slot_symbols[i]) {
|
||||
perror("srslte_vec_malloc");
|
||||
goto quit;
|
||||
}
|
||||
}
|
||||
|
||||
for (int tb = 0; tb < SRSLTE_MAX_CODEWORDS; tb++) {
|
||||
if (grant.tb_en[tb]) {
|
||||
for (int byte = 0; byte < grant.mcs[tb].tbs / 8; byte++) {
|
||||
|
@ -421,7 +441,7 @@ int main(int argc, char **argv) {
|
|||
#ifdef DO_OFDM
|
||||
for (i = 0; i < cell.nof_ports; i++) {
|
||||
/* For each Tx antenna modulate OFDM */
|
||||
srslte_ofdm_tx_sf(&ofdm_tx, tx_slot_symbols[i], tx_sf_symbols[i]);
|
||||
srslte_ofdm_tx_sf(&ofdm_tx[i]);
|
||||
}
|
||||
|
||||
/* combine outputs */
|
||||
|
@ -455,8 +475,9 @@ int main(int argc, char **argv) {
|
|||
#ifdef DO_OFDM
|
||||
/* For each Rx antenna demodulate OFDM */
|
||||
for (i = 0; i < nof_rx_antennas; i++) {
|
||||
srslte_ofdm_rx_sf(&ofdm_rx, tx_sf_symbols[i], rx_slot_symbols[i]);
|
||||
srslte_ofdm_rx_sf(&ofdm_rx[i]);
|
||||
}
|
||||
srslte_chest_dl_estimate_multi(&chest_dl, rx_slot_symbols, ce_dummy, subframe, nof_rx_antennas);
|
||||
#endif
|
||||
for (i = 0; i < SRSLTE_MAX_CODEWORDS; i++) {
|
||||
if (grant.tb_en[i]) {
|
||||
|
@ -506,6 +527,13 @@ int main(int argc, char **argv) {
|
|||
ret = SRSLTE_SUCCESS;
|
||||
|
||||
quit:
|
||||
for (i = 0; i < cell.nof_ports; i++) {
|
||||
srslte_ofdm_tx_free(&ofdm_tx[i]);
|
||||
}
|
||||
for (i = 0; i < nof_rx_antennas; i++) {
|
||||
srslte_ofdm_rx_free(&ofdm_rx[i]);
|
||||
}
|
||||
srslte_chest_dl_free(&chest_dl);
|
||||
srslte_pdsch_free(&pdsch_tx);
|
||||
srslte_pdsch_free(&pdsch_rx);
|
||||
for (i = 0; i < SRSLTE_MAX_CODEWORDS; i++) {
|
||||
|
@ -533,6 +561,9 @@ quit:
|
|||
if (ce[i][j]) {
|
||||
free(ce[i][j]);
|
||||
}
|
||||
if (ce_dummy[i][j]) {
|
||||
free(ce_dummy[i][j]);
|
||||
}
|
||||
}
|
||||
if (tx_slot_symbols[i]) {
|
||||
free(tx_slot_symbols[i]);
|
||||
|
|
Loading…
Reference in New Issue