diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index 2a936c8959867842b538d9e0099c2614878760f8..9699226e9e259f6a48388994ee9c07589bdd9b1b 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -934,7 +934,7 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue, #ifndef USER_MODE ue_common_vars->rxdata[i] = (int*) RX_DMA_BUFFER[0][i]; #else //USER_MODE - ue_common_vars->rxdata[i] = (int*) malloc16(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(int)); + ue_common_vars->rxdata[i] = (int*) malloc16((FRAME_LENGTH_COMPLEX_SAMPLES+2048)*sizeof(int)); #endif //USER_MODE if (ue_common_vars->rxdata[i]) { #ifdef DEBUG_PHY @@ -1016,7 +1016,7 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue, for (i=0; i<frame_parms->nb_antennas_rx; i++) - for (j=0; j<4; j++) { //frame_parms->nb_antennas_tx; j++) { + for (j=0; j<4; j++) { ue_common_vars->dl_ch_estimates[eNB_id][(j<<1) + i] = (int *)malloc16(frame_parms->symbols_per_tti*sizeof(int)*(frame_parms->ofdm_symbol_size)+LTE_CE_FILTER_LENGTH); if (ue_common_vars->dl_ch_estimates[eNB_id][(j<<1)+i]) { #ifdef DEBUG_PHY @@ -1048,7 +1048,7 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue, for (i=0; i<frame_parms->nb_antennas_rx; i++) - for (j=0; j<4; j++) {//frame_parms->nb_antennas_tx; j++) { + for (j=0; j<4; j++) { ue_common_vars->dl_ch_estimates_time[eNB_id][(j<<1)+i] = (int *)malloc16(sizeof(int)*(frame_parms->ofdm_symbol_size)*2); if (ue_common_vars->dl_ch_estimates_time[eNB_id][(j<<1)+i]) { #ifdef DEBUG_PHY diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c index 4f99c7d04d4e2efe7c68b73ca6a0ffc98a85c2c1..0afc66f4872a7afccf8d4b6c23db0e71a80ce4d9 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c @@ -182,11 +182,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, for (aarx=0;aarx<phy_vars_ue->lte_frame_parms.nb_antennas_rx;aarx++) { pil = (short *)&pilot[p][0]; -#ifndef NEW_FFT - rxF = (short *)&rxdataF[aarx][((symbol_offset+k+phy_vars_ue->lte_frame_parms.first_carrier_offset)<<1)]; -#else rxF = (short *)&rxdataF[aarx][((symbol_offset+k+phy_vars_ue->lte_frame_parms.first_carrier_offset))]; -#endif dl_ch = (short *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]; // if (eNb_id==0) @@ -206,11 +202,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, dl_ch, 24); pil+=2; // Re Im -#ifndef NEW_FFT - rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!! -#else rxF+=12; -#endif dl_ch+=8; ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); @@ -221,11 +213,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, dl_ch, 24); pil+=2; -#ifndef NEW_FFT - rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!! -#else rxF+=12; -#endif dl_ch+=16; for (pilot_cnt=2;pilot_cnt<((phy_vars_ue->lte_frame_parms.N_RB_DL)-1);pilot_cnt+=2) { @@ -246,11 +234,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, pil+=2; // Re Im -#ifndef NEW_FFT - rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!! -#else rxF+=12; -#endif // 6 samples in replicated format (Re0 Im0 Re0 Im0) !!! dl_ch+=8; // printf("pilot[%d][%d] (%d,%d)\n",p,rb,pil[0],pil[1]); @@ -265,11 +249,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, dl_ch, 24); pil+=2; -#ifndef NEW_FFT - rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!! -#else rxF+=12; -#endif dl_ch+=16; } @@ -279,11 +259,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, k = (nu + nushift)%6; if (k > 6) k -=6; -#ifndef NEW_FFT - rxF = (short *)&rxdataF[aarx][((symbol_offset+1+k)<<1)]; -#else rxF = (short *)&rxdataF[aarx][((symbol_offset+1+k))]; -#endif + for (pilot_cnt=0;pilot_cnt<((phy_vars_ue->lte_frame_parms.N_RB_DL)-3);pilot_cnt+=2) { // printf("pilot[%d][%d] (%d,%d)\n",p,pilot_cnt,pil[0],pil[1]); // printf("rx[%d] -> (%d,%d)\n", k+6, rxF[0], rxF[1]); @@ -298,11 +275,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, dl_ch, 24); pil+=2; -#ifndef NEW_FFT - rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!! -#else rxF+=12; -#endif dl_ch+=8; ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); @@ -314,11 +287,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, dl_ch, 24); pil+=2; -#ifndef NEW_FFT - rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!! -#else rxF+=12; -#endif dl_ch+=16; } @@ -331,11 +300,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, dl_ch, 24); pil+=2; // Re Im -#ifndef NEW_FFT - rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!! -#else rxF+=12; -#endif // remember replicated format (Re0 Im0 Re0 Im0) !!! dl_ch+=8; ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); @@ -368,11 +333,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, dl_ch, 24); pil+=2; // Re Im -#ifndef NEW_FFT - rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!! -#else rxF+=12; -#endif // remember replicated format (Re0 Im0 Re0 Im0) !!! dl_ch+=8; ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); @@ -390,11 +351,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, dl_ch, 24); pil+=2; -#ifndef NEW_FFT - rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!! -#else rxF+=12; -#endif dl_ch+=16; for (pilot_cnt=2;pilot_cnt<24;pilot_cnt+=2) { @@ -418,11 +375,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, dl_ch, 24); pil+=2; // Re Im -#ifndef NEW_FFT - rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!! -#else rxF+=12; -#endif // remember replicated format (Re0 Im0 Re0 Im0) !!! dl_ch+=8; ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); @@ -439,11 +392,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, dl_ch, 24); pil+=2; -#ifndef NEW_FFT - rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!! -#else rxF+=12; -#endif dl_ch+=16; } @@ -467,11 +416,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, // printf("Second half\n"); // Second half of RBs -#ifndef NEW_FFT - rxF = (short *)&rxdataF[aarx][((symbol_offset+1+k)<<1)]; -#else rxF = (short *)&rxdataF[aarx][((symbol_offset+1+k))]; -#endif + ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); #ifdef DEBUG_CH @@ -486,11 +432,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, dl_ch, 24); pil+=2; -#ifndef NEW_FFT - rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!! -#else rxF+=12; -#endif dl_ch+=16; for (pilot_cnt=0;pilot_cnt<22;pilot_cnt+=2) { @@ -512,11 +454,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, dl_ch, 24); pil+=2; -#ifndef NEW_FFT - rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!! -#else rxF+=12; -#endif dl_ch+=8; ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); @@ -533,11 +471,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, dl_ch, 24); pil+=2; -#ifndef NEW_FFT - rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!! -#else rxF+=12; -#endif dl_ch+=16; } @@ -558,11 +492,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, dl_ch, 24); pil+=2; // Re Im -#ifndef NEW_FFT - rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!! -#else rxF+=12; -#endif// remember replicated format (Re0 Im0 Re0 Im0) !!! dl_ch+=8; ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); @@ -601,12 +531,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, dl_ch, 24); pil+=2; // Re Im -#ifndef NEW_FFT - rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!! -#else rxF+=12; -#endif - // remember replicated format (Re0 Im0 Re0 Im0) !!! dl_ch+=8; ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); @@ -617,11 +542,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, dl_ch, 24); pil+=2; -#ifndef NEW_FFT - rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!! -#else rxF+=12; -#endif dl_ch+=16; } @@ -638,11 +559,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, //printf("Second half\n"); //Second half of RBs -#ifndef NEW_FFT - rxF = (short *)&rxdataF[aarx][((symbol_offset+1+nushift + (3*p))<<1)]; -#else rxF = (short *)&rxdataF[aarx][((symbol_offset+1+nushift + (3*p)))]; -#endif ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); @@ -651,11 +568,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, dl_ch, 24); pil+=2; -#ifndef NEW_FFT - rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!! -#else rxF+=12; -#endif dl_ch+=16; for (rb=0;rb<28;rb+=4) { @@ -673,11 +586,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, dl_ch, 24); pil+=2; -#ifndef NEW_FFT - rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!! -#else rxF+=12; -#endif dl_ch+=8; ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); @@ -688,11 +597,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, dl_ch, 24); pil+=2; -#ifndef NEW_FFT - rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!! -#else rxF+=12; -#endif dl_ch+=16; } @@ -795,10 +700,11 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, break; } // do ifft of channel estimate - for (aa=0;aa<phy_vars_ue->lte_frame_parms.nb_antennas_rx*phy_vars_ue->lte_frame_parms.nb_antennas_tx_eNB;aa++) { - if (phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa]) - idft((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa][8], - (int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][aa],1); + for (aarx=0;aarx<phy_vars_ue->lte_frame_parms.nb_antennas_rx;aarx++) + for (p=0;p<phy_vars_ue->lte_frame_parms.nb_antennas_tx_eNB;p++) { + if (phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][(p<<1)+aarx]) + idft((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][(p<<1)+aarx][8], + (int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][(p<<1)+aarx],1); } return(0); } diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c index e4c9375330f7ef97356f871f5936ff8a2f9e3f9d..2241bad9c1a6730ef64ade5416db2119397b4c1f 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c @@ -302,36 +302,32 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue, __m128i *dl_ch0_128,*dl_ch1_128; int *dl_ch0,*dl_ch1; LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms; - - phy_vars_ue->PHY_measurements.nb_antennas_rx = frame_parms->nb_antennas_rx; - - gain_offset = 0; - -#ifndef __SSE3__ - zeroPMI = _mm_xor_si128(zeroPMI,zeroPMI); -#endif - - if (phy_vars_ue->init_averaging == 1) { - for (eNB_id=0;eNB_id<phy_vars_ue->n_connected_eNB;eNB_id++) { - phy_vars_ue->PHY_measurements.rx_power_avg[eNB_id] = 0; - } - - for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) { - phy_vars_ue->PHY_measurements.n0_power[aarx] = 0; - phy_vars_ue->PHY_measurements.n0_power_dB[aarx] = 0; - } - - phy_vars_ue->PHY_measurements.n0_power_tot = 0; - phy_vars_ue->PHY_measurements.n0_power_tot_dB = 0; - phy_vars_ue->PHY_measurements.n0_power_avg = 0; - phy_vars_ue->PHY_measurements.n0_power_avg_dB = 0; + int nb_subbands,subband_size,last_subband_size; + int N_RB_DL = frame_parms->N_RB_DL; + + switch (N_RB_DL) { + case 6: + nb_subbands = 6; + subband_size = 12; + last_subband_size = 0; + break; + default: + case 25: + nb_subbands = 7; + subband_size = 4*12; + last_subband_size = 12; + break; + case 50: + nb_subbands = 9; + subband_size = 6*12; + last_subband_size = 2*12; + break; + case 100: + nb_subbands = 13; + subband_size = 8*12; + last_subband_size = 4*12; + break; } - - // noise measurements - // for abstraction we do noise measurements based on the precalculated phy_vars_ue->N0 - // otherwise if there is a symbol where we can take noise measurements on, we measure there - // otherwise do not update the noise measurements - if (abstraction_flag!=0) { phy_vars_ue->PHY_measurements.n0_power_tot = 0; for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) { @@ -368,7 +364,7 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue, for (aatx=0; aatx<frame_parms->nb_antennas_tx_eNB; aatx++) { phy_vars_ue->PHY_measurements.rx_spatial_power[eNB_id][aatx][aarx] = (signal_energy_nodc(&phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id][(aatx<<1) + aarx][0], - (frame_parms->N_RB_DL*12))); + (N_RB_DL*12))); //- phy_vars_ue->PHY_measurements.n0_power[aarx]; if (phy_vars_ue->PHY_measurements.rx_spatial_power[eNB_id][aatx][aarx]<0) @@ -432,19 +428,18 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue, dl_ch0 = &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id][aarx][4]; dl_ch1 = &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id][2+aarx][4]; - for (subband=0;subband<7;subband++) { + for (subband=0;subband<nb_subbands;subband++) { // cqi if (aarx==0) phy_vars_ue->PHY_measurements.subband_cqi_tot[eNB_id][subband]=0; - if (subband<6) { - /* - for (i=0;i<48;i++) + if ((subband<(nb_subbands-1))||(N_RB_DL==6)) { + /*for (i=0;i<48;i++) msg("subband %d (%d) : %d,%d\n",subband,i,((short *)dl_ch0)[2*i],((short *)dl_ch0)[1+(2*i)]); */ phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband] = - (signal_energy_nodc(dl_ch0,48) + signal_energy_nodc(dl_ch1,48)); + (signal_energy_nodc(dl_ch0,subband_size) + signal_energy_nodc(dl_ch1,subband_size)); if ( phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband] < 0) phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband]=0; /* @@ -456,21 +451,22 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue, phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB_id][aarx][subband] = dB_fixed2(phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband], phy_vars_ue->PHY_measurements.n0_power[aarx]); } - else { + else { // this is for the last subband which is smaller in size // for (i=0;i<12;i++) // printf("subband %d (%d) : %d,%d\n",subband,i,((short *)dl_ch0)[2*i],((short *)dl_ch0)[1+(2*i)]); - phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband] = (signal_energy_nodc(dl_ch0,12) + signal_energy_nodc(dl_ch1,12)); // - phy_vars_ue->PHY_measurements.n0_power[aarx]; + phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband] = (signal_energy_nodc(dl_ch0,last_subband_size) + + signal_energy_nodc(dl_ch1,last_subband_size)); // - phy_vars_ue->PHY_measurements.n0_power[aarx]; phy_vars_ue->PHY_measurements.subband_cqi_tot[eNB_id][subband] += phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband]; phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB_id][aarx][subband] = dB_fixed2(phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband], phy_vars_ue->PHY_measurements.n0_power[aarx]); } - dl_ch1+=48; - dl_ch0+=48; + dl_ch1+=subband_size; + dl_ch0+=subband_size; // msg("subband_cqi[%d][%d][%d] => %d (%d dB)\n",eNB_id,aarx,subband,phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband],phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB_id][aarx][subband]); } } - for (subband=0;subband<7;subband++) { + for (subband=0;subband<nb_subbands;subband++) { phy_vars_ue->PHY_measurements.subband_cqi_tot_dB[eNB_id][subband] = dB_fixed2(phy_vars_ue->PHY_measurements.subband_cqi_tot[eNB_id][subband],phy_vars_ue->PHY_measurements.n0_power_tot); // msg("subband_cqi_tot[%d][%d] => %d dB (n0 %d)\n",eNB_id,subband,phy_vars_ue->PHY_measurements.subband_cqi_tot_dB[eNB_id][subband],phy_vars_ue->PHY_measurements.n0_power_tot); } @@ -488,7 +484,7 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue, } #endif */ - for (subband=0;subband<7;subband++) { + for (subband=0;subband<nb_subbands;subband++) { // pmi @@ -497,7 +493,11 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue, pmi128_im = _mm_xor_si128(pmi128_im,pmi128_im); // limit is the number of groups of 4 REs in a subband (12 = 4 RBs, 3 = 1 RB) // for 5 MHz channelization, there are 7 subbands, 6 of size 4 RBs and 1 of size 1 RB - limit = (subband < 6) ? 12 : 3; + if ((N_RB_DL==6) || (subband<(nb_subbands-1))) + limit = subband_size>>2; + else + limit = last_subband_size>>2; + for (i=0;i<limit;i++) { // For each RE in subband perform ch0 * conj(ch1) @@ -582,13 +582,13 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue, // msg("subband_cqi[%d][%d][%d] => %d (%d dB)\n",eNB_id,aarx,subband,phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband],phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB_id][aarx][subband]); } } - for (subband=0;subband<7;subband++) { + for (subband=0;subband<nb_subbands;subband++) { phy_vars_ue->PHY_measurements.subband_cqi_tot_dB[eNB_id][subband] = dB_fixed2(phy_vars_ue->PHY_measurements.subband_cqi_tot[eNB_id][subband],phy_vars_ue->PHY_measurements.n0_power_tot); } } phy_vars_ue->PHY_measurements.rank[eNB_id] = 0; - for (i=0;i<NUMBER_OF_SUBBANDS;i++) { + for (i=0;i<nb_subbands;i++) { phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB_id][i] = 0; if (frame_parms->nb_antennas_rx>1) { if (phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB_id][0][i] >= phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB_id][1][i]) diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c index d95ff884011c6d6af4c6969b2bdaf35c923580cc..58c780698244fca7556f57102c64b8cb3344fe3a 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci.c +++ b/openair1/PHY/LTE_TRANSPORT/dci.c @@ -834,43 +834,31 @@ void pdcch_extract_rbs_single(int32_t **rxdataF, rxF_ext = &rxdataF_ext[aarx][symbol*(frame_parms->N_RB_DL*12)]; -#ifndef NEW_FFT - rxF = &rxdataF[aarx][(frame_parms->first_carrier_offset + (symbol*(frame_parms->ofdm_symbol_size)))*2]; -#else rxF = &rxdataF[aarx][(frame_parms->first_carrier_offset + (symbol*(frame_parms->ofdm_symbol_size)))]; -#endif + if ((frame_parms->N_RB_DL&1) == 0) { // even number of RBs for (rb=0;rb<frame_parms->N_RB_DL;rb++) { // For second half of RBs skip DC carrier if (rb==(frame_parms->N_RB_DL>>1)) { -#ifndef NEW_FFT - rxF = &rxdataF[aarx][(1 + (symbol*(frame_parms->ofdm_symbol_size)))*2]; -#else rxF = &rxdataF[aarx][(1 + (symbol*(frame_parms->ofdm_symbol_size)))]; -#endif + //dl_ch0++; } if (symbol_mod>0) { memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int32_t)); for (i=0;i<12;i++) { -#ifndef NEW_FFT - rxF_ext[i]=rxF[i<<1]; -#else + rxF_ext[i]=rxF[i]; -#endif + } nb_rb++; dl_ch0_ext+=12; rxF_ext+=12; dl_ch0+=12; -#ifndef NEW_FFT - rxF+=24; -#else rxF+=12; -#endif } else { j=0; @@ -879,11 +867,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF, (i!=(nushiftmod3+3)) && (i!=(nushiftmod3+6)) && (i!=(nushiftmod3+9))) { -#ifndef NEW_FFT - rxF_ext[j]=rxF[i<<1]; -#else rxF_ext[j]=rxF[i]; -#endif // printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); dl_ch0_ext[j++]=dl_ch0[i]; // printf("ch %d => (%d,%d)\n",i,*(short *)&dl_ch0[i],*(1+(short*)&dl_ch0[i])); @@ -894,11 +878,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF, rxF_ext+=8; dl_ch0+=12; -#ifndef NEW_FFT - rxF+=24; -#else rxF+=12; -#endif } } } @@ -908,21 +888,13 @@ void pdcch_extract_rbs_single(int32_t **rxdataF, if (symbol_mod>0) { memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int32_t)); for (i=0;i<12;i++) -#ifndef NEW_FFT - rxF_ext[i]=rxF[i<<1]; -#else rxF_ext[i]=rxF[i]; -#endif nb_rb++; dl_ch0_ext+=12; rxF_ext+=12; dl_ch0+=12; -#ifndef NEW_FFT - rxF+=24; -#else rxF+=12; -#endif } else { j=0; @@ -931,11 +903,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF, (i!=(nushiftmod3+3)) && (i!=(nushiftmod3+6)) && (i!=(nushiftmod3+9))) { -#ifndef NEW_FFT - rxF_ext[j]=rxF[i<<1]; -#else rxF_ext[j]=rxF[i]; -#endif // printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); dl_ch0_ext[j++]=dl_ch0[i]; // printf("ch %d => (%d,%d)\n",i,*(short *)&dl_ch0[i],*(1+(short*)&dl_ch0[i])); @@ -946,11 +914,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF, rxF_ext+=8; dl_ch0+=12; -#ifndef NEW_FFT - rxF+=24; -#else rxF+=12; -#endif } } // Do middle RB (around DC) @@ -962,28 +926,16 @@ void pdcch_extract_rbs_single(int32_t **rxdataF, if ((i!=nushiftmod3) && (i!=(nushiftmod3+3))){ dl_ch0_ext[j]=dl_ch0[i]; -#ifndef NEW_FFT - rxF_ext[j++]=rxF[i<<1]; -#else rxF_ext[j++]=rxF[i]; -#endif // printf("**extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1])); } } -#ifndef NEW_FFT - rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))*2]; -#else rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))]; -#endif for (;i<12;i++) { if ((i!=(nushiftmod3+6)) && (i!=(nushiftmod3+9))){ dl_ch0_ext[j]=dl_ch0[i]; -#ifndef NEW_FFT - rxF_ext[j++]=rxF[(1+i-6)<<1]; -#else rxF_ext[j++]=rxF[(1+i-6)]; -#endif // printf("**extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1])); } } @@ -993,34 +945,18 @@ void pdcch_extract_rbs_single(int32_t **rxdataF, dl_ch0_ext+=8; rxF_ext+=8; dl_ch0+=12; -#ifndef NEW_FFT - rxF+=14; -#else rxF+=7; -#endif rb++; } else { for (i=0;i<6;i++) { dl_ch0_ext[i]=dl_ch0[i]; -#ifndef NEW_FFT - rxF_ext[i]=rxF[i<<1]; -#else rxF_ext[i]=rxF[i]; -#endif } -#ifndef NEW_FFT - rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))*2]; -#else rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))]; -#endif for (;i<12;i++) { dl_ch0_ext[i]=dl_ch0[i]; -#ifndef NEW_FFT - rxF_ext[i]=rxF[(1+i-6)<<1]; -#else rxF_ext[i]=rxF[(1+i-6)]; -#endif } @@ -1028,11 +964,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF, dl_ch0_ext+=12; rxF_ext+=12; dl_ch0+=12; -#ifndef NEW_FFT - rxF+=14; -#else rxF+=7; -#endif rb++; } @@ -1040,21 +972,13 @@ void pdcch_extract_rbs_single(int32_t **rxdataF, if (symbol_mod > 0) { memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int32_t)); for (i=0;i<12;i++) -#ifndef NEW_FFT - rxF_ext[i]=rxF[i<<1]; -#else rxF_ext[i]=rxF[i]; -#endif nb_rb++; dl_ch0_ext+=12; rxF_ext+=12; dl_ch0+=12; -#ifndef NEW_FFT - rxF+=24; -#else rxF+=12; -#endif } else { j=0; @@ -1063,11 +987,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF, (i!=(nushiftmod3+3)) && (i!=(nushiftmod3+6)) && (i!=(nushiftmod3+9))) { -#ifndef NEW_FFT - rxF_ext[j]=rxF[i<<1]; -#else rxF_ext[j]=rxF[i]; -#endif // printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); dl_ch0_ext[j++]=dl_ch0[i]; } @@ -1077,11 +997,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF, rxF_ext+=8; dl_ch0+=12; -#ifndef NEW_FFT - rxF+=24; -#else rxF+=12; -#endif } } } @@ -1118,42 +1034,31 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF, // msg("pdcch extract_rbs: rxF_ext pos %d\n",symbol*(frame_parms->N_RB_DL*12)); rxF_ext = &rxdataF_ext[aarx][symbol*(frame_parms->N_RB_DL*12)]; -#ifndef NEW_FFT - rxF = &rxdataF[aarx][(frame_parms->first_carrier_offset + (symbol*(frame_parms->ofdm_symbol_size)))*2]; -#else rxF = &rxdataF[aarx][(frame_parms->first_carrier_offset + (symbol*(frame_parms->ofdm_symbol_size)))]; -#endif + if ((frame_parms->N_RB_DL&1) == 0) // even number of RBs for (rb=0;rb<frame_parms->N_RB_DL;rb++) { // For second half of RBs skip DC carrier if (rb==(frame_parms->N_RB_DL>>1)) { -#ifndef NEW_FFT - rxF = &rxdataF[aarx][(1 + (symbol*(frame_parms->ofdm_symbol_size)))*2]; -#else rxF = &rxdataF[aarx][(1 + (symbol*(frame_parms->ofdm_symbol_size)))]; -#endif - //dl_ch0++; + // dl_ch0++; //dl_ch1++; } if (symbol_mod>0) { memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int32_t)); memcpy(dl_ch1_ext,dl_ch1,12*sizeof(int32_t)); - /* + /* msg("rb %d\n",rb); for (i=0;i<12;i++) - msg("(%d %d)",((int16_t *)dl_ch)[i<<1],((int16_t*)dl_ch)[1+(i<<1)]); - msg("\n");*/ - + msg("(%d %d)",((int16_t *)dl_ch0)[i<<1],((int16_t*)dl_ch0)[1+(i<<1)]); + msg("\n"); + */ for (i=0;i<12;i++) { -#ifndef NEW_FFT - rxF_ext[i]=rxF[i<<1]; -#else rxF_ext[i]=rxF[i]; -#endif - // msg("%d : (%d,%d)\n",(rxF+(2*i)-&rxdataF[aarx][( (symbol*(frame_parms->ofdm_symbol_size)))*2])/2, - // ((int16_t*)&rxF[i<<1])[0],((int16_t*)&rxF[i<<1])[0]); + // msg("%d : (%d,%d)\n",(rxF+(2*i)-&rxdataF[aarx][( (symbol*(frame_parms->ofdm_symbol_size)))*2])/2, + // ((int16_t*)&rxF[i<<1])[0],((int16_t*)&rxF[i<<1])[0]); } nb_rb++; dl_ch0_ext+=12; @@ -1167,35 +1072,20 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF, (i!=nushiftmod3+3) && (i!=nushiftmod3+6) && (i!=nushiftmod3+9)) { -#ifndef NEW_FFT - rxF_ext[j]=rxF[i<<1]; -#else rxF_ext[j]=rxF[i]; -#endif - // printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); - dl_ch0_ext[j++]=dl_ch0[i]; + // printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); + dl_ch0_ext[j] =dl_ch0[i]; dl_ch1_ext[j++]=dl_ch1[i]; } } nb_rb++; dl_ch0_ext+=8; + dl_ch1_ext+=8; rxF_ext+=8; - - dl_ch0+=12; -#ifndef NEW_FFT - rxF+=24; -#else - rxF+=12; -#endif - } dl_ch0+=12; dl_ch1+=12; -#ifndef NEW_FFT - rxF+=24; -#else rxF+=12; -#endif } else { // Odd number of RBs @@ -1207,11 +1097,8 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF, memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int32_t)); memcpy(dl_ch1_ext,dl_ch1,12*sizeof(int32_t)); for (i=0;i<12;i++) -#ifndef NEW_FFT - rxF_ext[i]=rxF[i<<1]; -#else rxF_ext[i]=rxF[i]; -#endif + nb_rb++; dl_ch0_ext+=12; dl_ch1_ext+=12; @@ -1219,11 +1106,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF, dl_ch0+=12; dl_ch1+=12; -#ifndef NEW_FFT - rxF+=24; -#else rxF+=12; -#endif } else { @@ -1233,11 +1116,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF, (i!=nushiftmod3+3) && (i!=nushiftmod3+6) && (i!=nushiftmod3+9)) { -#ifndef NEW_FFT - rxF_ext[j]=rxF[i<<1]; -#else rxF_ext[j]=rxF[i]; -#endif // printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); dl_ch0_ext[j]=dl_ch0[i]; dl_ch1_ext[j++]=dl_ch1[i]; @@ -1252,11 +1131,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF, dl_ch0+=12; dl_ch1+=12; -#ifndef NEW_FFT - rxF+=24; -#else rxF+=12; -#endif } } // Do middle RB (around DC) @@ -1265,25 +1140,13 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF, for (i=0;i<6;i++) { dl_ch0_ext[i]=dl_ch0[i]; dl_ch1_ext[i]=dl_ch1[i]; -#ifndef NEW_FFT - rxF_ext[i]=rxF[i<<1]; -#else rxF_ext[i]=rxF[i]; -#endif } -#ifndef NEW_FFT - rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))*2]; -#else rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))]; -#endif for (;i<12;i++) { dl_ch0_ext[i]=dl_ch0[i]; dl_ch1_ext[i]=dl_ch1[i]; -#ifndef NEW_FFT - rxF_ext[i]=rxF[(1+i)<<1]; -#else rxF_ext[i]=rxF[(1+i)]; -#endif } nb_rb++; @@ -1293,11 +1156,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF, dl_ch0+=12; dl_ch1+=12; -#ifndef NEW_FFT - rxF+=14; -#else rxF+=7; -#endif rb++; } else { @@ -1307,29 +1166,17 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF, (i!=nushiftmod3+3)){ dl_ch0_ext[j]=dl_ch0[i]; dl_ch1_ext[j]=dl_ch1[i]; -#ifndef NEW_FFT - rxF_ext[j++]=rxF[i<<1]; -#else rxF_ext[j++]=rxF[i]; -#endif // printf("**extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1])); } } -#ifndef NEW_FFT - rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))*2]; -#else rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))]; -#endif for (;i<12;i++) { if ((i!=nushiftmod3+6) && (i!=nushiftmod3+9)){ dl_ch0_ext[j]=dl_ch0[i]; dl_ch1_ext[j]=dl_ch1[i]; -#ifndef NEW_FFT - rxF_ext[j++]=rxF[(1+i-6)<<1]; -#else rxF_ext[j++]=rxF[(1+i-6)]; -#endif // printf("**extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1])); } } @@ -1341,11 +1188,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF, rxF_ext+=8; dl_ch0+=12; dl_ch1+=12; -#ifndef NEW_FFT - rxF+=14; -#else rxF+=7; -#endif rb++; } @@ -1356,11 +1199,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF, memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int32_t)); memcpy(dl_ch1_ext,dl_ch1,12*sizeof(int32_t)); for (i=0;i<12;i++) -#ifndef NEW_FFT - rxF_ext[i]=rxF[i<<1]; -#else rxF_ext[i]=rxF[i]; -#endif nb_rb++; dl_ch0_ext+=12; dl_ch1_ext+=12; @@ -1368,12 +1207,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF, dl_ch0+=12; dl_ch1+=12; -#ifndef NEW_FFT - rxF+=24; -#else rxF+=12; -#endif - } else { j=0; @@ -1382,11 +1216,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF, (i!=nushiftmod3+3) && (i!=nushiftmod3+6) && (i!=nushiftmod3+9)) { -#ifndef NEW_FFT - rxF_ext[j]=rxF[i<<1]; -#else rxF_ext[j]=rxF[i]; -#endif // printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); dl_ch0_ext[j]=dl_ch0[i]; dl_ch1_ext[j++]=dl_ch1[i]; @@ -1399,11 +1229,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF, dl_ch0+=12; dl_ch1+=12; -#ifndef NEW_FFT - rxF+=24; -#else rxF+=12; -#endif } } } @@ -1976,13 +1802,17 @@ uint8_t get_num_pdcch_symbols(uint8_t num_dci, if (numCCE <= get_nCCE(1, frame_parms, get_mi(frame_parms, subframe))) return(cmax(1,nCCEmin)); //else if ((9*numCCE) <= (frame_parms->N_RB_DL*((frame_parms->nb_antennas_tx_eNB==4) ? 4 : 5))) - else if (numCCE < get_nCCE(2, frame_parms, get_mi(frame_parms, subframe))) + else if (numCCE <= get_nCCE(2, frame_parms, get_mi(frame_parms, subframe))) return(cmax(2,nCCEmin)); //else if ((9*numCCE) <= (frame_parms->N_RB_DL*((frame_parms->nb_antennas_tx_eNB==4) ? 7 : 8))) - else if (numCCE < get_nCCE(3, frame_parms, get_mi(frame_parms, subframe))) + else if (numCCE <= get_nCCE(3, frame_parms, get_mi(frame_parms, subframe))) return(cmax(3,nCCEmin)); else if (frame_parms->N_RB_DL<=10) { if (frame_parms->Ncp == 0) { // normal CP + printf("numCCE %d, N_RB_DL = %d : should be returning 4 PDCCH symbols (%d,%d,%d)\n",numCCE,frame_parms->N_RB_DL, + get_nCCE(1, frame_parms, get_mi(frame_parms, subframe)), + get_nCCE(2, frame_parms, get_mi(frame_parms, subframe)), + get_nCCE(3, frame_parms, get_mi(frame_parms, subframe))); if ((9*numCCE) <= (frame_parms->N_RB_DL*((frame_parms->nb_antennas_tx_eNB==4) ? 10 : 11))) return(4); } diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c index 3f78b44fdccfb3d83c53e668ce2285f38b47deff..6ddc45dec2d7493a91270a2564a63ff56ebe5fe0 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c @@ -3697,7 +3697,7 @@ uint32_t pdcch_alloc2ul_frame(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame, ui } -uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id) { +uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,int nb_subbands) { int i, aarx; uint16_t pmiq=0; @@ -3705,7 +3705,7 @@ uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id) { uint8_t rank = meas->rank[eNB_id]; int pmi_re,pmi_im; - for (i=0;i<NUMBER_OF_SUBBANDS;i++) { + for (i=0;i<nb_subbands;i++) { pmi_re = 0; pmi_im = 0; @@ -3740,7 +3740,7 @@ uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id) { return(pmivect); } -uint16_t quantize_subband_pmi2(PHY_MEASUREMENTS *meas,uint8_t eNB_id,uint8_t a_id) { +uint16_t quantize_subband_pmi2(PHY_MEASUREMENTS *meas,uint8_t eNB_id,uint8_t a_id,int nb_subbands) { uint8_t i; uint16_t pmiq=0; @@ -3748,7 +3748,7 @@ uint16_t quantize_subband_pmi2(PHY_MEASUREMENTS *meas,uint8_t eNB_id,uint8_t a_i uint8_t rank = meas->rank[eNB_id]; int pmi_re,pmi_im; - for (i=0;i<NUMBER_OF_SUBBANDS;i++) { + for (i=0;i<nb_subbands;i++) { if (rank == 0) { pmi_re = meas->subband_pmi_re[eNB_id][i][a_id]; @@ -3891,7 +3891,7 @@ uint8_t sinr2cqi(double sinr,uint8_t trans_mode) { //} -uint32_t fill_subband_cqi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,uint8_t trans_mode) { +uint32_t fill_subband_cqi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,uint8_t trans_mode,int nb_subbands) { uint8_t i; @@ -3900,7 +3900,7 @@ uint32_t fill_subband_cqi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,uint8_t trans_mo int diff_cqi=0; - for (i=0;i<NUMBER_OF_SUBBANDS;i++) { + for (i=0;i<nb_subbands;i++) { diff_cqi = -sinr2cqi(meas->wideband_cqi_avg[eNB_id],trans_mode) + sinr2cqi(meas->subband_cqi_tot_dB[eNB_id][i],trans_mode); @@ -3920,61 +3920,209 @@ uint32_t fill_subband_cqi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,uint8_t trans_mo return(cqivect); } -void fill_CQI(void *o,UCI_format_t uci_format,PHY_MEASUREMENTS *meas,uint8_t eNB_id,uint16_t rnti, uint8_t trans_mode, double sinr_eff) { +void fill_CQI(LTE_UE_ULSCH_t *ulsch,PHY_MEASUREMENTS *meas,uint8_t eNB_id,int N_RB_DL,uint16_t rnti, uint8_t trans_mode, double sinr_eff) { // msg("[PHY][UE] Filling CQI for eNB %d, meas->wideband_cqi_tot[%d] %d\n", // eNB_id,eNB_id,meas->wideband_cqi_tot[eNB_id]); double sinr_tmp; + uint8_t *o = ulsch->o; + UCI_format_t uci_format = ulsch->uci_format; + if(flag_LA==1) sinr_tmp = sinr_eff; else sinr_tmp = (double) meas->wideband_cqi_avg[eNB_id]; + + //LOG_I(PHY,"Filling CQI %f for eNB %d\n",sinr_tmp,eNB_id); - switch (uci_format) { - case wideband_cqi_rank1_2A: - ((wideband_cqi_rank1_2A_5MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); - ((wideband_cqi_rank1_2A_5MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id); - break; - case wideband_cqi_rank2_2A: - ((wideband_cqi_rank2_2A_5MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); //FIXME: calculate rank2 cqi - ((wideband_cqi_rank2_2A_5MHz *)o)->cqi2 = sinr2cqi(sinr_tmp,trans_mode); //FIXME: calculate rank2 cqi - ((wideband_cqi_rank2_2A_5MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id); - break; - case HLC_subband_cqi_nopmi: - ((HLC_subband_cqi_nopmi_5MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); - ((HLC_subband_cqi_nopmi_5MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode); - break; - case HLC_subband_cqi_rank1_2A: - ((HLC_subband_cqi_rank1_2A_5MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); - ((HLC_subband_cqi_rank1_2A_5MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode); - ((HLC_subband_cqi_rank1_2A_5MHz *)o)->pmi = quantize_wideband_pmi(meas,eNB_id); - break; - case HLC_subband_cqi_rank2_2A: - // This has to be improved!!! - ((HLC_subband_cqi_rank2_2A_5MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); - ((HLC_subband_cqi_rank2_2A_5MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode); - ((HLC_subband_cqi_rank2_2A_5MHz *)o)->cqi2 = sinr2cqi(sinr_tmp,trans_mode); - ((HLC_subband_cqi_rank2_2A_5MHz *)o)->diffcqi2 = fill_subband_cqi(meas,eNB_id,trans_mode); - ((HLC_subband_cqi_rank2_2A_5MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id); - break; - case HLC_subband_cqi_mcs_CBA: - // this is the cba mcs uci for cba transmission - ((HLC_subband_cqi_mcs_CBA_5MHz *)o)->mcs = 2; //fixme - ((HLC_subband_cqi_mcs_CBA_5MHz *)o)->crnti = rnti; - LOG_D(PHY,"fill uci for cba rnti %x, mcs %d \n", rnti, 2); + switch (N_RB_DL) { + + case 6: + switch (uci_format) { + case wideband_cqi_rank1_2A: + ((wideband_cqi_rank1_2A_1_5MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); + ((wideband_cqi_rank1_2A_1_5MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id,6); + break; + case wideband_cqi_rank2_2A: + ((wideband_cqi_rank2_2A_1_5MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); //FIXME: calculate rank2 cqi + ((wideband_cqi_rank2_2A_1_5MHz *)o)->cqi2 = sinr2cqi(sinr_tmp,trans_mode); //FIXME: calculate rank2 cqi + ((wideband_cqi_rank2_2A_1_5MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id,6); + break; + case HLC_subband_cqi_nopmi: + ((HLC_subband_cqi_nopmi_1_5MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); + ((HLC_subband_cqi_nopmi_1_5MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode,6); + break; + case HLC_subband_cqi_rank1_2A: + ((HLC_subband_cqi_rank1_2A_1_5MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); + ((HLC_subband_cqi_rank1_2A_1_5MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode,6); + ((HLC_subband_cqi_rank1_2A_1_5MHz *)o)->pmi = quantize_wideband_pmi(meas,eNB_id); + break; + case HLC_subband_cqi_rank2_2A: + // This has to be improved!!! + ((HLC_subband_cqi_rank2_2A_1_5MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); + ((HLC_subband_cqi_rank2_2A_1_5MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode,6); + ((HLC_subband_cqi_rank2_2A_1_5MHz *)o)->cqi2 = sinr2cqi(sinr_tmp,trans_mode); + ((HLC_subband_cqi_rank2_2A_1_5MHz *)o)->diffcqi2 = fill_subband_cqi(meas,eNB_id,trans_mode,6); + ((HLC_subband_cqi_rank2_2A_1_5MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id,6); + break; + case HLC_subband_cqi_mcs_CBA: + // this is the cba mcs uci for cba transmission + ((HLC_subband_cqi_mcs_CBA_1_5MHz *)o)->mcs = 2; //fixme + ((HLC_subband_cqi_mcs_CBA_1_5MHz *)o)->crnti = rnti; + LOG_D(PHY,"fill uci for cba rnti %x, mcs %d \n", rnti, 2); + break; + case ue_selected: + LOG_E(PHY,"fill_CQI ue_selected CQI not supported yet!!!\n"); + mac_xface->macphy_exit("fill_CQI ue_selected CQI not supported yet!!!"); + break; + default: + LOG_E(PHY,"unsupported CQI mode (%d)!!!\n",uci_format); + mac_xface->macphy_exit("unsupported CQI mode !!!"); + break; + + } break; - case ue_selected: - LOG_E(PHY,"fill_CQI ue_selected CQI not supported yet!!!\n"); - mac_xface->macphy_exit("fill_CQI ue_selected CQI not supported yet!!!"); + case 25: + switch (uci_format) { + case wideband_cqi_rank1_2A: + ((wideband_cqi_rank1_2A_5MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); + ((wideband_cqi_rank1_2A_5MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id,7); + break; + case wideband_cqi_rank2_2A: + ((wideband_cqi_rank2_2A_5MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); //FIXME: calculate rank2 cqi + ((wideband_cqi_rank2_2A_5MHz *)o)->cqi2 = sinr2cqi(sinr_tmp,trans_mode); //FIXME: calculate rank2 cqi + ((wideband_cqi_rank2_2A_5MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id,7); + break; + case HLC_subband_cqi_nopmi: + ((HLC_subband_cqi_nopmi_5MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); + ((HLC_subband_cqi_nopmi_5MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode,7); + break; + case HLC_subband_cqi_rank1_2A: + ((HLC_subband_cqi_rank1_2A_5MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); + ((HLC_subband_cqi_rank1_2A_5MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode,7); + ((HLC_subband_cqi_rank1_2A_5MHz *)o)->pmi = quantize_wideband_pmi(meas,eNB_id); + break; + case HLC_subband_cqi_rank2_2A: + // This has to be improved!!! + ((HLC_subband_cqi_rank2_2A_5MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); + ((HLC_subband_cqi_rank2_2A_5MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode,7); + ((HLC_subband_cqi_rank2_2A_5MHz *)o)->cqi2 = sinr2cqi(sinr_tmp,trans_mode); + ((HLC_subband_cqi_rank2_2A_5MHz *)o)->diffcqi2 = fill_subband_cqi(meas,eNB_id,trans_mode,7); + ((HLC_subband_cqi_rank2_2A_5MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id,7); + break; + case HLC_subband_cqi_mcs_CBA: + // this is the cba mcs uci for cba transmission + ((HLC_subband_cqi_mcs_CBA_5MHz *)o)->mcs = 2; //fixme + ((HLC_subband_cqi_mcs_CBA_5MHz *)o)->crnti = rnti; + LOG_D(PHY,"fill uci for cba rnti %x, mcs %d \n", rnti, 2); + break; + case ue_selected: + LOG_E(PHY,"fill_CQI ue_selected CQI not supported yet!!!\n"); + mac_xface->macphy_exit("fill_CQI ue_selected CQI not supported yet!!!"); + break; + default: + LOG_E(PHY,"unsupported CQI mode (%d)!!!\n",uci_format); + mac_xface->macphy_exit("unsupported CQI mode !!!"); + break; + + } + break; + case 50: + switch (uci_format) { + case wideband_cqi_rank1_2A: + ((wideband_cqi_rank1_2A_10MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); + ((wideband_cqi_rank1_2A_10MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id,9); + break; + case wideband_cqi_rank2_2A: + ((wideband_cqi_rank2_2A_10MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); //FIXME: calculate rank2 cqi + ((wideband_cqi_rank2_2A_10MHz *)o)->cqi2 = sinr2cqi(sinr_tmp,trans_mode); //FIXME: calculate rank2 cqi + ((wideband_cqi_rank2_2A_10MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id,9); + break; + case HLC_subband_cqi_nopmi: + ((HLC_subband_cqi_nopmi_10MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); + ((HLC_subband_cqi_nopmi_10MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode,9); + break; + case HLC_subband_cqi_rank1_2A: + ((HLC_subband_cqi_rank1_2A_10MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); + ((HLC_subband_cqi_rank1_2A_10MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode,9); + ((HLC_subband_cqi_rank1_2A_10MHz *)o)->pmi = quantize_wideband_pmi(meas,eNB_id); + break; + case HLC_subband_cqi_rank2_2A: + // This has to be improved!!! + ((HLC_subband_cqi_rank2_2A_10MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); + ((HLC_subband_cqi_rank2_2A_10MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode,9); + ((HLC_subband_cqi_rank2_2A_10MHz *)o)->cqi2 = sinr2cqi(sinr_tmp,trans_mode); + ((HLC_subband_cqi_rank2_2A_10MHz *)o)->diffcqi2 = fill_subband_cqi(meas,eNB_id,trans_mode,9); + ((HLC_subband_cqi_rank2_2A_10MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id,9); + break; + case HLC_subband_cqi_mcs_CBA: + // this is the cba mcs uci for cba transmission + ((HLC_subband_cqi_mcs_CBA_10MHz *)o)->mcs = 2; //fixme + ((HLC_subband_cqi_mcs_CBA_10MHz *)o)->crnti = rnti; + LOG_D(PHY,"fill uci for cba rnti %x, mcs %d \n", rnti, 2); + break; + case ue_selected: + LOG_E(PHY,"fill_CQI ue_selected CQI not supported yet!!!\n"); + mac_xface->macphy_exit("fill_CQI ue_selected CQI not supported yet!!!"); + break; + default: + LOG_E(PHY,"unsupported CQI mode (%d)!!!\n",uci_format); + mac_xface->macphy_exit("unsupported CQI mode !!!"); + break; + + } break; - default: - LOG_E(PHY,"unsupported CQI mode (%d)!!!\n",uci_format); - mac_xface->macphy_exit("unsupported CQI mode !!!"); + case 100: + switch (uci_format) { + case wideband_cqi_rank1_2A: + ((wideband_cqi_rank1_2A_20MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); + ((wideband_cqi_rank1_2A_20MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id,13); + break; + case wideband_cqi_rank2_2A: + ((wideband_cqi_rank2_2A_20MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); //FIXME: calculate rank2 cqi + ((wideband_cqi_rank2_2A_20MHz *)o)->cqi2 = sinr2cqi(sinr_tmp,trans_mode); //FIXME: calculate rank2 cqi + ((wideband_cqi_rank2_2A_20MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id,13); + break; + case HLC_subband_cqi_nopmi: + ((HLC_subband_cqi_nopmi_20MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); + ((HLC_subband_cqi_nopmi_20MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode,13); + break; + case HLC_subband_cqi_rank1_2A: + ((HLC_subband_cqi_rank1_2A_20MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); + ((HLC_subband_cqi_rank1_2A_20MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode,13); + ((HLC_subband_cqi_rank1_2A_20MHz *)o)->pmi = quantize_wideband_pmi(meas,eNB_id); + break; + case HLC_subband_cqi_rank2_2A: + // This has to be improved!!! + ((HLC_subband_cqi_rank2_2A_20MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); + ((HLC_subband_cqi_rank2_2A_20MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode,13); + ((HLC_subband_cqi_rank2_2A_20MHz *)o)->cqi2 = sinr2cqi(sinr_tmp,trans_mode); + ((HLC_subband_cqi_rank2_2A_20MHz *)o)->diffcqi2 = fill_subband_cqi(meas,eNB_id,trans_mode,13); + ((HLC_subband_cqi_rank2_2A_20MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id,13); + break; + case HLC_subband_cqi_mcs_CBA: + // this is the cba mcs uci for cba transmission + ((HLC_subband_cqi_mcs_CBA_20MHz *)o)->mcs = 2; //fixme + ((HLC_subband_cqi_mcs_CBA_20MHz *)o)->crnti = rnti; + LOG_D(PHY,"fill uci for cba rnti %x, mcs %d \n", rnti, 2); + break; + case ue_selected: + LOG_E(PHY,"fill_CQI ue_selected CQI not supported yet!!!\n"); + mac_xface->macphy_exit("fill_CQI ue_selected CQI not supported yet!!!"); + break; + default: + LOG_E(PHY,"unsupported CQI mode (%d)!!!\n",uci_format); + mac_xface->macphy_exit("unsupported CQI mode !!!"); + break; + + } break; - + } + + } void reset_cba_uci(void *o) { @@ -4258,119 +4406,392 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu, // The aperiodic CQI reporting mode is fixed for every transmission mode instead of being configured by higher layer signaling case 1: if ((rnti >= cba_rnti) && (rnti < p_rnti)){ - ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz; + break; + case 25: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + break; + case 50: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_10MHz; + break; + case 100: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_20MHz; + break; + } ulsch->uci_format = HLC_subband_cqi_mcs_CBA; ulsch->o_RI[0] = 0; } else if(meas->rank[eNB_id] == 0){ - ulsch->O = sizeof_HLC_subband_cqi_nopmi_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_1_5MHz; + break; + case 25: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_5MHz; + break; + case 50: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_10MHz; + break; + case 100: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_20MHz; + break; + } ulsch->uci_format = HLC_subband_cqi_nopmi; ulsch->o_RI[0] = 0; } else{ - ulsch->O = sizeof_HLC_subband_cqi_nopmi_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_1_5MHz; + break; + case 25: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_5MHz; + break; + case 50: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_10MHz; + break; + case 100: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_20MHz; + break; + } ulsch->uci_format = HLC_subband_cqi_nopmi; ulsch->o_RI[0] = 1; } break; case 2: if ((rnti >= cba_rnti) && (rnti < p_rnti)){ - ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz; + break; + case 25: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + break; + case 50: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_10MHz; + break; + case 100: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_20MHz; + break; + } ulsch->uci_format = HLC_subband_cqi_mcs_CBA; ulsch->o_RI[0] = 0; } else if(meas->rank[eNB_id] == 0){ - ulsch->O = sizeof_HLC_subband_cqi_nopmi_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_1_5MHz; + break; + case 25: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_5MHz; + break; + case 50: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_10MHz; + break; + case 100: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_20MHz; + break; + } ulsch->uci_format = HLC_subband_cqi_nopmi; ulsch->o_RI[0] = 0; } else{ - ulsch->O = sizeof_HLC_subband_cqi_nopmi_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_1_5MHz; + break; + case 25: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_5MHz; + break; + case 50: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_10MHz; + break; + case 100: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_20MHz; + break; + } ulsch->uci_format = HLC_subband_cqi_nopmi; ulsch->o_RI[0] = 1; } break; case 3: if ((rnti >= cba_rnti) && (rnti < p_rnti)){ - ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz; + break; + case 25: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + break; + case 50: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_10MHz; + break; + case 100: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_20MHz; + break; + } ulsch->uci_format = HLC_subband_cqi_mcs_CBA; ulsch->o_RI[0] = 0; } else if(meas->rank[eNB_id] == 0){ - ulsch->O = sizeof_HLC_subband_cqi_nopmi_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_1_5MHz; + break; + case 25: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_5MHz; + break; + case 50: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_10MHz; + break; + case 100: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_20MHz; + break; + } ulsch->uci_format = HLC_subband_cqi_nopmi; ulsch->o_RI[0] = 0; } else{ - ulsch->O = sizeof_HLC_subband_cqi_nopmi_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_1_5MHz; + break; + case 25: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_5MHz; + break; + case 50: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_10MHz; + break; + case 100: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_20MHz; + break; + } ulsch->uci_format = HLC_subband_cqi_nopmi; ulsch->o_RI[0] = 1; } break; case 4: if ((rnti >= cba_rnti) && (rnti < p_rnti)){ - ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz; + break; + case 25: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + break; + case 50: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_10MHz; + break; + case 100: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_20MHz; + break; + } ulsch->uci_format = HLC_subband_cqi_mcs_CBA; ulsch->o_RI[0] = 0; } else if(meas->rank[eNB_id] == 0){ - ulsch->O = sizeof_wideband_cqi_rank1_2A_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_wideband_cqi_rank1_2A_1_5MHz; + break; + case 25: + ulsch->O = sizeof_wideband_cqi_rank1_2A_5MHz; + break; + case 50: + ulsch->O = sizeof_wideband_cqi_rank1_2A_10MHz; + break; + case 100: + ulsch->O = sizeof_wideband_cqi_rank1_2A_20MHz; + break; + } ulsch->uci_format = wideband_cqi_rank1_2A; ulsch->o_RI[0] = 0; } else{ - ulsch->O = sizeof_wideband_cqi_rank2_2A_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_wideband_cqi_rank2_2A_1_5MHz; + break; + case 25: + ulsch->O = sizeof_wideband_cqi_rank2_2A_5MHz; + break; + case 50: + ulsch->O = sizeof_wideband_cqi_rank2_2A_10MHz; + break; + case 100: + ulsch->O = sizeof_wideband_cqi_rank2_2A_20MHz; + break; + } ulsch->uci_format = wideband_cqi_rank2_2A; ulsch->o_RI[0] = 1; } break; case 5: if ((rnti >= cba_rnti) && (rnti < p_rnti)){ - ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz; + break; + case 25: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + break; + case 50: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_10MHz; + break; + case 100: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_20MHz; + break; + } ulsch->uci_format = HLC_subband_cqi_mcs_CBA; ulsch->o_RI[0] = 0; } else if(meas->rank[eNB_id] == 0){ - ulsch->O = sizeof_wideband_cqi_rank1_2A_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_wideband_cqi_rank1_2A_1_5MHz; + break; + case 25: + ulsch->O = sizeof_wideband_cqi_rank1_2A_5MHz; + break; + case 50: + ulsch->O = sizeof_wideband_cqi_rank1_2A_10MHz; + break; + case 100: + ulsch->O = sizeof_wideband_cqi_rank1_2A_20MHz; + break; + } ulsch->uci_format = wideband_cqi_rank1_2A; ulsch->o_RI[0] = 0; } else{ - ulsch->O = sizeof_wideband_cqi_rank2_2A_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_wideband_cqi_rank2_2A_1_5MHz; + break; + case 25: + ulsch->O = sizeof_wideband_cqi_rank2_2A_5MHz; + break; + case 50: + ulsch->O = sizeof_wideband_cqi_rank2_2A_10MHz; + break; + case 100: + ulsch->O = sizeof_wideband_cqi_rank2_2A_20MHz; + break; + } ulsch->uci_format = wideband_cqi_rank2_2A; ulsch->o_RI[0] = 1; } break; case 6: if ((rnti >= cba_rnti) && (rnti < p_rnti)){ - ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz; + break; + case 25: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + break; + case 50: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_10MHz; + break; + case 100: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_20MHz; + break; + } ulsch->uci_format = HLC_subband_cqi_mcs_CBA; ulsch->o_RI[0] = 0; } else if(meas->rank[eNB_id] == 0){ - ulsch->O = sizeof_wideband_cqi_rank1_2A_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_wideband_cqi_rank1_2A_1_5MHz; + break; + case 25: + ulsch->O = sizeof_wideband_cqi_rank1_2A_5MHz; + break; + case 50: + ulsch->O = sizeof_wideband_cqi_rank1_2A_10MHz; + break; + case 100: + ulsch->O = sizeof_wideband_cqi_rank1_2A_20MHz; + break; + } ulsch->uci_format = wideband_cqi_rank1_2A; ulsch->o_RI[0] = 0; } else{ - ulsch->O = sizeof_wideband_cqi_rank2_2A_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_wideband_cqi_rank2_2A_1_5MHz; + break; + case 25: + ulsch->O = sizeof_wideband_cqi_rank2_2A_5MHz; + break; + case 50: + ulsch->O = sizeof_wideband_cqi_rank2_2A_10MHz; + break; + case 100: + ulsch->O = sizeof_wideband_cqi_rank2_2A_20MHz; + break; + } ulsch->uci_format = wideband_cqi_rank2_2A; ulsch->o_RI[0] = 1; } break; case 7: if ((rnti >= cba_rnti) && (rnti < p_rnti)){ - ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz; + break; + case 25: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + break; + case 50: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_10MHz; + break; + case 100: + ulsch->O = sizeof_HLC_subband_cqi_mcs_CBA_20MHz; + break; + } ulsch->uci_format = HLC_subband_cqi_mcs_CBA; ulsch->o_RI[0] = 0; } else if(meas->rank[eNB_id] == 0){ - ulsch->O = sizeof_HLC_subband_cqi_nopmi_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_1_5MHz; + break; + case 25: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_5MHz; + break; + case 50: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_10MHz; + break; + case 100: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_20MHz; + break; + } ulsch->uci_format = HLC_subband_cqi_nopmi; ulsch->o_RI[0] = 0; } else{ - ulsch->O = sizeof_HLC_subband_cqi_nopmi_5MHz; + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_1_5MHz; + break; + case 25: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_5MHz; + break; + case 50: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_10MHz; + break; + case 100: + ulsch->O = sizeof_HLC_subband_cqi_nopmi_20MHz; + break; + } ulsch->uci_format = HLC_subband_cqi_nopmi; ulsch->o_RI[0] = 1; } @@ -4386,7 +4807,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu, ulsch->uci_format = HLC_subband_cqi_nopmi; } - print_CQI(ulsch->o,ulsch->uci_format,eNB_id); + print_CQI(ulsch->o,ulsch->uci_format,eNB_id,phy_vars_ue->lte_frame_parms.N_RB_DL); //FK: moved this part to ulsch_coding to be more recent /* @@ -4679,78 +5100,257 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu, case 1: if ((rnti >= cba_rnti) && (rnti < p_rnti)){ ulsch->harq_processes[harq_pid]->Or2 = 0; - ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + switch (frame_parms->N_RB_DL) { + case 6: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz; + break; + case 25: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + break; + case 50: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_10MHz; + break; + case 100: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_20MHz; + break; + } ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_mcs_CBA; } else { ulsch->harq_processes[harq_pid]->Or2 = 0; - ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_5MHz; + switch (frame_parms->N_RB_DL) { + case 6: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_1_5MHz; + break; + case 25: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_5MHz; + break; + case 50: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_10MHz; + break; + case 100: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_20MHz; + break; + } ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_nopmi; } break; case 2: if ((rnti >= cba_rnti) && (rnti < p_rnti)){ ulsch->harq_processes[harq_pid]->Or2 = 0; - ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + switch (frame_parms->N_RB_DL) { + case 6: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz; + break; + case 25: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + break; + case 50: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_10MHz; + break; + case 100: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_20MHz; + break; + } ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_mcs_CBA; } else { ulsch->harq_processes[harq_pid]->Or2 = 0; - ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_5MHz; + switch (frame_parms->N_RB_DL) { + case 6: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_1_5MHz; + break; + case 25: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_5MHz; + break; + case 50: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_10MHz; + break; + case 100: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_20MHz; + break; + } ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_nopmi; } break; case 3: if ((rnti >= cba_rnti) && (rnti < p_rnti)){ ulsch->harq_processes[harq_pid]->Or2 = 0; - ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + switch (frame_parms->N_RB_DL) { + case 6: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz; + break; + case 25: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + break; + case 50: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_10MHz; + break; + case 100: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_20MHz; + break; + } ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_mcs_CBA; } else { ulsch->harq_processes[harq_pid]->Or2 = 0; - ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_5MHz; + switch (frame_parms->N_RB_DL) { + case 6: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_1_5MHz; + break; + case 25: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_5MHz; + break; + case 50: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_10MHz; + break; + case 100: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_20MHz; + break; + } ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_nopmi; } break; case 4: if ((rnti >= cba_rnti) && (rnti < p_rnti)){ ulsch->harq_processes[harq_pid]->Or2 = 0; - ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + switch (frame_parms->N_RB_DL) { + case 6: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz; + break; + case 25: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + break; + case 50: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_10MHz; + break; + case 100: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_20MHz; + break; + } ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_mcs_CBA; } else { - ulsch->harq_processes[harq_pid]->Or2 = sizeof_wideband_cqi_rank2_2A_5MHz; - ulsch->harq_processes[harq_pid]->Or1 = sizeof_wideband_cqi_rank1_2A_5MHz; + switch (frame_parms->N_RB_DL) { + case 6: + ulsch->harq_processes[harq_pid]->Or2 = sizeof_wideband_cqi_rank2_2A_1_5MHz; + ulsch->harq_processes[harq_pid]->Or1 = sizeof_wideband_cqi_rank1_2A_1_5MHz; + break; + case 25: + ulsch->harq_processes[harq_pid]->Or2 = sizeof_wideband_cqi_rank2_2A_5MHz; + ulsch->harq_processes[harq_pid]->Or1 = sizeof_wideband_cqi_rank1_2A_5MHz; + break; + case 50: + ulsch->harq_processes[harq_pid]->Or2 = sizeof_wideband_cqi_rank2_2A_10MHz; + ulsch->harq_processes[harq_pid]->Or1 = sizeof_wideband_cqi_rank1_2A_10MHz; + break; + case 100: + ulsch->harq_processes[harq_pid]->Or2 = sizeof_wideband_cqi_rank2_2A_20MHz; + ulsch->harq_processes[harq_pid]->Or1 = sizeof_wideband_cqi_rank1_2A_20MHz; + break; + + } ulsch->harq_processes[harq_pid]->uci_format = wideband_cqi_rank1_2A; } break; case 5: if ((rnti >= cba_rnti) && (rnti < p_rnti)){ ulsch->harq_processes[harq_pid]->Or2 = 0; - ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + switch (frame_parms->N_RB_DL) { + case 6: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz; + break; + case 25: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + break; + case 50: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_10MHz; + break; + case 100: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_20MHz; + break; + } ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_mcs_CBA; } else { - ulsch->harq_processes[harq_pid]->Or2 = sizeof_wideband_cqi_rank2_2A_5MHz; - ulsch->harq_processes[harq_pid]->Or1 = sizeof_wideband_cqi_rank1_2A_5MHz; + switch (frame_parms->N_RB_DL) { + case 6: + ulsch->harq_processes[harq_pid]->Or2 = sizeof_wideband_cqi_rank2_2A_1_5MHz; + ulsch->harq_processes[harq_pid]->Or1 = sizeof_wideband_cqi_rank1_2A_1_5MHz; + break; + case 25: + ulsch->harq_processes[harq_pid]->Or2 = sizeof_wideband_cqi_rank2_2A_5MHz; + ulsch->harq_processes[harq_pid]->Or1 = sizeof_wideband_cqi_rank1_2A_5MHz; + break; + case 50: + ulsch->harq_processes[harq_pid]->Or2 = sizeof_wideband_cqi_rank2_2A_10MHz; + ulsch->harq_processes[harq_pid]->Or1 = sizeof_wideband_cqi_rank1_2A_10MHz; + break; + case 100: + ulsch->harq_processes[harq_pid]->Or2 = sizeof_wideband_cqi_rank2_2A_20MHz; + ulsch->harq_processes[harq_pid]->Or1 = sizeof_wideband_cqi_rank1_2A_20MHz; + break; + } ulsch->harq_processes[harq_pid]->uci_format = wideband_cqi_rank1_2A; } break; case 6: if ((rnti >= cba_rnti) && (rnti < p_rnti)){ ulsch->harq_processes[harq_pid]->Or2 = 0; - ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + switch (frame_parms->N_RB_DL) { + case 6: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz; + break; + case 25: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_5MHz; + break; + case 50: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_10MHz; + break; + case 100: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_mcs_CBA_20MHz; + break; + } ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_mcs_CBA; } else { - ulsch->harq_processes[harq_pid]->Or2 = sizeof_wideband_cqi_rank2_2A_5MHz; - ulsch->harq_processes[harq_pid]->Or1 = sizeof_wideband_cqi_rank1_2A_5MHz; + switch (frame_parms->N_RB_DL) { + case 6: + ulsch->harq_processes[harq_pid]->Or2 = sizeof_wideband_cqi_rank2_2A_1_5MHz; + ulsch->harq_processes[harq_pid]->Or1 = sizeof_wideband_cqi_rank1_2A_1_5MHz; + break; + case 25: + ulsch->harq_processes[harq_pid]->Or2 = sizeof_wideband_cqi_rank2_2A_5MHz; + ulsch->harq_processes[harq_pid]->Or1 = sizeof_wideband_cqi_rank1_2A_5MHz; + break; + case 50: + ulsch->harq_processes[harq_pid]->Or2 = sizeof_wideband_cqi_rank2_2A_10MHz; + ulsch->harq_processes[harq_pid]->Or1 = sizeof_wideband_cqi_rank1_2A_10MHz; + break; + case 100: + ulsch->harq_processes[harq_pid]->Or2 = sizeof_wideband_cqi_rank2_2A_20MHz; + ulsch->harq_processes[harq_pid]->Or1 = sizeof_wideband_cqi_rank1_2A_20MHz; + break; + } ulsch->harq_processes[harq_pid]->uci_format = wideband_cqi_rank1_2A; } break; case 7: ulsch->harq_processes[harq_pid]->Or2 = 0; - ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_5MHz; + switch (frame_parms->N_RB_DL) { + case 6: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_1_5MHz; + break; + case 25: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_5MHz; + break; + case 50: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_10MHz; + break; + case 100: + ulsch->harq_processes[harq_pid]->Or1 = sizeof_HLC_subband_cqi_nopmi_20MHz; + break; + } ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_nopmi; break; default: @@ -4889,7 +5489,7 @@ double sinr_eff_cqi_calc(PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id){ double channely=0; double channelx_i=0; double channely_i=0; - uint16_t q = quantize_subband_pmi(meas,eNB_id); + uint16_t q = quantize_subband_pmi(meas,eNB_id,7); uint8_t qq; switch(transmission_mode){ diff --git a/openair1/PHY/LTE_TRANSPORT/print_stats.c b/openair1/PHY/LTE_TRANSPORT/print_stats.c index 930759e9c5c1b880d6cbc590927e7e82f9bde9d9..0b73f4a9075aee5a6453b174448f8419d214c9ad 100644 --- a/openair1/PHY/LTE_TRANSPORT/print_stats.c +++ b/openair1/PHY/LTE_TRANSPORT/print_stats.c @@ -105,76 +105,342 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t len += sprintf(&buffer[len], "[UE PROC] effective SINR %.2f dB\n",phy_vars_ue->sinr_eff); len += sprintf(&buffer[len], "[UE PROC] Wideband CQI eNB %d: %d dB, avg: %d dB\n",eNB,phy_vars_ue->PHY_measurements.wideband_cqi_tot[eNB],phy_vars_ue->PHY_measurements.wideband_cqi_avg[eNB]); - len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 0): [%d %d %d %d %d %d %d] dB\n", - eNB, - phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][0], - phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][1], - phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][2], - phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][3], - phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][4], - phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][5], - phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][6]); - - len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 1): [%d %d %d %d %d %d %d] dB\n", - eNB, - phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][0], - phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][1], - phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][2], - phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][3], - phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][4], - phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][5], - phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][6]); - - - len += sprintf(&buffer[len], "[UE PROC] Subband PMI eNB%d (Ant 0): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]\n", - eNB, - phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][0], - phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][0][0], - phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][1][0], - phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][1][0], - phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][2][0], - phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][2][0], - phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][3][0], - phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][3][0], - phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][4][0], - phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][4][0], - phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][5][0], - phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][5][0], - phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][6][0], - phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][6][0]); - - len += sprintf(&buffer[len], "[UE PROC] Subband PMI eNB%d (Ant 1): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]\n", - eNB, - phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][1], - phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][0][1], - phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][1][1], - phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][1][1], - phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][2][1], - phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][2][1], - phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][3][1], - phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][3][1], - phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][4][1], - phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][4][1], - phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][5][1], - phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][5][1], - phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][6][1], - phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][6][1]); - - len += sprintf(&buffer[len], "[UE PROC] PMI Antenna selection eNB%d : [%d %d %d %d %d %d %d]\n", - eNB, - phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][0], - phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][1], - phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][2], - phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][3], - phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][4], - phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][5], - phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][6]); - - len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (max): %x\n",eNB,pmi2hex_2Ar1(quantize_subband_pmi(&phy_vars_ue->PHY_measurements,eNB))); - len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (both): %x,%x\n",eNB, - pmi2hex_2Ar1(quantize_subband_pmi2(&phy_vars_ue->PHY_measurements,eNB,0)), - pmi2hex_2Ar1(quantize_subband_pmi2(&phy_vars_ue->PHY_measurements,eNB,1))); + switch (phy_vars_ue->lte_frame_parms.N_RB_DL) { + case 6: + len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 0): [%d %d %d %d %d %d] dB\n", + eNB, + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][0], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][1], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][2], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][3], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][4], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][5]); + + len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 1): [%d %d %d %d %d %d] dB\n", + eNB, + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][0], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][1], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][2], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][3], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][4], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][5]); + + + len += sprintf(&buffer[len], "[UE PROC] Subband PMI eNB%d (Ant 0): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]\n", + eNB, + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][0][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][1][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][1][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][2][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][2][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][3][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][3][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][4][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][4][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][5][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][5][0]); + + len += sprintf(&buffer[len], "[UE PROC] Subband PMI eNB%d (Ant 1): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]\n", + eNB, + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][0][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][1][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][1][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][2][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][2][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][3][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][3][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][4][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][4][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][5][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][5][1]); + + len += sprintf(&buffer[len], "[UE PROC] PMI Antenna selection eNB%d : [%d %d %d %d %d %d]\n", + eNB, + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][0], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][1], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][2], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][3], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][4], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][5]); + + len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (max): %llx\n",eNB,pmi2hex_2Ar1(quantize_subband_pmi(&phy_vars_ue->PHY_measurements,eNB,6))); + len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (both): %llx,%llx\n",eNB, + pmi2hex_2Ar1(quantize_subband_pmi2(&phy_vars_ue->PHY_measurements,eNB,0,6)), + pmi2hex_2Ar1(quantize_subband_pmi2(&phy_vars_ue->PHY_measurements,eNB,1,6))); + break; + case 25: + len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 0): [%d %d %d %d %d %d %d] dB\n", + eNB, + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][0], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][1], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][2], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][3], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][4], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][5], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][6]); + + len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 1): [%d %d %d %d %d %d %d] dB\n", + eNB, + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][0], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][1], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][2], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][3], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][4], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][5], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][6]); + + + len += sprintf(&buffer[len], "[UE PROC] Subband PMI eNB%d (Ant 0): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]\n", + eNB, + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][0][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][1][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][1][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][2][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][2][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][3][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][3][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][4][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][4][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][5][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][5][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][6][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][6][0]); + + len += sprintf(&buffer[len], "[UE PROC] Subband PMI eNB%d (Ant 1): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]\n", + eNB, + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][0][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][1][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][1][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][2][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][2][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][3][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][3][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][4][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][4][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][5][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][5][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][6][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][6][1]); + + len += sprintf(&buffer[len], "[UE PROC] PMI Antenna selection eNB%d : [%d %d %d %d %d %d %d]\n", + eNB, + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][0], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][1], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][2], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][3], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][4], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][5], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][6]); + + len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (max): %llx\n",eNB,pmi2hex_2Ar1(quantize_subband_pmi(&phy_vars_ue->PHY_measurements,eNB,7))); + len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (both): %llx,%llx\n",eNB, + pmi2hex_2Ar1(quantize_subband_pmi2(&phy_vars_ue->PHY_measurements,eNB,0,7)), + pmi2hex_2Ar1(quantize_subband_pmi2(&phy_vars_ue->PHY_measurements,eNB,1,7))); + break; + case 50: + len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 0): [%d %d %d %d %d %d %d %d %d] dB\n", + eNB, + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][0], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][1], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][2], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][3], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][4], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][5], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][6], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][7], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][8]); + + len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 1): [%d %d %d %d %d %d %d %d %d] dB\n", + eNB, + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][0], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][1], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][2], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][3], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][4], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][5], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][6], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][7], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][8]); + + + len += sprintf(&buffer[len], "[UE PROC] Subband PMI eNB%d (Ant 0): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]\n", + eNB, + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][0][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][1][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][1][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][2][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][2][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][3][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][3][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][4][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][4][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][5][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][5][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][6][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][6][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][7][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][7][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][8][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][8][0]); + + len += sprintf(&buffer[len], "[UE PROC] Subband PMI eNB%d (Ant 1): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]\n", + eNB, + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][0][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][1][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][1][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][2][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][2][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][3][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][3][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][4][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][4][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][5][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][5][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][6][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][6][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][7][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][7][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][8][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][8][1]); + + len += sprintf(&buffer[len], "[UE PROC] PMI Antenna selection eNB%d : [%d %d %d %d %d %d %d %d %d]\n", + eNB, + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][0], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][1], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][2], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][3], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][4], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][5], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][6], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][7], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][8]); + + len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (max): %llx\n",eNB,pmi2hex_2Ar1(quantize_subband_pmi(&phy_vars_ue->PHY_measurements,eNB,9))); + len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (both): %llx,%llx\n",eNB, + pmi2hex_2Ar1(quantize_subband_pmi2(&phy_vars_ue->PHY_measurements,eNB,0,9)), + pmi2hex_2Ar1(quantize_subband_pmi2(&phy_vars_ue->PHY_measurements,eNB,1,9))); + break; + case 100: + len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 0): [%d %d %d %d %d %d %d %d %d %d %d %d %d] dB\n", + eNB, + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][0], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][1], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][2], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][3], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][4], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][5], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][6], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][7], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][8], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][9], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][10], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][11], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][12]); + + len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 1): [%d %d %d %d %d %d %d %d %d %d %d %d %d] dB\n", + eNB, + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][0], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][1], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][2], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][3], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][4], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][5], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][6], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][7], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][8], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][9], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][10], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][11], + phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][12]); + + + len += sprintf(&buffer[len], "[UE PROC] Subband PMI eNB%d (Ant 0): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]\n", + eNB, + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][0][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][1][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][1][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][2][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][2][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][3][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][3][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][4][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][4][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][5][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][5][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][6][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][6][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][7][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][7][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][8][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][8][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][9][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][9][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][10][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][10][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][11][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][11][0], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][12][0], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][12][0]); + + len += sprintf(&buffer[len], "[UE PROC] Subband PMI eNB%d (Ant 1): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]\n", + eNB, + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][0][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][1][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][1][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][2][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][2][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][3][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][3][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][4][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][4][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][5][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][5][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][6][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][6][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][7][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][7][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][8][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][8][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][9][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][9][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][10][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][10][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][11][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][11][1], + phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][12][1], + phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][12][1]); + + len += sprintf(&buffer[len], "[UE PROC] PMI Antenna selection eNB%d : [%d %d %d %d %d %d %d %d %d %d %d %d %d]\n", + eNB, + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][0], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][1], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][2], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][3], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][4], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][5], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][6], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][7], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][8], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][9], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][10], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][11], + phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][12]); + + len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (max): %llx\n",eNB,pmi2hex_2Ar1(quantize_subband_pmi(&phy_vars_ue->PHY_measurements,eNB,13))); + len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (both): %llx,%llx\n",eNB, + pmi2hex_2Ar1(quantize_subband_pmi2(&phy_vars_ue->PHY_measurements,eNB,0,13)), + pmi2hex_2Ar1(quantize_subband_pmi2(&phy_vars_ue->PHY_measurements,eNB,1,13))); + break; + } #ifdef OPENAIR2 RRC_status = mac_get_rrc_status(phy_vars_ue->Mod_id,0,0); len += sprintf(&buffer[len],"[UE PROC] RRC status = %d\n",RRC_status); @@ -190,7 +456,7 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t if (phy_vars_ue->transmission_mode[eNB] == 6) len += sprintf(&buffer[len], "[UE PROC] Mode 6 Wideband CQI eNB %d : %d dB\n",eNB,phy_vars_ue->PHY_measurements.precoded_cqi_dB[eNB][0]); if (phy_vars_ue->dlsch_ue[0] && phy_vars_ue->dlsch_ue[0][0] && phy_vars_ue->dlsch_ue[0][1]) { - len += sprintf(&buffer[len], "[UE PROC] Saved PMI for DLSCH eNB %d : %x (%p)\n",eNB,pmi2hex_2Ar1(phy_vars_ue->dlsch_ue[0][0]->pmi_alloc),phy_vars_ue->dlsch_ue[0][0]); + len += sprintf(&buffer[len], "[UE PROC] Saved PMI for DLSCH eNB %d : %llx (%p)\n",eNB,pmi2hex_2Ar1(phy_vars_ue->dlsch_ue[0][0]->pmi_alloc),phy_vars_ue->dlsch_ue[0][0]); len += sprintf(&buffer[len], "[UE PROC] eNB %d: dl_power_off = %d\n",eNB,phy_vars_ue->dlsch_ue[0][0]->harq_processes[0]->dl_power_off); @@ -345,7 +611,7 @@ int dump_eNB_stats(PHY_VARS_eNB *phy_vars_eNB, char* buffer, int length) { phy_vars_eNB->PHY_measurements_eNB[eNB].subband_cqi_tot_dB[UE_id][i]); len += sprintf(&buffer[len],"\n"); - len += sprintf(&buffer[len],"[eNB PROC] DL TM %d, DL_cqi %d, DL_pmi_single %x\n", + len += sprintf(&buffer[len],"[eNB PROC] DL TM %d, DL_cqi %d, DL_pmi_single %llx\n", phy_vars_eNB->transmission_mode[UE_id], phy_vars_eNB->eNB_UE_stats[UE_id].DL_cqi[0], pmi2hex_2Ar1(phy_vars_eNB->eNB_UE_stats[UE_id].DL_pmi_single)); diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h index b25b161b6a20fbba04c54c659b9fdda966b17d47..b3eb129364ad7416950100e18aea7873769af788 100644 --- a/openair1/PHY/LTE_TRANSPORT/proto.h +++ b/openair1/PHY/LTE_TRANSPORT/proto.h @@ -1536,21 +1536,21 @@ uint8_t phich_subframe2_pusch_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t s */ uint8_t phich_frame2_pusch_frame(LTE_DL_FRAME_PARMS *frame_parms,frame_t frame,uint8_t subframe);; -void print_CQI(void *o,UCI_format_t uci_format,uint8_t eNB_id); +void print_CQI(void *o,UCI_format_t uci_format,uint8_t eNB_id,int N_RB_DL); void extract_CQI(void *o,UCI_format_t uci_format,LTE_eNB_UE_stats *stats,uint16_t * crnti, uint8_t * access_mode); -void fill_CQI(void *o,UCI_format_t uci_format,PHY_MEASUREMENTS *meas,uint8_t eNB_id, rnti_t rnti, uint8_t trans_mode,double sinr_eff); +void fill_CQI(LTE_UE_ULSCH_t *ulsch,PHY_MEASUREMENTS *meas,uint8_t eNB_id, int N_RB_DL, rnti_t rnti, uint8_t trans_mode,double sinr_eff); void reset_cba_uci(void *o); -uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id); -uint16_t quantize_subband_pmi2(PHY_MEASUREMENTS *meas,uint8_t eNB_id,uint8_t a_id); +uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,int nb_subbands); +uint16_t quantize_subband_pmi2(PHY_MEASUREMENTS *meas,uint8_t eNB_id,uint8_t a_id,int nb_subbands); -uint32_t pmi2hex_2Ar1(uint16_t pmi); +uint64_t pmi2hex_2Ar1(uint32_t pmi); -uint32_t pmi2hex_2Ar2(uint8_t pmi); +uint64_t pmi2hex_2Ar2(uint32_t pmi); -uint32_t cqi2hex(uint16_t cqi); +uint64_t cqi2hex(uint32_t cqi); uint16_t computeRIV(uint16_t N_RB_DL,uint16_t RBstart,uint16_t Lcrbs); diff --git a/openair1/PHY/LTE_TRANSPORT/rar_tools.c b/openair1/PHY/LTE_TRANSPORT/rar_tools.c index a36697ebc762f3209b331ce0022f4f4ae9188cc7..ab566536f231df4ec923f698149b3a7b128bf90c 100644 --- a/openair1/PHY/LTE_TRANSPORT/rar_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/rar_tools.c @@ -264,10 +264,10 @@ int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *phy_vars_ue, else sinr_eff = meas->wideband_cqi_avg[eNB_id]; */ - fill_CQI(ulsch->o,ulsch->uci_format,meas,eNB_id,0, transmission_mode,phy_vars_ue->sinr_eff); + fill_CQI(ulsch,meas,eNB_id,phy_vars_ue->lte_frame_parms.N_RB_DL,0, transmission_mode,phy_vars_ue->sinr_eff); if (((phy_vars_ue->frame_tx % 100) == 0) || (phy_vars_ue->frame_tx < 10)) - print_CQI(ulsch->o,ulsch->uci_format,eNB_id); + print_CQI(ulsch->o,ulsch->uci_format,eNB_id,phy_vars_ue->lte_frame_parms.N_RB_DL); } else { ulsch->O_RI = 0; diff --git a/openair1/PHY/LTE_TRANSPORT/uci.h b/openair1/PHY/LTE_TRANSPORT/uci.h index 0fc5b9c28e4169745c0e940ca639c6a47f801e4e..3ed37347239a9457e266916296a39ea53de70c67 100644 --- a/openair1/PHY/LTE_TRANSPORT/uci.h +++ b/openair1/PHY/LTE_TRANSPORT/uci.h @@ -42,6 +42,63 @@ typedef enum { unknown_cqi// } UCI_format_t; +// **********************************************1.5 MHz*************************************************************************** +typedef struct __attribute__((packed)) { + uint32_t padding:16; + uint32_t pmi:12; + uint32_t cqi1:4; +} wideband_cqi_rank1_2A_1_5MHz ; +#define sizeof_wideband_cqi_rank1_2A_1_5MHz 16 + +typedef struct __attribute__((packed)) { + uint16_t padding:2; + uint16_t pmi:6; + uint16_t cqi2:4; + uint16_t cqi1:4; +} wideband_cqi_rank2_2A_1_5MHz ; +#define sizeof_wideband_cqi_rank2_2A_1_5MHz 14 + +typedef struct __attribute__((packed)) { + uint32_t padding:16; + uint32_t diffcqi1:12; + uint32_t cqi1:4; +} HLC_subband_cqi_nopmi_1_5MHz; +#define sizeof_HLC_subband_cqi_nopmi_1_5MHz 16 + +typedef struct __attribute__((packed)) { + uint32_t padding:14; + uint32_t pmi:2; + uint32_t diffcqi1:12; + uint32_t cqi1:4; +} HLC_subband_cqi_rank1_2A_1_5MHz; +#define sizeof_HLC_subband_cqi_rank1_2A_1_5MHz 18 + +typedef struct __attribute__((packed)) { + uint64_t padding:31; + uint64_t pmi:1; + uint64_t diffcqi2:12; + uint64_t cqi2:4; + uint64_t diffcqi1:12; + uint64_t cqi1:4; +} HLC_subband_cqi_rank2_2A_1_5MHz; +#define sizeof_HLC_subband_cqi_rank2_2A_1_5MHz 33 + +typedef struct __attribute__((packed)) { + uint32_t padding:16; + uint32_t diffcqi1:12; + uint32_t cqi1:4; +} HLC_subband_cqi_modes123_1_5MHz; +#define sizeof_HLC_subband_cqi_modes123_1_5MHz 16 + +typedef struct __attribute__((packed)) { + uint32_t padding:12; + uint32_t crnti:16; + uint32_t mcs:4; +} HLC_subband_cqi_mcs_CBA_1_5MHz; +#define sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz 20 + + +// **********************************************5 MHz*************************************************************************** typedef struct __attribute__((packed)) { uint32_t padding:14; uint32_t pmi:14; @@ -96,10 +153,119 @@ typedef struct __attribute__((packed)) { } HLC_subband_cqi_mcs_CBA_5MHz; #define sizeof_HLC_subband_cqi_mcs_CBA_5MHz 20 +// **********************************************10 MHz*************************************************************************** +typedef struct __attribute__((packed)) { + uint32_t padding:10; + uint32_t pmi:18; + uint32_t cqi1:4; +} wideband_cqi_rank1_2A_10MHz ; +#define sizeof_wideband_cqi_rank1_2A_10MHz 22 + +typedef struct __attribute__((packed)) { + uint32_t padding:15; + uint32_t pmi:9; + uint32_t cqi2:4; + uint32_t cqi1:4; +} wideband_cqi_rank2_2A_10MHz ; +#define sizeof_wideband_cqi_rank2_2A_10MHz 17 + +typedef struct __attribute__((packed)) { + uint32_t padding:10; + uint32_t diffcqi1:18; + uint32_t cqi1:4; +} HLC_subband_cqi_nopmi_10MHz; +#define sizeof_HLC_subband_cqi_nopmi_10MHz 22 + +typedef struct __attribute__((packed)) { + uint32_t padding:8; + uint32_t pmi:2; + uint32_t diffcqi1:18; + uint32_t cqi1:4; +} HLC_subband_cqi_rank1_2A_10MHz; +#define sizeof_HLC_subband_cqi_rank1_2A_10MHz 24 + +typedef struct __attribute__((packed)) { + uint64_t padding:19; + uint64_t pmi:1; + uint64_t diffcqi2:18; + uint64_t cqi2:4; + uint64_t diffcqi1:18; + uint64_t cqi1:4; +} HLC_subband_cqi_rank2_2A_10MHz; +#define sizeof_HLC_subband_cqi_rank2_2A_10MHz 45 + +typedef struct __attribute__((packed)) { + uint32_t padding:10; + uint32_t diffcqi1:18; + uint32_t cqi1:4; +} HLC_subband_cqi_modes123_10MHz; +#define sizeof_HLC_subband_cqi_modes123_10MHz 22 + +typedef struct __attribute__((packed)) { + uint32_t padding:12; + uint32_t crnti:16; + uint32_t mcs:4; +} HLC_subband_cqi_mcs_CBA_10MHz; +#define sizeof_HLC_subband_cqi_mcs_CBA_10MHz 20 + +// **********************************************20 MHz*************************************************************************** +typedef struct __attribute__((packed)) { + uint32_t padding:2; + uint32_t pmi:26; + uint32_t cqi1:4; +} wideband_cqi_rank1_2A_20MHz ; +#define sizeof_wideband_cqi_rank1_2A_20MHz 20 + +typedef struct __attribute__((packed)) { + uint32_t padding:11; + uint32_t pmi:13; + uint32_t cqi2:4; + uint32_t cqi1:4; +} wideband_cqi_rank2_2A_20MHz ; +#define sizeof_wideband_cqi_rank2_2A_20MHz 21 + +typedef struct __attribute__((packed)) { + uint32_t padding:2; + uint32_t diffcqi1:26; + uint32_t cqi1:4; +} HLC_subband_cqi_nopmi_20MHz; +#define sizeof_HLC_subband_cqi_nopmi_20MHz 30 + +typedef struct __attribute__((packed)) { + // uint32_t padding:12; + uint32_t pmi:2; + uint32_t diffcqi1:26; + uint32_t cqi1:4; +} HLC_subband_cqi_rank1_2A_20MHz; +#define sizeof_HLC_subband_cqi_rank1_2A_20MHz 32 + +typedef struct __attribute__((packed)) { + uint64_t padding:3; + uint64_t pmi:1; + uint64_t diffcqi2:26; + uint64_t cqi2:4; + uint64_t diffcqi1:26; + uint64_t cqi1:4; +} HLC_subband_cqi_rank2_2A_20MHz; +#define sizeof_HLC_subband_cqi_rank2_2A_20MHz 61 + +typedef struct __attribute__((packed)) { + uint32_t padding:2; + uint32_t diffcqi1:26; + uint32_t cqi1:4; +} HLC_subband_cqi_modes123_20MHz; +#define sizeof_HLC_subband_cqi_modes123_20MHz 30 + +typedef struct __attribute__((packed)) { + uint32_t padding:12; + uint32_t crnti:16; + uint32_t mcs:4; +} HLC_subband_cqi_mcs_CBA_20MHz; +#define sizeof_HLC_subband_cqi_mcs_CBA_20MHz 20 -#define MAX_CQI_PAYLOAD (sizeof(HLC_subband_cqi_rank2_2A_5MHz)*8*20) -#define MAX_CQI_BITS (sizeof(HLC_subband_cqi_rank2_2A_5MHz)*8) -#define MAX_CQI_BYTES (sizeof(HLC_subband_cqi_rank2_2A_5MHz)) +#define MAX_CQI_PAYLOAD (sizeof(HLC_subband_cqi_rank2_2A_20MHz)*8*20) +#define MAX_CQI_BITS (sizeof(HLC_subband_cqi_rank2_2A_20MHz)*8) +#define MAX_CQI_BYTES (sizeof(HLC_subband_cqi_rank2_2A_20MHz)) #define MAX_ACK_PAYLOAD 18 #define MAX_RI_PAYLOAD 6 diff --git a/openair1/PHY/LTE_TRANSPORT/uci_tools.c b/openair1/PHY/LTE_TRANSPORT/uci_tools.c index 3b70d9a4a66a19f726ebc8ae5c65d2312e3402ec..39e703c093f76b2bca3e684f54320b91056602aa 100644 --- a/openair1/PHY/LTE_TRANSPORT/uci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/uci_tools.c @@ -44,24 +44,34 @@ #ifdef DEBUG_UCI_TOOLS #include "PHY/vars.h" #endif -//#define DEBUG_UCI +#define DEBUG_UCI -unsigned int pmi2hex_2Ar1(unsigned short pmi) { +uint64_t pmi2hex_2Ar1(uint32_t pmi) { - return ((pmi&3) + (((pmi>>2)&3)<<4) + (((pmi>>4)&3)<<8) + (((pmi>>6)&3)<<12) + - (((pmi>>8)&3)<<16) + (((pmi>>10)&3)<<20) + (((pmi>>12)&3)<<24)); + uint64_t pmil = (uint64_t)pmi; + + return ((pmil&3) + (((pmil>>2)&3)<<4) + (((pmil>>4)&3)<<8) + (((pmil>>6)&3)<<12) + + (((pmil>>8)&3)<<16) + (((pmil>>10)&3)<<20) + (((pmil>>12)&3)<<24) + + (((pmil>>14)&3)<<28) + (((pmil>>16)&3)<<32) + (((pmil>>18)&3)<<36) + + (((pmil>>20)&3)<<40) + (((pmil>>22)&3)<<44) + (((pmil>>24)&3)<<48)); } -unsigned int pmi2hex_2Ar2(unsigned char pmi) { +uint64_t pmi2hex_2Ar2(uint32_t pmi) { - return ((pmi&1) + (((pmi>>1)&1)<<4) + (((pmi>>2)&1)<<8) + (((pmi>>3)&3)<<12) + - (((pmi>>4)&3)<<16) + (((pmi>>5)&3)<<20) + (((pmi>>6)&3)<<24)); + uint64_t pmil = (uint64_t)pmi; + return ((pmil&1) + (((pmil>>1)&1)<<4) + (((pmil>>2)&1)<<8) + (((pmil>>3)&1)<<12) + + (((pmil>>4)&1)<<16) + (((pmil>>5)&1)<<20) + (((pmil>>6)&1)<<24) + + (((pmil>>7)&1)<<28) + (((pmil>>8)&1)<<32) + (((pmil>>9)&1)<<36) + + (((pmil>>10)&1)<<40) + (((pmil>>11)&1)<<44) + (((pmil>>12)&1)<<48)); } -unsigned int cqi2hex(unsigned short cqi) { +uint64_t cqi2hex(uint32_t cqi) { - return ((cqi&3) + (((cqi>>2)&3)<<4) + (((cqi>>4)&3)<<8) + (((cqi>>6)&3)<<12) + - (((cqi>>8)&3)<<16) + (((cqi>>10)&3)<<20) + (((cqi>>12)&3)<<24)); + uint64_t cqil = (uint64_t)cqi; + return ((cqil&3) + (((cqil>>2)&3)<<4) + (((cqil>>4)&3)<<8) + (((cqil>>6)&3)<<12) + + (((cqil>>8)&3)<<16) + (((cqil>>10)&3)<<20) + (((cqil>>12)&3)<<24) + + (((cqil>>14)&3)<<28) + (((cqil>>16)&3)<<32) + (((cqil>>18)&3)<<36) + + (((cqil>>20)&3)<<40) + (((cqil>>22)&3)<<44) + (((cqil>>24)&3)<<48)); } //void do_diff_cqi(uint8_t N_RB_DL, @@ -117,7 +127,7 @@ void do_diff_cqi(uint8_t N_RB_DL, // This is table 7.2.1-3 from 36.213 (with k replaced by the number of subbands, nb_sb) switch (N_RB_DL) { case 6: - nb_sb=0; + nb_sb=1; break; case 15: nb_sb = 4; @@ -156,61 +166,132 @@ void extract_CQI(void *o,UCI_format_t uci_format,LTE_eNB_UE_stats *stats, uint16 uint8_t N_RB_DL = 25; *access_mode=SCHEDULED_ACCESS; - switch(uci_format){ - case wideband_cqi_rank1_2A: - stats->DL_cqi[0] = (((wideband_cqi_rank1_2A_5MHz *)o)->cqi1); - if (stats->DL_cqi[0] > 24) - stats->DL_cqi[0] = 24; - stats->DL_pmi_single = ((wideband_cqi_rank1_2A_5MHz *)o)->pmi; - break; - case wideband_cqi_rank2_2A: - stats->DL_cqi[0] = (((wideband_cqi_rank2_2A_5MHz *)o)->cqi1); - if (stats->DL_cqi[0] > 24) - stats->DL_cqi[0] = 24; - stats->DL_cqi[1] = (((wideband_cqi_rank2_2A_5MHz *)o)->cqi2); - if (stats->DL_cqi[1] > 24) - stats->DL_cqi[1] = 24; - stats->DL_pmi_dual = ((wideband_cqi_rank2_2A_5MHz *)o)->pmi; - break; - case HLC_subband_cqi_nopmi: - stats->DL_cqi[0] = (((HLC_subband_cqi_nopmi_5MHz *)o)->cqi1); - if (stats->DL_cqi[0] > 24) - stats->DL_cqi[0] = 24; - do_diff_cqi(N_RB_DL,stats->DL_subband_cqi[0],stats->DL_cqi[0],((HLC_subband_cqi_nopmi_5MHz *)o)->diffcqi1); - break; - case HLC_subband_cqi_rank1_2A: - stats->DL_cqi[0] = (((HLC_subband_cqi_rank1_2A_5MHz *)o)->cqi1); - if (stats->DL_cqi[0] > 24) - stats->DL_cqi[0] = 24; - do_diff_cqi(N_RB_DL,stats->DL_subband_cqi[0],stats->DL_cqi[0],(((HLC_subband_cqi_rank1_2A_5MHz *)o)->diffcqi1)); - stats->DL_pmi_single = ((HLC_subband_cqi_rank1_2A_5MHz *)o)->pmi; - break; - case HLC_subband_cqi_rank2_2A: - stats->DL_cqi[0] = (((HLC_subband_cqi_rank2_2A_5MHz *)o)->cqi1); - if (stats->DL_cqi[0] > 24) - stats->DL_cqi[0] = 24; - stats->DL_cqi[1] = (((HLC_subband_cqi_rank2_2A_5MHz *)o)->cqi2); - if (stats->DL_cqi[1] > 24) - stats->DL_cqi[1] = 24; - do_diff_cqi(N_RB_DL,stats->DL_subband_cqi[0],stats->DL_cqi[0],(((HLC_subband_cqi_rank2_2A_5MHz *)o)->diffcqi1)); - do_diff_cqi(N_RB_DL,stats->DL_subband_cqi[1],stats->DL_cqi[1],(((HLC_subband_cqi_rank2_2A_5MHz *)o)->diffcqi2)); - stats->DL_pmi_dual = ((HLC_subband_cqi_rank2_2A_5MHz *)o)->pmi; + switch(N_RB_DL) { + case 6: + switch(uci_format){ + case wideband_cqi_rank1_2A: + stats->DL_cqi[0] = (((wideband_cqi_rank1_2A_1_5MHz *)o)->cqi1); + if (stats->DL_cqi[0] > 24) + stats->DL_cqi[0] = 24; + stats->DL_pmi_single = ((wideband_cqi_rank1_2A_1_5MHz *)o)->pmi; + break; + case wideband_cqi_rank2_2A: + stats->DL_cqi[0] = (((wideband_cqi_rank2_2A_1_5MHz *)o)->cqi1); + if (stats->DL_cqi[0] > 24) + stats->DL_cqi[0] = 24; + stats->DL_cqi[1] = (((wideband_cqi_rank2_2A_1_5MHz *)o)->cqi2); + if (stats->DL_cqi[1] > 24) + stats->DL_cqi[1] = 24; + stats->DL_pmi_dual = ((wideband_cqi_rank2_2A_1_5MHz *)o)->pmi; + break; + case HLC_subband_cqi_nopmi: + stats->DL_cqi[0] = (((HLC_subband_cqi_nopmi_1_5MHz *)o)->cqi1); + if (stats->DL_cqi[0] > 24) + stats->DL_cqi[0] = 24; + do_diff_cqi(N_RB_DL,stats->DL_subband_cqi[0],stats->DL_cqi[0],((HLC_subband_cqi_nopmi_1_5MHz *)o)->diffcqi1); + break; + case HLC_subband_cqi_rank1_2A: + stats->DL_cqi[0] = (((HLC_subband_cqi_rank1_2A_1_5MHz *)o)->cqi1); + if (stats->DL_cqi[0] > 24) + stats->DL_cqi[0] = 24; + do_diff_cqi(N_RB_DL,stats->DL_subband_cqi[0],stats->DL_cqi[0],(((HLC_subband_cqi_rank1_2A_1_5MHz *)o)->diffcqi1)); + stats->DL_pmi_single = ((HLC_subband_cqi_rank1_2A_1_5MHz *)o)->pmi; + break; + case HLC_subband_cqi_rank2_2A: + stats->DL_cqi[0] = (((HLC_subband_cqi_rank2_2A_1_5MHz *)o)->cqi1); + if (stats->DL_cqi[0] > 24) + stats->DL_cqi[0] = 24; + stats->DL_cqi[1] = (((HLC_subband_cqi_rank2_2A_1_5MHz *)o)->cqi2); + if (stats->DL_cqi[1] > 24) + stats->DL_cqi[1] = 24; + do_diff_cqi(N_RB_DL,stats->DL_subband_cqi[0],stats->DL_cqi[0],(((HLC_subband_cqi_rank2_2A_1_5MHz *)o)->diffcqi1)); + do_diff_cqi(N_RB_DL,stats->DL_subband_cqi[1],stats->DL_cqi[1],(((HLC_subband_cqi_rank2_2A_1_5MHz *)o)->diffcqi2)); + stats->DL_pmi_dual = ((HLC_subband_cqi_rank2_2A_1_5MHz *)o)->pmi; + break; + case HLC_subband_cqi_mcs_CBA: + if ((*crnti == ((HLC_subband_cqi_mcs_CBA_1_5MHz *)o)->crnti) && (*crnti !=0)){ + *access_mode=CBA_ACCESS; + LOG_D(PHY,"[eNB] UCI for CBA : mcs %d crnti %x\n", + ((HLC_subband_cqi_mcs_CBA_1_5MHz *)o)->mcs, ((HLC_subband_cqi_mcs_CBA_1_5MHz *)o)->crnti); + } else { + *access_mode=UNKNOWN_ACCESS; + LOG_N(PHY,"[eNB] UCI for CBA : rnti (enb context %x, rx uci %x) invalid, unknown access\n", + *crnti, ((HLC_subband_cqi_mcs_CBA_1_5MHz *)o)->crnti); + } + break; + case unknown_cqi: + default: + LOG_N(PHY,"[eNB][UCI] received unknown uci \n"); + *access_mode=UNKNOWN_ACCESS; + break; + } break; - case HLC_subband_cqi_mcs_CBA: - if ((*crnti == ((HLC_subband_cqi_mcs_CBA_5MHz *)o)->crnti) && (*crnti !=0)){ - *access_mode=CBA_ACCESS; - LOG_D(PHY,"[eNB] UCI for CBA : mcs %d crnti %x\n", - ((HLC_subband_cqi_mcs_CBA_5MHz *)o)->mcs, ((HLC_subband_cqi_mcs_CBA_5MHz *)o)->crnti); - } else { + case 25: + + switch(uci_format){ + case wideband_cqi_rank1_2A: + stats->DL_cqi[0] = (((wideband_cqi_rank1_2A_5MHz *)o)->cqi1); + if (stats->DL_cqi[0] > 24) + stats->DL_cqi[0] = 24; + stats->DL_pmi_single = ((wideband_cqi_rank1_2A_5MHz *)o)->pmi; + break; + case wideband_cqi_rank2_2A: + stats->DL_cqi[0] = (((wideband_cqi_rank2_2A_5MHz *)o)->cqi1); + if (stats->DL_cqi[0] > 24) + stats->DL_cqi[0] = 24; + stats->DL_cqi[1] = (((wideband_cqi_rank2_2A_5MHz *)o)->cqi2); + if (stats->DL_cqi[1] > 24) + stats->DL_cqi[1] = 24; + stats->DL_pmi_dual = ((wideband_cqi_rank2_2A_5MHz *)o)->pmi; + break; + case HLC_subband_cqi_nopmi: + stats->DL_cqi[0] = (((HLC_subband_cqi_nopmi_5MHz *)o)->cqi1); + if (stats->DL_cqi[0] > 24) + stats->DL_cqi[0] = 24; + do_diff_cqi(N_RB_DL,stats->DL_subband_cqi[0],stats->DL_cqi[0],((HLC_subband_cqi_nopmi_5MHz *)o)->diffcqi1); + break; + case HLC_subband_cqi_rank1_2A: + stats->DL_cqi[0] = (((HLC_subband_cqi_rank1_2A_5MHz *)o)->cqi1); + if (stats->DL_cqi[0] > 24) + stats->DL_cqi[0] = 24; + do_diff_cqi(N_RB_DL,stats->DL_subband_cqi[0],stats->DL_cqi[0],(((HLC_subband_cqi_rank1_2A_5MHz *)o)->diffcqi1)); + stats->DL_pmi_single = ((HLC_subband_cqi_rank1_2A_5MHz *)o)->pmi; + break; + case HLC_subband_cqi_rank2_2A: + stats->DL_cqi[0] = (((HLC_subband_cqi_rank2_2A_5MHz *)o)->cqi1); + if (stats->DL_cqi[0] > 24) + stats->DL_cqi[0] = 24; + stats->DL_cqi[1] = (((HLC_subband_cqi_rank2_2A_5MHz *)o)->cqi2); + if (stats->DL_cqi[1] > 24) + stats->DL_cqi[1] = 24; + do_diff_cqi(N_RB_DL,stats->DL_subband_cqi[0],stats->DL_cqi[0],(((HLC_subband_cqi_rank2_2A_5MHz *)o)->diffcqi1)); + do_diff_cqi(N_RB_DL,stats->DL_subband_cqi[1],stats->DL_cqi[1],(((HLC_subband_cqi_rank2_2A_5MHz *)o)->diffcqi2)); + stats->DL_pmi_dual = ((HLC_subband_cqi_rank2_2A_5MHz *)o)->pmi; + break; + case HLC_subband_cqi_mcs_CBA: + if ((*crnti == ((HLC_subband_cqi_mcs_CBA_5MHz *)o)->crnti) && (*crnti !=0)){ + *access_mode=CBA_ACCESS; + LOG_D(PHY,"[eNB] UCI for CBA : mcs %d crnti %x\n", + ((HLC_subband_cqi_mcs_CBA_5MHz *)o)->mcs, ((HLC_subband_cqi_mcs_CBA_5MHz *)o)->crnti); + } else { + *access_mode=UNKNOWN_ACCESS; + LOG_N(PHY,"[eNB] UCI for CBA : rnti (enb context %x, rx uci %x) invalid, unknown access\n", + *crnti, ((HLC_subband_cqi_mcs_CBA_5MHz *)o)->crnti); + } + break; + case unknown_cqi: + default: + LOG_N(PHY,"[eNB][UCI] received unknown uci \n"); *access_mode=UNKNOWN_ACCESS; - LOG_N(PHY,"[eNB] UCI for CBA : rnti (enb context %x, rx uci %x) invalid, unknown access\n", - *crnti, ((HLC_subband_cqi_mcs_CBA_5MHz *)o)->crnti); + break; } break; - case unknown_cqi: - default: - LOG_N(PHY,"[eNB][UCI] received unknown uci \n"); - *access_mode=UNKNOWN_ACCESS; + case 50: + + break; + + case 100: + break; } @@ -291,43 +372,151 @@ void extract_CQI(void *o,UCI_format_t uci_format,LTE_eNB_UE_stats *stats, uint16 } -void print_CQI(void *o,UCI_format_t uci_format,unsigned char eNB_id) { +void print_CQI(void *o,UCI_format_t uci_format,unsigned char eNB_id,int N_RB_DL) { switch(uci_format){ case wideband_cqi_rank1_2A: #ifdef DEBUG_UCI - LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 1: eNB %d, cqi %d\n",eNB_id,((wideband_cqi_rank1_2A_5MHz *)o)->cqi1); - LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 1: eNB %d, pmi (%x) %8x\n",eNB_id,((wideband_cqi_rank1_2A_5MHz *)o)->pmi,pmi2hex_2Ar1(((wideband_cqi_rank1_2A_5MHz *)o)->pmi)); + switch(N_RB_DL) { + case 6: + LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 1: eNB %d, cqi %d\n",eNB_id, + ((wideband_cqi_rank1_2A_1_5MHz *)o)->cqi1); + LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 1: eNB %d, pmi (%x) %8x\n",eNB_id, + ((wideband_cqi_rank1_2A_1_5MHz *)o)->pmi, + pmi2hex_2Ar1(((wideband_cqi_rank1_2A_1_5MHz *)o)->pmi)); + break; + case 25: + LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 1: eNB %d, cqi %d\n",eNB_id, + ((wideband_cqi_rank1_2A_5MHz *)o)->cqi1); + LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 1: eNB %d, pmi (%x) %8x\n",eNB_id, + ((wideband_cqi_rank1_2A_5MHz *)o)->pmi, + pmi2hex_2Ar1(((wideband_cqi_rank1_2A_5MHz *)o)->pmi)); + break; + case 50: + LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 1: eNB %d, cqi %d\n",eNB_id, + ((wideband_cqi_rank1_2A_10MHz *)o)->cqi1); + LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 1: eNB %d, pmi (%x) %8x\n",eNB_id, + ((wideband_cqi_rank1_2A_10MHz *)o)->pmi, + pmi2hex_2Ar1(((wideband_cqi_rank1_2A_10MHz *)o)->pmi)); + break; + case 100: + LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 1: eNB %d, cqi %d\n",eNB_id, + ((wideband_cqi_rank1_2A_20MHz *)o)->cqi1); + LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 1: eNB %d, pmi (%x) %8x\n",eNB_id, + ((wideband_cqi_rank1_2A_20MHz *)o)->pmi, + pmi2hex_2Ar1(((wideband_cqi_rank1_2A_20MHz *)o)->pmi)); + break; + } + #endif //DEBUG_UCI break; case wideband_cqi_rank2_2A: #ifdef DEBUG_UCI - LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi1 %d\n",eNB_id,((wideband_cqi_rank2_2A_5MHz *)o)->cqi1); - LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi2 %d\n",eNB_id,((wideband_cqi_rank2_2A_5MHz *)o)->cqi2); - LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 2: eNB %d, pmi %8x\n",eNB_id,pmi2hex_2Ar2(((wideband_cqi_rank2_2A_5MHz *)o)->pmi)); + switch(N_RB_DL) { + case 6: + LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi1 %d\n",eNB_id,((wideband_cqi_rank2_2A_1_5MHz *)o)->cqi1); + LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi2 %d\n",eNB_id,((wideband_cqi_rank2_2A_1_5MHz *)o)->cqi2); + LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 2: eNB %d, pmi %8x\n",eNB_id,pmi2hex_2Ar2(((wideband_cqi_rank2_2A_1_5MHz *)o)->pmi)); + break; + case 25: + LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi1 %d\n",eNB_id,((wideband_cqi_rank2_2A_5MHz *)o)->cqi1); + LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi2 %d\n",eNB_id,((wideband_cqi_rank2_2A_5MHz *)o)->cqi2); + LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 2: eNB %d, pmi %8x\n",eNB_id,pmi2hex_2Ar2(((wideband_cqi_rank2_2A_5MHz *)o)->pmi)); + break; + case 50: + LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi1 %d\n",eNB_id,((wideband_cqi_rank2_2A_10MHz *)o)->cqi1); + LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi2 %d\n",eNB_id,((wideband_cqi_rank2_2A_10MHz *)o)->cqi2); + LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 2: eNB %d, pmi %8x\n",eNB_id,pmi2hex_2Ar2(((wideband_cqi_rank2_2A_10MHz *)o)->pmi)); + break; + case 100: + LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi1 %d\n",eNB_id,((wideband_cqi_rank2_2A_20MHz *)o)->cqi1); + LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi2 %d\n",eNB_id,((wideband_cqi_rank2_2A_20MHz *)o)->cqi2); + LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 2: eNB %d, pmi %8x\n",eNB_id,pmi2hex_2Ar2(((wideband_cqi_rank2_2A_20MHz *)o)->pmi)); + break; + } #endif //DEBUG_UCI break; case HLC_subband_cqi_nopmi: #ifdef DEBUG_UCI - LOG_I(PHY,"[PRINT CQI] hlc_cqi (no pmi) : eNB %d, cqi1 %d\n",eNB_id,((HLC_subband_cqi_rank1_2A_5MHz *)o)->cqi1); - LOG_I(PHY,"[PRINT CQI] hlc_cqi (no pmi) : eNB %d, diffcqi1 %8x\n",eNB_id,cqi2hex(((HLC_subband_cqi_rank1_2A_5MHz *)o)->diffcqi1)); + switch(N_RB_DL) { + case 6: + LOG_I(PHY,"[PRINT CQI] hlc_cqi (no pmi) : eNB %d, cqi1 %d\n",eNB_id,((HLC_subband_cqi_rank1_2A_1_5MHz *)o)->cqi1); + LOG_I(PHY,"[PRINT CQI] hlc_cqi (no pmi) : eNB %d, diffcqi1 %8x\n",eNB_id,cqi2hex(((HLC_subband_cqi_rank1_2A_1_5MHz *)o)->diffcqi1)); + break; + case 25: + LOG_I(PHY,"[PRINT CQI] hlc_cqi (no pmi) : eNB %d, cqi1 %d\n",eNB_id,((HLC_subband_cqi_rank1_2A_5MHz *)o)->cqi1); + LOG_I(PHY,"[PRINT CQI] hlc_cqi (no pmi) : eNB %d, diffcqi1 %8x\n",eNB_id,cqi2hex(((HLC_subband_cqi_rank1_2A_5MHz *)o)->diffcqi1)); + break; + case 50: + LOG_I(PHY,"[PRINT CQI] hlc_cqi (no pmi) : eNB %d, cqi1 %d\n",eNB_id,((HLC_subband_cqi_rank1_2A_10MHz *)o)->cqi1); + LOG_I(PHY,"[PRINT CQI] hlc_cqi (no pmi) : eNB %d, diffcqi1 %8x\n",eNB_id,cqi2hex(((HLC_subband_cqi_rank1_2A_10MHz *)o)->diffcqi1)); + break; + case 100: + LOG_I(PHY,"[PRINT CQI] hlc_cqi (no pmi) : eNB %d, cqi1 %d\n",eNB_id,((HLC_subband_cqi_rank1_2A_20MHz *)o)->cqi1); + LOG_I(PHY,"[PRINT CQI] hlc_cqi (no pmi) : eNB %d, diffcqi1 %8x\n",eNB_id,cqi2hex(((HLC_subband_cqi_rank1_2A_20MHz *)o)->diffcqi1)); + break; + } #endif //DEBUG_UCI break; case HLC_subband_cqi_rank1_2A: #ifdef DEBUG_UCI - LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 1: eNB %d, cqi1 %d\n",eNB_id,((HLC_subband_cqi_rank1_2A_5MHz *)o)->cqi1); - LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 1: eNB %d, diffcqi1 %8x\n",eNB_id,cqi2hex(((HLC_subband_cqi_rank1_2A_5MHz *)o)->diffcqi1)); - LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 1: eNB %d, pmi %d\n",eNB_id,((HLC_subband_cqi_rank1_2A_5MHz *)o)->pmi); + switch(N_RB_DL) { + case 6: + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 1: eNB %d, cqi1 %d\n",eNB_id,((HLC_subband_cqi_rank1_2A_5MHz *)o)->cqi1); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 1: eNB %d, diffcqi1 %8x\n",eNB_id,cqi2hex(((HLC_subband_cqi_rank1_2A_5MHz *)o)->diffcqi1)); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 1: eNB %d, pmi %d\n",eNB_id,((HLC_subband_cqi_rank1_2A_5MHz *)o)->pmi); + break; + case 25: + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 1: eNB %d, cqi1 %d\n",eNB_id,((HLC_subband_cqi_rank1_2A_5MHz *)o)->cqi1); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 1: eNB %d, diffcqi1 %8x\n",eNB_id,cqi2hex(((HLC_subband_cqi_rank1_2A_5MHz *)o)->diffcqi1)); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 1: eNB %d, pmi %d\n",eNB_id,((HLC_subband_cqi_rank1_2A_5MHz *)o)->pmi); + break; + case 50: + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 1: eNB %d, cqi1 %d\n",eNB_id,((HLC_subband_cqi_rank1_2A_5MHz *)o)->cqi1); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 1: eNB %d, diffcqi1 %8x\n",eNB_id,cqi2hex(((HLC_subband_cqi_rank1_2A_5MHz *)o)->diffcqi1)); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 1: eNB %d, pmi %d\n",eNB_id,((HLC_subband_cqi_rank1_2A_5MHz *)o)->pmi); + break; + case 100: + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 1: eNB %d, cqi1 %d\n",eNB_id,((HLC_subband_cqi_rank1_2A_5MHz *)o)->cqi1); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 1: eNB %d, diffcqi1 %8x\n",eNB_id,cqi2hex(((HLC_subband_cqi_rank1_2A_5MHz *)o)->diffcqi1)); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 1: eNB %d, pmi %d\n",eNB_id,((HLC_subband_cqi_rank1_2A_5MHz *)o)->pmi); + break; + } #endif //DEBUG_UCI break; case HLC_subband_cqi_rank2_2A: #ifdef DEBUG_UCI - LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi1 %d\n",eNB_id,((HLC_subband_cqi_rank2_2A_5MHz *)o)->cqi1); - LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi2 %d\n",eNB_id,((HLC_subband_cqi_rank2_2A_5MHz *)o)->cqi2); - LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, diffcqi1 %8x\n",eNB_id,cqi2hex(((HLC_subband_cqi_rank2_2A_5MHz *)o)->diffcqi1)); - LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, diffcqi2 %8x\n",eNB_id,cqi2hex(((HLC_subband_cqi_rank2_2A_5MHz *)o)->diffcqi2)); - LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, pmi %d\n",eNB_id,((HLC_subband_cqi_rank2_2A_5MHz *)o)->pmi); + switch(N_RB_DL) { + case 6: + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi1 %d\n",eNB_id,((HLC_subband_cqi_rank2_2A_1_5MHz *)o)->cqi1); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi2 %d\n",eNB_id,((HLC_subband_cqi_rank2_2A_1_5MHz *)o)->cqi2); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, diffcqi1 %8x\n",eNB_id,cqi2hex(((HLC_subband_cqi_rank2_2A_1_5MHz *)o)->diffcqi1)); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, diffcqi2 %8x\n",eNB_id,cqi2hex(((HLC_subband_cqi_rank2_2A_1_5MHz *)o)->diffcqi2)); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, pmi %d\n",eNB_id,((HLC_subband_cqi_rank2_2A_1_5MHz *)o)->pmi); + break; + case 25: + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi1 %d\n",eNB_id,((HLC_subband_cqi_rank2_2A_5MHz *)o)->cqi1); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi2 %d\n",eNB_id,((HLC_subband_cqi_rank2_2A_5MHz *)o)->cqi2); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, diffcqi1 %8x\n",eNB_id,cqi2hex(((HLC_subband_cqi_rank2_2A_5MHz *)o)->diffcqi1)); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, diffcqi2 %8x\n",eNB_id,cqi2hex(((HLC_subband_cqi_rank2_2A_5MHz *)o)->diffcqi2)); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, pmi %d\n",eNB_id,((HLC_subband_cqi_rank2_2A_5MHz *)o)->pmi); + break; + case 50: + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi1 %d\n",eNB_id,((HLC_subband_cqi_rank2_2A_10MHz *)o)->cqi1); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi2 %d\n",eNB_id,((HLC_subband_cqi_rank2_2A_10MHz *)o)->cqi2); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, diffcqi1 %8x\n",eNB_id,cqi2hex(((HLC_subband_cqi_rank2_2A_10MHz *)o)->diffcqi1)); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, diffcqi2 %8x\n",eNB_id,cqi2hex(((HLC_subband_cqi_rank2_2A_10MHz *)o)->diffcqi2)); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, pmi %d\n",eNB_id,((HLC_subband_cqi_rank2_2A_10MHz *)o)->pmi); + break; + case 100: + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi1 %d\n",eNB_id,((HLC_subband_cqi_rank2_2A_20MHz *)o)->cqi1); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi2 %d\n",eNB_id,((HLC_subband_cqi_rank2_2A_20MHz *)o)->cqi2); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, diffcqi1 %8x\n",eNB_id,cqi2hex(((HLC_subband_cqi_rank2_2A_20MHz *)o)->diffcqi1)); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, diffcqi2 %8x\n",eNB_id,cqi2hex(((HLC_subband_cqi_rank2_2A_20MHz *)o)->diffcqi2)); + LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, pmi %d\n",eNB_id,((HLC_subband_cqi_rank2_2A_20MHz *)o)->pmi); + break; + } #endif //DEBUG_UCI break; case HLC_subband_cqi_mcs_CBA: diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c index 22f38dad26c5e687f7be53e4cd79c16ac1956a0c..02066e6184985e107c21dfb9d94ef64427f0ad1e 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c @@ -256,10 +256,10 @@ uint32_t ulsch_encoding(uint8_t *a, sinr_eff = 0; */ rnti = phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti; - fill_CQI(ulsch->o,ulsch->uci_format,meas,0,rnti, tmode,phy_vars_ue->sinr_eff); + fill_CQI(ulsch,meas,0,phy_vars_ue->lte_frame_parms.N_RB_DL,rnti, tmode,phy_vars_ue->sinr_eff); LOG_D(PHY,"UE CQI\n"); - print_CQI(ulsch->o,ulsch->uci_format,0); + print_CQI(ulsch->o,ulsch->uci_format,0,phy_vars_ue->lte_frame_parms.N_RB_DL); // save PUSCH pmi for later (transmission modes 4,5,6) if (dlsch[0]) { @@ -310,9 +310,9 @@ uint32_t ulsch_encoding(uint8_t *a, msg("ulsch_coding: O[%d] %d\n",i,ulsch->o[i]); } if ((tmode != 4)) - print_CQI(ulsch->o,wideband_cqi_rank1_2A,0); + print_CQI(ulsch->o,wideband_cqi_rank1_2A,0,phy_vars_ue->lte_frame_parms.N_RB_DL); else - print_CQI(ulsch->o,HLC_subband_cqi_rank1_2A,0); + print_CQI(ulsch->o,HLC_subband_cqi_rank1_2A,0,phy_vars_ue->lte_frame_parms.N_RB_DL); #endif if (ulsch->harq_processes[harq_pid]->round == 0) { // this is a new packet @@ -901,7 +901,7 @@ int ulsch_encoding_emul(uint8_t *ulsch_buffer, sinr_eff = meas->wideband_cqi_avg[eNB_id]; */ - fill_CQI(ulsch->o,ulsch->uci_format,meas,eNB_id,rnti,tmode,phy_vars_ue->sinr_eff); + fill_CQI(ulsch,meas,eNB_id,phy_vars_ue->lte_frame_parms.N_RB_DL,rnti,tmode,phy_vars_ue->sinr_eff); //LOG_D(PHY,"UE CQI\n"); // print_CQI(ulsch->o,ulsch->uci_format,eNB_id); diff --git a/openair1/PHY/MODULATION/slot_fep.c b/openair1/PHY/MODULATION/slot_fep.c index 357c0aa871e69cd7c0c74bb0ba292c1165621e8c..3f29747abd58422f2c94c1cbb7888e1407dc1e0e 100644 --- a/openair1/PHY/MODULATION/slot_fep.c +++ b/openair1/PHY/MODULATION/slot_fep.c @@ -53,6 +53,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue, unsigned int rx_offset; void (*dft)(int16_t *,int16_t *, int); + int tmp_dft_in[256]; // This is for misalignment issues for 6 and 15 PRBs switch (frame_parms->log2_symbol_size) { case 7: @@ -95,47 +96,63 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue, return(-1); } -#ifdef DEBUG_FEP - // if (phy_vars_ue->frame <100) - msg("slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d\n", phy_vars_ue->frame,Ns, symbol, nb_prefix_samples,nb_prefix_samples0,slot_offset,subframe_offset,sample_offset); -#endif for (aa=0;aa<frame_parms->nb_antennas_rx;aa++) { memset(&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],0,frame_parms->ofdm_symbol_size*sizeof(int)); + rx_offset = sample_offset + slot_offset + nb_prefix_samples0 + subframe_offset - SOFFSET; + // Align with 128 bit + rx_offset = rx_offset - rx_offset % 4; + +#ifdef DEBUG_FEP + // if (phy_vars_ue->frame <100) + msg("slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d\n", phy_vars_ue->frame_rx,Ns, symbol, nb_prefix_samples,nb_prefix_samples0,slot_offset,subframe_offset,sample_offset,rx_offset); +#endif if (l==0) { - rx_offset = sample_offset + slot_offset + nb_prefix_samples0 + subframe_offset - SOFFSET; - // Align with 128 bit - rx_offset = rx_offset - rx_offset % 4; + if (rx_offset > (frame_length_samples - frame_parms->ofdm_symbol_size)) memcpy((short *)&ue_common_vars->rxdata[aa][frame_length_samples], (short *)&ue_common_vars->rxdata[aa][0], frame_parms->ofdm_symbol_size*sizeof(int)); - start_meas(&phy_vars_ue->rx_dft_stats); - dft((int16_t *)&ue_common_vars->rxdata[aa][(rx_offset) % frame_length_samples], - (int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1); - stop_meas(&phy_vars_ue->rx_dft_stats); + start_meas(&phy_vars_ue->rx_dft_stats); + dft((int16_t *)&ue_common_vars->rxdata[aa][(rx_offset) % frame_length_samples], + (int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1); + stop_meas(&phy_vars_ue->rx_dft_stats); } else { - rx_offset = sample_offset + slot_offset + - (frame_parms->ofdm_symbol_size+nb_prefix_samples0+nb_prefix_samples) + - (frame_parms->ofdm_symbol_size+nb_prefix_samples)*(l-1) + subframe_offset - SOFFSET; - - rx_offset = rx_offset - (rx_offset % 4); + rx_offset += (frame_parms->ofdm_symbol_size+nb_prefix_samples) + + (frame_parms->ofdm_symbol_size+nb_prefix_samples)*(l-1); +#ifdef DEBUG_FEP + // if (phy_vars_ue->frame <100) + msg("slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d\n", phy_vars_ue->frame_rx,Ns, symbol, nb_prefix_samples,nb_prefix_samples0,slot_offset,subframe_offset,sample_offset,rx_offset); +#endif + if (rx_offset > (frame_length_samples - frame_parms->ofdm_symbol_size)) - memcpy((short *)&ue_common_vars->rxdata[aa][frame_length_samples], - (short *)&ue_common_vars->rxdata[aa][0], + memcpy((void *)&ue_common_vars->rxdata[aa][frame_length_samples], + (void *)&ue_common_vars->rxdata[aa][0], + frame_parms->ofdm_symbol_size*sizeof(int)); + + start_meas(&phy_vars_ue->rx_dft_stats); + if ((rx_offset&3)!=0) { // if input to dft is not 128-bit aligned, issue for size 6 and 15 PRBs + memcpy((void *)tmp_dft_in, + (void *)&ue_common_vars->rxdata[aa][(rx_offset) % frame_length_samples], frame_parms->ofdm_symbol_size*sizeof(int)); - - start_meas(&phy_vars_ue->rx_dft_stats); + dft((int16_t *)tmp_dft_in, + (int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1); + } + else // use dft input from RX buffer directly dft((int16_t *)&ue_common_vars->rxdata[aa][(rx_offset) % frame_length_samples], (int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1); - stop_meas(&phy_vars_ue->rx_dft_stats); + stop_meas(&phy_vars_ue->rx_dft_stats); + + } + } + #ifndef PERFECT_CE if ((l==0) || (l==(4-frame_parms->Ncp))) { for (aa=0;aa<frame_parms->nb_antennas_tx_eNB;aa++) { diff --git a/openair1/PHY/impl_defs_top.h b/openair1/PHY/impl_defs_top.h index d0fa72c818ea92b2d076545119a1383e08ea1970..5f907c556a45c32936de37507ffd5d65bc159db8 100755 --- a/openair1/PHY/impl_defs_top.h +++ b/openair1/PHY/impl_defs_top.h @@ -319,7 +319,7 @@ typedef struct { /// Measurement Variables -#define NUMBER_OF_SUBBANDS 7 +#define NUMBER_OF_SUBBANDS_MAX 13 #define NUMBER_OF_HARQ_PID_MAX 8 #if defined(CBMIMO1) || defined(EXMIMO) @@ -410,23 +410,23 @@ typedef struct /// Wideband CQI (sum of all RX antennas, in dB, for precoded transmission modes (4,5,6), up to 4 spatial streams) int precoded_cqi_dB[NUMBER_OF_CONNECTED_eNB_MAX+1][4]; /// Subband CQI per RX antenna (= SINR) - int subband_cqi[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX][NUMBER_OF_SUBBANDS]; + int subband_cqi[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX][NUMBER_OF_SUBBANDS_MAX]; /// Total Subband CQI (= SINR) - int subband_cqi_tot[NUMBER_OF_CONNECTED_eNB_MAX][NUMBER_OF_SUBBANDS]; + int subband_cqi_tot[NUMBER_OF_CONNECTED_eNB_MAX][NUMBER_OF_SUBBANDS_MAX]; /// Subband CQI in dB (= SINR dB) - int subband_cqi_dB[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX][NUMBER_OF_SUBBANDS]; + int subband_cqi_dB[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX][NUMBER_OF_SUBBANDS_MAX]; /// Total Subband CQI - int subband_cqi_tot_dB[NUMBER_OF_CONNECTED_eNB_MAX][NUMBER_OF_SUBBANDS]; + int subband_cqi_tot_dB[NUMBER_OF_CONNECTED_eNB_MAX][NUMBER_OF_SUBBANDS_MAX]; /// Wideband PMI for each RX antenna int wideband_pmi_re[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX]; /// Wideband PMI for each RX antenna int wideband_pmi_im[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX]; ///Subband PMI for each RX antenna - int subband_pmi_re[NUMBER_OF_CONNECTED_eNB_MAX][NUMBER_OF_SUBBANDS][NB_ANTENNAS_RX]; + int subband_pmi_re[NUMBER_OF_CONNECTED_eNB_MAX][NUMBER_OF_SUBBANDS_MAX][NB_ANTENNAS_RX]; ///Subband PMI for each RX antenna - int subband_pmi_im[NUMBER_OF_CONNECTED_eNB_MAX][NUMBER_OF_SUBBANDS][NB_ANTENNAS_RX]; + int subband_pmi_im[NUMBER_OF_CONNECTED_eNB_MAX][NUMBER_OF_SUBBANDS_MAX][NB_ANTENNAS_RX]; /// chosen RX antennas (1=Rx antenna 1, 2=Rx antenna 2, 3=both Rx antennas) - unsigned char selected_rx_antennas[NUMBER_OF_CONNECTED_eNB_MAX][NUMBER_OF_SUBBANDS]; + unsigned char selected_rx_antennas[NUMBER_OF_CONNECTED_eNB_MAX][NUMBER_OF_SUBBANDS_MAX]; /// Wideband Rank indication unsigned char rank[NUMBER_OF_CONNECTED_eNB_MAX]; /// Number of RX Antennas diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index 6ddde6d7f93ec89dcdfe50705516843d009fcf1f..5da889c51d501f3fac4ecb7cb61fdef437249af8 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -2988,7 +2988,7 @@ void phy_procedures_eNB_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e if (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->cqi_crc_status == 1) { #ifdef DEBUG_PHY_PROC //if (((phy_vars_eNB->proc[sched_subframe].frame_tx%10) == 0) || (phy_vars_eNB->proc[sched_subframe].frame_tx < 50)) - //print_CQI(phy_vars_eNB->ulsch_eNB[i]->o,phy_vars_eNB->ulsch_eNB[i]->uci_format,0); + print_CQI(phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->uci_format,0,phy_vars_eNB->lte_frame_parms.N_RB_DL); #endif extract_CQI(phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->uci_format,&phy_vars_eNB->eNB_UE_stats[i], &rnti, &access_mode); phy_vars_eNB->eNB_UE_stats[i].rank = phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_RI[0]; @@ -3610,7 +3610,7 @@ void phy_procedures_eNB_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e if (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->cqi_crc_status == 1) { #ifdef DEBUG_PHY_PROC //if (((phy_vars_eNB->proc[sched_subframe].frame_tx%10) == 0) || (phy_vars_eNB->proc[sched_subframe].frame_tx < 50)) - // print_CQI(phy_vars_eNB->ulsch_eNB[i]->o,phy_vars_eNB->ulsch_eNB[i]->uci_format,0); + print_CQI(phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->uci_format,0,phy_vars_eNB->lte_frame_parms.N_RB_DL); #endif extract_CQI(phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->uci_format,&phy_vars_eNB->eNB_UE_stats[i], &rnti, &access_mode); phy_vars_eNB->eNB_UE_stats[i].rank = phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_RI[0]; diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 59a46fae3a0e7a13f17b342864cf86d5749aded2..f83f67c3ad5cfc715cbdcfff52aa9b3a45d6d5ee 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -1843,8 +1843,8 @@ int main(int argc, char **argv) { // use the PMI from previous trial if (DLSCH_alloc_pdu2_1E[0].tpmi == 5) { - PHY_vars_eNB->dlsch_eNB[0][0]->pmi_alloc = quantize_subband_pmi(&PHY_vars_UE->PHY_measurements,0); - PHY_vars_UE->dlsch_ue[0][0]->pmi_alloc = quantize_subband_pmi(&PHY_vars_UE->PHY_measurements,0); + PHY_vars_eNB->dlsch_eNB[0][0]->pmi_alloc = quantize_subband_pmi(&PHY_vars_UE->PHY_measurements,0,PHY_vars_eNB->lte_frame_parms.N_RB_DL); + PHY_vars_UE->dlsch_ue[0][0]->pmi_alloc = quantize_subband_pmi(&PHY_vars_UE->PHY_measurements,0,PHY_vars_UE->lte_frame_parms.N_RB_DL); if (n_users>1) PHY_vars_eNB->dlsch_eNB[1][0]->pmi_alloc = (PHY_vars_eNB->dlsch_eNB[0][0]->pmi_alloc ^ 0x1555); /* diff --git a/openair1/SIMULATION/LTE_PHY/pdcchsim.c b/openair1/SIMULATION/LTE_PHY/pdcchsim.c index 6992a733b81207aa5614c01cd108f85b15ae4dd4..f3e6414d08fed34b90a6149f335eb623544f68d9 100644 --- a/openair1/SIMULATION/LTE_PHY/pdcchsim.c +++ b/openair1/SIMULATION/LTE_PHY/pdcchsim.c @@ -88,7 +88,7 @@ void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmi lte_frame_parms->nb_antennas_tx_eNB = N_tx; lte_frame_parms->nb_antennas_tx = N_tx; lte_frame_parms->nb_antennas_rx = N_rx; - lte_frame_parms->phich_config_common.phich_resource = one;//oneSixth; //half + lte_frame_parms->phich_config_common.phich_resource = oneSixth; //half lte_frame_parms->tdd_config = tdd_config; lte_frame_parms->frame_type = frame_type; @@ -453,7 +453,7 @@ DCI_PDU *get_dci(LTE_DL_FRAME_PARMS *lte_frame_parms,uint8_t log2L, uint8_t log2 } } - /* + // add common dci DCI_pdu.dci_alloc[0].dci_length = BCCH_pdu_size_bits; DCI_pdu.dci_alloc[0].L = log2Lcommon; @@ -462,7 +462,7 @@ DCI_PDU *get_dci(LTE_DL_FRAME_PARMS *lte_frame_parms,uint8_t log2L, uint8_t log2 DCI_pdu.dci_alloc[0].ra_flag = 0; memcpy((void*)&DCI_pdu.dci_alloc[0].dci_pdu[0], &BCCH_alloc_pdu[0], BCCH_pdu_size_bytes); DCI_pdu.Num_common_dci++; - + /* // add ue specific dci DCI_pdu.dci_alloc[1].dci_length = dci_length; DCI_pdu.dci_alloc[1].L = log2L; @@ -471,7 +471,7 @@ DCI_PDU *get_dci(LTE_DL_FRAME_PARMS *lte_frame_parms,uint8_t log2L, uint8_t log2 DCI_pdu.dci_alloc[1].ra_flag = 0; memcpy((void*)&DCI_pdu.dci_alloc[1].dci_pdu[0], &DLSCH_alloc_pdu[0], dci_length_bytes); DCI_pdu.Num_ue_spec_dci++; - */ + DCI_pdu.dci_alloc[0].dci_length = UL_pdu_size_bits; DCI_pdu.dci_alloc[0].L = log2L; @@ -480,7 +480,7 @@ DCI_PDU *get_dci(LTE_DL_FRAME_PARMS *lte_frame_parms,uint8_t log2L, uint8_t log2 DCI_pdu.dci_alloc[0].ra_flag = 0; memcpy((void*)&DCI_pdu.dci_alloc[0].dci_pdu[0], &UL_alloc_pdu[0], UL_pdu_size_bytes); DCI_pdu.Num_ue_spec_dci++; - + */ DCI_pdu.nCCE = 0; for (i=0; i<DCI_pdu.Num_common_dci+DCI_pdu.Num_ue_spec_dci;i++) { DCI_pdu.nCCE += (1<<(DCI_pdu.dci_alloc[i].L)); @@ -866,7 +866,6 @@ int main(int argc, char **argv) { } - PHY_vars_UE->UE_mode[0] = PUSCH; nCCE_max = get_nCCE(3,&PHY_vars_eNB->lte_frame_parms,get_mi(&PHY_vars_eNB->lte_frame_parms,0)); @@ -891,29 +890,30 @@ int main(int argc, char **argv) { for (aa=0; aa<PHY_vars_eNB->lte_frame_parms.nb_antennas_tx_eNB;aa++) { memset(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][aa][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t)); - + /* re_offset = PHY_vars_eNB->lte_frame_parms.first_carrier_offset; txptr = (uint32_t*)&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][aa][subframe*PHY_vars_eNB->lte_frame_parms.samples_per_tti]; for (i=0;i<PHY_vars_eNB->lte_frame_parms.N_RB_DL*6;i++) { - txptr[re_offset++] = QPSK[taus()&3]; + txptr[re_offset++] = PHY_vars_eNB->lte_frame_parms.mode1_flag==1 ? QPSK[taus()&3] : QPSK2[taus()&3]; //printf("%i => %d,%d\n",re_offset-1,*(int16_t*)&txptr[re_offset-1],*(1+(int16_t*)&txptr[re_offset-1])); } re_offset=1; //skip DC for (i=0;i<PHY_vars_eNB->lte_frame_parms.N_RB_DL*6;i++) - txptr[re_offset++] = QPSK[taus()&3]; + txptr[re_offset++] = PHY_vars_eNB->lte_frame_parms.mode1_flag==1 ? QPSK[taus()&3] : QPSK2[taus()&3]; + */ } generate_pilots_slot(PHY_vars_eNB, - PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id], - 1024, - (subframe*2), - 0); + PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id], + AMP, //1024, + (subframe*2), + 0); generate_pilots_slot(PHY_vars_eNB, - PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id], - 1024, - (subframe*2)+1, - 0); + PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id], + AMP, //1024, + (subframe*2)+1, + 0); if (input_fd == NULL) { @@ -969,15 +969,15 @@ int main(int argc, char **argv) { if (DCI_pdu.dci_alloc[i].nCCE==-1) exit(-1); } - + num_pdcch_symbols = generate_dci_top(DCI_pdu.Num_ue_spec_dci, - DCI_pdu.Num_common_dci, - DCI_pdu.dci_alloc, - 0, - 1024, - &PHY_vars_eNB->lte_frame_parms, - PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id], - subframe); + DCI_pdu.Num_common_dci, + DCI_pdu.dci_alloc, + 0, + AMP, + &PHY_vars_eNB->lte_frame_parms, + PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id], + subframe); if (n_frames==1) printf("num_pdcch_symbols at TX %d\n",num_pdcch_symbols); @@ -999,7 +999,7 @@ int main(int argc, char **argv) { PHY_vars_UE->ulsch_ue[0]->harq_processes[harq_pid]->n_DMRS = 0; generate_phich_top(PHY_vars_eNB, - subframe,1024,0,0); + subframe,AMP,0,0); /* // generate 3 interfering PHICH if (num_phich_interf>0) { @@ -1032,11 +1032,11 @@ int main(int argc, char **argv) { // write_output("pilotsF.m","rsF",txdataF[0],lte_PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size,1,1); - if (n_frames==1) + if (n_frames==1) { write_output("txsigF0.m","txsF0", PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][0],4*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX,1,1); if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx_eNB > 1) write_output("txsigF1.m","txsF1", PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][1],4*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX,1,1); - + } tx_lev = 0; @@ -1127,10 +1127,10 @@ int main(int argc, char **argv) { // printf("subframe_offset = %d\n",subframe_offset); slot_fep(PHY_vars_UE, - l%(PHY_vars_eNB->lte_frame_parms.symbols_per_tti/2), - (2*subframe)+(l/(PHY_vars_eNB->lte_frame_parms.symbols_per_tti/2)), - 0, - 0); + l%(PHY_vars_eNB->lte_frame_parms.symbols_per_tti/2), + (2*subframe)+(l/(PHY_vars_eNB->lte_frame_parms.symbols_per_tti/2)), + 0, + 0); #ifdef PERFECT_CE if (awgn_flag==0) { @@ -1153,7 +1153,7 @@ int main(int argc, char **argv) { } } else { - for(aa=0;aa<frame_parms->nb_antennas_tx;aa++) + for(aa=0;aa<frame_parms->nb_antennas_tx_eNB;aa++) { for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++) { diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c index 4634fba6cb9a44d9dd7effc78cf477e3ff487600..1dd6ee59b0eea7fb42b7cbceeee6aa25d8143403 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsim.c +++ b/openair1/SIMULATION/LTE_PHY/ulsim.c @@ -959,7 +959,7 @@ int main(int argc, char **argv) { if ((cqi_flag == 1) && (n_frames == 1) ) { printf("CQI information (O %d) %d %d\n",PHY_vars_UE->ulsch_ue[0]->O, PHY_vars_UE->ulsch_ue[0]->o[0],PHY_vars_UE->ulsch_ue[0]->o[1]); - print_CQI(PHY_vars_UE->ulsch_ue[0]->o,PHY_vars_UE->ulsch_ue[0]->uci_format,0); + print_CQI(PHY_vars_UE->ulsch_ue[0]->o,PHY_vars_UE->ulsch_ue[0]->uci_format,PHY_vars_UE->lte_frame_parms.N_RB_DL,0); } PHY_vars_UE->ulsch_ue[0]->o_ACK[0] = taus()&1; @@ -1224,7 +1224,7 @@ int main(int argc, char **argv) { printf("No ULSCH errors found, o_ACK[0]= %d, cqi_crc_status=%d\n",PHY_vars_eNB->ulsch_eNB[0]->harq_processes[harq_pid]->o_ACK[0],PHY_vars_eNB->ulsch_eNB[0]->harq_processes[harq_pid]->cqi_crc_status); if (PHY_vars_eNB->ulsch_eNB[0]->harq_processes[harq_pid]->cqi_crc_status==1) print_CQI(PHY_vars_eNB->ulsch_eNB[0]->harq_processes[harq_pid]->o, - PHY_vars_eNB->ulsch_eNB[0]->harq_processes[harq_pid]->uci_format,0); + PHY_vars_eNB->ulsch_eNB[0]->harq_processes[harq_pid]->uci_format,0,PHY_vars_eNB->lte_frame_parms.N_RB_DL); dump_ulsch(PHY_vars_eNB,subframe,0); exit(-1); }