extension to tmpi 2 for TM4
This commit is contained in:
@@ -119,6 +119,7 @@ endmacro(add_list_string_option)
|
||||
####################################################
|
||||
# compilation flags
|
||||
#############################################
|
||||
set (CMAKE_BUILD_TYPE "Debug")
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "")
|
||||
set(CMAKE_BUILD_TYPE "RelWithDebInfo")
|
||||
endif()
|
||||
|
||||
@@ -872,7 +872,8 @@ int generate_eNB_dlsch_params_from_dci(int frame,
|
||||
uint16_t si_rnti,
|
||||
uint16_t ra_rnti,
|
||||
uint16_t p_rnti,
|
||||
uint16_t DL_pmi_single)
|
||||
uint16_t DL_pmi_single
|
||||
)
|
||||
{
|
||||
|
||||
uint8_t harq_pid = UINT8_MAX;
|
||||
@@ -1538,14 +1539,14 @@ int generate_eNB_dlsch_params_from_dci(int frame,
|
||||
case 0:
|
||||
dlsch0_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODING1;
|
||||
dlsch1_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODING1;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0);
|
||||
dlsch1_harq->pmi_alloc = pmi_extend(frame_parms,1);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0,1);
|
||||
dlsch1_harq->pmi_alloc = pmi_extend(frame_parms,0,1);
|
||||
break;
|
||||
case 1:
|
||||
dlsch0_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODINGj;
|
||||
dlsch1_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODINGj;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,3);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1,1);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1,1);
|
||||
break;
|
||||
case 2: // PUSCH precoding
|
||||
dlsch0_harq->mimo_mode = DUALSTREAM_PUSCH_PRECODING;
|
||||
@@ -1566,19 +1567,19 @@ int generate_eNB_dlsch_params_from_dci(int frame,
|
||||
break;
|
||||
case 1:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING11;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0, 0);
|
||||
break;
|
||||
case 2:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1m1;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1, 0);
|
||||
break;
|
||||
case 3:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1j;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2, 0);
|
||||
break;
|
||||
case 4:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1mj;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,3);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,3, 0);
|
||||
break;
|
||||
case 5:
|
||||
dlsch0_harq->mimo_mode = PUSCH_PRECODING0;
|
||||
@@ -2108,12 +2109,13 @@ int generate_eNB_dlsch_params_from_dci(int frame,
|
||||
rballoc,
|
||||
frame_parms->N_RB_DL,
|
||||
dlsch0_harq->rb_alloc);
|
||||
dlsch1_harq->rb_alloc[0] = dlsch0_harq->rb_alloc[0];
|
||||
|
||||
dlsch1_harq->rb_alloc[0] = dlsch0_harq->rb_alloc[0];
|
||||
|
||||
dlsch0_harq->nb_rb = conv_nprb(rah,
|
||||
rballoc,
|
||||
frame_parms->N_RB_DL);
|
||||
dlsch1_harq->nb_rb = dlsch0_harq->nb_rb;
|
||||
dlsch0_harq->nb_rb = conv_nprb(rah,
|
||||
rballoc,
|
||||
frame_parms->N_RB_DL);
|
||||
dlsch1_harq->nb_rb = dlsch0_harq->nb_rb;
|
||||
|
||||
dlsch0_harq->mcs = mcs1;
|
||||
dlsch1_harq->mcs = mcs2;
|
||||
@@ -2557,27 +2559,27 @@ int generate_eNB_dlsch_params_from_dci(int frame,
|
||||
|
||||
case 1:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING11;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0, 0);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1m1;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1, 0);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1j;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2, 0);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1mj;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,3);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,3, 0);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
dlsch0_harq->mimo_mode = PUSCH_PRECODING0;
|
||||
dlsch0_harq->pmi_alloc = DL_pmi_single;
|
||||
dlsch0_harq->pmi_alloc = DL_pmi_single;
|
||||
break;
|
||||
|
||||
case 6:
|
||||
@@ -4795,14 +4797,14 @@ int generate_ue_dlsch_params_from_dci(int frame,
|
||||
case 0:
|
||||
dlsch0_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODING1;
|
||||
dlsch1_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODING1;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0);
|
||||
dlsch1_harq->pmi_alloc = pmi_extend(frame_parms,1);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0, 1);
|
||||
dlsch1_harq->pmi_alloc = pmi_extend(frame_parms,0, 1);
|
||||
break;
|
||||
case 1:
|
||||
dlsch0_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODINGj;
|
||||
dlsch1_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODINGj;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2);
|
||||
dlsch1_harq->pmi_alloc = pmi_extend(frame_parms,3);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1,1);
|
||||
dlsch1_harq->pmi_alloc = pmi_extend(frame_parms,1, 1);
|
||||
break;
|
||||
case 2: // PUSCH precoding
|
||||
dlsch0_harq->mimo_mode = DUALSTREAM_PUSCH_PRECODING;
|
||||
@@ -4822,19 +4824,19 @@ int generate_ue_dlsch_params_from_dci(int frame,
|
||||
break;
|
||||
case 1:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING11;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0, 0);
|
||||
break;
|
||||
case 2:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1m1;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1, 0);
|
||||
break;
|
||||
case 3:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1j;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2, 0);
|
||||
break;
|
||||
case 4:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1mj;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,3);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,3, 0);
|
||||
break;
|
||||
case 5:
|
||||
dlsch0_harq->mimo_mode = PUSCH_PRECODING0;
|
||||
@@ -5523,28 +5525,28 @@ int generate_ue_dlsch_params_from_dci(int frame,
|
||||
|
||||
case 1:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING11;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0,0);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1m1;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1, 0);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1j;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2, 0);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1mj;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,3);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,3, 0);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
dlsch0_harq->mimo_mode = PUSCH_PRECODING0;
|
||||
// pmi stored from ulsch allocation routine
|
||||
dlsch0_harq->pmi_alloc = dlsch0->pmi_alloc;
|
||||
dlsch0_harq->pmi_alloc = dlsch0->pmi_alloc;
|
||||
//LOG_I(PHY,"XXX using PMI %x\n",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc));
|
||||
break;
|
||||
|
||||
@@ -5779,7 +5781,7 @@ uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,int nb_rb)
|
||||
|
||||
int i, aarx;
|
||||
uint16_t pmiq=0;
|
||||
uint16_t pmivect = 0;
|
||||
uint32_t pmivect = 0; // work with tyoe
|
||||
uint8_t rank = meas->rank[eNB_id];
|
||||
int pmi_re,pmi_im;
|
||||
int nb_subbands=0;
|
||||
@@ -5827,18 +5829,20 @@ uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,int nb_rb)
|
||||
|
||||
// printf("subband %d, pmi%d \n",i,pmiq);
|
||||
pmivect |= (pmiq<<(2*i));
|
||||
}
|
||||
}
|
||||
|
||||
else if (rank==1) {
|
||||
for (aarx=0; aarx<meas->nb_antennas_rx; aarx++) {
|
||||
pmi_re += meas->subband_pmi_re[eNB_id][i][aarx];
|
||||
pmi_im += meas->subband_pmi_im[eNB_id][i][aarx];
|
||||
}
|
||||
if (pmi_re > pmi_im)
|
||||
pmiq = PMI_2A_11;
|
||||
pmiq = PMI_2A_R1_11;
|
||||
else if (pmi_re < pmi_im)
|
||||
pmiq = PMI_2A_1m1;
|
||||
pmiq = PMI_2A_R1_1j;
|
||||
printf("subband %d, pmi%d \n",i,pmiq);
|
||||
pmivect |= (pmiq<<(2*i));
|
||||
//According to Section 7.2.4 of 36.213
|
||||
pmivect |= ((pmiq-1)<<(i)); //shift 1 since only one bit
|
||||
printf("subband %d pmivect %d \n",i, pmivect);
|
||||
}
|
||||
else {
|
||||
@@ -6282,14 +6286,31 @@ void reset_cba_uci(void *o)
|
||||
((HLC_subband_cqi_mcs_CBA_5MHz *)o)->crnti = 0x0;
|
||||
}
|
||||
|
||||
uint32_t pmi_extend(LTE_DL_FRAME_PARMS *frame_parms,uint8_t wideband_pmi)
|
||||
uint32_t pmi_extend(LTE_DL_FRAME_PARMS *frame_parms,uint8_t wideband_pmi, uint8_t rank)
|
||||
{
|
||||
|
||||
uint8_t i,wideband_pmi2=wideband_pmi&3;
|
||||
uint8_t i,wideband_pmi2;
|
||||
uint32_t pmi_ex = 0;
|
||||
|
||||
for (i=0; i<14; i+=2)
|
||||
pmi_ex|=(wideband_pmi2<<i);
|
||||
if (frame_parms->N_RB_DL!=25) {
|
||||
LOG_E(PHY,"pmi_extend not yet implemented for anything else than 25PRB\n");
|
||||
return(-1);
|
||||
}
|
||||
|
||||
if (rank==0) {
|
||||
wideband_pmi2=wideband_pmi&3;
|
||||
for (i=0; i<14; i+=2)
|
||||
pmi_ex|=(wideband_pmi2<<i);
|
||||
}
|
||||
else if (rank==1) {
|
||||
wideband_pmi2=wideband_pmi&1;
|
||||
for (i=0; i<7; i++)
|
||||
pmi_ex|=(wideband_pmi2<<i);
|
||||
}
|
||||
else {
|
||||
LOG_E(PHY,"unsupported rank\n");
|
||||
return(-1);
|
||||
}
|
||||
|
||||
return(pmi_ex);
|
||||
}
|
||||
|
||||
@@ -87,11 +87,17 @@
|
||||
#if !defined(C_RNTI)
|
||||
#define C_RNTI (rnti_t)0x1234
|
||||
#endif
|
||||
|
||||
#define PMI_2A_11 0
|
||||
// These are the codebook indexes according to Table 6.3.4.2.3-1 of 36.211
|
||||
//1 layer
|
||||
#define PMI_2A_11 0
|
||||
#define PMI_2A_1m1 1
|
||||
#define PMI_2A_1j 2
|
||||
#define PMI_2A_1j 2
|
||||
#define PMI_2A_1mj 3
|
||||
//2 layers
|
||||
#define PMI_2A_R1_10 0
|
||||
#define PMI_2A_R1_11 1
|
||||
#define PMI_2A_R1_1j 2
|
||||
|
||||
|
||||
typedef enum {
|
||||
SCH_IDLE,
|
||||
|
||||
@@ -51,6 +51,9 @@
|
||||
#define NOCYGWIN_STATIC
|
||||
#endif
|
||||
|
||||
//#undef LOG_D
|
||||
//#define LOG_D LOG_I
|
||||
|
||||
//#define DEBUG_PHY 1
|
||||
//#define DEBUG_DLSCH_DEMOD 1
|
||||
|
||||
@@ -107,6 +110,8 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
int32_t **rxdataF_comp_ptr;
|
||||
int32_t **dl_ch_mag_ptr;
|
||||
|
||||
|
||||
|
||||
switch (type) {
|
||||
case SI_PDSCH:
|
||||
lte_ue_pdsch_vars = &phy_vars_ue->lte_ue_pdsch_vars_SI[eNB_id];
|
||||
@@ -167,10 +172,13 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
else
|
||||
rballoc = dlsch0_harq->rb_alloc_even;
|
||||
|
||||
if (dlsch0_harq->mimo_mode>DUALSTREAM_UNIFORM_PRECODINGj) {
|
||||
if (dlsch0_harq->mimo_mode>DUALSTREAM_PUSCH_PRECODING) {
|
||||
LOG_E(PHY,"This transmission mode is not yet supported!\n");
|
||||
return(-1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if ((dlsch0_harq->mimo_mode==LARGE_CDD) || ((dlsch0_harq->mimo_mode>=DUALSTREAM_UNIFORM_PRECODING1) && (dlsch0_harq->mimo_mode<=DUALSTREAM_PUSCH_PRECODING))) {
|
||||
DevAssert(dlsch1_harq);
|
||||
if (eNB_id!=eNB_id_i) {
|
||||
@@ -182,9 +190,9 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
//printf("rx_pdsch: harq_pid=%d, round=%d\n",harq_pid,round);
|
||||
|
||||
if (frame_parms->nb_antennas_tx_eNB>1) {
|
||||
#ifdef DEBUG_DLSCH_MOD
|
||||
LOG_I(PHY,"dlsch: using pmi %x (%p), rb_alloc %x\n",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc),dlsch_ue[0],dlsch0_harq->rb_alloc_even[0]);
|
||||
#endif
|
||||
//#ifdef DEBUG_DLSCH_MOD
|
||||
//printf("dlsch: using pmi %x (%p), rb_alloc %x\n",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc),dlsch_ue[0],dlsch0_harq->rb_alloc_even[0]);
|
||||
//#endif
|
||||
nb_rb = dlsch_extract_rbs_dual(lte_ue_common_vars->rxdataF,
|
||||
lte_ue_common_vars->dl_ch_estimates[eNB_id],
|
||||
lte_ue_pdsch_vars[eNB_id]->rxdataF_ext,
|
||||
@@ -195,7 +203,8 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
symbol,
|
||||
subframe,
|
||||
phy_vars_ue->high_speed_flag,
|
||||
frame_parms);
|
||||
frame_parms,
|
||||
dlsch0_harq->mimo_mode);
|
||||
|
||||
if (rx_type==rx_IC_single_stream) {
|
||||
if (eNB_id_i<phy_vars_ue->n_connected_eNB) // we are in TM5
|
||||
@@ -209,7 +218,8 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
symbol,
|
||||
subframe,
|
||||
phy_vars_ue->high_speed_flag,
|
||||
frame_parms);
|
||||
frame_parms,
|
||||
dlsch0_harq->mimo_mode);
|
||||
else
|
||||
nb_rb = dlsch_extract_rbs_dual(lte_ue_common_vars->rxdataF,
|
||||
lte_ue_common_vars->dl_ch_estimates[eNB_id],
|
||||
@@ -221,7 +231,8 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
symbol,
|
||||
subframe,
|
||||
phy_vars_ue->high_speed_flag,
|
||||
frame_parms);
|
||||
frame_parms,
|
||||
dlsch0_harq->mimo_mode);
|
||||
}
|
||||
} // if n_tx>1
|
||||
else {
|
||||
@@ -406,7 +417,8 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
if (first_symbol_flag==1) {
|
||||
// effective channel of desired user is always stronger than interfering eff. channel
|
||||
dlsch_channel_level_TM34(lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext,
|
||||
frame_parms,
|
||||
frame_parms,
|
||||
lte_ue_pdsch_vars[eNB_id]->pmi_ext,
|
||||
avg,
|
||||
symbol,
|
||||
nb_rb,
|
||||
@@ -418,8 +430,6 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
lte_ue_pdsch_vars[eNB_id]->log2_maxh = log2_approx(avg[0]) - 13 + offset_mumimo_llr_drange[dlsch0_harq->mcs][(get_Qm(dlsch1_harq->mcs)>>1)-1];
|
||||
}
|
||||
else
|
||||
|
||||
|
||||
lte_ue_pdsch_vars[eNB_id]->log2_maxh = log2_approx(avg[0])/2;
|
||||
}
|
||||
|
||||
@@ -488,7 +498,12 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
if (first_symbol_flag==1) {
|
||||
|
||||
// effective channel of desired user is always stronger than interfering eff. channel
|
||||
dlsch_channel_level_TM56(lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext, frame_parms, lte_ue_pdsch_vars[eNB_id]->pmi_ext, avg, symbol, nb_rb);
|
||||
dlsch_channel_level_TM56(lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext,
|
||||
frame_parms,
|
||||
lte_ue_pdsch_vars[eNB_id]->pmi_ext,
|
||||
avg,
|
||||
symbol,
|
||||
nb_rb);
|
||||
|
||||
// LOG_D(PHY,"llr_offset = %d\n",offset_mumimo_llr_drange[dlsch0_harq->mcs][(i_mod>>1)-1]);
|
||||
avg[0] = log2_approx(avg[0]) - 13 + offset_mumimo_llr_drange[dlsch0_harq->mcs][(i_mod>>1)-1];
|
||||
@@ -949,7 +964,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
LOG_W(PHY,"rx_dlsch.c : Unknown mod_order!!!!\n");
|
||||
return(-1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return(0);
|
||||
|
||||
}
|
||||
@@ -1388,7 +1403,8 @@ void prec2A_TM4_128(int pmi,__m128i *ch0,__m128i *ch1) {
|
||||
ch0[0] = _mm_srai_epi16(ch0[0],1); //divide by 2
|
||||
ch1[0] = _mm_srai_epi16(ch1[0],1); //divide by 2
|
||||
|
||||
|
||||
_mm_empty();
|
||||
_m_empty();
|
||||
// print_shorts("prec2A_TM4 ch0 (end):",ch0);
|
||||
//print_shorts("prec2A_TM4 ch1 (end):",ch1);
|
||||
}
|
||||
@@ -1814,6 +1830,7 @@ void dlsch_channel_compensation_TM34(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
int **dl_ch_magb1 = lte_ue_pdsch_vars->dl_ch_magb1;
|
||||
int **rxdataF_comp0 = lte_ue_pdsch_vars->rxdataF_comp0;
|
||||
int **rxdataF_comp1 = lte_ue_pdsch_vars->rxdataF_comp1[harq_pid][round];
|
||||
unsigned char **pmi_ext = lte_ue_pdsch_vars->pmi_ext;
|
||||
__m128i mmtmpD0,mmtmpD1,mmtmpD2,mmtmpD3,QAM_amp0_128,QAM_amp0_128b,QAM_amp1_128,QAM_amp1_128b;
|
||||
|
||||
symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
|
||||
@@ -1884,6 +1901,17 @@ void dlsch_channel_compensation_TM34(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
prec2A_TM4_128(1,&dl_ch0_128[2],&dl_ch1_128[2]);
|
||||
}
|
||||
}
|
||||
|
||||
else if (mimo_mode==DUALSTREAM_PUSCH_PRECODING) {
|
||||
prec2A_TM4_128(pmi_ext[rb],&dl_ch0_128[0],&dl_ch1_128[0]);
|
||||
prec2A_TM4_128(pmi_ext[rb],&dl_ch0_128[1],&dl_ch1_128[1]);
|
||||
|
||||
if (pilots==0) {
|
||||
prec2A_TM4_128(pmi_ext[rb],&dl_ch0_128[2],&dl_ch1_128[2]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
else {
|
||||
LOG_E(PHY,"Unknown MIMO mode\n");
|
||||
return;
|
||||
@@ -2984,8 +3012,119 @@ void dlsch_channel_level(int **dl_ch_estimates_ext,
|
||||
#endif
|
||||
}
|
||||
|
||||
//compute average channel_level of effective (precoded) channel
|
||||
|
||||
//compute average channel_level of effective (precoded) channel
|
||||
void dlsch_channel_level_TM34(int **dl_ch_estimates_ext,
|
||||
LTE_DL_FRAME_PARMS *frame_parms,
|
||||
unsigned char *pmi_ext,
|
||||
int *avg,
|
||||
uint8_t symbol,
|
||||
unsigned short nb_rb,
|
||||
MIMO_mode_t mimo_mode){
|
||||
|
||||
#if defined(__x86_64__)||defined(__i386__)
|
||||
|
||||
|
||||
short rb;
|
||||
unsigned char aarx,nre=12,symbol_mod;
|
||||
__m128i *dl_ch0_128,*dl_ch1_128, dl_ch0_128_tmp, dl_ch1_128_tmp,avg128D;
|
||||
|
||||
symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
|
||||
|
||||
//clear average level
|
||||
avg128D = _mm_setzero_si128();
|
||||
avg[0] = 0;
|
||||
avg[1] = 0;
|
||||
// 5 is always a symbol with no pilots for both normal and extended prefix
|
||||
|
||||
if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->mode1_flag==0))
|
||||
nre=8;
|
||||
else if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->mode1_flag==1))
|
||||
nre=10;
|
||||
else
|
||||
nre=12;
|
||||
|
||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
||||
dl_ch0_128 = (__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12];
|
||||
dl_ch1_128 = (__m128i *)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12];
|
||||
|
||||
for (rb=0; rb<nb_rb; rb++) {
|
||||
|
||||
dl_ch0_128_tmp = _mm_load_si128(&dl_ch0_128[0]);
|
||||
dl_ch1_128_tmp = _mm_load_si128(&dl_ch1_128[0]);
|
||||
|
||||
if (mimo_mode==LARGE_CDD)
|
||||
prec2A_TM3_128(&dl_ch0_128_tmp,&dl_ch1_128_tmp);
|
||||
else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODING1)
|
||||
prec2A_TM4_128(0,&dl_ch0_128_tmp,&dl_ch1_128_tmp);
|
||||
else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODINGj)
|
||||
prec2A_TM4_128(1,&dl_ch0_128_tmp,&dl_ch1_128_tmp);
|
||||
else if (mimo_mode==DUALSTREAM_PUSCH_PRECODING)
|
||||
prec2A_TM4_128(pmi_ext[rb],&dl_ch0_128_tmp,&dl_ch1_128_tmp);
|
||||
|
||||
// mmtmpD0 = _mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp);
|
||||
avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp));
|
||||
|
||||
dl_ch0_128_tmp = _mm_load_si128(&dl_ch0_128[1]);
|
||||
dl_ch1_128_tmp = _mm_load_si128(&dl_ch1_128[1]);
|
||||
|
||||
if (mimo_mode==LARGE_CDD)
|
||||
prec2A_TM3_128(&dl_ch0_128_tmp,&dl_ch1_128_tmp);
|
||||
else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODING1)
|
||||
prec2A_TM4_128(0,&dl_ch0_128_tmp,&dl_ch1_128_tmp);
|
||||
else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODINGj)
|
||||
prec2A_TM4_128(1,&dl_ch0_128_tmp,&dl_ch1_128_tmp);
|
||||
else if (mimo_mode==DUALSTREAM_PUSCH_PRECODING)
|
||||
prec2A_TM4_128(pmi_ext[rb],&dl_ch0_128_tmp,&dl_ch1_128_tmp);
|
||||
|
||||
// mmtmpD1 = _mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp);
|
||||
avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp));
|
||||
|
||||
if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->mode1_flag==0)) {
|
||||
dl_ch0_128+=2;
|
||||
dl_ch1_128+=2;
|
||||
}
|
||||
else {
|
||||
dl_ch0_128_tmp = _mm_load_si128(&dl_ch0_128[2]);
|
||||
dl_ch1_128_tmp = _mm_load_si128(&dl_ch1_128[2]);
|
||||
|
||||
if (mimo_mode==LARGE_CDD)
|
||||
prec2A_TM3_128(&dl_ch0_128_tmp,&dl_ch1_128_tmp);
|
||||
else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODING1)
|
||||
prec2A_TM4_128(0,&dl_ch0_128_tmp,&dl_ch1_128_tmp);
|
||||
else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODINGj)
|
||||
prec2A_TM4_128(1,&dl_ch0_128_tmp,&dl_ch1_128_tmp);
|
||||
else if (mimo_mode==DUALSTREAM_PUSCH_PRECODING)
|
||||
prec2A_TM4_128(pmi_ext[rb],&dl_ch0_128_tmp,&dl_ch1_128_tmp);
|
||||
// mmtmpD2 = _mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp);
|
||||
avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp));
|
||||
|
||||
dl_ch0_128+=3;
|
||||
dl_ch1_128+=3;
|
||||
}
|
||||
}
|
||||
|
||||
avg[aarx] = (((int*)&avg128D)[0])/(nb_rb*nre) +
|
||||
(((int*)&avg128D)[1])/(nb_rb*nre) +
|
||||
(((int*)&avg128D)[2])/(nb_rb*nre) +
|
||||
(((int*)&avg128D)[3])/(nb_rb*nre);
|
||||
}
|
||||
|
||||
// choose maximum of the 2 effective channels
|
||||
avg[0] = cmax(avg[0],avg[1]);
|
||||
|
||||
_mm_empty();
|
||||
_m_empty();
|
||||
|
||||
#elif defined(__arm__)
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*void dlsch_channel_level_TM34(int **dl_ch_estimates_ext,
|
||||
LTE_DL_FRAME_PARMS *frame_parms,
|
||||
int *avg,
|
||||
uint8_t symbol,
|
||||
@@ -3084,7 +3223,7 @@ void dlsch_channel_level_TM34(int **dl_ch_estimates_ext,
|
||||
#elif defined(__arm__)
|
||||
|
||||
#endif
|
||||
}
|
||||
}*/
|
||||
|
||||
//compute average channel_level of effective (precoded) channel
|
||||
void dlsch_channel_level_TM56(int **dl_ch_estimates_ext,
|
||||
@@ -3874,10 +4013,17 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
|
||||
unsigned char symbol,
|
||||
unsigned char subframe,
|
||||
uint32_t high_speed_flag,
|
||||
LTE_DL_FRAME_PARMS *frame_parms) {
|
||||
LTE_DL_FRAME_PARMS *frame_parms,
|
||||
MIMO_mode_t mimo_mode) {
|
||||
|
||||
/*uint8_t get_pmi(uint8_t N_RB_DL,LTE_DL_eNB_HARQ_t *dlsch_harq,uint16_t rb)
|
||||
{
|
||||
|
||||
|
||||
MIMO_mode_t mode = dlsch_harq->mimo_mode;*/
|
||||
|
||||
//PHY_VARS_UE *phy_vars_ue,
|
||||
|
||||
int prb,nb_rb=0;
|
||||
int prb_off,prb_off2;
|
||||
int rb_alloc_ind,skip_half=0,sss_symb,pss_symb=0,nsymb,l;
|
||||
@@ -3885,7 +4031,7 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
|
||||
int32_t *dl_ch0,*dl_ch0p,*dl_ch0_ext,*dl_ch1,*dl_ch1p,*dl_ch1_ext,*rxF,*rxF_ext;
|
||||
int symbol_mod,pilots=0,j=0;
|
||||
unsigned char *pmi_loc;
|
||||
|
||||
|
||||
symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
|
||||
// printf("extract_rbs: symbol_mod %d\n",symbol_mod);
|
||||
|
||||
@@ -3999,7 +4145,12 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
|
||||
rxF = &rxdataF[aarx][prb_off2+
|
||||
(symbol*(frame_parms->ofdm_symbol_size))];
|
||||
}
|
||||
|
||||
if (mimo_mode <= PUSCH_PRECODING1)
|
||||
*pmi_loc = (pmi>>((prb>>2)<<1))&3;
|
||||
else
|
||||
*pmi_loc=(pmi>>prb)&1;
|
||||
|
||||
pmi_loc++;
|
||||
|
||||
|
||||
@@ -4136,8 +4287,11 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
|
||||
#ifdef DEBUG_DLSCH_DEMOD
|
||||
printf("symbol %d / rb %d: alloc %d skip_half %d (rxF %p, rxF_ext %p) prb_off (%d,%d)\n",symbol,prb,rb_alloc_ind,skip_half,rxF,rxF_ext,prb_off,prb_off2);
|
||||
#endif
|
||||
*pmi_loc = (pmi>>((prb>>2)<<1))&3;
|
||||
// printf("symbol_mod %d (pilots %d) rb %d, sb %d, pmi %d (pmi_loc %p,rxF %p, ch00 %p, ch01 %p, rxF_ext %p dl_ch0_ext %p dl_ch1_ext %p)\n",symbol_mod,pilots,rb,rb>>2,*pmi_loc,pmi_loc,rxF,dl_ch0, dl_ch1, rxF_ext,dl_ch0_ext,dl_ch1_ext);
|
||||
if (mimo_mode <= PUSCH_PRECODING1)
|
||||
*pmi_loc = (pmi>>((prb>>2)<<1))&3;
|
||||
else
|
||||
*pmi_loc=(pmi>>prb)&1;
|
||||
// printf("symbol_mod %d (pilots %d) rb %d, sb %d, pmi %d (pmi_loc %p,rxF %p, ch00 %p, ch01 %p, rxF_ext %p dl_ch0_ext %p dl_ch1_ext %p)\n",symbol_mod,pilots,prb,prb>>2,*pmi_loc,pmi_loc,rxF,dl_ch0, dl_ch1, rxF_ext,dl_ch0_ext,dl_ch1_ext);
|
||||
|
||||
pmi_loc++;
|
||||
|
||||
|
||||
@@ -786,7 +786,7 @@ int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
precoder_index1 = 3; //[1 -j]
|
||||
}
|
||||
else {
|
||||
LOG_E(PHY,"problem with precoder in TM4\n");
|
||||
printf("problem with precoder in TM4\n");
|
||||
return(-1);
|
||||
}
|
||||
|
||||
@@ -1254,7 +1254,7 @@ uint8_t get_pmi(uint8_t N_RB_DL,LTE_DL_eNB_HARQ_t *dlsch_harq,uint16_t rb)
|
||||
MIMO_mode_t mode = dlsch_harq->mimo_mode;
|
||||
uint32_t pmi_alloc = dlsch_harq->pmi_alloc;
|
||||
|
||||
// printf("Getting pmi for RB %d => %d\n",rb,(pmi_alloc>>((rb>>2)<<1))&3);
|
||||
printf("Getting pmi for RB %d => %d\n",rb,((pmi_alloc>>rb)&1));
|
||||
switch (N_RB_DL) {
|
||||
case 6: // 1 PRB per subband
|
||||
if (mode <= PUSCH_PRECODING1)
|
||||
@@ -1369,10 +1369,10 @@ int dlsch_modulation(mod_sym_t **txdataF,
|
||||
for (l=num_pdcch_symbols; l<nsymb; l++) {
|
||||
|
||||
#ifdef DEBUG_DLSCH_MODULATION
|
||||
msg("Generating DLSCH (harq_pid %d,mimo %d, pmi_alloc0 %llx, mod0 %d, mod1 %d, rb_alloc[0] %d) in %d\n",
|
||||
printf("Generating DLSCH (harq_pid %d,mimo %d, pmi_alloc0 %llx, mod0 %d, mod1 %d, rb_alloc[0] %d) in %d\n",
|
||||
harq_pid,
|
||||
dlsch0_harq->mimo_mode,
|
||||
pmi2hex_2Ar1(dlsch0_harq->pmi_alloc),
|
||||
pmi2hex_2Ar2(dlsch0_harq->pmi_alloc),
|
||||
mod_order0,
|
||||
mod_order1,
|
||||
rb_alloc[0],
|
||||
|
||||
@@ -909,7 +909,8 @@ uint16_t dlsch_extract_rbs_dual(int32_t **rxdataF,
|
||||
uint8_t symbol,
|
||||
uint8_t subframe,
|
||||
uint32_t high_speed_flag,
|
||||
LTE_DL_FRAME_PARMS *frame_parms);
|
||||
LTE_DL_FRAME_PARMS *frame_parms,
|
||||
MIMO_mode_t mimo_mode);
|
||||
|
||||
/** \brief This function performs channel compensation (matched filtering) on the received RBs for this allocation. In addition, it computes the squared-magnitude of the channel with weightings for 16QAM/64QAM detection as well as dual-stream detection (cross-correlation)
|
||||
@param rxdataF_ext Frequency-domain received signal in RBs to be demodulated
|
||||
@@ -994,6 +995,7 @@ void dlsch_channel_level(int32_t **dl_ch_estimates_ext,
|
||||
|
||||
void dlsch_channel_level_TM34(int **dl_ch_estimates_ext,
|
||||
LTE_DL_FRAME_PARMS *frame_parms,
|
||||
unsigned char *pmi_ext,
|
||||
int *avg,
|
||||
uint8_t symbol,
|
||||
unsigned short nb_rb,
|
||||
@@ -1587,7 +1589,7 @@ uint64_t cqi2hex(uint32_t cqi);
|
||||
|
||||
uint16_t computeRIV(uint16_t N_RB_DL,uint16_t RBstart,uint16_t Lcrbs);
|
||||
|
||||
uint32_t pmi_extend(LTE_DL_FRAME_PARMS *frame_parms,uint8_t wideband_pmi);
|
||||
uint32_t pmi_extend(LTE_DL_FRAME_PARMS *frame_parms,uint8_t wideband_pmi, uint8_t rank);
|
||||
|
||||
|
||||
uint16_t get_nCCE(uint8_t num_pdcch_symbols,LTE_DL_FRAME_PARMS *frame_parms,uint8_t mi);
|
||||
|
||||
@@ -450,7 +450,7 @@ int main(int argc, char **argv)
|
||||
case 'w':
|
||||
snr_int = atof(optarg);
|
||||
break;
|
||||
|
||||
|
||||
case 'f':
|
||||
input_snr_step= atof(optarg);
|
||||
break;
|
||||
@@ -1529,7 +1529,7 @@ n(tikz_fname,"w");
|
||||
((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->harq_pid = 0;
|
||||
((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->mcs = mcs1;
|
||||
((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->ndi = 0;
|
||||
((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 1;
|
||||
((DCI1A_5MHz_TDD_1_6_t *)&DLSCH_alloc_pdu_1[k])->rv = 0;
|
||||
break;
|
||||
case 50:
|
||||
dci_length = sizeof_DCI1A_10MHz_TDD_1_6_t;
|
||||
@@ -1662,7 +1662,7 @@ n(tikz_fname,"w");
|
||||
((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1;
|
||||
((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0;
|
||||
((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap = 0;
|
||||
((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi = 0;
|
||||
((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi = 2;
|
||||
break;
|
||||
case 25:
|
||||
dci_length = sizeof_DCI2_5MHz_2A_TDD_t;
|
||||
@@ -1679,7 +1679,7 @@ n(tikz_fname,"w");
|
||||
((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1;
|
||||
((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0;
|
||||
((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap = 0;
|
||||
((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi = 0;
|
||||
((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi = 2;
|
||||
|
||||
break;
|
||||
case 50:
|
||||
@@ -1697,7 +1697,7 @@ n(tikz_fname,"w");
|
||||
((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1;
|
||||
((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0;
|
||||
((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap = 0;
|
||||
((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi = 0;
|
||||
((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi = 2;
|
||||
|
||||
break;
|
||||
case 100:
|
||||
@@ -1713,7 +1713,7 @@ n(tikz_fname,"w");
|
||||
((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->ndi2 = 1;
|
||||
((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0;
|
||||
((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tb_swap = 0;
|
||||
((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi = 0;
|
||||
((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi = 2;
|
||||
dci_length = sizeof_DCI2_20MHz_2A_TDD_t;
|
||||
dci_length_bytes = sizeof(DCI2_20MHz_2A_TDD_t);
|
||||
break;
|
||||
@@ -1791,6 +1791,12 @@ n(tikz_fname,"w");
|
||||
else if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx == 4) {
|
||||
|
||||
}
|
||||
|
||||
if (((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 2) { // not a nice way to do it, fix later
|
||||
|
||||
PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single = (unsigned short)(taus()&0xffff);
|
||||
|
||||
}
|
||||
|
||||
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
@@ -2765,6 +2771,14 @@ n(tikz_fname,"w");
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
if (transmission_mode==4 && (((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 2)){
|
||||
PHY_vars_eNB->dlsch_eNB[0][0]->harq_processes[0]->pmi_alloc = quantize_subband_pmi(&PHY_vars_UE->PHY_measurements,0,PHY_vars_eNB->lte_frame_parms.N_RB_DL);
|
||||
PHY_vars_UE->dlsch_ue[0][0]->pmi_alloc = quantize_subband_pmi(&PHY_vars_UE->PHY_measurements,0,PHY_vars_UE->lte_frame_parms.N_RB_DL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
start_meas(&PHY_vars_eNB->dlsch_encoding_stats);
|
||||
@@ -2929,10 +2943,6 @@ n(tikz_fname,"w");
|
||||
|
||||
// r_re[1][i] = ((double)(((short *)PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][1]))[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti) +(i<<1)]);
|
||||
// r_im[1][i] = ((double)(((short *)PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][1]))[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti) +(i<<1)+1]);
|
||||
// printf("r_re0 = %d\n",r_re[0][i]);
|
||||
// printf("r_im0 = %d\n",r_im[0][i]);
|
||||
// printf("r_re1 = %d\n",r_re[1][i]);
|
||||
// printf("r_im1 = %d\n",r_im[1][i]);
|
||||
|
||||
}
|
||||
else {
|
||||
@@ -3165,7 +3175,7 @@ n(tikz_fname,"w");
|
||||
PHY_vars_UE->PHY_measurements.wideband_cqi_avg[0]);
|
||||
*/
|
||||
|
||||
if (transmission_mode==5 || transmission_mode==6) {
|
||||
if (transmission_mode == 4 || transmission_mode == 5 || transmission_mode == 6) {
|
||||
if (pmi_feedback == 1) {
|
||||
pmi_feedback = 0;
|
||||
hold_channel = 1;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user