mirror of https://github.com/PentHertz/srsLTE.git
Included precoding information (pinfo) in grant and interfaced TM4
This commit is contained in:
parent
2c07a16189
commit
7e9e9a6a7d
|
@ -105,6 +105,7 @@ typedef struct SRSLTE_API {
|
|||
uint32_t Qm[SRSLTE_MAX_CODEWORDS];
|
||||
srslte_ra_mcs_t mcs[SRSLTE_MAX_CODEWORDS];
|
||||
uint32_t nof_tb;
|
||||
uint32_t pinfo;
|
||||
} srslte_ra_dl_grant_t;
|
||||
|
||||
/** Unpacked DCI message for DL grant */
|
||||
|
|
|
@ -141,19 +141,12 @@ SRSLTE_API int srslte_ue_dl_decode_estimate(srslte_ue_dl_t *q,
|
|||
uint32_t sf_idx,
|
||||
uint32_t *cfi);
|
||||
|
||||
SRSLTE_API int srslte_ue_dl_cfg_grant(srslte_ue_dl_t *q,
|
||||
srslte_ra_dl_grant_t *grant,
|
||||
uint32_t cfi,
|
||||
uint32_t sf_idx,
|
||||
int rvidx);
|
||||
|
||||
SRSLTE_API int srslte_ue_dl_cfg_grant_multi(srslte_ue_dl_t *q,
|
||||
srslte_ra_dl_grant_t *grant,
|
||||
uint32_t cfi,
|
||||
uint32_t sf_idx,
|
||||
int rvidx[SRSLTE_MAX_CODEWORDS],
|
||||
srslte_mimo_type_t mimo_type,
|
||||
uint32_t pinfo);
|
||||
SRSLTE_API int srslte_ue_dl_cfg_grant(srslte_ue_dl_t *q,
|
||||
srslte_ra_dl_grant_t *grant,
|
||||
uint32_t cfi,
|
||||
uint32_t sf_idx,
|
||||
int rvidx[SRSLTE_MAX_CODEWORDS],
|
||||
srslte_mimo_type_t mimo_type);
|
||||
|
||||
SRSLTE_API int srslte_ue_dl_find_ul_dci(srslte_ue_dl_t *q,
|
||||
uint32_t cfi,
|
||||
|
|
|
@ -528,6 +528,7 @@ static int dl_dci_to_grant_mcs(srslte_ra_dl_dci_t *dci, srslte_ra_dl_grant_t *gr
|
|||
grant->nof_tb++;
|
||||
}
|
||||
}
|
||||
grant->pinfo = dci->pinfo;
|
||||
|
||||
if (tbs < 0) {
|
||||
return SRSLTE_ERROR;
|
||||
|
|
|
@ -283,31 +283,23 @@ int srslte_ue_dl_decode_estimate(srslte_ue_dl_t *q, uint32_t sf_idx, uint32_t *c
|
|||
|
||||
|
||||
int srslte_ue_dl_cfg_grant(srslte_ue_dl_t *q, srslte_ra_dl_grant_t *grant, uint32_t cfi, uint32_t sf_idx,
|
||||
int rvidx) {
|
||||
int _rvidx [SRSLTE_MAX_CODEWORDS] = {1};
|
||||
_rvidx[0] = rvidx;
|
||||
|
||||
return srslte_pdsch_cfg_multi(&q->pdsch_cfg, q->cell, grant, cfi, sf_idx, _rvidx, SRSLTE_MIMO_TYPE_SINGLE_ANTENNA, 0);
|
||||
}
|
||||
|
||||
int srslte_ue_dl_cfg_grant_multi(srslte_ue_dl_t *q, srslte_ra_dl_grant_t *grant, uint32_t cfi, uint32_t sf_idx,
|
||||
int rvidx[SRSLTE_MAX_CODEWORDS], srslte_mimo_type_t mimo_type, uint32_t pinfo) {
|
||||
int rvidx[SRSLTE_MAX_CODEWORDS], srslte_mimo_type_t mimo_type) {
|
||||
uint32_t pmi = 0;
|
||||
|
||||
/* Translates Precoding Information (pinfo) to Precoding matrix Index (pmi) as 3GPP 36.212 Table 5.3.3.1.5-4 */
|
||||
if (mimo_type == SRSLTE_MIMO_TYPE_SPATIAL_MULTIPLEX) {
|
||||
if (grant->nof_tb == 1) {
|
||||
if (pinfo > 0 && pinfo < 5) {
|
||||
pmi = pinfo - 1;
|
||||
if (grant->pinfo > 0 && grant->pinfo < 5) {
|
||||
pmi = grant->pinfo - 1;
|
||||
} else {
|
||||
ERROR("Not Implemented (nof_tb=%d, pinfo=%d)", q->pdsch_cfg.grant.nof_tb, pinfo);
|
||||
ERROR("Not Implemented (nof_tb=%d, pinfo=%d)", q->pdsch_cfg.grant.nof_tb, grant->pinfo);
|
||||
return SRSLTE_ERROR;
|
||||
}
|
||||
} else {
|
||||
if (pinfo < 2) {
|
||||
pmi = pinfo;
|
||||
if (grant->pinfo < 2) {
|
||||
pmi = grant->pinfo;
|
||||
} else {
|
||||
ERROR("Not Implemented (nof_tb=%d, pinfo=%d)", q->pdsch_cfg.grant.nof_tb, pinfo);
|
||||
ERROR("Not Implemented (nof_tb=%d, pinfo=%d)", q->pdsch_cfg.grant.nof_tb, grant->pinfo);
|
||||
return SRSLTE_ERROR;
|
||||
}
|
||||
}
|
||||
|
@ -415,7 +407,7 @@ int srslte_ue_dl_decode_rnti_multi(srslte_ue_dl_t *q, cf_t *input[SRSLTE_MAX_POR
|
|||
return SRSLTE_ERROR;
|
||||
}
|
||||
|
||||
if (srslte_ue_dl_cfg_grant_multi(q, &grant, cfi, sf_idx, rvidx, mimo_type, dci_unpacked.pinfo)) {
|
||||
if (srslte_ue_dl_cfg_grant(q, &grant, cfi, sf_idx, rvidx, mimo_type)) {
|
||||
ERROR("Configuing PDSCH");
|
||||
return SRSLTE_ERROR;
|
||||
}
|
||||
|
|
|
@ -431,6 +431,7 @@ bool phch_worker::decode_pdsch_multi(srslte_ra_dl_grant_t *grant, uint8_t *paylo
|
|||
}
|
||||
|
||||
switch(phy->config->dedicated.antenna_info_explicit_value.tx_mode) {
|
||||
/* Implemented Tx Modes */
|
||||
case LIBLTE_RRC_TRANSMISSION_MODE_1:
|
||||
mimo_type = SRSLTE_MIMO_TYPE_SINGLE_ANTENNA;
|
||||
break;
|
||||
|
@ -447,9 +448,18 @@ bool phch_worker::decode_pdsch_multi(srslte_ra_dl_grant_t *grant, uint8_t *paylo
|
|||
valid_config = false;
|
||||
}
|
||||
break;
|
||||
case LIBLTE_RRC_TRANSMISSION_MODE_4:
|
||||
if (grant->nof_tb == 1) {
|
||||
mimo_type = (grant->pinfo == 0) ? SRSLTE_MIMO_TYPE_TX_DIVERSITY : SRSLTE_MIMO_TYPE_SPATIAL_MULTIPLEX;
|
||||
} else if (grant->nof_tb == 2) {
|
||||
mimo_type = SRSLTE_MIMO_TYPE_SPATIAL_MULTIPLEX;
|
||||
} else {
|
||||
Error("Wrong number of transport blocks (%d) for TM4\n", grant->nof_tb);
|
||||
valid_config = false;
|
||||
}
|
||||
break;
|
||||
|
||||
/* Not implemented cases */
|
||||
case LIBLTE_RRC_TRANSMISSION_MODE_4:
|
||||
case LIBLTE_RRC_TRANSMISSION_MODE_5:
|
||||
case LIBLTE_RRC_TRANSMISSION_MODE_6:
|
||||
case LIBLTE_RRC_TRANSMISSION_MODE_7:
|
||||
|
@ -468,7 +478,7 @@ bool phch_worker::decode_pdsch_multi(srslte_ra_dl_grant_t *grant, uint8_t *paylo
|
|||
|
||||
/* Setup PDSCH configuration for this CFI, SFIDX and RVIDX */
|
||||
if (valid_config) {
|
||||
if (!srslte_ue_dl_cfg_grant_multi(&ue_dl, grant, cfi, tti%10, rv, mimo_type, 0)) {
|
||||
if (!srslte_ue_dl_cfg_grant(&ue_dl, grant, cfi, tti%10, rv, mimo_type)) {
|
||||
if (ue_dl.pdsch_cfg.grant.mcs[0].mod > 0 && ue_dl.pdsch_cfg.grant.mcs[0].tbs >= 0) {
|
||||
|
||||
float noise_estimate = srslte_chest_dl_get_noise_estimate(&ue_dl.chest);
|
||||
|
|
Loading…
Reference in New Issue