|
|
@ -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};
|
|
|
|