Fix UE/ENB DL NR

This commit is contained in:
Xavier Arteaga 2020-11-12 12:48:00 +01:00 committed by Andre Puschmann
parent 8de2870788
commit 0396ebae17
6 changed files with 26 additions and 23 deletions

View File

@ -725,7 +725,7 @@ int srslte_dmrs_pdsch_estimate(srslte_dmrs_pdsch_t* q,
// Time domain hold, extract resource elements estimates for PDSCH // Time domain hold, extract resource elements estimates for PDSCH
uint32_t symbol_idx = 0; uint32_t symbol_idx = 0;
uint32_t count = 0; uint32_t count = 0;
for (uint32_t l = grant->S; l < grant->L; l++) { for (uint32_t l = grant->S; l < grant->S + grant->L; l++) {
while (symbols[symbol_idx] < l && symbol_idx < nof_symbols) { while (symbols[symbol_idx] < l && symbol_idx < nof_symbols) {
symbol_idx++; symbol_idx++;
} }

View File

@ -119,7 +119,7 @@ int srslte_pdsch_nr_set_carrier(srslte_pdsch_nr_t* q,
for (uint32_t i = 0; i < max_cw; i++) { for (uint32_t i = 0; i < max_cw; i++) {
if (q->b[i] == NULL) { if (q->b[i] == NULL) {
q->b[i] = srslte_vec_u8_malloc(SRSLTE_SLOT_MAX_LEN_RE_NR); q->b[i] = srslte_vec_u8_malloc(SRSLTE_SLOT_MAX_NOF_BITS_NR);
if (q->b[i] == NULL) { if (q->b[i] == NULL) {
ERROR("Malloc"); ERROR("Malloc");
return SRSLTE_ERROR; return SRSLTE_ERROR;
@ -210,9 +210,9 @@ static uint32_t srslte_pdsch_nr_cp_dmrs_type1(const srslte_pdsch_nr_t* q,
if (grant->prb_idx[i]) { if (grant->prb_idx[i]) {
for (uint32_t j = 0; j < SRSLTE_NRE; j += 2) { for (uint32_t j = 0; j < SRSLTE_NRE; j += 2) {
if (put) { if (put) {
sf_symbols[i * SRSLTE_NRE + delta + j] = symbols[count++]; sf_symbols[i * SRSLTE_NRE + delta + j + 1] = symbols[count++];
} else { } else {
symbols[count++] = sf_symbols[i * SRSLTE_NRE + delta + j]; symbols[count++] = sf_symbols[i * SRSLTE_NRE + delta + j + 1];
} }
} }
} }
@ -562,20 +562,32 @@ int srslte_pdsch_nr_decode(srslte_pdsch_nr_t* q,
uint32_t nof_re = srslte_ra_dl_nr_slot_nof_re(cfg, grant); uint32_t nof_re = srslte_ra_dl_nr_slot_nof_re(cfg, grant);
if (channel->nof_re != nof_re) {
ERROR("Inconsistent number of RE (%d!=%d)\n", channel->nof_re, nof_re);
return SRSLTE_ERROR;
}
// Demapping from virtual to physical resource blocks // Demapping from virtual to physical resource blocks
cf_t** x = (grant->nof_layers > 1) ? q->x : q->d; uint32_t nof_re_get = srslte_pdsch_nr_get(q, cfg, grant, q->x[0], sf_symbols[0]);
uint32_t nof_re_get = srslte_pdsch_nr_get(q, cfg, grant, x[0], sf_symbols[0]);
if (nof_re_get != nof_re) { if (nof_re_get != nof_re) {
ERROR("Inconsistent number of RE (%d!=%d)\n", nof_re_get, nof_re); ERROR("Inconsistent number of RE (%d!=%d)\n", nof_re_get, nof_re);
return SRSLTE_ERROR; return SRSLTE_ERROR;
} }
if (SRSLTE_DEBUG_ENABLED && srslte_verbose >= SRSLTE_VERBOSE_INFO && !handler_registered) {
INFO("ce=");
srslte_vec_fprint_c(stdout, channel->ce[0][0], nof_re);
INFO("x=");
srslte_vec_fprint_c(stdout, q->x[0], nof_re);
}
// Demapping to virtual resource blocks // Demapping to virtual resource blocks
// ... Not implemented // ... Not implemented
// Antenna port demapping // Antenna port demapping
// ... Not implemented // ... Not implemented
srslte_predecoding_single(x[0], channel->ce[0][0], x[0], NULL, nof_re, 1.0f, channel->noise_estimate); srslte_predecoding_type(
q->x, channel->ce, q->d, NULL, 1, 1, 1, 0, nof_re, SRSLTE_TXSCHEME_PORT0, 1.0f, channel->noise_estimate);
// Layer demapping // Layer demapping
if (grant->nof_layers > 1) { if (grant->nof_layers > 1) {

View File

@ -628,4 +628,4 @@ add_test(dlsch_nr_test dlsch_nr_test -m 0 -n 1)
add_executable(pdsch_nr_test pdsch_nr_test.c) add_executable(pdsch_nr_test pdsch_nr_test.c)
target_link_libraries(pdsch_nr_test srslte_phy) target_link_libraries(pdsch_nr_test srslte_phy)
add_test(pdsch_nr_test pdsch_nr_test -n 6 -m 20) add_test(pdsch_nr_test pdsch_nr_test -p 6 -m 20)

View File

@ -103,14 +103,14 @@ int main(int argc, char** argv)
goto clean_exit; goto clean_exit;
} }
if (srslte_sch_nr_init_tx(&sch_nr_tx) < SRSLTE_SUCCESS) { srslte_sch_nr_args_t args = {};
args.disable_simd = false;
if (srslte_sch_nr_init_tx(&sch_nr_tx, &args) < SRSLTE_SUCCESS) {
ERROR("Error initiating SCH NR for Tx\n"); ERROR("Error initiating SCH NR for Tx\n");
goto clean_exit; goto clean_exit;
} }
srslte_sch_nr_args_t decoder_cfg = {}; if (srslte_sch_nr_init_rx(&sch_nr_rx, &args) < SRSLTE_SUCCESS) {
decoder_cfg.disable_simd = false;
if (srslte_sch_nr_init_rx(&sch_nr_rx, &decoder_cfg) < SRSLTE_SUCCESS) {
ERROR("Error initiating SCH NR for Rx\n"); ERROR("Error initiating SCH NR for Rx\n");
goto clean_exit; goto clean_exit;
} }

View File

@ -158,18 +158,9 @@ int srslte_ue_dl_nr_pdsch_get(srslte_ue_dl_nr_t* q,
return SRSLTE_ERROR; return SRSLTE_ERROR;
} }
if (SRSLTE_DEBUG_ENABLED && srslte_verbose >= SRSLTE_VERBOSE_INFO && !handler_registered) {
printf("ce[0][0]=");
srslte_vec_fprint_c(stdout, q->chest.ce[0][0], q->chest.nof_re);
}
for (uint32_t i = 0; i < grant->tb->nof_re; i++) {
q->chest.ce[0][0][i] = (1536);
}
if (srslte_pdsch_nr_decode(&q->pdsch, cfg, grant, &q->chest, q->sf_symbols, res) < SRSLTE_SUCCESS) { if (srslte_pdsch_nr_decode(&q->pdsch, cfg, grant, &q->chest, q->sf_symbols, res) < SRSLTE_SUCCESS) {
return SRSLTE_ERROR; return SRSLTE_ERROR;
} }
return SRSLTE_SUCCESS; return SRSLTE_SUCCESS;
} }

View File

@ -64,4 +64,4 @@ set_tests_properties(pucch_ca_test PROPERTIES LABELS "long;phy")
add_executable(phy_dl_nr_test phy_dl_nr_test.c) add_executable(phy_dl_nr_test phy_dl_nr_test.c)
target_link_libraries(phy_dl_nr_test srslte_phy srslte_common srslte_phy ${SEC_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries(phy_dl_nr_test srslte_phy srslte_common srslte_phy ${SEC_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
add_test(phy_dl_nr_test phy_dl_nr_test) add_test(phy_dl_nr_test phy_dl_nr_test -p 100 -m 28)