From cedc32fbb04093b8cbca13ab8aa6ff91255fb74a Mon Sep 17 00:00:00 2001 From: Xavier Arteaga Date: Mon, 28 Aug 2017 14:12:56 +0200 Subject: [PATCH] Added RI (CQI periodic reporting) send condition function --- lib/include/srslte/phy/phch/cqi.h | 9 ++- lib/src/phy/phch/cqi.c | 103 ++++++++++++++++++++++-------- 2 files changed, 83 insertions(+), 29 deletions(-) diff --git a/lib/include/srslte/phy/phch/cqi.h b/lib/include/srslte/phy/phch/cqi.h index f6857dfa0..593592f1c 100644 --- a/lib/include/srslte/phy/phch/cqi.h +++ b/lib/include/srslte/phy/phch/cqi.h @@ -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); diff --git a/lib/src/phy/phch/cqi.c b/lib/src/phy/phch/cqi.c index a684db8c9..0041c3fcb 100644 --- a/lib/src/phy/phch/cqi.c +++ b/lib/src/phy/phch/cqi.c @@ -159,46 +159,54 @@ int srslte_cqi_size(srslte_cqi_value_t *value) { return -1; } -bool srslte_cqi_send(uint32_t I_cqi_pmi, uint32_t tti) { - - uint32_t N_p = 0; - uint32_t N_offset = 0; - +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; + *N_p = 2; + *N_offset = I_cqi_pmi; } else if (I_cqi_pmi <= 6) { - N_p = 5; - N_offset = I_cqi_pmi - 2; + *N_p = 5; + *N_offset = I_cqi_pmi - 2; } else if (I_cqi_pmi <= 16) { - N_p = 10; - N_offset = I_cqi_pmi - 7; + *N_p = 10; + *N_offset = I_cqi_pmi - 7; } else if (I_cqi_pmi <= 36) { - N_p = 20; - N_offset = I_cqi_pmi - 17; + *N_p = 20; + *N_offset = I_cqi_pmi - 17; } else if (I_cqi_pmi <= 76) { - N_p = 40; - N_offset = I_cqi_pmi - 37; + *N_p = 40; + *N_offset = I_cqi_pmi - 37; } else if (I_cqi_pmi <= 156) { - N_p = 80; - N_offset = I_cqi_pmi - 77; + *N_p = 80; + *N_offset = I_cqi_pmi - 77; } else if (I_cqi_pmi <= 316) { - N_p = 160; - N_offset = I_cqi_pmi - 157; + *N_p = 160; + *N_offset = I_cqi_pmi - 157; } else if (I_cqi_pmi == 317) { - return false; + return false; } else if (I_cqi_pmi <= 349) { - N_p = 32; - N_offset = I_cqi_pmi - 318; + *N_p = 32; + *N_offset = I_cqi_pmi - 318; } else if (I_cqi_pmi <= 413) { - N_p = 64; - N_offset = I_cqi_pmi - 350; + *N_p = 64; + *N_offset = I_cqi_pmi - 350; } else if (I_cqi_pmi <= 541) { - N_p = 128; - N_offset = I_cqi_pmi - 414; + *N_p = 128; + *N_offset = I_cqi_pmi - 414; } 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 ((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};