mirror of https://github.com/PentHertz/srsLTE.git
Added RI (CQI periodic reporting) send condition function
This commit is contained in:
parent
0b83ff7d68
commit
cedc32fbb0
|
@ -45,7 +45,8 @@
|
|||
typedef struct {
|
||||
bool configured;
|
||||
uint32_t pmi_idx;
|
||||
bool simul_cqi_ack;
|
||||
uint32_t ri_idx;
|
||||
bool simul_cqi_ack;
|
||||
bool format_is_subband;
|
||||
uint32_t subband_size;
|
||||
} srslte_cqi_periodic_cfg_t;
|
||||
|
@ -137,7 +138,11 @@ SRSLTE_API int srslte_cqi_format2_subband_unpack(uint8_t buff[SRSLTE_CQI_MAX_BIT
|
|||
srslte_cqi_format2_subband_t *msg);
|
||||
|
||||
SRSLTE_API bool srslte_cqi_send(uint32_t I_cqi_pmi,
|
||||
uint32_t tti);
|
||||
uint32_t tti);
|
||||
|
||||
SRSLTE_API bool srslte_ri_send(uint32_t I_cqi_pmi,
|
||||
uint32_t I_ri,
|
||||
uint32_t tti);
|
||||
|
||||
SRSLTE_API uint8_t srslte_cqi_from_snr(float snr);
|
||||
|
||||
|
|
|
@ -159,46 +159,54 @@ int srslte_cqi_size(srslte_cqi_value_t *value) {
|
|||
return -1;
|
||||
}
|
||||
|
||||
static bool srslte_cqi_get_N(uint32_t I_cqi_pmi, uint32_t *N_p, uint32_t *N_offset) {
|
||||
if (I_cqi_pmi <= 1) {
|
||||
*N_p = 2;
|
||||
*N_offset = I_cqi_pmi;
|
||||
} else if (I_cqi_pmi <= 6) {
|
||||
*N_p = 5;
|
||||
*N_offset = I_cqi_pmi - 2;
|
||||
} else if (I_cqi_pmi <= 16) {
|
||||
*N_p = 10;
|
||||
*N_offset = I_cqi_pmi - 7;
|
||||
} else if (I_cqi_pmi <= 36) {
|
||||
*N_p = 20;
|
||||
*N_offset = I_cqi_pmi - 17;
|
||||
} else if (I_cqi_pmi <= 76) {
|
||||
*N_p = 40;
|
||||
*N_offset = I_cqi_pmi - 37;
|
||||
} else if (I_cqi_pmi <= 156) {
|
||||
*N_p = 80;
|
||||
*N_offset = I_cqi_pmi - 77;
|
||||
} else if (I_cqi_pmi <= 316) {
|
||||
*N_p = 160;
|
||||
*N_offset = I_cqi_pmi - 157;
|
||||
} else if (I_cqi_pmi == 317) {
|
||||
return false;
|
||||
} else if (I_cqi_pmi <= 349) {
|
||||
*N_p = 32;
|
||||
*N_offset = I_cqi_pmi - 318;
|
||||
} else if (I_cqi_pmi <= 413) {
|
||||
*N_p = 64;
|
||||
*N_offset = I_cqi_pmi - 350;
|
||||
} else if (I_cqi_pmi <= 541) {
|
||||
*N_p = 128;
|
||||
*N_offset = I_cqi_pmi - 414;
|
||||
} else if (I_cqi_pmi <= 1023) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool srslte_cqi_send(uint32_t I_cqi_pmi, uint32_t tti) {
|
||||
|
||||
uint32_t N_p = 0;
|
||||
uint32_t N_offset = 0;
|
||||
|
||||
if (I_cqi_pmi <= 1) {
|
||||
N_p = 2;
|
||||
N_offset = I_cqi_pmi;
|
||||
} else if (I_cqi_pmi <= 6) {
|
||||
N_p = 5;
|
||||
N_offset = I_cqi_pmi - 2;
|
||||
} else if (I_cqi_pmi <= 16) {
|
||||
N_p = 10;
|
||||
N_offset = I_cqi_pmi - 7;
|
||||
} else if (I_cqi_pmi <= 36) {
|
||||
N_p = 20;
|
||||
N_offset = I_cqi_pmi - 17;
|
||||
} else if (I_cqi_pmi <= 76) {
|
||||
N_p = 40;
|
||||
N_offset = I_cqi_pmi - 37;
|
||||
} else if (I_cqi_pmi <= 156) {
|
||||
N_p = 80;
|
||||
N_offset = I_cqi_pmi - 77;
|
||||
} else if (I_cqi_pmi <= 316) {
|
||||
N_p = 160;
|
||||
N_offset = I_cqi_pmi - 157;
|
||||
} else if (I_cqi_pmi == 317) {
|
||||
return false;
|
||||
} else if (I_cqi_pmi <= 349) {
|
||||
N_p = 32;
|
||||
N_offset = I_cqi_pmi - 318;
|
||||
} else if (I_cqi_pmi <= 413) {
|
||||
N_p = 64;
|
||||
N_offset = I_cqi_pmi - 350;
|
||||
} else if (I_cqi_pmi <= 541) {
|
||||
N_p = 128;
|
||||
N_offset = I_cqi_pmi - 414;
|
||||
} else if (I_cqi_pmi <= 1023) {
|
||||
return false;
|
||||
|
||||
if (!srslte_cqi_get_N(I_cqi_pmi, &N_p, &N_offset)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (N_p) {
|
||||
if ((tti-N_offset)%N_p == 0) {
|
||||
return true;
|
||||
|
@ -207,6 +215,47 @@ bool srslte_cqi_send(uint32_t I_cqi_pmi, uint32_t tti) {
|
|||
return false;
|
||||
}
|
||||
|
||||
bool srslte_ri_send(uint32_t I_cqi_pmi, uint32_t I_ri, uint32_t tti) {
|
||||
|
||||
uint32_t M_ri = 0;
|
||||
uint32_t N_offset_ri = 0;
|
||||
uint32_t N_p = 0;
|
||||
uint32_t N_offset_p = 0;
|
||||
|
||||
if (!srslte_cqi_get_N(I_cqi_pmi, &N_p, &N_offset_p)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (I_ri <= 160) {
|
||||
M_ri = 1;
|
||||
N_offset_ri = I_ri;
|
||||
} else if (I_ri <= 161) {
|
||||
M_ri = 2;
|
||||
N_offset_ri = I_ri - 161;
|
||||
} else if (I_ri <= 322) {
|
||||
M_ri = 4;
|
||||
N_offset_ri = I_ri - 322;
|
||||
} else if (I_ri <= 483) {
|
||||
M_ri = 8;
|
||||
N_offset_ri = I_ri - 483;
|
||||
} else if (I_ri <= 644) {
|
||||
M_ri = 16;
|
||||
N_offset_ri = I_ri - 644;
|
||||
} else if (I_ri <= 805) {
|
||||
M_ri = 32;
|
||||
N_offset_ri = I_ri - 805;
|
||||
} else if (I_ri <= 966) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (M_ri) {
|
||||
if ((tti - N_offset_p + N_offset_ri) % (N_p * M_ri) == 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// CQI-to-Spectral Efficiency: 36.213 Table 7.2.3-1 */
|
||||
static float cqi_to_coderate[16] = {0, 0.1523, 0.2344, 0.3770, 0.6016, 0.8770, 1.1758, 1.4766, 1.9141, 2.4063, 2.7305, 3.3223, 3.9023, 4.5234, 5.1152, 5.5547};
|
||||
|
|
Loading…
Reference in New Issue