From ad4a22fa0f3b708a639c2fa89965906bb6bd529f Mon Sep 17 00:00:00 2001 From: "masayuki.harada" Date: Mon, 1 Jun 2020 20:04:21 +0900 Subject: [PATCH] Fix PUCCH noise estimation. (cherry picked from commit 51634853671e07ef3013bc44ec79fc38c0646147) --- openair1/PHY/LTE_TRANSPORT/pucch.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/pucch.c b/openair1/PHY/LTE_TRANSPORT/pucch.c index 1a3abb706e..ef6a25e030 100644 --- a/openair1/PHY/LTE_TRANSPORT/pucch.c +++ b/openair1/PHY/LTE_TRANSPORT/pucch.c @@ -743,7 +743,8 @@ uint32_t calc_pucch_1x_interference(PHY_VARS_eNB *eNB, uint8_t n_cs,alpha_ind; int16_t tmp_re,tmp_im,W_re=0,W_im=0; int16_t W4_nouse[4]={1,1,-1,-1}; - int32_t interference_power; + int32_t n0_IQ[2]; + double interference_power; int16_t *rxptr; uint32_t symbol_offset; @@ -769,7 +770,7 @@ uint32_t calc_pucch_1x_interference(PHY_VARS_eNB *eNB, zptr = (int16_t *)z; N_UL_symb = (frame_parms->Ncp==NORMAL) ? 7 : 6; - interference_power=0; + interference_power=0.0; calc_cnt=0; // loop over 2 slots for (n_cs=0; n_cs<12; n_cs++) { @@ -778,6 +779,7 @@ uint32_t calc_pucch_1x_interference(PHY_VARS_eNB *eNB, //loop over symbols in slot for (l=0; l1)&&(lnb_antennas_rx; aa++) { + n0_IQ[0]=0; + n0_IQ[1]=0; for (j=0,l=0; l1)&&((l%N_UL_symb)=N_UL_symb) && (shortened_format==1)) ){ + j+=24; continue; } if ((l<(nsymb>>1)) && ((m&1) == 0)) @@ -842,15 +847,17 @@ uint32_t calc_pucch_1x_interference(PHY_VARS_eNB *eNB, rxcomp[aa][j] = (int16_t)((rxptr[re_offset<<1]*(int32_t)zptr[j])>>15) - ((rxptr[1+(re_offset<<1)]*(int32_t)zptr[1+j])>>15); rxcomp[aa][1+j] = (int16_t)((rxptr[re_offset<<1]*(int32_t)zptr[1+j])>>15) + ((rxptr[1+(re_offset<<1)]*(int32_t)zptr[j])>>15); - interference_power+= ((int32_t)rxcomp[aa][j]*(int32_t)rxcomp[aa][j]+(int32_t)rxcomp[aa][1+j]*(int32_t)rxcomp[aa][1+j]); + n0_IQ[0]+=rxcomp[aa][j]; + n0_IQ[1]+=rxcomp[aa][1+j]; calc_cnt++; } //re } // symbol + interference_power+= (int32_t)(n0_IQ[0]*n0_IQ[0]+n0_IQ[1]*n0_IQ[1]); } // antenna } - calc_cnt/=12; - //printf("pucch noise %d %d %d\n",interference_power,calc_cnt,eNB->measurements.n0_subband_power_tot_dB[0]); - eNB->measurements.n0_pucch_dB = dB_fixed_x10(interference_power/calc_cnt)/10; + interference_power /= calc_cnt; + eNB->measurements.n0_pucch_dB = dB_fixed_x10((int)(interference_power/calc_cnt))/10; + LOG_D(PHY,"estimate pucch noise %d %d %d\n",interference_power,calc_cnt,eNB->measurements.n0_pucch_dB); return 0; }