Added RI (CQI periodic reporting) send condition function

master
Xavier Arteaga 7 years ago
parent 0b83ff7d68
commit cedc32fbb0

@ -45,6 +45,7 @@
typedef struct { typedef struct {
bool configured; bool configured;
uint32_t pmi_idx; uint32_t pmi_idx;
uint32_t ri_idx;
bool simul_cqi_ack; bool simul_cqi_ack;
bool format_is_subband; bool format_is_subband;
uint32_t subband_size; uint32_t subband_size;
@ -139,6 +140,10 @@ SRSLTE_API int srslte_cqi_format2_subband_unpack(uint8_t buff[SRSLTE_CQI_MAX_BIT
SRSLTE_API bool srslte_cqi_send(uint32_t I_cqi_pmi, 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); SRSLTE_API uint8_t srslte_cqi_from_snr(float snr);
SRSLTE_API float srslte_cqi_to_coderate(uint32_t cqi); SRSLTE_API float srslte_cqi_to_coderate(uint32_t cqi);

@ -159,46 +159,54 @@ int srslte_cqi_size(srslte_cqi_value_t *value) {
return -1; return -1;
} }
bool srslte_cqi_send(uint32_t I_cqi_pmi, uint32_t tti) { static bool srslte_cqi_get_N(uint32_t I_cqi_pmi, uint32_t *N_p, uint32_t *N_offset) {
uint32_t N_p = 0;
uint32_t N_offset = 0;
if (I_cqi_pmi <= 1) { if (I_cqi_pmi <= 1) {
N_p = 2; *N_p = 2;
N_offset = I_cqi_pmi; *N_offset = I_cqi_pmi;
} else if (I_cqi_pmi <= 6) { } else if (I_cqi_pmi <= 6) {
N_p = 5; *N_p = 5;
N_offset = I_cqi_pmi - 2; *N_offset = I_cqi_pmi - 2;
} else if (I_cqi_pmi <= 16) { } else if (I_cqi_pmi <= 16) {
N_p = 10; *N_p = 10;
N_offset = I_cqi_pmi - 7; *N_offset = I_cqi_pmi - 7;
} else if (I_cqi_pmi <= 36) { } else if (I_cqi_pmi <= 36) {
N_p = 20; *N_p = 20;
N_offset = I_cqi_pmi - 17; *N_offset = I_cqi_pmi - 17;
} else if (I_cqi_pmi <= 76) { } else if (I_cqi_pmi <= 76) {
N_p = 40; *N_p = 40;
N_offset = I_cqi_pmi - 37; *N_offset = I_cqi_pmi - 37;
} else if (I_cqi_pmi <= 156) { } else if (I_cqi_pmi <= 156) {
N_p = 80; *N_p = 80;
N_offset = I_cqi_pmi - 77; *N_offset = I_cqi_pmi - 77;
} else if (I_cqi_pmi <= 316) { } else if (I_cqi_pmi <= 316) {
N_p = 160; *N_p = 160;
N_offset = I_cqi_pmi - 157; *N_offset = I_cqi_pmi - 157;
} else if (I_cqi_pmi == 317) { } else if (I_cqi_pmi == 317) {
return false; return false;
} else if (I_cqi_pmi <= 349) { } else if (I_cqi_pmi <= 349) {
N_p = 32; *N_p = 32;
N_offset = I_cqi_pmi - 318; *N_offset = I_cqi_pmi - 318;
} else if (I_cqi_pmi <= 413) { } else if (I_cqi_pmi <= 413) {
N_p = 64; *N_p = 64;
N_offset = I_cqi_pmi - 350; *N_offset = I_cqi_pmi - 350;
} else if (I_cqi_pmi <= 541) { } else if (I_cqi_pmi <= 541) {
N_p = 128; *N_p = 128;
N_offset = I_cqi_pmi - 414; *N_offset = I_cqi_pmi - 414;
} else if (I_cqi_pmi <= 1023) { } else if (I_cqi_pmi <= 1023) {
return false; 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 (!srslte_cqi_get_N(I_cqi_pmi, &N_p, &N_offset)) {
return false;
}
if (N_p) { if (N_p) {
if ((tti-N_offset)%N_p == 0) { if ((tti-N_offset)%N_p == 0) {
return true; return true;
@ -207,6 +215,47 @@ bool srslte_cqi_send(uint32_t I_cqi_pmi, uint32_t tti) {
return false; 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 */ // 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}; 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…
Cancel
Save