Initial implementation of the 5G NR PDCCH DMRS encoding

This commit is contained in:
Xavier Arteaga 2020-09-28 17:14:19 +02:00 committed by Xavier Arteaga
parent 29ad2427d9
commit 44ae70dcc6
1 changed files with 37 additions and 0 deletions

View File

@ -161,3 +161,40 @@ dmrs_pdcch_put_symbol_noninterleaved(const srslte_nr_pdcch_cfg_t* cfg, uint32_t
}
}
}
int srslte_dmrs_pdcch_put(const srslte_nr_pdcch_cfg_t* cfg, const srslte_dl_sf_cfg_t* dl_sf, cf_t* sf_symbols)
{
int ncce = srslte_pdcch_get_ncce(cfg, dl_sf);
if (ncce < SRSLTE_SUCCESS) {
return SRSLTE_ERROR;
}
if (cfg->coreset.mapping_type == srslte_coreset_mapping_type_interleaved) {
ERROR("Error interleaved CORESET mapping is not currently implemented\n");
return SRSLTE_ERROR;
}
if (cfg->coreset.duration < SRSLTE_CORESET_DURATION_MIN || cfg->coreset.duration > SRSLTE_CORESET_DURATION_MAX) {
ERROR("Error CORESET duration %d is out-of-bounds (%d,%d)\n",
cfg->coreset.duration,
SRSLTE_CORESET_DURATION_MIN,
SRSLTE_CORESET_DURATION_MAX);
return SRSLTE_ERROR;
}
// Use cell id if the DMR scrambling id is not provided by higher layers
uint32_t n_id = cfg->carrier.id;
if (cfg->coreset.dmrs_scrambling_id_present) {
n_id = cfg->coreset.dmrs_scrambling_id;
}
for (uint32_t l = 0; l < cfg->coreset.duration; l++) {
// Get Cin
uint32_t cinit = dmrs_pdcch_get_cinit(dl_sf->tti % SRSLTE_NR_NSLOTS_PER_FRAME(cfg->carrier.numerology), l, n_id);
// Put data
dmrs_pdcch_put_symbol_noninterleaved(cfg, cinit, ncce, &sf_symbols[cfg->carrier.nof_prb * SRSLTE_NRE * l]);
}
return SRSLTE_SUCCESS;
}