git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5950 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -934,7 +934,7 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
|
|||||||
#ifndef USER_MODE
|
#ifndef USER_MODE
|
||||||
ue_common_vars->rxdata[i] = (int*) RX_DMA_BUFFER[0][i];
|
ue_common_vars->rxdata[i] = (int*) RX_DMA_BUFFER[0][i];
|
||||||
#else //USER_MODE
|
#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
|
#endif //USER_MODE
|
||||||
if (ue_common_vars->rxdata[i]) {
|
if (ue_common_vars->rxdata[i]) {
|
||||||
#ifdef DEBUG_PHY
|
#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 (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);
|
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]) {
|
if (ue_common_vars->dl_ch_estimates[eNB_id][(j<<1)+i]) {
|
||||||
#ifdef DEBUG_PHY
|
#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 (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);
|
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]) {
|
if (ue_common_vars->dl_ch_estimates_time[eNB_id][(j<<1)+i]) {
|
||||||
#ifdef DEBUG_PHY
|
#ifdef DEBUG_PHY
|
||||||
|
|||||||
@@ -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++) {
|
for (aarx=0;aarx<phy_vars_ue->lte_frame_parms.nb_antennas_rx;aarx++) {
|
||||||
|
|
||||||
pil = (short *)&pilot[p][0];
|
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))];
|
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];
|
dl_ch = (short *)&dl_ch_estimates[(p<<1)+aarx][ch_offset];
|
||||||
|
|
||||||
// if (eNb_id==0)
|
// if (eNb_id==0)
|
||||||
@@ -206,11 +202,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
|
|||||||
dl_ch,
|
dl_ch,
|
||||||
24);
|
24);
|
||||||
pil+=2; // Re Im
|
pil+=2; // Re Im
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
dl_ch+=8;
|
dl_ch+=8;
|
||||||
|
|
||||||
ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15);
|
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,
|
dl_ch,
|
||||||
24);
|
24);
|
||||||
pil+=2;
|
pil+=2;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
dl_ch+=16;
|
dl_ch+=16;
|
||||||
|
|
||||||
for (pilot_cnt=2;pilot_cnt<((phy_vars_ue->lte_frame_parms.N_RB_DL)-1);pilot_cnt+=2) {
|
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
|
pil+=2; // Re Im
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif // 6 samples in replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
dl_ch+=8;
|
dl_ch+=8;
|
||||||
|
|
||||||
// printf("pilot[%d][%d] (%d,%d)\n",p,rb,pil[0],pil[1]);
|
// 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,
|
dl_ch,
|
||||||
24);
|
24);
|
||||||
pil+=2;
|
pil+=2;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
dl_ch+=16;
|
dl_ch+=16;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -279,11 +259,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
|
|||||||
k = (nu + nushift)%6;
|
k = (nu + nushift)%6;
|
||||||
if (k > 6)
|
if (k > 6)
|
||||||
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))];
|
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) {
|
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("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]);
|
// 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,
|
dl_ch,
|
||||||
24);
|
24);
|
||||||
pil+=2;
|
pil+=2;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
dl_ch+=8;
|
dl_ch+=8;
|
||||||
|
|
||||||
ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15);
|
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,
|
dl_ch,
|
||||||
24);
|
24);
|
||||||
pil+=2;
|
pil+=2;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
dl_ch+=16;
|
dl_ch+=16;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -331,11 +300,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
|
|||||||
dl_ch,
|
dl_ch,
|
||||||
24);
|
24);
|
||||||
pil+=2; // Re Im
|
pil+=2; // Re Im
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
dl_ch+=8;
|
dl_ch+=8;
|
||||||
|
|
||||||
ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15);
|
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,
|
dl_ch,
|
||||||
24);
|
24);
|
||||||
pil+=2; // Re Im
|
pil+=2; // Re Im
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
dl_ch+=8;
|
dl_ch+=8;
|
||||||
|
|
||||||
ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15);
|
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,
|
dl_ch,
|
||||||
24);
|
24);
|
||||||
pil+=2;
|
pil+=2;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
dl_ch+=16;
|
dl_ch+=16;
|
||||||
|
|
||||||
for (pilot_cnt=2;pilot_cnt<24;pilot_cnt+=2) {
|
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,
|
dl_ch,
|
||||||
24);
|
24);
|
||||||
pil+=2; // Re Im
|
pil+=2; // Re Im
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
dl_ch+=8;
|
dl_ch+=8;
|
||||||
|
|
||||||
ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15);
|
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,
|
dl_ch,
|
||||||
24);
|
24);
|
||||||
pil+=2;
|
pil+=2;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
dl_ch+=16;
|
dl_ch+=16;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -467,11 +416,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
|
|||||||
|
|
||||||
// printf("Second half\n");
|
// printf("Second half\n");
|
||||||
// Second half of RBs
|
// 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))];
|
rxF = (short *)&rxdataF[aarx][((symbol_offset+1+k))];
|
||||||
#endif
|
|
||||||
ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15);
|
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);
|
ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15);
|
||||||
#ifdef DEBUG_CH
|
#ifdef DEBUG_CH
|
||||||
@@ -486,11 +432,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
|
|||||||
dl_ch,
|
dl_ch,
|
||||||
24);
|
24);
|
||||||
pil+=2;
|
pil+=2;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
dl_ch+=16;
|
dl_ch+=16;
|
||||||
|
|
||||||
for (pilot_cnt=0;pilot_cnt<22;pilot_cnt+=2) {
|
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,
|
dl_ch,
|
||||||
24);
|
24);
|
||||||
pil+=2;
|
pil+=2;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
dl_ch+=8;
|
dl_ch+=8;
|
||||||
|
|
||||||
ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15);
|
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,
|
dl_ch,
|
||||||
24);
|
24);
|
||||||
pil+=2;
|
pil+=2;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
dl_ch+=16;
|
dl_ch+=16;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -558,11 +492,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
|
|||||||
dl_ch,
|
dl_ch,
|
||||||
24);
|
24);
|
||||||
pil+=2; // Re Im
|
pil+=2; // Re Im
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif// remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
dl_ch+=8;
|
dl_ch+=8;
|
||||||
|
|
||||||
ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15);
|
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,
|
dl_ch,
|
||||||
24);
|
24);
|
||||||
pil+=2; // Re Im
|
pil+=2; // Re Im
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
// remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
dl_ch+=8;
|
dl_ch+=8;
|
||||||
|
|
||||||
ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15);
|
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,
|
dl_ch,
|
||||||
24);
|
24);
|
||||||
pil+=2;
|
pil+=2;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
dl_ch+=16;
|
dl_ch+=16;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -638,11 +559,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
|
|||||||
|
|
||||||
//printf("Second half\n");
|
//printf("Second half\n");
|
||||||
//Second half of RBs
|
//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)))];
|
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[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);
|
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,
|
dl_ch,
|
||||||
24);
|
24);
|
||||||
pil+=2;
|
pil+=2;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
dl_ch+=16;
|
dl_ch+=16;
|
||||||
|
|
||||||
for (rb=0;rb<28;rb+=4) {
|
for (rb=0;rb<28;rb+=4) {
|
||||||
@@ -673,11 +586,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
|
|||||||
dl_ch,
|
dl_ch,
|
||||||
24);
|
24);
|
||||||
pil+=2;
|
pil+=2;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
dl_ch+=8;
|
dl_ch+=8;
|
||||||
|
|
||||||
ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15);
|
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,
|
dl_ch,
|
||||||
24);
|
24);
|
||||||
pil+=2;
|
pil+=2;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24; // remember replicated format (Re0 Im0 Re0 Im0) !!!
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
dl_ch+=16;
|
dl_ch+=16;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -795,10 +700,11 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// do ifft of channel estimate
|
// 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++) {
|
for (aarx=0;aarx<phy_vars_ue->lte_frame_parms.nb_antennas_rx;aarx++)
|
||||||
if (phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa])
|
for (p=0;p<phy_vars_ue->lte_frame_parms.nb_antennas_tx_eNB;p++) {
|
||||||
idft((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa][8],
|
if (phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][(p<<1)+aarx])
|
||||||
(int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][aa],1);
|
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);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -302,36 +302,32 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
|
|||||||
__m128i *dl_ch0_128,*dl_ch1_128;
|
__m128i *dl_ch0_128,*dl_ch1_128;
|
||||||
int *dl_ch0,*dl_ch1;
|
int *dl_ch0,*dl_ch1;
|
||||||
LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms;
|
LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms;
|
||||||
|
int nb_subbands,subband_size,last_subband_size;
|
||||||
|
int N_RB_DL = frame_parms->N_RB_DL;
|
||||||
|
|
||||||
phy_vars_ue->PHY_measurements.nb_antennas_rx = frame_parms->nb_antennas_rx;
|
switch (N_RB_DL) {
|
||||||
|
case 6:
|
||||||
gain_offset = 0;
|
nb_subbands = 6;
|
||||||
|
subband_size = 12;
|
||||||
#ifndef __SSE3__
|
last_subband_size = 0;
|
||||||
zeroPMI = _mm_xor_si128(zeroPMI,zeroPMI);
|
break;
|
||||||
#endif
|
default:
|
||||||
|
case 25:
|
||||||
if (phy_vars_ue->init_averaging == 1) {
|
nb_subbands = 7;
|
||||||
for (eNB_id=0;eNB_id<phy_vars_ue->n_connected_eNB;eNB_id++) {
|
subband_size = 4*12;
|
||||||
phy_vars_ue->PHY_measurements.rx_power_avg[eNB_id] = 0;
|
last_subband_size = 12;
|
||||||
}
|
break;
|
||||||
|
case 50:
|
||||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
nb_subbands = 9;
|
||||||
phy_vars_ue->PHY_measurements.n0_power[aarx] = 0;
|
subband_size = 6*12;
|
||||||
phy_vars_ue->PHY_measurements.n0_power_dB[aarx] = 0;
|
last_subband_size = 2*12;
|
||||||
}
|
break;
|
||||||
|
case 100:
|
||||||
phy_vars_ue->PHY_measurements.n0_power_tot = 0;
|
nb_subbands = 13;
|
||||||
phy_vars_ue->PHY_measurements.n0_power_tot_dB = 0;
|
subband_size = 8*12;
|
||||||
phy_vars_ue->PHY_measurements.n0_power_avg = 0;
|
last_subband_size = 4*12;
|
||||||
phy_vars_ue->PHY_measurements.n0_power_avg_dB = 0;
|
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) {
|
if (abstraction_flag!=0) {
|
||||||
phy_vars_ue->PHY_measurements.n0_power_tot = 0;
|
phy_vars_ue->PHY_measurements.n0_power_tot = 0;
|
||||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
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++) {
|
for (aatx=0; aatx<frame_parms->nb_antennas_tx_eNB; aatx++) {
|
||||||
phy_vars_ue->PHY_measurements.rx_spatial_power[eNB_id][aatx][aarx] =
|
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],
|
(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];
|
//- phy_vars_ue->PHY_measurements.n0_power[aarx];
|
||||||
|
|
||||||
if (phy_vars_ue->PHY_measurements.rx_spatial_power[eNB_id][aatx][aarx]<0)
|
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_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];
|
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
|
// cqi
|
||||||
if (aarx==0)
|
if (aarx==0)
|
||||||
phy_vars_ue->PHY_measurements.subband_cqi_tot[eNB_id][subband]=0;
|
phy_vars_ue->PHY_measurements.subband_cqi_tot[eNB_id][subband]=0;
|
||||||
|
|
||||||
if (subband<6) {
|
if ((subband<(nb_subbands-1))||(N_RB_DL==6)) {
|
||||||
/*
|
/*for (i=0;i<48;i++)
|
||||||
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)]);
|
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] =
|
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)
|
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;
|
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.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]);
|
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++)
|
// 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)]);
|
// 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_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.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]);
|
phy_vars_ue->PHY_measurements.n0_power[aarx]);
|
||||||
}
|
}
|
||||||
dl_ch1+=48;
|
dl_ch1+=subband_size;
|
||||||
dl_ch0+=48;
|
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]);
|
// 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.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);
|
// 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
|
#endif
|
||||||
*/
|
*/
|
||||||
for (subband=0;subband<7;subband++) {
|
for (subband=0;subband<nb_subbands;subband++) {
|
||||||
|
|
||||||
|
|
||||||
// pmi
|
// pmi
|
||||||
@@ -497,7 +493,11 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
|
|||||||
pmi128_im = _mm_xor_si128(pmi128_im,pmi128_im);
|
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)
|
// 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
|
// 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 (i=0;i<limit;i++) {
|
||||||
|
|
||||||
// For each RE in subband perform ch0 * conj(ch1)
|
// 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]);
|
// 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.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;
|
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;
|
phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB_id][i] = 0;
|
||||||
if (frame_parms->nb_antennas_rx>1) {
|
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])
|
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])
|
||||||
|
|||||||
@@ -834,43 +834,31 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
|
|||||||
|
|
||||||
rxF_ext = &rxdataF_ext[aarx][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)))];
|
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
|
if ((frame_parms->N_RB_DL&1) == 0) { // even number of RBs
|
||||||
for (rb=0;rb<frame_parms->N_RB_DL;rb++) {
|
for (rb=0;rb<frame_parms->N_RB_DL;rb++) {
|
||||||
|
|
||||||
// For second half of RBs skip DC carrier
|
// For second half of RBs skip DC carrier
|
||||||
if (rb==(frame_parms->N_RB_DL>>1)) {
|
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)))];
|
rxF = &rxdataF[aarx][(1 + (symbol*(frame_parms->ofdm_symbol_size)))];
|
||||||
#endif
|
|
||||||
//dl_ch0++;
|
//dl_ch0++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (symbol_mod>0) {
|
if (symbol_mod>0) {
|
||||||
memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int32_t));
|
memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int32_t));
|
||||||
for (i=0;i<12;i++) {
|
for (i=0;i<12;i++) {
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF_ext[i]=rxF[i<<1];
|
|
||||||
#else
|
|
||||||
rxF_ext[i]=rxF[i];
|
rxF_ext[i]=rxF[i];
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
nb_rb++;
|
nb_rb++;
|
||||||
dl_ch0_ext+=12;
|
dl_ch0_ext+=12;
|
||||||
rxF_ext+=12;
|
rxF_ext+=12;
|
||||||
|
|
||||||
dl_ch0+=12;
|
dl_ch0+=12;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24;
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
j=0;
|
j=0;
|
||||||
@@ -879,11 +867,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
|
|||||||
(i!=(nushiftmod3+3)) &&
|
(i!=(nushiftmod3+3)) &&
|
||||||
(i!=(nushiftmod3+6)) &&
|
(i!=(nushiftmod3+6)) &&
|
||||||
(i!=(nushiftmod3+9))) {
|
(i!=(nushiftmod3+9))) {
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF_ext[j]=rxF[i<<1];
|
|
||||||
#else
|
|
||||||
rxF_ext[j]=rxF[i];
|
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]));
|
// 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_ch0_ext[j++]=dl_ch0[i];
|
||||||
// printf("ch %d => (%d,%d)\n",i,*(short *)&dl_ch0[i],*(1+(short*)&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;
|
rxF_ext+=8;
|
||||||
|
|
||||||
dl_ch0+=12;
|
dl_ch0+=12;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24;
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -908,21 +888,13 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
|
|||||||
if (symbol_mod>0) {
|
if (symbol_mod>0) {
|
||||||
memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int32_t));
|
memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int32_t));
|
||||||
for (i=0;i<12;i++)
|
for (i=0;i<12;i++)
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF_ext[i]=rxF[i<<1];
|
|
||||||
#else
|
|
||||||
rxF_ext[i]=rxF[i];
|
rxF_ext[i]=rxF[i];
|
||||||
#endif
|
|
||||||
nb_rb++;
|
nb_rb++;
|
||||||
dl_ch0_ext+=12;
|
dl_ch0_ext+=12;
|
||||||
rxF_ext+=12;
|
rxF_ext+=12;
|
||||||
|
|
||||||
dl_ch0+=12;
|
dl_ch0+=12;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24;
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
j=0;
|
j=0;
|
||||||
@@ -931,11 +903,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
|
|||||||
(i!=(nushiftmod3+3)) &&
|
(i!=(nushiftmod3+3)) &&
|
||||||
(i!=(nushiftmod3+6)) &&
|
(i!=(nushiftmod3+6)) &&
|
||||||
(i!=(nushiftmod3+9))) {
|
(i!=(nushiftmod3+9))) {
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF_ext[j]=rxF[i<<1];
|
|
||||||
#else
|
|
||||||
rxF_ext[j]=rxF[i];
|
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]));
|
// 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_ch0_ext[j++]=dl_ch0[i];
|
||||||
// printf("ch %d => (%d,%d)\n",i,*(short *)&dl_ch0[i],*(1+(short*)&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;
|
rxF_ext+=8;
|
||||||
|
|
||||||
dl_ch0+=12;
|
dl_ch0+=12;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24;
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Do middle RB (around DC)
|
// Do middle RB (around DC)
|
||||||
@@ -962,28 +926,16 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
|
|||||||
if ((i!=nushiftmod3) &&
|
if ((i!=nushiftmod3) &&
|
||||||
(i!=(nushiftmod3+3))){
|
(i!=(nushiftmod3+3))){
|
||||||
dl_ch0_ext[j]=dl_ch0[i];
|
dl_ch0_ext[j]=dl_ch0[i];
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF_ext[j++]=rxF[i<<1];
|
|
||||||
#else
|
|
||||||
rxF_ext[j++]=rxF[i];
|
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]));
|
// 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)))];
|
rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))];
|
||||||
#endif
|
|
||||||
for (;i<12;i++) {
|
for (;i<12;i++) {
|
||||||
if ((i!=(nushiftmod3+6)) &&
|
if ((i!=(nushiftmod3+6)) &&
|
||||||
(i!=(nushiftmod3+9))){
|
(i!=(nushiftmod3+9))){
|
||||||
dl_ch0_ext[j]=dl_ch0[i];
|
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)];
|
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]));
|
// 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;
|
dl_ch0_ext+=8;
|
||||||
rxF_ext+=8;
|
rxF_ext+=8;
|
||||||
dl_ch0+=12;
|
dl_ch0+=12;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=14;
|
|
||||||
#else
|
|
||||||
rxF+=7;
|
rxF+=7;
|
||||||
#endif
|
|
||||||
rb++;
|
rb++;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (i=0;i<6;i++) {
|
for (i=0;i<6;i++) {
|
||||||
dl_ch0_ext[i]=dl_ch0[i];
|
dl_ch0_ext[i]=dl_ch0[i];
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF_ext[i]=rxF[i<<1];
|
|
||||||
#else
|
|
||||||
rxF_ext[i]=rxF[i];
|
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)))];
|
rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))];
|
||||||
#endif
|
|
||||||
for (;i<12;i++) {
|
for (;i<12;i++) {
|
||||||
dl_ch0_ext[i]=dl_ch0[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)];
|
rxF_ext[i]=rxF[(1+i-6)];
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1028,11 +964,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
|
|||||||
dl_ch0_ext+=12;
|
dl_ch0_ext+=12;
|
||||||
rxF_ext+=12;
|
rxF_ext+=12;
|
||||||
dl_ch0+=12;
|
dl_ch0+=12;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=14;
|
|
||||||
#else
|
|
||||||
rxF+=7;
|
rxF+=7;
|
||||||
#endif
|
|
||||||
rb++;
|
rb++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1040,21 +972,13 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
|
|||||||
if (symbol_mod > 0) {
|
if (symbol_mod > 0) {
|
||||||
memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int32_t));
|
memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int32_t));
|
||||||
for (i=0;i<12;i++)
|
for (i=0;i<12;i++)
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF_ext[i]=rxF[i<<1];
|
|
||||||
#else
|
|
||||||
rxF_ext[i]=rxF[i];
|
rxF_ext[i]=rxF[i];
|
||||||
#endif
|
|
||||||
nb_rb++;
|
nb_rb++;
|
||||||
dl_ch0_ext+=12;
|
dl_ch0_ext+=12;
|
||||||
rxF_ext+=12;
|
rxF_ext+=12;
|
||||||
|
|
||||||
dl_ch0+=12;
|
dl_ch0+=12;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24;
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
j=0;
|
j=0;
|
||||||
@@ -1063,11 +987,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
|
|||||||
(i!=(nushiftmod3+3)) &&
|
(i!=(nushiftmod3+3)) &&
|
||||||
(i!=(nushiftmod3+6)) &&
|
(i!=(nushiftmod3+6)) &&
|
||||||
(i!=(nushiftmod3+9))) {
|
(i!=(nushiftmod3+9))) {
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF_ext[j]=rxF[i<<1];
|
|
||||||
#else
|
|
||||||
rxF_ext[j]=rxF[i];
|
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]));
|
// 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_ch0_ext[j++]=dl_ch0[i];
|
||||||
}
|
}
|
||||||
@@ -1077,11 +997,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
|
|||||||
rxF_ext+=8;
|
rxF_ext+=8;
|
||||||
|
|
||||||
dl_ch0+=12;
|
dl_ch0+=12;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24;
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1118,22 +1034,15 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
|
|||||||
// msg("pdcch extract_rbs: rxF_ext pos %d\n",symbol*(frame_parms->N_RB_DL*12));
|
// 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)];
|
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)))];
|
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
|
if ((frame_parms->N_RB_DL&1) == 0) // even number of RBs
|
||||||
for (rb=0;rb<frame_parms->N_RB_DL;rb++) {
|
for (rb=0;rb<frame_parms->N_RB_DL;rb++) {
|
||||||
|
|
||||||
// For second half of RBs skip DC carrier
|
// For second half of RBs skip DC carrier
|
||||||
if (rb==(frame_parms->N_RB_DL>>1)) {
|
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)))];
|
rxF = &rxdataF[aarx][(1 + (symbol*(frame_parms->ofdm_symbol_size)))];
|
||||||
#endif
|
// dl_ch0++;
|
||||||
//dl_ch0++;
|
|
||||||
//dl_ch1++;
|
//dl_ch1++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1143,17 +1052,13 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
|
|||||||
/*
|
/*
|
||||||
msg("rb %d\n",rb);
|
msg("rb %d\n",rb);
|
||||||
for (i=0;i<12;i++)
|
for (i=0;i<12;i++)
|
||||||
msg("(%d %d)",((int16_t *)dl_ch)[i<<1],((int16_t*)dl_ch)[1+(i<<1)]);
|
msg("(%d %d)",((int16_t *)dl_ch0)[i<<1],((int16_t*)dl_ch0)[1+(i<<1)]);
|
||||||
msg("\n");*/
|
msg("\n");
|
||||||
|
*/
|
||||||
for (i=0;i<12;i++) {
|
for (i=0;i<12;i++) {
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF_ext[i]=rxF[i<<1];
|
|
||||||
#else
|
|
||||||
rxF_ext[i]=rxF[i];
|
rxF_ext[i]=rxF[i];
|
||||||
#endif
|
// msg("%d : (%d,%d)\n",(rxF+(2*i)-&rxdataF[aarx][( (symbol*(frame_parms->ofdm_symbol_size)))*2])/2,
|
||||||
// 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]);
|
||||||
// ((int16_t*)&rxF[i<<1])[0],((int16_t*)&rxF[i<<1])[0]);
|
|
||||||
}
|
}
|
||||||
nb_rb++;
|
nb_rb++;
|
||||||
dl_ch0_ext+=12;
|
dl_ch0_ext+=12;
|
||||||
@@ -1167,35 +1072,20 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
|
|||||||
(i!=nushiftmod3+3) &&
|
(i!=nushiftmod3+3) &&
|
||||||
(i!=nushiftmod3+6) &&
|
(i!=nushiftmod3+6) &&
|
||||||
(i!=nushiftmod3+9)) {
|
(i!=nushiftmod3+9)) {
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF_ext[j]=rxF[i<<1];
|
|
||||||
#else
|
|
||||||
rxF_ext[j]=rxF[i];
|
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]));
|
||||||
// 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_ch0_ext[j++]=dl_ch0[i];
|
|
||||||
dl_ch1_ext[j++]=dl_ch1[i];
|
dl_ch1_ext[j++]=dl_ch1[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
nb_rb++;
|
nb_rb++;
|
||||||
dl_ch0_ext+=8;
|
dl_ch0_ext+=8;
|
||||||
|
dl_ch1_ext+=8;
|
||||||
rxF_ext+=8;
|
rxF_ext+=8;
|
||||||
|
|
||||||
dl_ch0+=12;
|
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24;
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
dl_ch0+=12;
|
dl_ch0+=12;
|
||||||
dl_ch1+=12;
|
dl_ch1+=12;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24;
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else { // Odd number of RBs
|
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_ch0_ext,dl_ch0,12*sizeof(int32_t));
|
||||||
memcpy(dl_ch1_ext,dl_ch1,12*sizeof(int32_t));
|
memcpy(dl_ch1_ext,dl_ch1,12*sizeof(int32_t));
|
||||||
for (i=0;i<12;i++)
|
for (i=0;i<12;i++)
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF_ext[i]=rxF[i<<1];
|
|
||||||
#else
|
|
||||||
rxF_ext[i]=rxF[i];
|
rxF_ext[i]=rxF[i];
|
||||||
#endif
|
|
||||||
nb_rb++;
|
nb_rb++;
|
||||||
dl_ch0_ext+=12;
|
dl_ch0_ext+=12;
|
||||||
dl_ch1_ext+=12;
|
dl_ch1_ext+=12;
|
||||||
@@ -1219,11 +1106,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
|
|||||||
|
|
||||||
dl_ch0+=12;
|
dl_ch0+=12;
|
||||||
dl_ch1+=12;
|
dl_ch1+=12;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24;
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -1233,11 +1116,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
|
|||||||
(i!=nushiftmod3+3) &&
|
(i!=nushiftmod3+3) &&
|
||||||
(i!=nushiftmod3+6) &&
|
(i!=nushiftmod3+6) &&
|
||||||
(i!=nushiftmod3+9)) {
|
(i!=nushiftmod3+9)) {
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF_ext[j]=rxF[i<<1];
|
|
||||||
#else
|
|
||||||
rxF_ext[j]=rxF[i];
|
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]));
|
// 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_ch0_ext[j]=dl_ch0[i];
|
||||||
dl_ch1_ext[j++]=dl_ch1[i];
|
dl_ch1_ext[j++]=dl_ch1[i];
|
||||||
@@ -1252,11 +1131,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
|
|||||||
|
|
||||||
dl_ch0+=12;
|
dl_ch0+=12;
|
||||||
dl_ch1+=12;
|
dl_ch1+=12;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24;
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Do middle RB (around DC)
|
// Do middle RB (around DC)
|
||||||
@@ -1265,25 +1140,13 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
|
|||||||
for (i=0;i<6;i++) {
|
for (i=0;i<6;i++) {
|
||||||
dl_ch0_ext[i]=dl_ch0[i];
|
dl_ch0_ext[i]=dl_ch0[i];
|
||||||
dl_ch1_ext[i]=dl_ch1[i];
|
dl_ch1_ext[i]=dl_ch1[i];
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF_ext[i]=rxF[i<<1];
|
|
||||||
#else
|
|
||||||
rxF_ext[i]=rxF[i];
|
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)))];
|
rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))];
|
||||||
#endif
|
|
||||||
for (;i<12;i++) {
|
for (;i<12;i++) {
|
||||||
dl_ch0_ext[i]=dl_ch0[i];
|
dl_ch0_ext[i]=dl_ch0[i];
|
||||||
dl_ch1_ext[i]=dl_ch1[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)];
|
rxF_ext[i]=rxF[(1+i)];
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nb_rb++;
|
nb_rb++;
|
||||||
@@ -1293,11 +1156,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
|
|||||||
|
|
||||||
dl_ch0+=12;
|
dl_ch0+=12;
|
||||||
dl_ch1+=12;
|
dl_ch1+=12;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=14;
|
|
||||||
#else
|
|
||||||
rxF+=7;
|
rxF+=7;
|
||||||
#endif
|
|
||||||
rb++;
|
rb++;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -1307,29 +1166,17 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
|
|||||||
(i!=nushiftmod3+3)){
|
(i!=nushiftmod3+3)){
|
||||||
dl_ch0_ext[j]=dl_ch0[i];
|
dl_ch0_ext[j]=dl_ch0[i];
|
||||||
dl_ch1_ext[j]=dl_ch1[i];
|
dl_ch1_ext[j]=dl_ch1[i];
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF_ext[j++]=rxF[i<<1];
|
|
||||||
#else
|
|
||||||
rxF_ext[j++]=rxF[i];
|
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]));
|
// 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)))];
|
rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))];
|
||||||
#endif
|
|
||||||
for (;i<12;i++) {
|
for (;i<12;i++) {
|
||||||
if ((i!=nushiftmod3+6) &&
|
if ((i!=nushiftmod3+6) &&
|
||||||
(i!=nushiftmod3+9)){
|
(i!=nushiftmod3+9)){
|
||||||
dl_ch0_ext[j]=dl_ch0[i];
|
dl_ch0_ext[j]=dl_ch0[i];
|
||||||
dl_ch1_ext[j]=dl_ch1[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)];
|
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]));
|
// 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;
|
rxF_ext+=8;
|
||||||
dl_ch0+=12;
|
dl_ch0+=12;
|
||||||
dl_ch1+=12;
|
dl_ch1+=12;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=14;
|
|
||||||
#else
|
|
||||||
rxF+=7;
|
rxF+=7;
|
||||||
#endif
|
|
||||||
rb++;
|
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_ch0_ext,dl_ch0,12*sizeof(int32_t));
|
||||||
memcpy(dl_ch1_ext,dl_ch1,12*sizeof(int32_t));
|
memcpy(dl_ch1_ext,dl_ch1,12*sizeof(int32_t));
|
||||||
for (i=0;i<12;i++)
|
for (i=0;i<12;i++)
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF_ext[i]=rxF[i<<1];
|
|
||||||
#else
|
|
||||||
rxF_ext[i]=rxF[i];
|
rxF_ext[i]=rxF[i];
|
||||||
#endif
|
|
||||||
nb_rb++;
|
nb_rb++;
|
||||||
dl_ch0_ext+=12;
|
dl_ch0_ext+=12;
|
||||||
dl_ch1_ext+=12;
|
dl_ch1_ext+=12;
|
||||||
@@ -1368,12 +1207,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
|
|||||||
|
|
||||||
dl_ch0+=12;
|
dl_ch0+=12;
|
||||||
dl_ch1+=12;
|
dl_ch1+=12;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24;
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
rxF+=12;
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
j=0;
|
j=0;
|
||||||
@@ -1382,11 +1216,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
|
|||||||
(i!=nushiftmod3+3) &&
|
(i!=nushiftmod3+3) &&
|
||||||
(i!=nushiftmod3+6) &&
|
(i!=nushiftmod3+6) &&
|
||||||
(i!=nushiftmod3+9)) {
|
(i!=nushiftmod3+9)) {
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF_ext[j]=rxF[i<<1];
|
|
||||||
#else
|
|
||||||
rxF_ext[j]=rxF[i];
|
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]));
|
// 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_ch0_ext[j]=dl_ch0[i];
|
||||||
dl_ch1_ext[j++]=dl_ch1[i];
|
dl_ch1_ext[j++]=dl_ch1[i];
|
||||||
@@ -1399,11 +1229,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
|
|||||||
|
|
||||||
dl_ch0+=12;
|
dl_ch0+=12;
|
||||||
dl_ch1+=12;
|
dl_ch1+=12;
|
||||||
#ifndef NEW_FFT
|
|
||||||
rxF+=24;
|
|
||||||
#else
|
|
||||||
rxF+=12;
|
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)))
|
if (numCCE <= get_nCCE(1, frame_parms, get_mi(frame_parms, subframe)))
|
||||||
return(cmax(1,nCCEmin));
|
return(cmax(1,nCCEmin));
|
||||||
//else if ((9*numCCE) <= (frame_parms->N_RB_DL*((frame_parms->nb_antennas_tx_eNB==4) ? 4 : 5)))
|
//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));
|
return(cmax(2,nCCEmin));
|
||||||
//else if ((9*numCCE) <= (frame_parms->N_RB_DL*((frame_parms->nb_antennas_tx_eNB==4) ? 7 : 8)))
|
//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));
|
return(cmax(3,nCCEmin));
|
||||||
else if (frame_parms->N_RB_DL<=10) {
|
else if (frame_parms->N_RB_DL<=10) {
|
||||||
if (frame_parms->Ncp == 0) { // normal CP
|
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)))
|
if ((9*numCCE) <= (frame_parms->N_RB_DL*((frame_parms->nb_antennas_tx_eNB==4) ? 10 : 11)))
|
||||||
return(4);
|
return(4);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
int i, aarx;
|
||||||
uint16_t pmiq=0;
|
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];
|
uint8_t rank = meas->rank[eNB_id];
|
||||||
int pmi_re,pmi_im;
|
int pmi_re,pmi_im;
|
||||||
|
|
||||||
for (i=0;i<NUMBER_OF_SUBBANDS;i++) {
|
for (i=0;i<nb_subbands;i++) {
|
||||||
pmi_re = 0;
|
pmi_re = 0;
|
||||||
pmi_im = 0;
|
pmi_im = 0;
|
||||||
|
|
||||||
@@ -3740,7 +3740,7 @@ uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id) {
|
|||||||
return(pmivect);
|
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;
|
uint8_t i;
|
||||||
uint16_t pmiq=0;
|
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];
|
uint8_t rank = meas->rank[eNB_id];
|
||||||
int pmi_re,pmi_im;
|
int pmi_re,pmi_im;
|
||||||
|
|
||||||
for (i=0;i<NUMBER_OF_SUBBANDS;i++) {
|
for (i=0;i<nb_subbands;i++) {
|
||||||
|
|
||||||
if (rank == 0) {
|
if (rank == 0) {
|
||||||
pmi_re = meas->subband_pmi_re[eNB_id][i][a_id];
|
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;
|
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;
|
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);
|
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);
|
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",
|
// 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]);
|
// eNB_id,eNB_id,meas->wideband_cqi_tot[eNB_id]);
|
||||||
double sinr_tmp;
|
double sinr_tmp;
|
||||||
|
uint8_t *o = ulsch->o;
|
||||||
|
UCI_format_t uci_format = ulsch->uci_format;
|
||||||
|
|
||||||
if(flag_LA==1)
|
if(flag_LA==1)
|
||||||
sinr_tmp = sinr_eff;
|
sinr_tmp = sinr_eff;
|
||||||
else
|
else
|
||||||
sinr_tmp = (double) meas->wideband_cqi_avg[eNB_id];
|
sinr_tmp = (double) meas->wideband_cqi_avg[eNB_id];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//LOG_I(PHY,"Filling CQI %f for eNB %d\n",sinr_tmp,eNB_id);
|
//LOG_I(PHY,"Filling CQI %f for eNB %d\n",sinr_tmp,eNB_id);
|
||||||
|
|
||||||
switch (uci_format) {
|
switch (N_RB_DL) {
|
||||||
case wideband_cqi_rank1_2A:
|
|
||||||
((wideband_cqi_rank1_2A_5MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode);
|
case 6:
|
||||||
((wideband_cqi_rank1_2A_5MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id);
|
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;
|
break;
|
||||||
case wideband_cqi_rank2_2A:
|
case 25:
|
||||||
((wideband_cqi_rank2_2A_5MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); //FIXME: calculate rank2 cqi
|
switch (uci_format) {
|
||||||
((wideband_cqi_rank2_2A_5MHz *)o)->cqi2 = sinr2cqi(sinr_tmp,trans_mode); //FIXME: calculate rank2 cqi
|
case wideband_cqi_rank1_2A:
|
||||||
((wideband_cqi_rank2_2A_5MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id);
|
((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;
|
break;
|
||||||
case HLC_subband_cqi_nopmi:
|
case 100:
|
||||||
((HLC_subband_cqi_nopmi_5MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode);
|
switch (uci_format) {
|
||||||
((HLC_subband_cqi_nopmi_5MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode);
|
case wideband_cqi_rank1_2A:
|
||||||
break;
|
((wideband_cqi_rank1_2A_20MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode);
|
||||||
case HLC_subband_cqi_rank1_2A:
|
((wideband_cqi_rank1_2A_20MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id,13);
|
||||||
((HLC_subband_cqi_rank1_2A_5MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode);
|
break;
|
||||||
((HLC_subband_cqi_rank1_2A_5MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode);
|
case wideband_cqi_rank2_2A:
|
||||||
((HLC_subband_cqi_rank1_2A_5MHz *)o)->pmi = quantize_wideband_pmi(meas,eNB_id);
|
((wideband_cqi_rank2_2A_20MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode); //FIXME: calculate rank2 cqi
|
||||||
break;
|
((wideband_cqi_rank2_2A_20MHz *)o)->cqi2 = sinr2cqi(sinr_tmp,trans_mode); //FIXME: calculate rank2 cqi
|
||||||
case HLC_subband_cqi_rank2_2A:
|
((wideband_cqi_rank2_2A_20MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id,13);
|
||||||
// This has to be improved!!!
|
break;
|
||||||
((HLC_subband_cqi_rank2_2A_5MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode);
|
case HLC_subband_cqi_nopmi:
|
||||||
((HLC_subband_cqi_rank2_2A_5MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode);
|
((HLC_subband_cqi_nopmi_20MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode);
|
||||||
((HLC_subband_cqi_rank2_2A_5MHz *)o)->cqi2 = sinr2cqi(sinr_tmp,trans_mode);
|
((HLC_subband_cqi_nopmi_20MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode,13);
|
||||||
((HLC_subband_cqi_rank2_2A_5MHz *)o)->diffcqi2 = fill_subband_cqi(meas,eNB_id,trans_mode);
|
break;
|
||||||
((HLC_subband_cqi_rank2_2A_5MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id);
|
case HLC_subband_cqi_rank1_2A:
|
||||||
break;
|
((HLC_subband_cqi_rank1_2A_20MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode);
|
||||||
case HLC_subband_cqi_mcs_CBA:
|
((HLC_subband_cqi_rank1_2A_20MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode,13);
|
||||||
// this is the cba mcs uci for cba transmission
|
((HLC_subband_cqi_rank1_2A_20MHz *)o)->pmi = quantize_wideband_pmi(meas,eNB_id);
|
||||||
((HLC_subband_cqi_mcs_CBA_5MHz *)o)->mcs = 2; //fixme
|
break;
|
||||||
((HLC_subband_cqi_mcs_CBA_5MHz *)o)->crnti = rnti;
|
case HLC_subband_cqi_rank2_2A:
|
||||||
LOG_D(PHY,"fill uci for cba rnti %x, mcs %d \n", rnti, 2);
|
// This has to be improved!!!
|
||||||
break;
|
((HLC_subband_cqi_rank2_2A_20MHz *)o)->cqi1 = sinr2cqi(sinr_tmp,trans_mode);
|
||||||
case ue_selected:
|
((HLC_subband_cqi_rank2_2A_20MHz *)o)->diffcqi1 = fill_subband_cqi(meas,eNB_id,trans_mode,13);
|
||||||
LOG_E(PHY,"fill_CQI ue_selected CQI not supported yet!!!\n");
|
((HLC_subband_cqi_rank2_2A_20MHz *)o)->cqi2 = sinr2cqi(sinr_tmp,trans_mode);
|
||||||
mac_xface->macphy_exit("fill_CQI ue_selected CQI not supported yet!!!");
|
((HLC_subband_cqi_rank2_2A_20MHz *)o)->diffcqi2 = fill_subband_cqi(meas,eNB_id,trans_mode,13);
|
||||||
break;
|
((HLC_subband_cqi_rank2_2A_20MHz *)o)->pmi = quantize_subband_pmi(meas,eNB_id,13);
|
||||||
default:
|
break;
|
||||||
LOG_E(PHY,"unsupported CQI mode (%d)!!!\n",uci_format);
|
case HLC_subband_cqi_mcs_CBA:
|
||||||
mac_xface->macphy_exit("unsupported CQI mode !!!");
|
// 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;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset_cba_uci(void *o) {
|
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
|
// The aperiodic CQI reporting mode is fixed for every transmission mode instead of being configured by higher layer signaling
|
||||||
case 1:
|
case 1:
|
||||||
if ((rnti >= cba_rnti) && (rnti < p_rnti)){
|
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->uci_format = HLC_subband_cqi_mcs_CBA;
|
||||||
ulsch->o_RI[0] = 0;
|
ulsch->o_RI[0] = 0;
|
||||||
}
|
}
|
||||||
else if(meas->rank[eNB_id] == 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->uci_format = HLC_subband_cqi_nopmi;
|
||||||
ulsch->o_RI[0] = 0;
|
ulsch->o_RI[0] = 0;
|
||||||
}
|
}
|
||||||
else{
|
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->uci_format = HLC_subband_cqi_nopmi;
|
||||||
ulsch->o_RI[0] = 1;
|
ulsch->o_RI[0] = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if ((rnti >= cba_rnti) && (rnti < p_rnti)){
|
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->uci_format = HLC_subband_cqi_mcs_CBA;
|
||||||
ulsch->o_RI[0] = 0;
|
ulsch->o_RI[0] = 0;
|
||||||
}
|
}
|
||||||
else if(meas->rank[eNB_id] == 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->uci_format = HLC_subband_cqi_nopmi;
|
||||||
ulsch->o_RI[0] = 0;
|
ulsch->o_RI[0] = 0;
|
||||||
}
|
}
|
||||||
else{
|
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->uci_format = HLC_subband_cqi_nopmi;
|
||||||
ulsch->o_RI[0] = 1;
|
ulsch->o_RI[0] = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
if ((rnti >= cba_rnti) && (rnti < p_rnti)){
|
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->uci_format = HLC_subband_cqi_mcs_CBA;
|
||||||
ulsch->o_RI[0] = 0;
|
ulsch->o_RI[0] = 0;
|
||||||
}
|
}
|
||||||
else if(meas->rank[eNB_id] == 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->uci_format = HLC_subband_cqi_nopmi;
|
||||||
ulsch->o_RI[0] = 0;
|
ulsch->o_RI[0] = 0;
|
||||||
}
|
}
|
||||||
else{
|
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->uci_format = HLC_subband_cqi_nopmi;
|
||||||
ulsch->o_RI[0] = 1;
|
ulsch->o_RI[0] = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
if ((rnti >= cba_rnti) && (rnti < p_rnti)){
|
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->uci_format = HLC_subband_cqi_mcs_CBA;
|
||||||
ulsch->o_RI[0] = 0;
|
ulsch->o_RI[0] = 0;
|
||||||
}
|
}
|
||||||
else if(meas->rank[eNB_id] == 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->uci_format = wideband_cqi_rank1_2A;
|
||||||
ulsch->o_RI[0] = 0;
|
ulsch->o_RI[0] = 0;
|
||||||
}
|
}
|
||||||
else{
|
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->uci_format = wideband_cqi_rank2_2A;
|
||||||
ulsch->o_RI[0] = 1;
|
ulsch->o_RI[0] = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
if ((rnti >= cba_rnti) && (rnti < p_rnti)){
|
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->uci_format = HLC_subband_cqi_mcs_CBA;
|
||||||
ulsch->o_RI[0] = 0;
|
ulsch->o_RI[0] = 0;
|
||||||
}
|
}
|
||||||
else if(meas->rank[eNB_id] == 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->uci_format = wideband_cqi_rank1_2A;
|
||||||
ulsch->o_RI[0] = 0;
|
ulsch->o_RI[0] = 0;
|
||||||
}
|
}
|
||||||
else{
|
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->uci_format = wideband_cqi_rank2_2A;
|
||||||
ulsch->o_RI[0] = 1;
|
ulsch->o_RI[0] = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
if ((rnti >= cba_rnti) && (rnti < p_rnti)){
|
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->uci_format = HLC_subband_cqi_mcs_CBA;
|
||||||
ulsch->o_RI[0] = 0;
|
ulsch->o_RI[0] = 0;
|
||||||
}
|
}
|
||||||
else if(meas->rank[eNB_id] == 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->uci_format = wideband_cqi_rank1_2A;
|
||||||
ulsch->o_RI[0] = 0;
|
ulsch->o_RI[0] = 0;
|
||||||
}
|
}
|
||||||
else{
|
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->uci_format = wideband_cqi_rank2_2A;
|
||||||
ulsch->o_RI[0] = 1;
|
ulsch->o_RI[0] = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
if ((rnti >= cba_rnti) && (rnti < p_rnti)){
|
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->uci_format = HLC_subband_cqi_mcs_CBA;
|
||||||
ulsch->o_RI[0] = 0;
|
ulsch->o_RI[0] = 0;
|
||||||
}
|
}
|
||||||
else if(meas->rank[eNB_id] == 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->uci_format = HLC_subband_cqi_nopmi;
|
||||||
ulsch->o_RI[0] = 0;
|
ulsch->o_RI[0] = 0;
|
||||||
}
|
}
|
||||||
else{
|
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->uci_format = HLC_subband_cqi_nopmi;
|
||||||
ulsch->o_RI[0] = 1;
|
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;
|
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
|
//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:
|
case 1:
|
||||||
if ((rnti >= cba_rnti) && (rnti < p_rnti)){
|
if ((rnti >= cba_rnti) && (rnti < p_rnti)){
|
||||||
ulsch->harq_processes[harq_pid]->Or2 = 0;
|
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;
|
ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_mcs_CBA;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ulsch->harq_processes[harq_pid]->Or2 = 0;
|
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;
|
ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_nopmi;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if ((rnti >= cba_rnti) && (rnti < p_rnti)){
|
if ((rnti >= cba_rnti) && (rnti < p_rnti)){
|
||||||
ulsch->harq_processes[harq_pid]->Or2 = 0;
|
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;
|
ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_mcs_CBA;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ulsch->harq_processes[harq_pid]->Or2 = 0;
|
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;
|
ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_nopmi;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
if ((rnti >= cba_rnti) && (rnti < p_rnti)){
|
if ((rnti >= cba_rnti) && (rnti < p_rnti)){
|
||||||
ulsch->harq_processes[harq_pid]->Or2 = 0;
|
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;
|
ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_mcs_CBA;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ulsch->harq_processes[harq_pid]->Or2 = 0;
|
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;
|
ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_nopmi;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
if ((rnti >= cba_rnti) && (rnti < p_rnti)){
|
if ((rnti >= cba_rnti) && (rnti < p_rnti)){
|
||||||
ulsch->harq_processes[harq_pid]->Or2 = 0;
|
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;
|
ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_mcs_CBA;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ulsch->harq_processes[harq_pid]->Or2 = sizeof_wideband_cqi_rank2_2A_5MHz;
|
switch (frame_parms->N_RB_DL) {
|
||||||
ulsch->harq_processes[harq_pid]->Or1 = sizeof_wideband_cqi_rank1_2A_5MHz;
|
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;
|
ulsch->harq_processes[harq_pid]->uci_format = wideband_cqi_rank1_2A;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
if ((rnti >= cba_rnti) && (rnti < p_rnti)){
|
if ((rnti >= cba_rnti) && (rnti < p_rnti)){
|
||||||
ulsch->harq_processes[harq_pid]->Or2 = 0;
|
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;
|
ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_mcs_CBA;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ulsch->harq_processes[harq_pid]->Or2 = sizeof_wideband_cqi_rank2_2A_5MHz;
|
switch (frame_parms->N_RB_DL) {
|
||||||
ulsch->harq_processes[harq_pid]->Or1 = sizeof_wideband_cqi_rank1_2A_5MHz;
|
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;
|
ulsch->harq_processes[harq_pid]->uci_format = wideband_cqi_rank1_2A;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
if ((rnti >= cba_rnti) && (rnti < p_rnti)){
|
if ((rnti >= cba_rnti) && (rnti < p_rnti)){
|
||||||
ulsch->harq_processes[harq_pid]->Or2 = 0;
|
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;
|
ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_mcs_CBA;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ulsch->harq_processes[harq_pid]->Or2 = sizeof_wideband_cqi_rank2_2A_5MHz;
|
switch (frame_parms->N_RB_DL) {
|
||||||
ulsch->harq_processes[harq_pid]->Or1 = sizeof_wideband_cqi_rank1_2A_5MHz;
|
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;
|
ulsch->harq_processes[harq_pid]->uci_format = wideband_cqi_rank1_2A;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
ulsch->harq_processes[harq_pid]->Or2 = 0;
|
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;
|
ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_nopmi;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -4889,7 +5489,7 @@ double sinr_eff_cqi_calc(PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id){
|
|||||||
double channely=0;
|
double channely=0;
|
||||||
double channelx_i=0;
|
double channelx_i=0;
|
||||||
double channely_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;
|
uint8_t qq;
|
||||||
|
|
||||||
switch(transmission_mode){
|
switch(transmission_mode){
|
||||||
|
|||||||
@@ -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] 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] 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",
|
switch (phy_vars_ue->lte_frame_parms.N_RB_DL) {
|
||||||
eNB,
|
case 6:
|
||||||
phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][0],
|
len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 0): [%d %d %d %d %d %d] dB\n",
|
||||||
phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][1],
|
eNB,
|
||||||
phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][2],
|
phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][0],
|
||||||
phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][3],
|
phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][1],
|
||||||
phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][4],
|
phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][2],
|
||||||
phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][5],
|
phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][3],
|
||||||
phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][0][6]);
|
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 %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",
|
len += sprintf(&buffer[len], "[UE PROC] Subband CQI eNB%d (Ant 1): [%d %d %d %d %d %d] dB\n",
|
||||||
eNB,
|
eNB,
|
||||||
phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][0],
|
phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][0],
|
||||||
phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][0][0],
|
phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][1],
|
||||||
phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][1][0],
|
phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][2],
|
||||||
phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][1][0],
|
phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][3],
|
||||||
phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][2][0],
|
phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][4],
|
||||||
phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][2][0],
|
phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB][1][5]);
|
||||||
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",
|
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,
|
eNB,
|
||||||
phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][0],
|
phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][0],
|
||||||
phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][1],
|
phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][0][0],
|
||||||
phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][2],
|
phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][1][0],
|
||||||
phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][3],
|
phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][1][0],
|
||||||
phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][4],
|
phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][2][0],
|
||||||
phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][5],
|
phy_vars_ue->PHY_measurements.subband_pmi_im[eNB][2][0],
|
||||||
phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB][6]);
|
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] 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] Subband PMI eNB%d (Ant 1): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]\n",
|
||||||
len += sprintf(&buffer[len], "[UE PROC] Quantized PMI eNB %d (both): %x,%x\n",eNB,
|
eNB,
|
||||||
pmi2hex_2Ar1(quantize_subband_pmi2(&phy_vars_ue->PHY_measurements,eNB,0)),
|
phy_vars_ue->PHY_measurements.subband_pmi_re[eNB][0][1],
|
||||||
pmi2hex_2Ar1(quantize_subband_pmi2(&phy_vars_ue->PHY_measurements,eNB,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
|
#ifdef OPENAIR2
|
||||||
RRC_status = mac_get_rrc_status(phy_vars_ue->Mod_id,0,0);
|
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);
|
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)
|
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]);
|
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]) {
|
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);
|
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]);
|
phy_vars_eNB->PHY_measurements_eNB[eNB].subband_cqi_tot_dB[UE_id][i]);
|
||||||
len += sprintf(&buffer[len],"\n");
|
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->transmission_mode[UE_id],
|
||||||
phy_vars_eNB->eNB_UE_stats[UE_id].DL_cqi[0],
|
phy_vars_eNB->eNB_UE_stats[UE_id].DL_cqi[0],
|
||||||
pmi2hex_2Ar1(phy_vars_eNB->eNB_UE_stats[UE_id].DL_pmi_single));
|
pmi2hex_2Ar1(phy_vars_eNB->eNB_UE_stats[UE_id].DL_pmi_single));
|
||||||
|
|||||||
@@ -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);;
|
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 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);
|
void reset_cba_uci(void *o);
|
||||||
|
|
||||||
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);
|
||||||
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);
|
||||||
|
|
||||||
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);
|
uint16_t computeRIV(uint16_t N_RB_DL,uint16_t RBstart,uint16_t Lcrbs);
|
||||||
|
|
||||||
|
|||||||
@@ -264,10 +264,10 @@ int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *phy_vars_ue,
|
|||||||
else
|
else
|
||||||
sinr_eff = meas->wideband_cqi_avg[eNB_id];
|
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))
|
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 {
|
else {
|
||||||
ulsch->O_RI = 0;
|
ulsch->O_RI = 0;
|
||||||
|
|||||||
@@ -42,6 +42,63 @@ typedef enum {
|
|||||||
unknown_cqi//
|
unknown_cqi//
|
||||||
} UCI_format_t;
|
} 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)) {
|
typedef struct __attribute__((packed)) {
|
||||||
uint32_t padding:14;
|
uint32_t padding:14;
|
||||||
uint32_t pmi:14;
|
uint32_t pmi:14;
|
||||||
@@ -96,10 +153,119 @@ typedef struct __attribute__((packed)) {
|
|||||||
} HLC_subband_cqi_mcs_CBA_5MHz;
|
} HLC_subband_cqi_mcs_CBA_5MHz;
|
||||||
#define sizeof_HLC_subband_cqi_mcs_CBA_5MHz 20
|
#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_PAYLOAD (sizeof(HLC_subband_cqi_rank2_2A_20MHz)*8*20)
|
||||||
#define MAX_CQI_BITS (sizeof(HLC_subband_cqi_rank2_2A_5MHz)*8)
|
#define MAX_CQI_BITS (sizeof(HLC_subband_cqi_rank2_2A_20MHz)*8)
|
||||||
#define MAX_CQI_BYTES (sizeof(HLC_subband_cqi_rank2_2A_5MHz))
|
#define MAX_CQI_BYTES (sizeof(HLC_subband_cqi_rank2_2A_20MHz))
|
||||||
#define MAX_ACK_PAYLOAD 18
|
#define MAX_ACK_PAYLOAD 18
|
||||||
#define MAX_RI_PAYLOAD 6
|
#define MAX_RI_PAYLOAD 6
|
||||||
|
|||||||
@@ -44,24 +44,34 @@
|
|||||||
#ifdef DEBUG_UCI_TOOLS
|
#ifdef DEBUG_UCI_TOOLS
|
||||||
#include "PHY/vars.h"
|
#include "PHY/vars.h"
|
||||||
#endif
|
#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) +
|
uint64_t pmil = (uint64_t)pmi;
|
||||||
(((pmi>>8)&3)<<16) + (((pmi>>10)&3)<<20) + (((pmi>>12)&3)<<24));
|
|
||||||
|
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) +
|
uint64_t pmil = (uint64_t)pmi;
|
||||||
(((pmi>>4)&3)<<16) + (((pmi>>5)&3)<<20) + (((pmi>>6)&3)<<24));
|
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) +
|
uint64_t cqil = (uint64_t)cqi;
|
||||||
(((cqi>>8)&3)<<16) + (((cqi>>10)&3)<<20) + (((cqi>>12)&3)<<24));
|
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,
|
//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)
|
// This is table 7.2.1-3 from 36.213 (with k replaced by the number of subbands, nb_sb)
|
||||||
switch (N_RB_DL) {
|
switch (N_RB_DL) {
|
||||||
case 6:
|
case 6:
|
||||||
nb_sb=0;
|
nb_sb=1;
|
||||||
break;
|
break;
|
||||||
case 15:
|
case 15:
|
||||||
nb_sb = 4;
|
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;
|
uint8_t N_RB_DL = 25;
|
||||||
|
|
||||||
*access_mode=SCHEDULED_ACCESS;
|
*access_mode=SCHEDULED_ACCESS;
|
||||||
switch(uci_format){
|
switch(N_RB_DL) {
|
||||||
case wideband_cqi_rank1_2A:
|
case 6:
|
||||||
stats->DL_cqi[0] = (((wideband_cqi_rank1_2A_5MHz *)o)->cqi1);
|
switch(uci_format){
|
||||||
if (stats->DL_cqi[0] > 24)
|
case wideband_cqi_rank1_2A:
|
||||||
stats->DL_cqi[0] = 24;
|
stats->DL_cqi[0] = (((wideband_cqi_rank1_2A_1_5MHz *)o)->cqi1);
|
||||||
stats->DL_pmi_single = ((wideband_cqi_rank1_2A_5MHz *)o)->pmi;
|
if (stats->DL_cqi[0] > 24)
|
||||||
break;
|
stats->DL_cqi[0] = 24;
|
||||||
case wideband_cqi_rank2_2A:
|
stats->DL_pmi_single = ((wideband_cqi_rank1_2A_1_5MHz *)o)->pmi;
|
||||||
stats->DL_cqi[0] = (((wideband_cqi_rank2_2A_5MHz *)o)->cqi1);
|
break;
|
||||||
if (stats->DL_cqi[0] > 24)
|
case wideband_cqi_rank2_2A:
|
||||||
stats->DL_cqi[0] = 24;
|
stats->DL_cqi[0] = (((wideband_cqi_rank2_2A_1_5MHz *)o)->cqi1);
|
||||||
stats->DL_cqi[1] = (((wideband_cqi_rank2_2A_5MHz *)o)->cqi2);
|
if (stats->DL_cqi[0] > 24)
|
||||||
if (stats->DL_cqi[1] > 24)
|
stats->DL_cqi[0] = 24;
|
||||||
stats->DL_cqi[1] = 24;
|
stats->DL_cqi[1] = (((wideband_cqi_rank2_2A_1_5MHz *)o)->cqi2);
|
||||||
stats->DL_pmi_dual = ((wideband_cqi_rank2_2A_5MHz *)o)->pmi;
|
if (stats->DL_cqi[1] > 24)
|
||||||
break;
|
stats->DL_cqi[1] = 24;
|
||||||
case HLC_subband_cqi_nopmi:
|
stats->DL_pmi_dual = ((wideband_cqi_rank2_2A_1_5MHz *)o)->pmi;
|
||||||
stats->DL_cqi[0] = (((HLC_subband_cqi_nopmi_5MHz *)o)->cqi1);
|
break;
|
||||||
if (stats->DL_cqi[0] > 24)
|
case HLC_subband_cqi_nopmi:
|
||||||
stats->DL_cqi[0] = 24;
|
stats->DL_cqi[0] = (((HLC_subband_cqi_nopmi_1_5MHz *)o)->cqi1);
|
||||||
do_diff_cqi(N_RB_DL,stats->DL_subband_cqi[0],stats->DL_cqi[0],((HLC_subband_cqi_nopmi_5MHz *)o)->diffcqi1);
|
if (stats->DL_cqi[0] > 24)
|
||||||
break;
|
stats->DL_cqi[0] = 24;
|
||||||
case HLC_subband_cqi_rank1_2A:
|
do_diff_cqi(N_RB_DL,stats->DL_subband_cqi[0],stats->DL_cqi[0],((HLC_subband_cqi_nopmi_1_5MHz *)o)->diffcqi1);
|
||||||
stats->DL_cqi[0] = (((HLC_subband_cqi_rank1_2A_5MHz *)o)->cqi1);
|
break;
|
||||||
if (stats->DL_cqi[0] > 24)
|
case HLC_subband_cqi_rank1_2A:
|
||||||
stats->DL_cqi[0] = 24;
|
stats->DL_cqi[0] = (((HLC_subband_cqi_rank1_2A_1_5MHz *)o)->cqi1);
|
||||||
do_diff_cqi(N_RB_DL,stats->DL_subband_cqi[0],stats->DL_cqi[0],(((HLC_subband_cqi_rank1_2A_5MHz *)o)->diffcqi1));
|
if (stats->DL_cqi[0] > 24)
|
||||||
stats->DL_pmi_single = ((HLC_subband_cqi_rank1_2A_5MHz *)o)->pmi;
|
stats->DL_cqi[0] = 24;
|
||||||
break;
|
do_diff_cqi(N_RB_DL,stats->DL_subband_cqi[0],stats->DL_cqi[0],(((HLC_subband_cqi_rank1_2A_1_5MHz *)o)->diffcqi1));
|
||||||
case HLC_subband_cqi_rank2_2A:
|
stats->DL_pmi_single = ((HLC_subband_cqi_rank1_2A_1_5MHz *)o)->pmi;
|
||||||
stats->DL_cqi[0] = (((HLC_subband_cqi_rank2_2A_5MHz *)o)->cqi1);
|
break;
|
||||||
if (stats->DL_cqi[0] > 24)
|
case HLC_subband_cqi_rank2_2A:
|
||||||
stats->DL_cqi[0] = 24;
|
stats->DL_cqi[0] = (((HLC_subband_cqi_rank2_2A_1_5MHz *)o)->cqi1);
|
||||||
stats->DL_cqi[1] = (((HLC_subband_cqi_rank2_2A_5MHz *)o)->cqi2);
|
if (stats->DL_cqi[0] > 24)
|
||||||
if (stats->DL_cqi[1] > 24)
|
stats->DL_cqi[0] = 24;
|
||||||
stats->DL_cqi[1] = 24;
|
stats->DL_cqi[1] = (((HLC_subband_cqi_rank2_2A_1_5MHz *)o)->cqi2);
|
||||||
do_diff_cqi(N_RB_DL,stats->DL_subband_cqi[0],stats->DL_cqi[0],(((HLC_subband_cqi_rank2_2A_5MHz *)o)->diffcqi1));
|
if (stats->DL_cqi[1] > 24)
|
||||||
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_cqi[1] = 24;
|
||||||
stats->DL_pmi_dual = ((HLC_subband_cqi_rank2_2A_5MHz *)o)->pmi;
|
do_diff_cqi(N_RB_DL,stats->DL_subband_cqi[0],stats->DL_cqi[0],(((HLC_subband_cqi_rank2_2A_1_5MHz *)o)->diffcqi1));
|
||||||
break;
|
do_diff_cqi(N_RB_DL,stats->DL_subband_cqi[1],stats->DL_cqi[1],(((HLC_subband_cqi_rank2_2A_1_5MHz *)o)->diffcqi2));
|
||||||
case HLC_subband_cqi_mcs_CBA:
|
stats->DL_pmi_dual = ((HLC_subband_cqi_rank2_2A_1_5MHz *)o)->pmi;
|
||||||
if ((*crnti == ((HLC_subband_cqi_mcs_CBA_5MHz *)o)->crnti) && (*crnti !=0)){
|
break;
|
||||||
*access_mode=CBA_ACCESS;
|
case HLC_subband_cqi_mcs_CBA:
|
||||||
LOG_D(PHY,"[eNB] UCI for CBA : mcs %d crnti %x\n",
|
if ((*crnti == ((HLC_subband_cqi_mcs_CBA_1_5MHz *)o)->crnti) && (*crnti !=0)){
|
||||||
((HLC_subband_cqi_mcs_CBA_5MHz *)o)->mcs, ((HLC_subband_cqi_mcs_CBA_5MHz *)o)->crnti);
|
*access_mode=CBA_ACCESS;
|
||||||
} else {
|
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;
|
*access_mode=UNKNOWN_ACCESS;
|
||||||
LOG_N(PHY,"[eNB] UCI for CBA : rnti (enb context %x, rx uci %x) invalid, unknown access\n",
|
break;
|
||||||
*crnti, ((HLC_subband_cqi_mcs_CBA_5MHz *)o)->crnti);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case unknown_cqi:
|
case 25:
|
||||||
default:
|
|
||||||
LOG_N(PHY,"[eNB][UCI] received unknown uci \n");
|
switch(uci_format){
|
||||||
*access_mode=UNKNOWN_ACCESS;
|
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;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 50:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 100:
|
||||||
|
|
||||||
break;
|
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){
|
switch(uci_format){
|
||||||
case wideband_cqi_rank1_2A:
|
case wideband_cqi_rank1_2A:
|
||||||
#ifdef DEBUG_UCI
|
#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);
|
switch(N_RB_DL) {
|
||||||
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));
|
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
|
#endif //DEBUG_UCI
|
||||||
break;
|
break;
|
||||||
case wideband_cqi_rank2_2A:
|
case wideband_cqi_rank2_2A:
|
||||||
#ifdef DEBUG_UCI
|
#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);
|
switch(N_RB_DL) {
|
||||||
LOG_I(PHY,"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi2 %d\n",eNB_id,((wideband_cqi_rank2_2A_5MHz *)o)->cqi2);
|
case 6:
|
||||||
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));
|
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
|
#endif //DEBUG_UCI
|
||||||
break;
|
break;
|
||||||
case HLC_subband_cqi_nopmi:
|
case HLC_subband_cqi_nopmi:
|
||||||
#ifdef DEBUG_UCI
|
#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);
|
switch(N_RB_DL) {
|
||||||
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));
|
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
|
#endif //DEBUG_UCI
|
||||||
break;
|
break;
|
||||||
case HLC_subband_cqi_rank1_2A:
|
case HLC_subband_cqi_rank1_2A:
|
||||||
#ifdef DEBUG_UCI
|
#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);
|
switch(N_RB_DL) {
|
||||||
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));
|
case 6:
|
||||||
LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 1: eNB %d, pmi %d\n",eNB_id,((HLC_subband_cqi_rank1_2A_5MHz *)o)->pmi);
|
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
|
#endif //DEBUG_UCI
|
||||||
break;
|
break;
|
||||||
case HLC_subband_cqi_rank2_2A:
|
case HLC_subband_cqi_rank2_2A:
|
||||||
#ifdef DEBUG_UCI
|
#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);
|
switch(N_RB_DL) {
|
||||||
LOG_I(PHY,"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi2 %d\n",eNB_id,((HLC_subband_cqi_rank2_2A_5MHz *)o)->cqi2);
|
case 6:
|
||||||
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, 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, 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, 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, pmi %d\n",eNB_id,((HLC_subband_cqi_rank2_2A_5MHz *)o)->pmi);
|
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
|
#endif //DEBUG_UCI
|
||||||
break;
|
break;
|
||||||
case HLC_subband_cqi_mcs_CBA:
|
case HLC_subband_cqi_mcs_CBA:
|
||||||
|
|||||||
@@ -256,10 +256,10 @@ uint32_t ulsch_encoding(uint8_t *a,
|
|||||||
sinr_eff = 0;
|
sinr_eff = 0;
|
||||||
*/
|
*/
|
||||||
rnti = phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti;
|
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");
|
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)
|
// save PUSCH pmi for later (transmission modes 4,5,6)
|
||||||
if (dlsch[0]) {
|
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]);
|
msg("ulsch_coding: O[%d] %d\n",i,ulsch->o[i]);
|
||||||
}
|
}
|
||||||
if ((tmode != 4))
|
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
|
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
|
#endif
|
||||||
|
|
||||||
if (ulsch->harq_processes[harq_pid]->round == 0) { // this is a new packet
|
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];
|
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");
|
//LOG_D(PHY,"UE CQI\n");
|
||||||
// print_CQI(ulsch->o,ulsch->uci_format,eNB_id);
|
// print_CQI(ulsch->o,ulsch->uci_format,eNB_id);
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
|
|||||||
unsigned int rx_offset;
|
unsigned int rx_offset;
|
||||||
|
|
||||||
void (*dft)(int16_t *,int16_t *, int);
|
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) {
|
switch (frame_parms->log2_symbol_size) {
|
||||||
case 7:
|
case 7:
|
||||||
@@ -95,47 +96,63 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
|
|||||||
return(-1);
|
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++) {
|
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));
|
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) {
|
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))
|
if (rx_offset > (frame_length_samples - frame_parms->ofdm_symbol_size))
|
||||||
memcpy((short *)&ue_common_vars->rxdata[aa][frame_length_samples],
|
memcpy((short *)&ue_common_vars->rxdata[aa][frame_length_samples],
|
||||||
(short *)&ue_common_vars->rxdata[aa][0],
|
(short *)&ue_common_vars->rxdata[aa][0],
|
||||||
frame_parms->ofdm_symbol_size*sizeof(int));
|
frame_parms->ofdm_symbol_size*sizeof(int));
|
||||||
start_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],
|
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);
|
(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);
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
rx_offset = sample_offset + slot_offset +
|
rx_offset += (frame_parms->ofdm_symbol_size+nb_prefix_samples) +
|
||||||
(frame_parms->ofdm_symbol_size+nb_prefix_samples0+nb_prefix_samples) +
|
(frame_parms->ofdm_symbol_size+nb_prefix_samples)*(l-1);
|
||||||
(frame_parms->ofdm_symbol_size+nb_prefix_samples)*(l-1) + subframe_offset - SOFFSET;
|
|
||||||
|
|
||||||
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 (rx_offset > (frame_length_samples - frame_parms->ofdm_symbol_size))
|
if (rx_offset > (frame_length_samples - frame_parms->ofdm_symbol_size))
|
||||||
memcpy((short *)&ue_common_vars->rxdata[aa][frame_length_samples],
|
memcpy((void *)&ue_common_vars->rxdata[aa][frame_length_samples],
|
||||||
(short *)&ue_common_vars->rxdata[aa][0],
|
(void *)&ue_common_vars->rxdata[aa][0],
|
||||||
frame_parms->ofdm_symbol_size*sizeof(int));
|
frame_parms->ofdm_symbol_size*sizeof(int));
|
||||||
|
|
||||||
start_meas(&phy_vars_ue->rx_dft_stats);
|
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));
|
||||||
|
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],
|
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);
|
(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
|
#ifndef PERFECT_CE
|
||||||
if ((l==0) || (l==(4-frame_parms->Ncp))) {
|
if ((l==0) || (l==(4-frame_parms->Ncp))) {
|
||||||
for (aa=0;aa<frame_parms->nb_antennas_tx_eNB;aa++) {
|
for (aa=0;aa<frame_parms->nb_antennas_tx_eNB;aa++) {
|
||||||
|
|||||||
@@ -319,7 +319,7 @@ typedef struct {
|
|||||||
|
|
||||||
/// Measurement Variables
|
/// Measurement Variables
|
||||||
|
|
||||||
#define NUMBER_OF_SUBBANDS 7
|
#define NUMBER_OF_SUBBANDS_MAX 13
|
||||||
#define NUMBER_OF_HARQ_PID_MAX 8
|
#define NUMBER_OF_HARQ_PID_MAX 8
|
||||||
|
|
||||||
#if defined(CBMIMO1) || defined(EXMIMO)
|
#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)
|
/// 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];
|
int precoded_cqi_dB[NUMBER_OF_CONNECTED_eNB_MAX+1][4];
|
||||||
/// Subband CQI per RX antenna (= SINR)
|
/// 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)
|
/// 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)
|
/// 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
|
/// 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
|
/// Wideband PMI for each RX antenna
|
||||||
int wideband_pmi_re[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX];
|
int wideband_pmi_re[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX];
|
||||||
/// Wideband PMI for each RX antenna
|
/// Wideband PMI for each RX antenna
|
||||||
int wideband_pmi_im[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX];
|
int wideband_pmi_im[NUMBER_OF_CONNECTED_eNB_MAX][NB_ANTENNAS_RX];
|
||||||
///Subband PMI for each RX antenna
|
///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
|
///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)
|
/// 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
|
/// Wideband Rank indication
|
||||||
unsigned char rank[NUMBER_OF_CONNECTED_eNB_MAX];
|
unsigned char rank[NUMBER_OF_CONNECTED_eNB_MAX];
|
||||||
/// Number of RX Antennas
|
/// Number of RX Antennas
|
||||||
|
|||||||
@@ -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) {
|
if (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->cqi_crc_status == 1) {
|
||||||
#ifdef DEBUG_PHY_PROC
|
#ifdef DEBUG_PHY_PROC
|
||||||
//if (((phy_vars_eNB->proc[sched_subframe].frame_tx%10) == 0) || (phy_vars_eNB->proc[sched_subframe].frame_tx < 50))
|
//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
|
#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);
|
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];
|
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) {
|
if (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->cqi_crc_status == 1) {
|
||||||
#ifdef DEBUG_PHY_PROC
|
#ifdef DEBUG_PHY_PROC
|
||||||
//if (((phy_vars_eNB->proc[sched_subframe].frame_tx%10) == 0) || (phy_vars_eNB->proc[sched_subframe].frame_tx < 50))
|
//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
|
#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);
|
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];
|
phy_vars_eNB->eNB_UE_stats[i].rank = phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_RI[0];
|
||||||
|
|||||||
@@ -1843,8 +1843,8 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
// use the PMI from previous trial
|
// use the PMI from previous trial
|
||||||
if (DLSCH_alloc_pdu2_1E[0].tpmi == 5) {
|
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_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->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)
|
if (n_users>1)
|
||||||
PHY_vars_eNB->dlsch_eNB[1][0]->pmi_alloc = (PHY_vars_eNB->dlsch_eNB[0][0]->pmi_alloc ^ 0x1555);
|
PHY_vars_eNB->dlsch_eNB[1][0]->pmi_alloc = (PHY_vars_eNB->dlsch_eNB[0][0]->pmi_alloc ^ 0x1555);
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -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_eNB = N_tx;
|
||||||
lte_frame_parms->nb_antennas_tx = N_tx;
|
lte_frame_parms->nb_antennas_tx = N_tx;
|
||||||
lte_frame_parms->nb_antennas_rx = N_rx;
|
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->tdd_config = tdd_config;
|
||||||
lte_frame_parms->frame_type = frame_type;
|
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
|
// add common dci
|
||||||
DCI_pdu.dci_alloc[0].dci_length = BCCH_pdu_size_bits;
|
DCI_pdu.dci_alloc[0].dci_length = BCCH_pdu_size_bits;
|
||||||
DCI_pdu.dci_alloc[0].L = log2Lcommon;
|
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;
|
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);
|
memcpy((void*)&DCI_pdu.dci_alloc[0].dci_pdu[0], &BCCH_alloc_pdu[0], BCCH_pdu_size_bytes);
|
||||||
DCI_pdu.Num_common_dci++;
|
DCI_pdu.Num_common_dci++;
|
||||||
|
/*
|
||||||
// add ue specific dci
|
// add ue specific dci
|
||||||
DCI_pdu.dci_alloc[1].dci_length = dci_length;
|
DCI_pdu.dci_alloc[1].dci_length = dci_length;
|
||||||
DCI_pdu.dci_alloc[1].L = log2L;
|
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;
|
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);
|
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.Num_ue_spec_dci++;
|
||||||
*/
|
|
||||||
|
|
||||||
DCI_pdu.dci_alloc[0].dci_length = UL_pdu_size_bits;
|
DCI_pdu.dci_alloc[0].dci_length = UL_pdu_size_bits;
|
||||||
DCI_pdu.dci_alloc[0].L = log2L;
|
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;
|
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);
|
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.Num_ue_spec_dci++;
|
||||||
|
*/
|
||||||
DCI_pdu.nCCE = 0;
|
DCI_pdu.nCCE = 0;
|
||||||
for (i=0; i<DCI_pdu.Num_common_dci+DCI_pdu.Num_ue_spec_dci;i++) {
|
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));
|
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;
|
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));
|
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++) {
|
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));
|
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;
|
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];
|
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++) {
|
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]));
|
//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
|
re_offset=1; //skip DC
|
||||||
for (i=0;i<PHY_vars_eNB->lte_frame_parms.N_RB_DL*6;i++)
|
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,
|
generate_pilots_slot(PHY_vars_eNB,
|
||||||
PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id],
|
PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id],
|
||||||
1024,
|
AMP, //1024,
|
||||||
(subframe*2),
|
(subframe*2),
|
||||||
0);
|
0);
|
||||||
generate_pilots_slot(PHY_vars_eNB,
|
generate_pilots_slot(PHY_vars_eNB,
|
||||||
PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id],
|
PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id],
|
||||||
1024,
|
AMP, //1024,
|
||||||
(subframe*2)+1,
|
(subframe*2)+1,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
|
|
||||||
if (input_fd == NULL) {
|
if (input_fd == NULL) {
|
||||||
@@ -971,13 +971,13 @@ int main(int argc, char **argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
num_pdcch_symbols = generate_dci_top(DCI_pdu.Num_ue_spec_dci,
|
num_pdcch_symbols = generate_dci_top(DCI_pdu.Num_ue_spec_dci,
|
||||||
DCI_pdu.Num_common_dci,
|
DCI_pdu.Num_common_dci,
|
||||||
DCI_pdu.dci_alloc,
|
DCI_pdu.dci_alloc,
|
||||||
0,
|
0,
|
||||||
1024,
|
AMP,
|
||||||
&PHY_vars_eNB->lte_frame_parms,
|
&PHY_vars_eNB->lte_frame_parms,
|
||||||
PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id],
|
PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id],
|
||||||
subframe);
|
subframe);
|
||||||
|
|
||||||
if (n_frames==1)
|
if (n_frames==1)
|
||||||
printf("num_pdcch_symbols at TX %d\n",num_pdcch_symbols);
|
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;
|
PHY_vars_UE->ulsch_ue[0]->harq_processes[harq_pid]->n_DMRS = 0;
|
||||||
|
|
||||||
generate_phich_top(PHY_vars_eNB,
|
generate_phich_top(PHY_vars_eNB,
|
||||||
subframe,1024,0,0);
|
subframe,AMP,0,0);
|
||||||
/*
|
/*
|
||||||
// generate 3 interfering PHICH
|
// generate 3 interfering PHICH
|
||||||
if (num_phich_interf>0) {
|
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);
|
// 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);
|
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)
|
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);
|
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;
|
tx_lev = 0;
|
||||||
|
|
||||||
|
|
||||||
@@ -1127,10 +1127,10 @@ int main(int argc, char **argv) {
|
|||||||
// printf("subframe_offset = %d\n",subframe_offset);
|
// printf("subframe_offset = %d\n",subframe_offset);
|
||||||
|
|
||||||
slot_fep(PHY_vars_UE,
|
slot_fep(PHY_vars_UE,
|
||||||
l%(PHY_vars_eNB->lte_frame_parms.symbols_per_tti/2),
|
l%(PHY_vars_eNB->lte_frame_parms.symbols_per_tti/2),
|
||||||
(2*subframe)+(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,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
#ifdef PERFECT_CE
|
#ifdef PERFECT_CE
|
||||||
if (awgn_flag==0) {
|
if (awgn_flag==0) {
|
||||||
@@ -1153,7 +1153,7 @@ int main(int argc, char **argv) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
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++)
|
for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -959,7 +959,7 @@ int main(int argc, char **argv) {
|
|||||||
if ((cqi_flag == 1) && (n_frames == 1) ) {
|
if ((cqi_flag == 1) && (n_frames == 1) ) {
|
||||||
printf("CQI information (O %d) %d %d\n",PHY_vars_UE->ulsch_ue[0]->O,
|
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]);
|
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;
|
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);
|
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)
|
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,
|
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);
|
dump_ulsch(PHY_vars_eNB,subframe,0);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user