From 78341d9db1cfa465811ae32527169408426762a8 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Mon, 25 Jan 2021 14:52:44 -0800 Subject: [PATCH] Updated bler table lookup mechanism and logs --- openair2/PHY_INTERFACE/phy_stub_UE.c | 20 ++++++++++++++------ targets/RT/USER/lte-ue.c | 2 +- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/openair2/PHY_INTERFACE/phy_stub_UE.c b/openair2/PHY_INTERFACE/phy_stub_UE.c index 8d7f078bd9..db8519acc0 100644 --- a/openair2/PHY_INTERFACE/phy_stub_UE.c +++ b/openair2/PHY_INTERFACE/phy_stub_UE.c @@ -1321,7 +1321,7 @@ void *ue_standalone_pnf_task(void *context) abort(); } sf_rnti_mcs[sf].sinr = ch_info->sinr; - LOG_A(MAC, "Received_SINR = %f\n",ch_info->sinr); + LOG_D(MAC, "Received_SINR = %f\n",ch_info->sinr); } else { @@ -2050,15 +2050,20 @@ static bool did_drop_transport_block(int sf, uint16_t rnti) static float get_bler_val(uint8_t mcs, int sinr) { + // 4th col = dropped packets, 5th col = total packets + float bler_val = 0.0; + CHECK_INDEX(bler_data, mcs); if (sinr < (int)(bler_data[mcs].bler_table[0][0] * 10)) { LOG_I(MAC, "MCS %d table. SINR is smaller than lowest SINR, bler_val is set based on lowest SINR in table\n", mcs); - return bler_data[mcs].bler_table[0][3]; + bler_val = bler_data[mcs].bler_table[0][4] / bler_data[mcs].bler_table[0][5]; + return bler_val; } if (sinr > (int)(bler_data[mcs].bler_table[bler_data[mcs].length - 1][0] * 10)) { LOG_I(MAC, "MCS %d table. SINR is greater than largest SINR. bler_val is set based on largest SINR in table\n", mcs); - return bler_data[mcs].bler_table[(bler_data[mcs].length - 1)][3]; + bler_val = bler_data[mcs].bler_table[(bler_data[mcs].length - 1)][4] / bler_data[mcs].bler_table[(bler_data[mcs].length - 1)][5]; + return bler_val; } // Loop through bler table to find sinr_index for (int i = 0; i < bler_data[mcs].length; i++) @@ -2066,12 +2071,15 @@ static float get_bler_val(uint8_t mcs, int sinr) int temp_sinr = (int)(bler_data[mcs].bler_table[i][0] * 10); if (temp_sinr == sinr) { - return bler_data[mcs].bler_table[i][3]; // 3rd column containers bler value + bler_val = bler_data[mcs].bler_table[i][4] / bler_data[mcs].bler_table[i][5]; + return bler_val; } // Linear interpolation when SINR is between indices if (temp_sinr > sinr) { - return ((bler_data[mcs].bler_table[i - 1][3] + bler_data[mcs].bler_table[i][3]) / 2); + float bler_val1 = bler_data[mcs].bler_table[i - 1][4] / bler_data[mcs].bler_table[i - 1][5]; + float bler_val2 = bler_data[mcs].bler_table[i][4] / bler_data[mcs].bler_table[i][5]; + return ((bler_val1 + bler_val2) / 2); } } LOG_E(MAC, "NO SINR INDEX FOUND!\n"); @@ -2107,7 +2115,7 @@ static bool should_drop_transport_block(int sf, uint16_t rnti) float bler_val = get_bler_val(mcs, ((int)(sf_rnti_mcs[sf].sinr * 10))); double drop_cutoff = ((double) rand() / (RAND_MAX)); assert(drop_cutoff <= 1); - + LOG_I(MAC, "SINR = %f, Bler_val = %f, MCS = %"PRIu8"\n", sf_rnti_mcs[sf].sinr, bler_val, sf_rnti_mcs[sf].mcs[n]); if (drop_cutoff <= bler_val) { sf_rnti_mcs[sf].drop_flag[n] = true; diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index 5cd7c44ff5..b15c315c83 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -1112,7 +1112,7 @@ static void *UE_phy_stub_standalone_pnf_task(void *arg) nfapi_dl_config_request_t *dl_config_req = dl_config_req_tx_req->dl_config_req; uint16_t dl_num_pdus = dl_config_req->dl_config_request_body.number_pdu; - LOG_A(MAC, "(OAI UE) Received dl_config_req from proxy at Frame: %d, Subframe: %d," + LOG_I(MAC, "(OAI UE) Received dl_config_req from proxy at Frame: %d, Subframe: %d," " with number of PDUs: %u\n", NFAPI_SFNSF2SFN(dl_config_req->sfn_sf), NFAPI_SFNSF2SF(dl_config_req->sfn_sf), dl_num_pdus);