Commit 992b32a9 authored by Florian Kaltenberger's avatar Florian Kaltenberger

Merge branch 'feature-59-tm4' of...

Merge branch 'feature-59-tm4' of https://gitlab.eurecom.fr/oai/openairinterface5g into feature-59-tm4

Conflicts:
	openair1/PHY/LTE_TRANSPORT/proto.h
parents 6143779c 0c5a731f
...@@ -119,6 +119,7 @@ endmacro(add_list_string_option) ...@@ -119,6 +119,7 @@ endmacro(add_list_string_option)
#################################################### ####################################################
# compilation flags # compilation flags
############################################# #############################################
set (CMAKE_BUILD_TYPE "Debug")
if (CMAKE_BUILD_TYPE STREQUAL "") if (CMAKE_BUILD_TYPE STREQUAL "")
set(CMAKE_BUILD_TYPE "RelWithDebInfo") set(CMAKE_BUILD_TYPE "RelWithDebInfo")
endif() endif()
......
...@@ -872,7 +872,8 @@ int generate_eNB_dlsch_params_from_dci(int frame, ...@@ -872,7 +872,8 @@ int generate_eNB_dlsch_params_from_dci(int frame,
uint16_t si_rnti, uint16_t si_rnti,
uint16_t ra_rnti, uint16_t ra_rnti,
uint16_t p_rnti, uint16_t p_rnti,
uint16_t DL_pmi_single) uint16_t DL_pmi_single
)
{ {
uint8_t harq_pid = UINT8_MAX; uint8_t harq_pid = UINT8_MAX;
...@@ -1545,7 +1546,8 @@ int generate_eNB_dlsch_params_from_dci(int frame, ...@@ -1545,7 +1546,8 @@ int generate_eNB_dlsch_params_from_dci(int frame,
dlsch0_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODINGj; dlsch0_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODINGj;
dlsch1_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODINGj; dlsch1_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODINGj;
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1,1); dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1,1);
dlsch1_harq->pmi_alloc = pmi_extend(frame_parms,1,1); dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1,1);
break; break;
case 2: // PUSCH precoding case 2: // PUSCH precoding
dlsch0_harq->mimo_mode = DUALSTREAM_PUSCH_PRECODING; dlsch0_harq->mimo_mode = DUALSTREAM_PUSCH_PRECODING;
...@@ -2108,12 +2110,13 @@ int generate_eNB_dlsch_params_from_dci(int frame, ...@@ -2108,12 +2110,13 @@ int generate_eNB_dlsch_params_from_dci(int frame,
rballoc, rballoc,
frame_parms->N_RB_DL, frame_parms->N_RB_DL,
dlsch0_harq->rb_alloc); 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, dlsch0_harq->nb_rb = conv_nprb(rah,
rballoc, rballoc,
frame_parms->N_RB_DL); frame_parms->N_RB_DL);
dlsch1_harq->nb_rb = dlsch0_harq->nb_rb; dlsch1_harq->nb_rb = dlsch0_harq->nb_rb;
dlsch0_harq->mcs = mcs1; dlsch0_harq->mcs = mcs1;
dlsch1_harq->mcs = mcs2; dlsch1_harq->mcs = mcs2;
...@@ -2557,27 +2560,30 @@ int generate_eNB_dlsch_params_from_dci(int frame, ...@@ -2557,27 +2560,30 @@ int generate_eNB_dlsch_params_from_dci(int frame,
case 1: case 1:
dlsch0_harq->mimo_mode = UNIFORM_PRECODING11; dlsch0_harq->mimo_mode = UNIFORM_PRECODING11;
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0,0); dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0, 0);
break; break;
case 2: case 2:
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1m1; dlsch0_harq->mimo_mode = UNIFORM_PRECODING1m1;
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1,0); dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1, 0);
break; break;
case 3: case 3:
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1j; dlsch0_harq->mimo_mode = UNIFORM_PRECODING1j;
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2,0); dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2, 0);
break; break;
case 4: case 4:
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1mj; dlsch0_harq->mimo_mode = UNIFORM_PRECODING1mj;
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,3,0); dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,3, 0);
break; break;
case 5: case 5:
dlsch0_harq->mimo_mode = PUSCH_PRECODING0; dlsch0_harq->mimo_mode = PUSCH_PRECODING0;
dlsch0_harq->pmi_alloc = DL_pmi_single; dlsch0_harq->pmi_alloc = DL_pmi_single;
break; break;
case 6: case 6:
...@@ -4795,20 +4801,20 @@ int generate_ue_dlsch_params_from_dci(int frame, ...@@ -4795,20 +4801,20 @@ int generate_ue_dlsch_params_from_dci(int frame,
case 0: case 0:
dlsch0_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODING1; dlsch0_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODING1;
dlsch1_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODING1; dlsch1_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODING1;
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0,1); dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0, 1);
dlsch1_harq->pmi_alloc = pmi_extend(frame_parms,0,1); dlsch1_harq->pmi_alloc = pmi_extend(frame_parms,0, 1);
break; break;
case 1: case 1:
dlsch0_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODINGj; dlsch0_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODINGj;
dlsch1_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODINGj; dlsch1_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODINGj;
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1,1); dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1,1);
dlsch1_harq->pmi_alloc = pmi_extend(frame_parms,1,1); dlsch1_harq->pmi_alloc = pmi_extend(frame_parms,1, 1);
break; break;
case 2: // PUSCH precoding case 2: // PUSCH precoding
dlsch0_harq->mimo_mode = DUALSTREAM_PUSCH_PRECODING; dlsch0_harq->mimo_mode = DUALSTREAM_PUSCH_PRECODING;
dlsch0_harq->pmi_alloc = 0; //TODO: DL_pmi_single; dlsch0_harq->pmi_alloc = dlsch0->pmi_alloc;
dlsch1_harq->mimo_mode = DUALSTREAM_PUSCH_PRECODING; dlsch1_harq->mimo_mode = DUALSTREAM_PUSCH_PRECODING;
dlsch1_harq->pmi_alloc = 0; //TODO: DL_pmi_single; dlsch1_harq->pmi_alloc = dlsch0->pmi_alloc^0x1555;
break; break;
default: default:
break; break;
...@@ -4822,19 +4828,19 @@ int generate_ue_dlsch_params_from_dci(int frame, ...@@ -4822,19 +4828,19 @@ int generate_ue_dlsch_params_from_dci(int frame,
break; break;
case 1: case 1:
dlsch0_harq->mimo_mode = UNIFORM_PRECODING11; dlsch0_harq->mimo_mode = UNIFORM_PRECODING11;
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0,0); dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0, 0);
break; break;
case 2: case 2:
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1m1; dlsch0_harq->mimo_mode = UNIFORM_PRECODING1m1;
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1,0); dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1, 0);
break; break;
case 3: case 3:
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1j; dlsch0_harq->mimo_mode = UNIFORM_PRECODING1j;
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2,0); dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2, 0);
break; break;
case 4: case 4:
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1mj; dlsch0_harq->mimo_mode = UNIFORM_PRECODING1mj;
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,3,0); dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,3, 0);
break; break;
case 5: case 5:
dlsch0_harq->mimo_mode = PUSCH_PRECODING0; dlsch0_harq->mimo_mode = PUSCH_PRECODING0;
...@@ -5528,23 +5534,24 @@ int generate_ue_dlsch_params_from_dci(int frame, ...@@ -5528,23 +5534,24 @@ int generate_ue_dlsch_params_from_dci(int frame,
case 2: case 2:
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1m1; dlsch0_harq->mimo_mode = UNIFORM_PRECODING1m1;
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1,0); dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1, 0);
break; break;
case 3: case 3:
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1j; dlsch0_harq->mimo_mode = UNIFORM_PRECODING1j;
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2,0); dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2, 0);
break; break;
case 4: case 4:
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1mj; dlsch0_harq->mimo_mode = UNIFORM_PRECODING1mj;
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,3,0); dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,3, 0);
break; break;
case 5: case 5:
dlsch0_harq->mimo_mode = PUSCH_PRECODING0; dlsch0_harq->mimo_mode = PUSCH_PRECODING0;
// pmi stored from ulsch allocation routine // 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)); //LOG_I(PHY,"XXX using PMI %x\n",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc));
break; break;
...@@ -5774,14 +5781,33 @@ uint32_t pdcch_alloc2ul_frame(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame, ui ...@@ -5774,14 +5781,33 @@ 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,int nb_subbands) uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,int nb_rb)
{ {
int i, aarx; int i, aarx;
uint16_t pmiq=0; uint16_t pmiq=0;
uint16_t pmivect = 0; uint32_t pmivect = 0; // work with tyoe
uint8_t rank = meas->rank[eNB_id]; uint8_t rank = meas->rank[eNB_id];
int pmi_re,pmi_im; int pmi_re,pmi_im;
int nb_subbands=0;
switch (nb_rb) {
case 6:
nb_subbands = 6;
break;
default:
case 25:
nb_subbands = 7;
break;
case 50:
nb_subbands = 9;
break;
case 100:
nb_subbands = 13;
break;
}
for (i=0; i<nb_subbands; i++) { for (i=0; i<nb_subbands; i++) {
pmi_re = 0; pmi_re = 0;
...@@ -5808,7 +5834,23 @@ uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,int nb_subba ...@@ -5808,7 +5834,23 @@ uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,int nb_subba
// printf("subband %d, pmi%d \n",i,pmiq); // printf("subband %d, pmi%d \n",i,pmiq);
pmivect |= (pmiq<<(2*i)); pmivect |= (pmiq<<(2*i));
} else { }
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_R1_11;
else if (pmi_re < pmi_im)
pmiq = PMI_2A_R1_1j;
printf("subband %d, pmi%d \n",i,pmiq);
//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 {
// This needs to be done properly!!! // This needs to be done properly!!!
msg("PMI feedback for rank>1 not supported!\n"); msg("PMI feedback for rank>1 not supported!\n");
pmivect = 0; pmivect = 0;
...@@ -6249,7 +6291,8 @@ void reset_cba_uci(void *o) ...@@ -6249,7 +6291,8 @@ void reset_cba_uci(void *o)
((HLC_subband_cqi_mcs_CBA_5MHz *)o)->crnti = 0x0; ((HLC_subband_cqi_mcs_CBA_5MHz *)o)->crnti = 0x0;
} }
uint32_t pmi_extend(LTE_DL_FRAME_PARMS *frame_parms,uint8_t wideband_pmi, unit8_t rank)
uint32_t pmi_extend(LTE_DL_FRAME_PARMS *frame_parms,uint8_t wideband_pmi, uint8_t rank)
{ {
uint8_t i,wideband_pmi2; uint8_t i,wideband_pmi2;
......
...@@ -87,11 +87,17 @@ ...@@ -87,11 +87,17 @@
#if !defined(C_RNTI) #if !defined(C_RNTI)
#define C_RNTI (rnti_t)0x1234 #define C_RNTI (rnti_t)0x1234
#endif #endif
// These are the codebook indexes according to Table 6.3.4.2.3-1 of 36.211
#define PMI_2A_11 0 //1 layer
#define PMI_2A_11 0
#define PMI_2A_1m1 1 #define PMI_2A_1m1 1
#define PMI_2A_1j 2 #define PMI_2A_1j 2
#define PMI_2A_1mj 3 #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 { typedef enum {
SCH_IDLE, SCH_IDLE,
......
...@@ -786,7 +786,7 @@ int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms, ...@@ -786,7 +786,7 @@ int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms,
precoder_index1 = 3; //[1 -j] precoder_index1 = 3; //[1 -j]
} }
else { else {
LOG_E(PHY,"problem with precoder in TM4\n"); printf("problem with precoder in TM4\n");
return(-1); 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) ...@@ -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; MIMO_mode_t mode = dlsch_harq->mimo_mode;
uint32_t pmi_alloc = dlsch_harq->pmi_alloc; 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) { switch (N_RB_DL) {
case 6: // 1 PRB per subband case 6: // 1 PRB per subband
if (mode <= PUSCH_PRECODING1) //single layer if (mode <= PUSCH_PRECODING1) //single layer
...@@ -1369,10 +1369,10 @@ int dlsch_modulation(mod_sym_t **txdataF, ...@@ -1369,10 +1369,10 @@ int dlsch_modulation(mod_sym_t **txdataF,
for (l=num_pdcch_symbols; l<nsymb; l++) { for (l=num_pdcch_symbols; l<nsymb; l++) {
#ifdef DEBUG_DLSCH_MODULATION #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, harq_pid,
dlsch0_harq->mimo_mode, dlsch0_harq->mimo_mode,
pmi2hex_2Ar1(dlsch0_harq->pmi_alloc), pmi2hex_2Ar2(dlsch0_harq->pmi_alloc),
mod_order0, mod_order0,
mod_order1, mod_order1,
rb_alloc[0], rb_alloc[0],
......
...@@ -909,7 +909,8 @@ uint16_t dlsch_extract_rbs_dual(int32_t **rxdataF, ...@@ -909,7 +909,8 @@ uint16_t dlsch_extract_rbs_dual(int32_t **rxdataF,
uint8_t symbol, uint8_t symbol,
uint8_t subframe, uint8_t subframe,
uint32_t high_speed_flag, 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) /** \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 @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, ...@@ -994,6 +995,7 @@ void dlsch_channel_level(int32_t **dl_ch_estimates_ext,
void dlsch_channel_level_TM34(int **dl_ch_estimates_ext, void dlsch_channel_level_TM34(int **dl_ch_estimates_ext,
LTE_DL_FRAME_PARMS *frame_parms, LTE_DL_FRAME_PARMS *frame_parms,
unsigned char *pmi_ext,
int *avg, int *avg,
uint8_t symbol, uint8_t symbol,
unsigned short nb_rb, unsigned short nb_rb,
......
...@@ -450,7 +450,7 @@ int main(int argc, char **argv) ...@@ -450,7 +450,7 @@ int main(int argc, char **argv)
case 'w': case 'w':
snr_int = atof(optarg); snr_int = atof(optarg);
break; break;
case 'f': case 'f':
input_snr_step= atof(optarg); input_snr_step= atof(optarg);
break; break;
...@@ -1529,7 +1529,7 @@ n(tikz_fname,"w"); ...@@ -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])->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])->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])->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; break;
case 50: case 50:
dci_length = sizeof_DCI1A_10MHz_TDD_1_6_t; dci_length = sizeof_DCI1A_10MHz_TDD_1_6_t;
...@@ -1662,7 +1662,7 @@ n(tikz_fname,"w"); ...@@ -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])->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])->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])->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; break;
case 25: case 25:
dci_length = sizeof_DCI2_5MHz_2A_TDD_t; dci_length = sizeof_DCI2_5MHz_2A_TDD_t;
...@@ -1679,7 +1679,7 @@ n(tikz_fname,"w"); ...@@ -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])->ndi2 = 1;
((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0; ((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])->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; break;
case 50: case 50:
...@@ -1697,7 +1697,7 @@ n(tikz_fname,"w"); ...@@ -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])->ndi2 = 1;
((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0; ((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])->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; break;
case 100: case 100:
...@@ -1713,7 +1713,7 @@ n(tikz_fname,"w"); ...@@ -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])->ndi2 = 1;
((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->rv2 = 0; ((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])->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 = sizeof_DCI2_20MHz_2A_TDD_t;
dci_length_bytes = sizeof(DCI2_20MHz_2A_TDD_t); dci_length_bytes = sizeof(DCI2_20MHz_2A_TDD_t);
break; break;
...@@ -1791,6 +1791,12 @@ n(tikz_fname,"w"); ...@@ -1791,6 +1791,12 @@ n(tikz_fname,"w");
else if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx == 4) { 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); memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
dci_alloc[num_dci].dci_length = dci_length; dci_alloc[num_dci].dci_length = dci_length;
...@@ -2765,6 +2771,14 @@ n(tikz_fname,"w"); ...@@ -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); start_meas(&PHY_vars_eNB->dlsch_encoding_stats);
...@@ -2929,10 +2943,6 @@ n(tikz_fname,"w"); ...@@ -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_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]); // 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 { else {
...@@ -3165,7 +3175,7 @@ n(tikz_fname,"w"); ...@@ -3165,7 +3175,7 @@ n(tikz_fname,"w");
PHY_vars_UE->PHY_measurements.wideband_cqi_avg[0]); 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) { if (pmi_feedback == 1) {
pmi_feedback = 0; pmi_feedback = 0;
hold_channel = 1; hold_channel = 1;
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment