diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index 3687b08a1a80dfc3640e07ff6d5200eb2313ddc0..a1a86d0e3bc456ab855b4e157d5dd14aa2165782 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -1966,7 +1966,6 @@ target_link_libraries (oaisim_nos1 forms)
target_link_libraries (oaisim_nos1 ${T_LIB})
-
# Unitary tests for each piece of L1: example, mbmssim is MBMS L1 simulator
#####################################
@@ -2063,9 +2062,9 @@ if (${T_TRACER})
add_dependencies(lte-softmodem-nos1 generate_T)
add_dependencies(rrh_gw generate_T)
add_dependencies(oaisim generate_T)
- add_dependencies(oaisim_nos1 generate_T)
add_dependencies(dlsim generate_T)
add_dependencies(dlsim_tm4 generate_T)
+ add_dependencies(dlsim_tm4_feedback generate_T)
add_dependencies(dlsim_tm7 generate_T)
add_dependencies(ulsim generate_T)
add_dependencies(pbchsim generate_T)
diff --git a/openair1/PHY/LTE_ESTIMATION/defs.h b/openair1/PHY/LTE_ESTIMATION/defs.h
index 08615119ef613667c78ac6b63aafc3355d79aeef..f2cbf97f9d52d8883bbc13430e27d144bb3f0e30 100644
--- a/openair1/PHY/LTE_ESTIMATION/defs.h
+++ b/openair1/PHY/LTE_ESTIMATION/defs.h
@@ -161,7 +161,7 @@ int lte_est_freq_offset(int **dl_ch_estimates,
LTE_DL_FRAME_PARMS *frame_parms,
int l,
int* freq_offset,
- int reset);
+ int reset);
int lte_mbsfn_est_freq_offset(int **dl_ch_estimates,
LTE_DL_FRAME_PARMS *frame_parms,
@@ -180,7 +180,7 @@ This function computes the time domain channel response, finds the peak and adju
void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
PHY_VARS_UE *phy_vars_ue,
module_id_t eNb_id,
- uint8_t subframe,
+ uint8_t subframe,
unsigned char clear,
short coef);
@@ -189,7 +189,8 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
unsigned int subframe_offset,
unsigned char N0_symbol,
unsigned char abstraction_flag,
- uint8_t subframe);
+ unsigned char rank_adaptation,
+ uint8_t subframe);
//! \brief This function performance RSRP/RSCP measurements
void ue_rrc_measurements(PHY_VARS_UE *phy_vars_ue,
@@ -214,11 +215,11 @@ int8_t set_RSRQ_filtered(module_id_t Mod_id,uint8_t CC_id,uint8_t eNB_index,floa
//! Automatic gain control
void phy_adjust_gain (PHY_VARS_UE *phy_vars_ue,
- uint32_t rx_power_fil_dB,
+ uint32_t rx_power_fil_dB,
unsigned char eNB_id);
int lte_ul_channel_estimation(PHY_VARS_eNB *phy_vars_eNB,
- eNB_rxtx_proc_t *proc,
+ eNB_rxtx_proc_t *proc,
module_id_t eNB_id,
module_id_t UE_id,
uint8_t l,
@@ -246,7 +247,7 @@ int lte_est_timing_advance(LTE_DL_FRAME_PARMS *frame_parms,
int lte_est_timing_advance_pusch(PHY_VARS_eNB* phy_vars_eNB,module_id_t UE_id);
void lte_eNB_I0_measurements(PHY_VARS_eNB *phy_vars_eNB,
- int subframe,
+ int subframe,
module_id_t eNB_id,
unsigned char clear);
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
index a9813bb4902fc62204a6939e9aba2b7098f66a80..ba062d7fb198f2850f4af4bbd2dab96d782d8ec8 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
@@ -459,6 +459,7 @@ void lte_ue_measurements(PHY_VARS_UE *ue,
unsigned int subframe_offset,
unsigned char N0_symbol,
unsigned char abstraction_flag,
+ unsigned char rank_adaptation,
uint8_t subframe)
{
@@ -484,12 +485,6 @@ void lte_ue_measurements(PHY_VARS_UE *ue,
ue->measurements.nb_antennas_rx = frame_parms->nb_antennas_rx;
- if (ue->transmission_mode[eNB_id]!=4)
- ue->measurements.rank[eNB_id] = 0;
- else
- ue->measurements.rank[eNB_id] = 1;
- // printf ("tx mode %d\n", ue->transmission_mode[eNB_id]);
- // printf ("rank %d\n", ue->PHY_measurements.rank[eNB_id]);
switch (N_RB_DL) {
case 6:
@@ -552,17 +547,26 @@ void lte_ue_measurements(PHY_VARS_UE *ue,
eNB_id=0;
if (ue->transmission_mode[0]==4 || ue->transmission_mode[0]==3){
- rank_tm3_tm4 = rank_estimation_tm3_tm4(&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][0][4],
- &ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][2][4],
- &ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][1][4],
- &ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][3][4],
- N_RB_DL);
-
+ if (rank_adaptation == 1)
+ rank_tm3_tm4 = rank_estimation_tm3_tm4(&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][0][4],
+ &ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][2][4],
+ &ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][1][4],
+ &ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][3][4],
+ N_RB_DL);
+ else
+ rank_tm3_tm4=1;
#ifdef DEBUG_RANK_EST
printf("rank tm3 or tm4 %d\n", rank_tm3_tm4);
#endif
}
+ if (ue->transmission_mode[eNB_id]!=4 && ue->transmission_mode[eNB_id]!=3)
+ ue->measurements.rank[eNB_id] = 0;
+ else
+ ue->measurements.rank[eNB_id] = rank_tm3_tm4;
+ // printf ("tx mode %d\n", ue->transmission_mode[eNB_id]);
+ // printf ("rank %d\n", ue->PHY_measurements.rank[eNB_id]);
+
// filter to remove jitter
if (ue->init_averaging == 0) {
for (eNB_id = 0; eNB_id < ue->n_connected_eNB; eNB_id++)
diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
index bbeae76598c674979285fff45ea9edeac219e1dd..483eab33ddf979c3f0dfd1d11ec6c1489c397e30 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
@@ -1493,7 +1493,6 @@ int generate_eNB_dlsch_params_from_dci(int frame,
break;
}
-
if (harq_pid>=8) {
LOG_E(PHY,"ERROR: Format 2_2A: harq_pid=%d >= 8\n", harq_pid);
return(-1);
@@ -1512,7 +1511,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
TB1_active=0;
}
#ifdef DEBUG_HARQ
- printf("RV0 = %d, RV1 = %d. MCS0 = %d, MCS1=%d\n", rv1, rv2, mcs1, mcs2);
+ printf(" eNOdeB RV0 = %d, RV1 = %d. MCS0 = %d, MCS1=%d\n", rv1, rv2, mcs1, mcs2);
#endif
if (TB0_active && TB1_active && tbswap==0) {
dlsch0=dlsch[0];
@@ -1577,6 +1576,8 @@ int generate_eNB_dlsch_params_from_dci(int frame,
printf("\n ENB: TB0 is deactivated, retransmit TB1 transmit in TM6\n");
#endif
}
+ // printf("[eNB] dlsch0_harq->round = %d, dlsch1_harq->round = %d \n", dlsch0_harq->round, dlsch1_harq->round);
+
if (dlsch0 != NULL){
dlsch0->subframe_tx[subframe] = 1;
@@ -1720,6 +1721,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
dlsch1_harq->pmi_alloc = DL_pmi_single;
break;
}
+ // printf ("[eNB] dlsch1_harq->pmi_alloc %d\n", dlsch1_harq->pmi_alloc);
}
} else if (frame_parms->nb_antenna_ports_eNB == 4) {
@@ -1737,6 +1739,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
if (dlsch1 != NULL)
dlsch1->rnti = rnti;
+
break;
case format2A:
@@ -4994,19 +4997,19 @@ int check_dci_format2_2a_coherency(DCI_format_t dci_format,
long long RIV_max = 0;
#ifdef DEBUG_DCI
- LOG_I(PHY, "extarcted dci - dci_format %d \n", dci_format);
- LOG_I(PHY, "extarcted dci - rnti %d \n", rnti);
- LOG_I(PHY, "extarcted dci - rah %d \n", rah);
- LOG_I(PHY, "extarcted dci - mcs1 %d \n", mcs1);
- LOG_I(PHY, "extarcted dci - mcs2 %d \n", mcs2);
- LOG_I(PHY, "extarcted dci - rv1 %d \n", rv1);
- LOG_I(PHY, "extarcted dci - rv2 %d \n", rv2);
- //LOG_I(PHY, "extarcted dci - ndi1 %d \n", ndi1);
- //LOG_I(PHY, "extarcted dci - ndi2 %d \n", ndi2);
- LOG_I(PHY, "extarcted dci - rballoc %x \n", rballoc);
- LOG_I(PHY, "extarcted dci - harq pid %d \n", harq_pid);
- LOG_I(PHY, "extarcted dci - round0 %d \n", pdlsch0_harq->round);
- LOG_I(PHY, "extarcted dci - round1 %d \n", pdlsch1_harq->round);
+ printf("extarcted dci - dci_format %d \n", dci_format);
+ printf("extarcted dci - rah %d \n", rah);
+ printf("extarcted dci - mcs1 %d \n", mcs1);
+ printf("extarcted dci - mcs2 %d \n", mcs2);
+ printf("extarcted dci - rv1 %d \n", rv1);
+ printf("extarcted dci - rv2 %d \n", rv2);
+ //printf("extarcted dci - ndi1 %d \n", ndi1);
+ // printf("extarcted dci - ndi2 %d \n", ndi2);
+ printf("extarcted dci - rballoc %x \n", rballoc);
+ printf("extarcted dci - harq pif %d \n", harq_pid);
+ printf("extarcted dci - round0 %d \n", pdlsch0_harq->round);
+ printf("extarcted dci - round1 %d \n", pdlsch1_harq->round);
+
#endif
// I- check dci content minimum coherency
@@ -5054,7 +5057,7 @@ int check_dci_format2_2a_coherency(DCI_format_t dci_format,
{
// DCI false detection
LOG_I(PHY,"bad rv1\n");
- return(0);
+ //return(0);
}
if((pdlsch1_harq->round == 0) && (rv2 > 0))
@@ -5483,6 +5486,9 @@ switch (tpmi) {
dlsch1_harq->pmi_alloc = pmi_alloc;
dlsch0_harq->pmi_alloc = pmi_alloc^0x1555;
}
+#ifdef DEBUG_HARQ
+ printf ("\n \n compute_precoding_info_2cw pmi_alloc_new = %d\n", dlsch0_harq->pmi_alloc);
+ #endif
break;
default:
break;
@@ -5513,20 +5519,16 @@ switch (tpmi) {
dlsch_harq->pmi_alloc = pmi_extend(frame_parms,3, 0);
break;
case 5:
- dlsch_harq->mimo_mode = PUSCH_PRECODING0;
- dlsch_harq->pmi_alloc = pmi_alloc;;//pmi_convert(frame_parms,dlsch0->pmi_alloc,0);
- #ifdef DEBUG_HARQ
- printf ("[DCI UE] I am calling from the UE side pmi_alloc_new = %d\n", dlsch0->pmi_alloc);
- #endif
+ dlsch_harq->pmi_alloc = pmi_alloc;//pmi_convert(frame_parms,dlsch0->pmi_alloc,0);
break;
case 6:
dlsch_harq->mimo_mode = PUSCH_PRECODING1;
- dlsch_harq->pmi_alloc = pmi_alloc;;//pmi_convert(frame_parms,dlsch0->pmi_alloc,1);
- #ifdef DEBUG_HARQ
- printf ("[DCI UE] I am calling from the UE side pmi_alloc_new = %d\n", dlsch0->pmi_alloc);
- #endif
+ dlsch_harq->pmi_alloc = pmi_alloc;//pmi_convert(frame_parms,dlsch0->pmi_alloc,1);
break;
}
+#ifdef DEBUG_HARQ
+ printf ("[DCI UE] I am calling from the UE side pmi_alloc_new = %d with tpmi %d\n", dlsch_harq->pmi_alloc, tpmi);
+#endif
}
void compute_precoding_info_format2A(uint8_t tpmi,
@@ -5652,7 +5654,7 @@ void prepare_dl_decoding_format2_2A(DCI_format_t dci_format,
uint8_t TB0_active = 0;
uint8_t TB1_active = 0;
-
+ // printf("inside prepare pdlsch1->pmi_alloc %d \n",pdlsch1->pmi_alloc);
// check if either TB is disabled (see 36-213 V8.6 p. 26)
TB0_active = 1;
@@ -5774,10 +5776,13 @@ void prepare_dl_decoding_format2_2A(DCI_format_t dci_format,
{
if ((TB0_active) && (TB1_active)){ //two CW active
compute_precoding_info_2cw(tpmi, tbswap, pdlsch0->pmi_alloc,frame_parms, dlsch0_harq, dlsch1_harq);
+
+ // printf("[DCI UE 1]: dlsch0_harq status %d , dlsch1_harq status %d\n", dlsch0_harq->status, dlsch1_harq->status);
} else if ((TB0_active) && (!TB1_active)) { // only CW 0 active
compute_precoding_info_1cw(tpmi, pdlsch0->pmi_alloc, frame_parms, dlsch0_harq);
} else {
- compute_precoding_info_1cw(tpmi, pdlsch0->pmi_alloc, frame_parms, dlsch1_harq);
+ compute_precoding_info_1cw(tpmi, pdlsch1->pmi_alloc, frame_parms, dlsch1_harq);
+ printf("I am doing compute_precoding_info_1cw with tpmi %d \n", tpmi);
}
//printf(" UE DCI harq0 MIMO mode = %d\n", dlsch0_harq->mimo_mode);
if ((frame_parms->mode1_flag == 1) && (TB0_active))
@@ -5792,11 +5797,14 @@ void prepare_dl_decoding_format2_2A(DCI_format_t dci_format,
dlsch0_harq,
dlsch1_harq);
}
-
+ // printf("[DCI UE 2]: dlsch0_harq status %d , dlsch1_harq status %d\n", dlsch0_harq->status, dlsch1_harq->status);
// reset round + compute Qm
if (TB0_active) {
+ // printf("TB0 ndi1 =%d, dlsch0_harq->DCINdi =%d, dlsch0_harq->first_tx = %d\n", ndi1, dlsch0_harq->DCINdi, dlsch0_harq->first_tx);
if ((ndi1!=dlsch0_harq->DCINdi) || (dlsch0_harq->first_tx==1)) {
- dlsch0_harq->round = 0;
+ dlsch0_harq->round = 0;
+ dlsch0_harq->status = ACTIVE;
+ dlsch0_harq->DCINdi = ndi1;
//LOG_I(PHY,"[UE] DLSCH: New Data Indicator CW0 subframe %d (pid %d, round %d)\n",
// subframe,harq_pid,dlsch0_harq->round);
@@ -5808,14 +5816,13 @@ void prepare_dl_decoding_format2_2A(DCI_format_t dci_format,
if(dlsch0_harq->round == 0) {
#if 0
// skip pdsch decoding and report ack
- dlsch0_harq->status = SCH_IDLE;
pdlsch0->active = 0;
pdlsch0->harq_ack[subframe].ack = 1;
pdlsch0->harq_ack[subframe].harq_id = harq_pid;
pdlsch0->harq_ack[subframe].send_harq_status = 1;
#endif
}
- }
+
// if Imcs in [29..31] TBS is assumed to be as determined from DCI transported in the latest
// PDCCH for the same trasport block using Imcs in [0 .. 28]
@@ -5837,8 +5844,12 @@ void prepare_dl_decoding_format2_2A(DCI_format_t dci_format,
else if (mcs1<=31)
dlsch0_harq->Qm = (mcs1-28)<<1;
}
+ }
+
+ // printf("[DCI UE 3]: dlsch0_harq status %d , dlsch1_harq status %d\n", dlsch0_harq->status, dlsch1_harq->status);
- if (TB1_active) {
+ if ((TB1_active) && (pdlsch1->active == 1)) {
+ // printf("TB1 ndi2 =%d, dlsch1_harq->DCINdi =%d, dlsch1_harq->first_tx = %d\n", ndi2, dlsch1_harq->DCINdi, dlsch1_harq->first_tx);
if ((ndi2!=dlsch1_harq->DCINdi) || (dlsch1_harq->first_tx==1)) {
dlsch1_harq->round = 0;
//LOG_I(PHY,"[UE] DLSCH: New Data Indicator CW1 subframe %d (pid %d, round %d)\n",
@@ -5851,7 +5862,7 @@ void prepare_dl_decoding_format2_2A(DCI_format_t dci_format,
#if 0
if(dlsch1_harq->round == 0) {
// skip pdsch decoding and report ack
- dlsch1_harq->status = SCH_IDLE;
+ // printf("Switching to IDLE\n");
pdlsch1->active = 0;
pdlsch1->harq_ack[subframe].ack = 1;
pdlsch1->harq_ack[subframe].harq_id = harq_pid;
@@ -5880,17 +5891,8 @@ void prepare_dl_decoding_format2_2A(DCI_format_t dci_format,
}
#ifdef DEBUG_HARQ
- printf("[DCI UE]: dlsch0_harq status %d , dlsch1_harq status %d\n", dlsch0_harq->status, dlsch1_harq->status);
+ printf("[DCI UE]: TB0_active %d , TB1_active %d\n", TB0_active, TB1_active);
#endif
-
- #ifdef DEBUG_HARQ
- if (dlsch0 != NULL && dlsch1 != NULL)
- printf("[DCI UE] dlsch0_harq status = %d, dlsch1_harq status = %d\n", dlsch0_harq->status, dlsch1_harq->status);
- else if (dlsch0 == NULL && dlsch1 != NULL)
- printf("[DCI UE] dlsch0_harq NULL dlsch1_harq status = %d\n", dlsch1_harq->status);
- else if (dlsch0 != NULL && dlsch1 == NULL)
- printf("[DCI UE] dlsch1_harq NULL dlsch0_harq status = %d\n", dlsch0_harq->status);
- #endif
}
int generate_ue_dlsch_params_from_dci(int frame,
@@ -5908,12 +5910,22 @@ int generate_ue_dlsch_params_from_dci(int frame,
uint16_t tc_rnti)
{
-
uint8_t harq_pid=0;
- uint8_t frame_type=frame_parms->frame_type;
- uint8_t tpmi=0;
- LTE_UE_DLSCH_t *dlsch0=NULL,*dlsch1=NULL;
- LTE_DL_UE_HARQ_t *dlsch0_harq=NULL,*dlsch1_harq=NULL;
+ uint32_t rballoc=0,RIV_max=0;
+ uint8_t frame_type=frame_parms->frame_type;
+ uint8_t vrb_type=0;
+ uint8_t mcs=0,mcs1=0,mcs2=0;
+ uint8_t rv=0,rv1=0,rv2=0;
+ uint8_t TB0_active=0,TB1_active=0;
+ uint8_t ndi=0,ndi1=0,ndi2=0;
+ uint8_t rah=0;
+ uint8_t TPC=0;
+ uint8_t NPRB=0,tbswap=0,tpmi=0;
+ uint8_t Ngap;
+ uint8_t dai=0;
+ LTE_UE_DLSCH_t *dlsch0=NULL,*dlsch1=NULL;
+ LTE_DL_UE_HARQ_t *dlsch0_harq=NULL,*dlsch1_harq=NULL;
+
DCI_INFO_EXTRACTED_t dci_info_extarcted;
uint8_t status=0;
@@ -6099,7 +6111,626 @@ int generate_ue_dlsch_params_from_dci(int frame,
case format2:
{
- // extract dci infomation
+
+ switch (frame_parms->N_RB_DL) {
+
+ case 6:
+ if (frame_parms->nb_antenna_ports_eNB == 2) {
+ if (frame_type == TDD) {
+ mcs1 = ((DCI2_1_5MHz_2A_TDD_t *)dci_pdu)->mcs1;
+ mcs2 = ((DCI2_1_5MHz_2A_TDD_t *)dci_pdu)->mcs2;
+ rballoc = ((DCI2_1_5MHz_2A_TDD_t *)dci_pdu)->rballoc;
+ rv1 = ((DCI2_1_5MHz_2A_TDD_t *)dci_pdu)->rv1;
+ rv2 = ((DCI2_1_5MHz_2A_TDD_t *)dci_pdu)->rv2;
+ ndi1 = ((DCI2_1_5MHz_2A_TDD_t *)dci_pdu)->ndi1;
+ ndi2 = ((DCI2_1_5MHz_2A_TDD_t *)dci_pdu)->ndi2;
+ harq_pid = ((DCI2_1_5MHz_2A_TDD_t *)dci_pdu)->harq_pid;
+ tbswap = ((DCI2_1_5MHz_2A_TDD_t *)dci_pdu)->tb_swap;
+ tpmi = ((DCI2_1_5MHz_2A_TDD_t *)dci_pdu)->tpmi;
+ }
+ else {
+ mcs1 = ((DCI2_1_5MHz_2A_FDD_t *)dci_pdu)->mcs1;
+ mcs2 = ((DCI2_1_5MHz_2A_FDD_t *)dci_pdu)->mcs2;
+ rballoc = ((DCI2_1_5MHz_2A_FDD_t *)dci_pdu)->rballoc;
+ rv1 = ((DCI2_1_5MHz_2A_FDD_t *)dci_pdu)->rv1;
+ rv2 = ((DCI2_1_5MHz_2A_FDD_t *)dci_pdu)->rv2;
+ ndi1 = ((DCI2_1_5MHz_2A_FDD_t *)dci_pdu)->ndi1;
+ ndi2 = ((DCI2_1_5MHz_2A_FDD_t *)dci_pdu)->ndi2;
+ harq_pid = ((DCI2_1_5MHz_2A_FDD_t *)dci_pdu)->harq_pid;
+ tbswap = ((DCI2_1_5MHz_2A_FDD_t *)dci_pdu)->tb_swap;
+ tpmi = ((DCI2_1_5MHz_2A_FDD_t *)dci_pdu)->tpmi;
+ }
+ }
+ else if (frame_parms->nb_antenna_ports_eNB == 4) {
+ if (frame_type == TDD) {
+ mcs1 = ((DCI2_1_5MHz_4A_TDD_t *)dci_pdu)->mcs1;
+ mcs2 = ((DCI2_1_5MHz_4A_TDD_t *)dci_pdu)->mcs2;
+ rballoc = ((DCI2_1_5MHz_4A_TDD_t *)dci_pdu)->rballoc;
+ rv1 = ((DCI2_1_5MHz_4A_TDD_t *)dci_pdu)->rv1;
+ rv2 = ((DCI2_1_5MHz_4A_TDD_t *)dci_pdu)->rv2;
+ ndi1 = ((DCI2_1_5MHz_4A_TDD_t *)dci_pdu)->ndi1;
+ ndi2 = ((DCI2_1_5MHz_4A_TDD_t *)dci_pdu)->ndi2;
+ harq_pid = ((DCI2_1_5MHz_4A_TDD_t *)dci_pdu)->harq_pid;
+ tbswap = ((DCI2_1_5MHz_4A_TDD_t *)dci_pdu)->tb_swap;
+ tpmi = ((DCI2_1_5MHz_4A_TDD_t *)dci_pdu)->tpmi;
+ }
+ else {
+ mcs1 = ((DCI2_1_5MHz_4A_FDD_t *)dci_pdu)->mcs1;
+ mcs2 = ((DCI2_1_5MHz_4A_FDD_t *)dci_pdu)->mcs2;
+ rballoc = ((DCI2_1_5MHz_4A_FDD_t *)dci_pdu)->rballoc;
+ rv1 = ((DCI2_1_5MHz_4A_FDD_t *)dci_pdu)->rv1;
+ rv2 = ((DCI2_1_5MHz_4A_FDD_t *)dci_pdu)->rv2;
+ ndi1 = ((DCI2_1_5MHz_4A_FDD_t *)dci_pdu)->ndi1;
+ ndi2 = ((DCI2_1_5MHz_4A_FDD_t *)dci_pdu)->ndi2;
+ harq_pid = ((DCI2_1_5MHz_4A_FDD_t *)dci_pdu)->harq_pid;
+ tbswap = ((DCI2_1_5MHz_4A_FDD_t *)dci_pdu)->tb_swap;
+ tpmi = ((DCI2_1_5MHz_4A_FDD_t *)dci_pdu)->tpmi;
+ }
+ }
+ else {
+ LOG_E(PHY,"UE: subframe %d Format2 DCI: unsupported number of TX antennas %d\n",subframe,frame_parms->nb_antenna_ports_eNB);
+
+ }
+
+ break;
+
+ case 25:
+ if (frame_parms->nb_antenna_ports_eNB == 2) {
+ if (frame_type == TDD) {
+ mcs1 = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->mcs1;
+ mcs2 = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->mcs2;
+ rballoc = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->rballoc;
+ rah = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->rah;
+ rv1 = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->rv1;
+ rv2 = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->rv2;
+ ndi1 = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->ndi1;
+ ndi2 = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->ndi2;
+ harq_pid = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->harq_pid;
+ tbswap = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->tb_swap;
+ tpmi = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->tpmi;
+ }
+ else {
+ mcs1 = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->mcs1;
+ mcs2 = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->mcs2;
+ rballoc = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->rballoc;
+ rah = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->rah;
+ rv1 = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->rv1;
+ rv2 = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->rv2;
+ ndi1 = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->ndi1;
+ ndi2 = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->ndi2;
+ harq_pid = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->harq_pid;
+ tbswap = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->tb_swap;
+ tpmi = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->tpmi;
+ }
+ }
+ else if (frame_parms->nb_antenna_ports_eNB == 4) {
+ if (frame_type == TDD) {
+ mcs1 = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->mcs1;
+ mcs2 = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->mcs2;
+ rballoc = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->rballoc;
+ rah = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->rah;
+ rv1 = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->rv1;
+ rv2 = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->rv2;
+ ndi1 = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->ndi1;
+ ndi2 = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->ndi2;
+ harq_pid = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->harq_pid;
+ tbswap = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->tb_swap;
+ tpmi = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->tpmi;
+ }
+ else {
+ mcs1 = ((DCI2_5MHz_4A_FDD_t *)dci_pdu)->mcs1;
+ mcs2 = ((DCI2_5MHz_4A_FDD_t *)dci_pdu)->mcs2;
+ rballoc = ((DCI2_5MHz_4A_FDD_t *)dci_pdu)->rballoc;
+ rah = ((DCI2_5MHz_4A_FDD_t *)dci_pdu)->rah;
+ rv1 = ((DCI2_5MHz_4A_FDD_t *)dci_pdu)->rv1;
+ rv2 = ((DCI2_5MHz_4A_FDD_t *)dci_pdu)->rv2;
+ ndi1 = ((DCI2_5MHz_4A_FDD_t *)dci_pdu)->ndi1;
+ ndi2 = ((DCI2_5MHz_4A_FDD_t *)dci_pdu)->ndi2;
+ harq_pid = ((DCI2_5MHz_4A_FDD_t *)dci_pdu)->harq_pid;
+ tbswap = ((DCI2_5MHz_4A_FDD_t *)dci_pdu)->tb_swap;
+ tpmi = ((DCI2_5MHz_4A_FDD_t *)dci_pdu)->tpmi;
+ }
+ }
+
+ break;
+
+ case 50:
+ if (frame_parms->nb_antenna_ports_eNB == 2) {
+ if (frame_type == TDD) {
+ mcs1 = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->mcs1;
+ mcs2 = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->mcs2;
+ rballoc = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->rballoc;
+ rah = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->rah;
+ rv1 = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->rv1;
+ rv2 = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->rv2;
+ ndi1 = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->ndi1;
+ ndi2 = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->ndi2;
+ harq_pid = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->harq_pid;
+ tbswap = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->tb_swap;
+ tpmi = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->tpmi;
+ }
+ else {
+ mcs1 = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->mcs1;
+ mcs2 = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->mcs2;
+ rballoc = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->rballoc;
+ rah = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->rah;
+ rv1 = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->rv1;
+ rv2 = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->rv2;
+ ndi1 = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->ndi1;
+ ndi2 = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->ndi2;
+ harq_pid = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->harq_pid;
+ tbswap = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->tb_swap;
+ tpmi = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->tpmi;
+ }
+ }
+ else if (frame_parms->nb_antenna_ports_eNB == 4) {
+ if (frame_type == TDD) {
+ mcs1 = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->mcs1;
+ mcs2 = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->mcs2;
+ rballoc = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->rballoc;
+ rah = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->rah;
+ rv1 = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->rv1;
+ rv2 = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->rv2;
+ ndi1 = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->ndi1;
+ ndi2 = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->ndi2;
+ harq_pid = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->harq_pid;
+ tbswap = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->tb_swap;
+ tpmi = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->tpmi;
+ }
+ else {
+ mcs1 = ((DCI2_10MHz_4A_FDD_t *)dci_pdu)->mcs1;
+ mcs2 = ((DCI2_10MHz_4A_FDD_t *)dci_pdu)->mcs2;
+ rballoc = ((DCI2_10MHz_4A_FDD_t *)dci_pdu)->rballoc;
+ rah = ((DCI2_10MHz_4A_FDD_t *)dci_pdu)->rah;
+ rv1 = ((DCI2_10MHz_4A_FDD_t *)dci_pdu)->rv1;
+ rv2 = ((DCI2_10MHz_4A_FDD_t *)dci_pdu)->rv2;
+ ndi1 = ((DCI2_10MHz_4A_FDD_t *)dci_pdu)->ndi1;
+ ndi2 = ((DCI2_10MHz_4A_FDD_t *)dci_pdu)->ndi2;
+ harq_pid = ((DCI2_10MHz_4A_FDD_t *)dci_pdu)->harq_pid;
+ tbswap = ((DCI2_10MHz_4A_FDD_t *)dci_pdu)->tb_swap;
+ tpmi = ((DCI2_10MHz_4A_FDD_t *)dci_pdu)->tpmi;
+ }
+ }
+ else {
+ LOG_E(PHY,"UE: Format2 DCI: unsupported number of TX antennas %d\n",frame_parms->nb_antenna_ports_eNB);
+ }
+
+ break;
+
+ case 100:
+ if (frame_parms->nb_antenna_ports_eNB == 2) {
+ if (frame_type == TDD) {
+ mcs1 = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->mcs1;
+ mcs2 = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->mcs2;
+ rballoc = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->rballoc;
+ rah = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->rah;
+ rv1 = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->rv1;
+ rv2 = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->rv2;
+ ndi1 = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->ndi1;
+ ndi2 = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->ndi2;
+ harq_pid = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->harq_pid;
+ tbswap = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->tb_swap;
+ tpmi = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->tpmi;
+ }
+ else {
+ mcs1 = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->mcs1;
+ mcs2 = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->mcs2;
+ rballoc = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->rballoc;
+ rah = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->rah;
+ rv1 = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->rv1;
+ rv2 = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->rv2;
+ ndi1 = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->ndi1;
+ ndi2 = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->ndi2;
+ harq_pid = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->harq_pid;
+ tbswap = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->tb_swap;
+ tpmi = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->tpmi;
+ }
+ }
+ else if (frame_parms->nb_antenna_ports_eNB == 4) {
+ if (frame_type == TDD) {
+ mcs1 = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->mcs1;
+ mcs2 = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->mcs2;
+ rballoc = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->rballoc;
+ rah = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->rah;
+ rv1 = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->rv1;
+ rv2 = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->rv2;
+ ndi1 = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->ndi1;
+ ndi2 = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->ndi2;
+ harq_pid = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->harq_pid;
+ tbswap = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->tb_swap;
+ tpmi = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->tpmi;
+ }
+ else {
+ mcs1 = ((DCI2_20MHz_4A_FDD_t *)dci_pdu)->mcs1;
+ mcs2 = ((DCI2_20MHz_4A_FDD_t *)dci_pdu)->mcs2;
+ rballoc = ((DCI2_20MHz_4A_FDD_t *)dci_pdu)->rballoc;
+ rah = ((DCI2_20MHz_4A_FDD_t *)dci_pdu)->rah;
+ rv1 = ((DCI2_20MHz_4A_FDD_t *)dci_pdu)->rv1;
+ rv2 = ((DCI2_20MHz_4A_FDD_t *)dci_pdu)->rv2;
+ ndi1 = ((DCI2_20MHz_4A_FDD_t *)dci_pdu)->ndi1;
+ ndi2 = ((DCI2_20MHz_4A_FDD_t *)dci_pdu)->ndi2;
+ harq_pid = ((DCI2_20MHz_4A_FDD_t *)dci_pdu)->harq_pid;
+ tbswap = ((DCI2_20MHz_4A_FDD_t *)dci_pdu)->tb_swap;
+ tpmi = ((DCI2_20MHz_4A_FDD_t *)dci_pdu)->tpmi;
+ }
+ }
+ else {
+ LOG_E(PHY,"UE: Format2 DCI: unsupported number of TX antennas %d\n",frame_parms->nb_antenna_ports_eNB);
+ }
+
+ break;
+ }
+
+ if (harq_pid>=8) {
+ LOG_E(PHY,"Format 2_2A: harq_pid=%d >= 8\n", harq_pid);
+ return(-1);
+ }
+
+ // check if either TB is disabled (see 36-213 V8.6 p. 26)
+ TB0_active = 1;
+ TB1_active = 1;
+
+ if ((rv1 == 1) && (mcs1 == 0)) {
+ TB0_active=0;
+ }
+ if ((rv2 == 1) && (mcs2 == 0)) {
+ TB1_active=0;
+ }
+#ifdef DEBUG_HARQ
+ printf("[DCI UE]: TB0 status %d , TB1 status %d\n", TB0_active, TB1_active);
+#endif
+
+ //printf("RV TB0 = %d\n", rv1);
+
+
+ if (TB0_active && TB1_active && tbswap==0) { //dlsch0, dlsch0_harq are at the TB level
+ dlsch0=dlsch[0];
+ dlsch1=dlsch[1];
+ dlsch0->active = 1;
+ dlsch1->active = 1;
+ dlsch0_harq = dlsch0->harq_processes[harq_pid];
+ dlsch1_harq = dlsch1->harq_processes[harq_pid];
+ dlsch0_harq->mcs = mcs1;
+ dlsch1_harq->mcs = mcs2;
+ dlsch0_harq->rvidx = rv1;
+ dlsch1_harq->rvidx = rv2;
+ dlsch0_harq->status = ACTIVE;
+ dlsch1_harq->status = ACTIVE;
+ dlsch0_harq->codeword=0;
+ dlsch1_harq->codeword=1;
+#ifdef DEBUG_HARQ
+ printf("[DCI UE]: BOTH ACTIVE\n");
+#endif
+ }
+ else if (TB0_active && TB1_active && tbswap==1) {
+ dlsch0=dlsch[0];
+ dlsch1=dlsch[1];
+ dlsch0->active = 1;
+ dlsch1->active = 1;
+ dlsch0_harq = dlsch0->harq_processes[harq_pid];
+ dlsch1_harq = dlsch1->harq_processes[harq_pid];
+ dlsch0_harq->mcs = mcs1;
+ dlsch1_harq->mcs = mcs2;
+ dlsch0_harq->rvidx = rv1;
+ dlsch1_harq->rvidx = rv2;
+ dlsch0_harq->status = ACTIVE;
+ dlsch1_harq->status = ACTIVE;
+ dlsch0_harq->codeword=1;
+ dlsch1_harq->codeword=0;
+ }
+ else if (TB0_active && (TB1_active==0)) {
+ dlsch0=dlsch[0];
+ dlsch0->active = 1;
+ dlsch0_harq = dlsch0->harq_processes[harq_pid];
+ dlsch0_harq->mcs = mcs1;
+ dlsch0_harq->rvidx = rv1;
+ dlsch0_harq->status = ACTIVE;
+ dlsch0_harq->codeword = 0;
+ dlsch1=NULL;
+ dlsch1_harq = NULL;
+#ifdef DEBUG_HARQ
+ printf("[DCI UE]: TB1 is deactivated, retransmit TB0 transmit in TM6\n");
+#endif
+ }
+ else if ((TB0_active==0) && TB1_active) {
+ dlsch1=dlsch[1];
+ dlsch1->active = 1;
+ dlsch1_harq = dlsch1->harq_processes[harq_pid];
+ dlsch1_harq->mcs = mcs2;
+ dlsch1_harq->rvidx = rv2;
+ dlsch1_harq->status = ACTIVE;
+ dlsch1_harq->codeword = 0;
+ dlsch0=NULL;
+ dlsch0_harq = NULL;
+#ifdef DEBUG_HARQ
+ printf("[DCI UE]: TB0 is deactivated, retransmit TB1 transmit in TM6\n");
+#endif
+ }
+
+
+ if (dlsch0 != NULL){
+ dlsch0->current_harq_pid = harq_pid;
+ dlsch0->harq_ack[subframe].harq_id = harq_pid;
+ }
+
+ if (dlsch1 != NULL){
+ dlsch1->current_harq_pid = harq_pid;
+ dlsch1->harq_ack[subframe].harq_id = harq_pid;
+ }
+
+ if (dlsch0_harq != NULL){
+ conv_rballoc(rah,
+ rballoc,
+ frame_parms->N_RB_DL,
+ dlsch0_harq->rb_alloc_even);
+
+ dlsch0_harq->rb_alloc_odd[0]= dlsch0_harq->rb_alloc_even[0];
+ dlsch0_harq->rb_alloc_odd[1]= dlsch0_harq->rb_alloc_even[1];
+ dlsch0_harq->rb_alloc_odd[2]= dlsch0_harq->rb_alloc_even[2];
+ dlsch0_harq->rb_alloc_odd[3]= dlsch0_harq->rb_alloc_even[3];
+
+ if (dlsch1_harq != NULL){
+ dlsch1_harq->rb_alloc_even[0]= dlsch0_harq->rb_alloc_even[0];
+ dlsch1_harq->rb_alloc_even[1]= dlsch0_harq->rb_alloc_even[1];
+ dlsch1_harq->rb_alloc_even[2]= dlsch0_harq->rb_alloc_even[2];
+ dlsch1_harq->rb_alloc_even[3]= dlsch0_harq->rb_alloc_even[3];
+ dlsch1_harq->rb_alloc_odd[0] = dlsch0_harq->rb_alloc_odd[0];
+ dlsch1_harq->rb_alloc_odd[1] = dlsch0_harq->rb_alloc_odd[1];
+ dlsch1_harq->rb_alloc_odd[2] = dlsch0_harq->rb_alloc_odd[2];
+ dlsch1_harq->rb_alloc_odd[3] = dlsch0_harq->rb_alloc_odd[3];
+
+ dlsch1_harq->nb_rb = dlsch0_harq->nb_rb;
+ }
+
+ dlsch0_harq->nb_rb = conv_nprb(rah,
+ rballoc,
+ frame_parms->N_RB_DL);
+
+ } else if ((dlsch0_harq == NULL) && (dlsch1_harq != NULL)){
+
+ conv_rballoc(rah,
+ rballoc,
+ frame_parms->N_RB_DL,
+ dlsch1_harq->rb_alloc_even);
+
+ dlsch1_harq->rb_alloc_odd[0]= dlsch1_harq->rb_alloc_even[0];
+ dlsch1_harq->rb_alloc_odd[1]= dlsch1_harq->rb_alloc_even[1];
+ dlsch1_harq->rb_alloc_odd[2]= dlsch1_harq->rb_alloc_even[2];
+ dlsch1_harq->rb_alloc_odd[3]= dlsch1_harq->rb_alloc_even[3];
+ dlsch1_harq->nb_rb = conv_nprb(rah,
+ rballoc,
+ frame_parms->N_RB_DL);
+ }
+
+
+ if (dlsch0_harq != NULL) {
+ dlsch0_harq->delta_PUCCH = delta_PUCCH_lut[TPC&3];
+ }
+
+ if (dlsch1_harq != NULL) {
+ dlsch1_harq->delta_PUCCH = delta_PUCCH_lut[TPC&3];
+ }
+
+ // assume one layer per codeword (2 antenna port case)
+ if (dlsch0_harq != NULL)
+ dlsch0_harq->Nl = 1;
+
+ if (dlsch1_harq != NULL)
+ dlsch1_harq->Nl = 1;
+#ifdef DEBUG_HARQ
+ printf ("[DCI UE] tpmi = %d\n", tpmi);
+#endif
+
+
+ if ((dlsch0 != NULL) && (dlsch1 != NULL)){ //two CW active
+ dlsch0_harq->dl_power_off = 1;
+ dlsch1_harq->dl_power_off = 1;
+ switch (tpmi) {
+ 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, 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,1, 1);
+ dlsch1_harq->pmi_alloc = pmi_extend(frame_parms,1, 1);
+ break;
+ case 2: // PUSCH precoding
+ dlsch0_harq->mimo_mode = DUALSTREAM_PUSCH_PRECODING;
+ dlsch1_harq->mimo_mode = DUALSTREAM_PUSCH_PRECODING;
+ if (tbswap==0){
+ dlsch0_harq->pmi_alloc = dlsch0->pmi_alloc;
+ dlsch1_harq->pmi_alloc = dlsch0->pmi_alloc^0x1555;
+ } else {
+ dlsch1_harq->pmi_alloc = dlsch0->pmi_alloc;
+ dlsch0_harq->pmi_alloc = dlsch0->pmi_alloc^0x1555;
+ }
+ break;
+ default:
+ break;
+ }
+ } else if ((dlsch0 != NULL) && (dlsch1 == NULL)) { // only CW 0 active
+ dlsch0_harq->dl_power_off = 1;
+ switch (tpmi) {
+ case 0 :
+ dlsch0_harq->mimo_mode = ALAMOUTI;
+ break;
+ case 1:
+ dlsch0_harq->mimo_mode = UNIFORM_PRECODING11;
+ 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, 0);
+ break;
+ case 3:
+ dlsch0_harq->mimo_mode = UNIFORM_PRECODING1j;
+ 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, 0);
+ break;
+ case 5:
+ dlsch0_harq->mimo_mode = PUSCH_PRECODING0;
+ // pmi stored from ulsch allocation routine
+ // we need to extract the first column of precoding matrix (which was computed assuming rank==2)
+ dlsch0_harq->pmi_alloc = dlsch0->pmi_alloc;;//pmi_convert(frame_parms,dlsch0->pmi_alloc,0);
+ //LOG_I(PHY,"XXX using PMI %x\n",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc));
+#ifdef DEBUG_HARQ
+ printf ("[DCI UE] I am calling from the UE side pmi_alloc_new = %d\n", dlsch0->pmi_alloc);
+#endif
+ break;
+ case 6:
+ dlsch0_harq->mimo_mode = PUSCH_PRECODING1;
+ // we need to extract the second column of precoding matrix (which was computed assuming rank==2)
+ dlsch0_harq->pmi_alloc = dlsch0->pmi_alloc;;//pmi_convert(frame_parms,dlsch0->pmi_alloc,1);
+#ifdef DEBUG_HARQ
+ printf ("[DCI UE] I am calling from the UE side pmi_alloc_new = %d\n", dlsch0->pmi_alloc);
+#endif
+ break;
+#ifdef DEBUG_HARQ
+ printf("[DCI UE] harq0 MIMO mode = %d\n", dlsch0_harq->mimo_mode);
+#endif
+ }
+ } else {
+ dlsch1_harq->dl_power_off = 1;
+ switch (tpmi) {
+ case 0 :
+ dlsch1_harq->mimo_mode = ALAMOUTI;
+ break;
+ case 1:
+ dlsch1_harq->mimo_mode = UNIFORM_PRECODING11;
+ dlsch1_harq->pmi_alloc = pmi_extend(frame_parms,0, 0);
+ break;
+ case 2:
+ dlsch1_harq->mimo_mode = UNIFORM_PRECODING1m1;
+ dlsch1_harq->pmi_alloc = pmi_extend(frame_parms,1, 0);
+ break;
+ case 3:
+ dlsch1_harq->mimo_mode = UNIFORM_PRECODING1j;
+ dlsch1_harq->pmi_alloc = pmi_extend(frame_parms,2, 0);
+ break;
+ case 4:
+ dlsch1_harq->mimo_mode = UNIFORM_PRECODING1mj;
+ dlsch1_harq->pmi_alloc = pmi_extend(frame_parms,3, 0);
+ break;
+ case 5:
+ dlsch1_harq->mimo_mode = PUSCH_PRECODING0;
+ // pmi stored from ulsch allocation routine
+ dlsch1_harq->pmi_alloc = dlsch1->pmi_alloc;
+
+ //LOG_I(PHY,"XXX using PMI %x\n",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc));
+ break;
+ case 6:
+ dlsch1_harq->mimo_mode = PUSCH_PRECODING1;
+ dlsch1_harq->pmi_alloc = dlsch1->pmi_alloc;
+ return(-1);
+ break;
+ }
+#ifdef DEBUG_HARQ
+ printf ("[DCI UE] I am calling from the UE side pmi_alloc_new = %d\n", dlsch1->pmi_alloc);
+#endif
+#ifdef DEBUG_HARQ
+ printf("[DCI UE] harq1 MIMO mode = %d\n", dlsch1_harq->mimo_mode);
+#endif
+ }
+ //printf(" UE DCI harq0 MIMO mode = %d\n", dlsch0_harq->mimo_mode);
+ if ((frame_parms->mode1_flag == 1) && (dlsch0_harq != NULL))
+ dlsch0_harq->mimo_mode = SISO;
+
+
+ if (dlsch0 != NULL) {
+ if ((ndi1!=dlsch0_harq->DCINdi) || (dlsch0_harq->first_tx==1)) {
+ dlsch0_harq->round = 0;
+ dlsch0_harq->status = ACTIVE;
+ dlsch0_harq->DCINdi = ndi1;
+
+ if ( dlsch0_harq->first_tx==1) {
+ LOG_D(PHY,"Format 2 DCI First TX0: Clearing flag\n");
+ dlsch0_harq->first_tx = 0;
+ }
+ } else if (dlsch0_harq->status == SCH_IDLE) { // we got an Ndi = 0 for a previously decoded process,
+
+ // this happens if either another harq process in the same
+ // is NAK or an ACK was not received
+
+ dlsch0->harq_ack[subframe].ack = 1;
+ dlsch0->harq_ack[subframe].harq_id = harq_pid;
+ dlsch0->harq_ack[subframe].send_harq_status = 1;
+ dlsch0->active = 0;
+ }
+ }
+
+ if ((dlsch1 != NULL) && (dlsch1->active == 1 )) {
+ if ((ndi2!=dlsch1_harq->DCINdi) || (dlsch1_harq->first_tx==1)) {
+ dlsch1_harq->round = 0;
+ dlsch1_harq->status = ACTIVE;
+ dlsch1_harq->DCINdi = ndi2;
+ if (dlsch1_harq->first_tx==1) {
+ LOG_D(PHY,"Format 2 DCI First TX1: Clearing flag\n");
+ dlsch1_harq->first_tx = 0;
+ }
+ }
+ else if ((dlsch1 != NULL) && (dlsch1_harq->status == SCH_IDLE)) { // we got an Ndi = 0 for a previously decoded process,
+ // this happens if either another harq process in the same
+ // is NAK or an ACK was not received
+
+ dlsch1->harq_ack[subframe].ack = 1;
+ dlsch1->harq_ack[subframe].harq_id = harq_pid;
+ dlsch1->harq_ack[subframe].send_harq_status = 1;
+ dlsch1->active = 0;
+ }
+ }
+
+ if (dlsch0 != NULL){
+ if (dlsch0_harq->nb_rb>1) {
+ dlsch0_harq->TBS = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1];
+ if (mcs1 <= 28)
+ dlsch0_harq->Qm = get_Qm(mcs1);
+ else if (mcs1<=31)
+ dlsch0_harq->Qm = (mcs1-28)<<1;
+ else
+ LOG_E(PHY,"invalid mcs1 %d\n",mcs1);
+ } else
+ dlsch0_harq->TBS =0;
+
+ dlsch0->rnti = rnti;
+ }
+
+ if (dlsch1 != NULL) {
+ if (dlsch1_harq->DCINdi != ndi2) {
+ dlsch1_harq->round=0;
+ dlsch1_harq->status = ACTIVE;
+ }
+
+ dlsch1_harq->DCINdi = ndi2;
+
+ if (dlsch1_harq->nb_rb>1) {
+ dlsch1_harq->TBS = TBStable[get_I_TBS(dlsch1_harq->mcs)][dlsch1_harq->nb_rb-1];
+ if (mcs2 <= 28)
+ dlsch1_harq->Qm = get_Qm(mcs2);
+ else if (mcs1<=31)
+ dlsch1_harq->Qm = (mcs2-28)<<1;
+ else
+ LOG_E(PHY,"invalid mcs2 %d\n",mcs2);
+ } else
+ dlsch1_harq->TBS = 0;
+
+ dlsch1->rnti = rnti;
+ }
+#ifdef DEBUG_HARQ
+ if (dlsch0 != NULL && dlsch1 != NULL)
+ printf("[DCI UE] dlsch0_harq status = %d, dlsch1_harq status = %d\n", dlsch0_harq->status, dlsch1_harq->status);
+ else if (dlsch0 == NULL && dlsch1 != NULL)
+ printf("[DCI UE] dlsch0_harq NULL dlsch1_harq status = %d\n", dlsch1_harq->status);
+ else if (dlsch0 != NULL && dlsch1 == NULL)
+ printf("[DCI UE] dlsch1_harq NULL dlsch0_harq status = %d\n", dlsch0_harq->status);
+#endif
+ /* // extract dci infomation
//LOG_I(PHY,"[DCI-format2] AbsSubframe %d.%d extract dci infomation \n", frame, subframe);
extract_dci2_info(frame_parms->N_RB_DL,
frame_type,
@@ -6107,20 +6738,19 @@ int generate_ue_dlsch_params_from_dci(int frame,
dci_pdu,
&dci_info_extarcted);
+
// check dci content
dlsch[0]->active = 0;
dlsch[1]->active = 0;
- if (dci_info_extarcted.tb_swap == 0) {
- dlsch0 = dlsch[0];
- dlsch1 = dlsch[1];
- } else {
- dlsch0 = dlsch[1];
- dlsch1 = dlsch[0];
- }
+ dlsch0 = dlsch[0];
+ dlsch1 = dlsch[1];
- dlsch0_harq = dlsch0->harq_processes[harq_pid];
- dlsch1_harq = dlsch1->harq_processes[harq_pid];
+ dlsch0_harq = dlsch0->harq_processes[dci_info_extarcted.harq_pid];
+ dlsch1_harq = dlsch1->harq_processes[dci_info_extarcted.harq_pid];
+ printf("before coherency dlsch[1]->pmi_alloc %d\n",dlsch[1]->pmi_alloc);
+ printf("before coherency dlsch1->pmi_alloc %d\n",dlsch1->pmi_alloc);
+ printf("before coherency dlsch1_harq->pmi_alloc %d\n",dlsch1_harq->pmi_alloc);
//LOG_I(PHY,"[DCI-format2] check dci content \n");
status = check_dci_format2_2a_coherency(format2,
@@ -6135,6 +6765,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
if(status == 0)
return(-1);
+
// dci is correct ==> update internal structure and prepare dl decoding
//LOG_I(PHY,"[DCI-format2] update internal structure and prepare dl decoding \n");
prepare_dl_decoding_format2_2A(format2,
@@ -6147,8 +6778,10 @@ int generate_ue_dlsch_params_from_dci(int frame,
dlsch0,
dlsch1);
- }
+ }*/
+
break;
+}
case format2A:
{
@@ -6372,8 +7005,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
break;
}
-
- #ifdef DEBUG_DCI
+#ifdef DEBUG_DCI
if (dlsch[0] && (dlsch[0]->rnti != 0xffff)) {
printf("dci_format:%d Abssubframe: %d.%d \n",dci_format,frame%1024,subframe);
@@ -6381,7 +7013,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
printf("PDSCH dlsch0 UE: NBRB %d\n",dlsch0_harq->nb_rb);
printf("PDSCH dlsch0 UE: rballoc %x\n",dlsch0_harq->rb_alloc_even[0]);
printf("PDSCH dlsch0 UE: harq_pid %d\n",harq_pid);
- printf("PDSCH dlsch0 UE: tpc %d\n",TPC);
+ // printf("PDSCH dlsch0 UE: tpc %d\n",TPC);
printf("PDSCH dlsch0 UE: g %d\n",dlsch[0]->g_pucch);
printf("PDSCH dlsch0 UE: round %d\n",dlsch0_harq->round);
printf("PDSCH dlsch0 UE: DCINdi %d\n",dlsch0_harq->DCINdi);
@@ -6391,7 +7023,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
printf("PDSCH dlsch0 UE: pwr_off %d\n",dlsch0_harq->dl_power_off);
}
- #endif
+#endif
#if T_TRACER
if( (dlsch[0]->rnti != si_rnti) && (dlsch[0]->rnti != ra_rnti) && (dlsch[0]->rnti != p_rnti))
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
index a842a8a9dcf88ed8dc4b130412f8188d5d5c0ca9..1487214da1b47dcc584ba02b2c61f39a160e7974 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
@@ -156,6 +156,9 @@ int rx_pdsch(PHY_VARS_UE *ue,
codeword_TB1 = dlsch[1]->harq_processes[harq_pid]->codeword;
dlsch0_harq = dlsch[codeword_TB0]->harq_processes[harq_pid];
dlsch1_harq = dlsch[codeword_TB1]->harq_processes[harq_pid];
+#ifdef DEBUG_HARQ
+ printf("[DEMOD] I am assuming both TBs are active\n");
+#endif
}
else if ((dlsch[0]->harq_processes[harq_pid]->status == ACTIVE) &&
(dlsch[1]->harq_processes[harq_pid]->status != ACTIVE) ) {
@@ -163,6 +166,9 @@ int rx_pdsch(PHY_VARS_UE *ue,
dlsch0_harq = dlsch[0]->harq_processes[harq_pid];
dlsch1_harq = NULL;
codeword_TB1 = -1;
+#ifdef DEBUG_HARQ
+ printf("[DEMOD] I am assuming only TB0 is active\n");
+#endif
}
else if ((dlsch[0]->harq_processes[harq_pid]->status != ACTIVE) &&
(dlsch[1]->harq_processes[harq_pid]->status == ACTIVE) ){
@@ -170,6 +176,9 @@ int rx_pdsch(PHY_VARS_UE *ue,
dlsch0_harq = dlsch[1]->harq_processes[harq_pid];
dlsch1_harq = NULL;
codeword_TB0 = -1;
+#ifdef DEBUG_HARQ
+ printf("[DEMOD] I am assuming only TB1 is active\n");
+#endif
}
else {
LOG_E(PHY,"[UE][FATAL] Frame %d subframe %d: no active DLSCH\n",ue->proc.proc_rxtx[0].frame_rx,subframe);
@@ -229,14 +238,16 @@ int rx_pdsch(PHY_VARS_UE *ue,
}
-
if ((dlsch0_harq->mimo_mode==LARGE_CDD) || ((dlsch0_harq->mimo_mode>=DUALSTREAM_UNIFORM_PRECODING1) && (dlsch0_harq->mimo_mode<=DUALSTREAM_PUSCH_PRECODING))) {
- DevAssert(dlsch1_harq);
+ // DevAssert(dlsch1_harq);
if (eNB_id!=eNB_id_i) {
LOG_E(PHY,"TM3/TM4 requires to set eNB_id==eNB_id_i!\n");
return(-1);
}
}
+#ifdef DEBUG_HARQ
+ printf("Demod dlsch0_harq->pmi_alloc %d\n", dlsch0_harq->pmi_alloc);
+#endif
if (frame_parms->nb_antenna_ports_eNB>1 && beamforming_mode==0) {
#ifdef DEBUG_DLSCH_MOD
diff --git a/openair1/PHY/LTE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_TRANSPORT/initial_sync.c
index c29562b6cdbc3e40cce3d0d8f54515f12368dd88..8f7e8b396094aec98d0919c2a770fa57aa9fefdd 100644
--- a/openair1/PHY/LTE_TRANSPORT/initial_sync.c
+++ b/openair1/PHY/LTE_TRANSPORT/initial_sync.c
@@ -43,13 +43,13 @@ extern openair0_config_t openair0_cfg[];
//#define DEBUG_INITIAL_SYNCH
-int pbch_detection(PHY_VARS_UE *ue, runmode_t mode)
+int pbch_detection(PHY_VARS_UE *ue, runmode_t mode)
{
uint8_t l,pbch_decoded,frame_mod4,pbch_tx_ant,dummy;
LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
char phich_resource[6];
-
+
#ifdef DEBUG_INITIAL_SYNCH
LOG_I(PHY,"[UE%d] Initial sync: starting PBCH detection (rx_offset %d)\n",ue->Mod_id,
ue->rx_offset);
@@ -63,7 +63,7 @@ int pbch_detection(PHY_VARS_UE *ue, runmode_t mode)
ue->rx_offset,
0,
1);
- }
+ }
for (l=0; l<frame_parms->symbols_per_tti/2; l++) {
slot_fep(ue,
@@ -72,7 +72,7 @@ int pbch_detection(PHY_VARS_UE *ue, runmode_t mode)
ue->rx_offset,
0,
1);
- }
+ }
slot_fep(ue,
0,
2,
@@ -83,9 +83,11 @@ int pbch_detection(PHY_VARS_UE *ue, runmode_t mode)
lte_ue_measurements(ue,
ue->rx_offset,
0,
- 0,0);
-
-
+ 0,
+ 0,
+ 0);
+
+
if (ue->frame_parms.frame_type == TDD) {
ue_rrc_measurements(ue,
2,
@@ -511,8 +513,8 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
ue->measurements.n0_power_tot_dBm,
10*log10(ue->measurements.rsrp[0])-ue->rx_total_gain_dB,
(10*log10(ue->measurements.rsrq[0])));
-
-
+
+
LOG_I(PHY,"[UE %d] Frame %d MIB Information => %s, %s, NidCell %d, N_RB_DL %d, PHICH DURATION %d, PHICH RESOURCE %s, TX_ANT %d\n",
ue->Mod_id,
ue->proc.proc_rxtx[0].frame_rx,
@@ -560,7 +562,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++)
rx_power += signal_energy(&ue->common_vars.rxdata[aarx][sync_pos2],
frame_parms->ofdm_symbol_size+frame_parms->nb_prefix_samples);
-
+
/*
// do a measurement on the full frame
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++)
@@ -569,7 +571,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
*/
// we might add a low-pass filter here later
- ue->measurements.rx_power_avg[0] = rx_power/frame_parms->nb_antennas_rx;
+ ue->measurements.rx_power_avg[0] = rx_power/frame_parms->nb_antennas_rx;
ue->measurements.rx_power_avg_dB[0] = dB_fixed(ue->measurements.rx_power_avg[0]);
@@ -578,7 +580,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
#endif
#ifndef OAI_USRP
-#ifndef OAI_BLADERF
+#ifndef OAI_BLADERF
#ifndef OAI_LMSSDR
phy_adjust_gain(ue,ue->measurements.rx_power_avg_dB[0],0);
#endif
@@ -589,7 +591,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
else {
#ifndef OAI_USRP
-#ifndef OAI_BLADERF
+#ifndef OAI_BLADERF
#ifndef OAI_LMSSDR
phy_adjust_gain(ue,dB_fixed(ue->measurements.rssi),0);
#endif
diff --git a/openair1/PHY/TOOLS/lte_phy_scope_tm4.c b/openair1/PHY/TOOLS/lte_phy_scope_tm4.c
index 6807f1f6f48a6de4ee057c9c2341b80084526448..fd17e1618adf1c790a7282106efa0745da9fa5c5 100755
--- a/openair1/PHY/TOOLS/lte_phy_scope_tm4.c
+++ b/openair1/PHY/TOOLS/lte_phy_scope_tm4.c
@@ -797,4 +797,10 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
for (arx=0;arx<nb_antennas_rx;arx++) {
free(chest_t_abs[arx]);
}
+ for (int i = 0; i<8; ++i)
+ for (int j = 0; j < 7*2*frame_parms->N_RB_DL*12+4; ++j )
+ phy_vars_ue->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp1[0][0][i][j]=0;
+
+ for (int m=0; m<coded_bits_per_codeword0; ++m)
+ phy_vars_ue->pdsch_vars[subframe&0x1][eNB_id]->llr[1][m]=0;
}
diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c
index 386dd8b52c0355949378905d9273c813c8a7bffd..3f552861a54110ad8e4b26e3bef32fa61eb3ab1f 100644
--- a/openair1/SCHED/phy_procedures_lte_ue.c
+++ b/openair1/SCHED/phy_procedures_lte_ue.c
@@ -97,8 +97,8 @@ void dump_dlsch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subf
ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->Nl,
ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
proc->frame_rx,
- subframe,
- ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id]);
+ subframe,
+ ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id]);
write_output("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,2,1);
write_output("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars[subframe&0x1][0]->rxdataF_ext[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,1,1);
@@ -128,12 +128,12 @@ void dump_dlsch_SI(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t s
1,
ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
proc->frame_rx,
- subframe,
- 0);
+ subframe,
+ 0);
LOG_D(PHY,"[UE %d] Dumping dlsch_SI : ofdm_symbol_size %d, nsymb %d, nb_rb %d, mcs %d, nb_rb %d, num_pdcch_symbols %d,G %d\n",
ue->Mod_id,
- ue->frame_parms.ofdm_symbol_size,
- nsymb,
+ ue->frame_parms.ofdm_symbol_size,
+ nsymb,
ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb,
ue->dlsch_SI[eNB_id]->harq_processes[0]->mcs,
ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb,
@@ -233,8 +233,8 @@ void dump_dlsch_ra(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t s
1,
ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
proc->frame_rx,
- subframe,
- 0);
+ subframe,
+ 0);
LOG_D(PHY,"[UE %d] Dumping dlsch_ra : nb_rb %d, mcs %d, nb_rb %d, num_pdcch_symbols %d,G %d\n",
ue->Mod_id,
ue->dlsch_ra[eNB_id]->harq_processes[0]->nb_rb,
@@ -700,19 +700,19 @@ void get_cqipmiri_params(PHY_VARS_UE *ue,uint8_t eNB_id)
cqirep->N_OFFSET_CQI = cqi_PMI_ConfigIndex-157;
}
else if (cqi_PMI_ConfigIndex > 317) {
-
+
if (cqi_PMI_ConfigIndex <= 349) { // 32 ms CQI_PMI period
- cqirep->Npd = 32;
+ cqirep->Npd = 32;
cqirep->N_OFFSET_CQI = cqi_PMI_ConfigIndex-318;
}
else if (cqi_PMI_ConfigIndex <= 413) { // 64 ms CQI_PMI period
- cqirep->Npd = 64;
- cqirep->N_OFFSET_CQI = cqi_PMI_ConfigIndex-350;
+ cqirep->Npd = 64;
+ cqirep->N_OFFSET_CQI = cqi_PMI_ConfigIndex-350;
}
else if (cqi_PMI_ConfigIndex <= 541) { // 128 ms CQI_PMI period
- cqirep->Npd = 128;
- cqirep->N_OFFSET_CQI = cqi_PMI_ConfigIndex-414;
- }
+ cqirep->Npd = 128;
+ cqirep->N_OFFSET_CQI = cqi_PMI_ConfigIndex-414;
+ }
}
}
else { // TDD
@@ -797,7 +797,7 @@ PUCCH_FMT_t get_pucch_format(lte_frame_type_t frame_type,
return pucch_format1a;
}
uint16_t get_n1_pucch(PHY_VARS_UE *ue,
- UE_rxtx_proc_t *proc,
+ UE_rxtx_proc_t *proc,
harq_status_t *harq_ack,
uint8_t eNB_id,
uint8_t *b,
@@ -1055,7 +1055,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
start_meas(&ue->ofdm_mod_stats);
nsymb = (frame_parms->Ncp == 0) ? 14 : 12;
-
+
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)//this is the EXPRESS MIMO case
ulsch_start = (ue->rx_offset+subframe_tx*frame_parms->samples_per_tti-
ue->hw_timing_advance-
@@ -1082,14 +1082,14 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
if (overflow > 0)
- {
- memset(&ue->common_vars.txdata[aa][ulsch_start],0,4*(frame_parms->samples_per_tti-overflow));
- memset(&ue->common_vars.txdata[aa][0],0,4*overflow);
- }
- else
- {
- memset(&ue->common_vars.txdata[aa][ulsch_start],0,4*frame_parms->samples_per_tti);
- }
+ {
+ memset(&ue->common_vars.txdata[aa][ulsch_start],0,4*(frame_parms->samples_per_tti-overflow));
+ memset(&ue->common_vars.txdata[aa][0],0,4*overflow);
+ }
+ else
+ {
+ memset(&ue->common_vars.txdata[aa][ulsch_start],0,4*frame_parms->samples_per_tti);
+ }
}
/*#else
overflow = ulsch_start - 9*frame_parms->samples_per_tti;
@@ -1111,37 +1111,37 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
if ((frame_tx%100) == 0)
LOG_D(PHY,"[UE %d] Frame %d, subframe %d: ulsch_start = %d (rxoff %d, HW TA %d, timing advance %d, TA_offset %d\n",
- ue->Mod_id,frame_tx,subframe_tx,
- ulsch_start,
- ue->rx_offset,
- ue->hw_timing_advance,
- ue->timing_advance,
- ue->N_TA_offset);
-
-
+ ue->Mod_id,frame_tx,subframe_tx,
+ ulsch_start,
+ ue->rx_offset,
+ ue->hw_timing_advance,
+ ue->timing_advance,
+ ue->N_TA_offset);
+
+
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(&ue->common_vars.txdataF[aa][subframe_tx*nsymb*frame_parms->ofdm_symbol_size],
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
- dummy_tx_buffer,
+ dummy_tx_buffer,
#else
- &ue->common_vars.txdata[aa][ulsch_start],
+ &ue->common_vars.txdata[aa][ulsch_start],
#endif
- frame_parms->ofdm_symbol_size,
- nsymb,
- frame_parms->nb_prefix_samples,
- CYCLIC_PREFIX);
+ frame_parms->ofdm_symbol_size,
+ nsymb,
+ frame_parms->nb_prefix_samples,
+ CYCLIC_PREFIX);
else
normal_prefix_mod(&ue->common_vars.txdataF[aa][subframe_tx*nsymb*frame_parms->ofdm_symbol_size],
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
- dummy_tx_buffer,
+ dummy_tx_buffer,
#else
- &ue->common_vars.txdata[aa][ulsch_start],
+ &ue->common_vars.txdata[aa][ulsch_start],
#endif
- nsymb,
- &ue->frame_parms);
-
-
+ nsymb,
+ &ue->frame_parms);
+
+
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
apply_7_5_kHz(ue,dummy_tx_buffer,0);
apply_7_5_kHz(ue,dummy_tx_buffer,1);
@@ -1149,17 +1149,17 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
apply_7_5_kHz(ue,&ue->common_vars.txdata[aa][ulsch_start],0);
apply_7_5_kHz(ue,&ue->common_vars.txdata[aa][ulsch_start],1);
#endif
-
-
+
+
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
overflow = ulsch_start - 9*frame_parms->samples_per_tti;
-
-
+
+
for (k=ulsch_start,l=0; k<cmin(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME,ulsch_start+frame_parms->samples_per_tti); k++,l++) {
((short*)ue->common_vars.txdata[aa])[2*k] = ((short*)dummy_tx_buffer)[2*l]<<4;
((short*)ue->common_vars.txdata[aa])[2*k+1] = ((short*)dummy_tx_buffer)[2*l+1]<<4;
}
-
+
for (k=0; k<overflow; k++,l++) {
((short*)ue->common_vars.txdata[aa])[2*k] = ((short*)dummy_tx_buffer)[2*l]<<4;
((short*)ue->common_vars.txdata[aa])[2*k+1] = ((short*)dummy_tx_buffer)[2*l+1]<<4;
@@ -1168,11 +1168,11 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
// handle switch before 1st TX subframe, guarantee that the slot prior to transmission is switch on
for (k=ulsch_start - (frame_parms->samples_per_tti>>1) ; k<ulsch_start ; k++) {
if (k<0)
- ue->common_vars.txdata[aa][k+frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
+ ue->common_vars.txdata[aa][k+frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
else if (k>(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME))
- ue->common_vars.txdata[aa][k-frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
+ ue->common_vars.txdata[aa][k-frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
else
- ue->common_vars.txdata[aa][k] &= 0xFFFEFFFE;
+ ue->common_vars.txdata[aa][k] &= 0xFFFEFFFE;
}
#endif
#endif
@@ -1185,9 +1185,9 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
write_output("txBuff.m","txSignal",&ue->common_vars.txdata[aa][ulsch_start],frame_parms->samples_per_tti,1,1);
}
*/
-
+
} //nb_antennas_tx
-
+
stop_meas(&ue->ofdm_mod_stats);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_COMMON,VCD_FUNCTION_OUT);
@@ -1216,17 +1216,17 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
if ((mode != rx_calib_ue) && (mode != rx_calib_ue_med) && (mode != rx_calib_ue_byp) && (mode != no_L2_connect) ) {
LOG_D(PHY,"Getting PRACH resources\n");
ue->prach_resources[eNB_id] = mac_xface->ue_get_rach(ue->Mod_id,
- ue->CC_id,
- frame_tx,
- eNB_id,
- subframe_tx);
+ ue->CC_id,
+ frame_tx,
+ eNB_id,
+ subframe_tx);
LOG_D(PHY,"Got prach_resources for eNB %d address %p, RRCCommon %p\n",eNB_id,ue->prach_resources[eNB_id],UE_mac_inst[ue->Mod_id].radioResourceConfigCommon);
LOG_D(PHY,"Prach resources %p\n",ue->prach_resources[eNB_id]);
}
}
-
+
if (ue->prach_resources[eNB_id]!=NULL) {
-
+
ue->generate_prach=1;
ue->prach_cnt=0;
#ifdef SMBV
@@ -1235,65 +1235,65 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
#ifdef OAI_EMU
ue->prach_PreambleIndex=ue->prach_resources[eNB_id]->ra_PreambleIndex;
#endif
-
+
if (abstraction_flag == 0) {
LOG_I(PHY,"mode %d\n",mode);
-
+
if ((ue->mac_enabled==1) && (mode != calib_prach_tx)) {
- ue->tx_power_dBm[subframe_tx] = ue->prach_resources[eNB_id]->ra_PREAMBLE_RECEIVED_TARGET_POWER+get_PL(ue->Mod_id,ue->CC_id,eNB_id);
+ ue->tx_power_dBm[subframe_tx] = ue->prach_resources[eNB_id]->ra_PREAMBLE_RECEIVED_TARGET_POWER+get_PL(ue->Mod_id,ue->CC_id,eNB_id);
}
else {
- ue->tx_power_dBm[subframe_tx] = ue->tx_power_max_dBm;
- ue->prach_resources[eNB_id]->ra_PreambleIndex = 19;
+ ue->tx_power_dBm[subframe_tx] = ue->tx_power_max_dBm;
+ ue->prach_resources[eNB_id]->ra_PreambleIndex = 19;
}
-
+
LOG_I(PHY,"[UE %d][RAPROC] Frame %d, Subframe %d : Generating PRACH, preamble %d,PL %d, P0_PRACH %d, TARGET_RECEIVED_POWER %d dBm, PRACH TDD Resource index %d, RA-RNTI %d\n",
- ue->Mod_id,
- frame_tx,
- subframe_tx,
- ue->prach_resources[eNB_id]->ra_PreambleIndex,
- get_PL(ue->Mod_id,ue->CC_id,eNB_id),
- ue->tx_power_dBm[subframe_tx],
- ue->prach_resources[eNB_id]->ra_PREAMBLE_RECEIVED_TARGET_POWER,
- ue->prach_resources[eNB_id]->ra_TDD_map_index,
- ue->prach_resources[eNB_id]->ra_RNTI);
+ ue->Mod_id,
+ frame_tx,
+ subframe_tx,
+ ue->prach_resources[eNB_id]->ra_PreambleIndex,
+ get_PL(ue->Mod_id,ue->CC_id,eNB_id),
+ ue->tx_power_dBm[subframe_tx],
+ ue->prach_resources[eNB_id]->ra_PREAMBLE_RECEIVED_TARGET_POWER,
+ ue->prach_resources[eNB_id]->ra_TDD_map_index,
+ ue->prach_resources[eNB_id]->ra_RNTI);
ue->tx_total_RE[subframe_tx] = 96;
-
+
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
ue->prach_vars[eNB_id]->amp = get_tx_amp(ue->tx_power_dBm[subframe_tx],
- ue->tx_power_max_dBm,
- ue->frame_parms.N_RB_UL,
- 6);
+ ue->tx_power_max_dBm,
+ ue->frame_parms.N_RB_UL,
+ 6);
#else
ue->prach_vars[eNB_id]->amp = AMP;
#endif
if ((mode == calib_prach_tx) && (((proc->frame_tx&0xfffe)%100)==0))
- LOG_D(PHY,"[UE %d][RAPROC] Frame %d, Subframe %d : PRACH TX power %d dBm, amp %d\n",
- ue->Mod_id,
- proc->frame_rx,
- proc->subframe_tx,
- ue->tx_power_dBm[subframe_tx],
- ue->prach_vars[eNB_id]->amp);
-
-
+ LOG_D(PHY,"[UE %d][RAPROC] Frame %d, Subframe %d : PRACH TX power %d dBm, amp %d\n",
+ ue->Mod_id,
+ proc->frame_rx,
+ proc->subframe_tx,
+ ue->tx_power_dBm[subframe_tx],
+ ue->prach_vars[eNB_id]->amp);
+
+
// start_meas(&ue->tx_prach);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GENERATE_PRACH, VCD_FUNCTION_IN);
prach_power = generate_prach(ue,eNB_id,subframe_tx,frame_tx);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GENERATE_PRACH, VCD_FUNCTION_OUT);
// stop_meas(&ue->tx_prach);
LOG_D(PHY,"[UE %d][RAPROC] PRACH PL %d dB, power %d dBm, digital power %d dB (amp %d)\n",
- ue->Mod_id,
- get_PL(ue->Mod_id,ue->CC_id,eNB_id),
- ue->tx_power_dBm[subframe_tx],
- dB_fixed(prach_power),
- ue->prach_vars[eNB_id]->amp);
+ ue->Mod_id,
+ get_PL(ue->Mod_id,ue->CC_id,eNB_id),
+ ue->tx_power_dBm[subframe_tx],
+ dB_fixed(prach_power),
+ ue->prach_vars[eNB_id]->amp);
} else {
UE_transport_info[ue->Mod_id][ue->CC_id].cntl.prach_flag=1;
UE_transport_info[ue->Mod_id][ue->CC_id].cntl.prach_id=ue->prach_resources[eNB_id]->ra_PreambleIndex;
}
-
+
if (ue->mac_enabled==1){
mac_xface->Msg1_transmitted(ue->Mod_id,
ue->CC_id,
@@ -1302,23 +1302,23 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
}
LOG_D(PHY,"[UE %d][RAPROC] Frame %d, subframe %d: Generating PRACH (eNB %d) preamble index %d for UL, TX power %d dBm (PL %d dB), l3msg \n",
- ue->Mod_id,frame_tx,subframe_tx,eNB_id,
- ue->prach_resources[eNB_id]->ra_PreambleIndex,
- ue->prach_resources[eNB_id]->ra_PREAMBLE_RECEIVED_TARGET_POWER+get_PL(ue->Mod_id,ue->CC_id,eNB_id),
- get_PL(ue->Mod_id,ue->CC_id,eNB_id));
-
- }
-
+ ue->Mod_id,frame_tx,subframe_tx,eNB_id,
+ ue->prach_resources[eNB_id]->ra_PreambleIndex,
+ ue->prach_resources[eNB_id]->ra_PREAMBLE_RECEIVED_TARGET_POWER+get_PL(ue->Mod_id,ue->CC_id,eNB_id),
+ get_PL(ue->Mod_id,ue->CC_id,eNB_id));
+
+ }
+
// if we're calibrating the PRACH kill the pointer to its resources so that the RA protocol doesn't continue
if (mode == calib_prach_tx)
ue->prach_resources[eNB_id]=NULL;
-
+
LOG_D(PHY,"[UE %d] frame %d subframe %d : generate_prach %d, prach_cnt %d\n",
- ue->Mod_id,frame_tx,subframe_tx,ue->generate_prach,ue->prach_cnt);
-
+ ue->Mod_id,frame_tx,subframe_tx,ue->generate_prach,ue->prach_cnt);
+
ue->prach_cnt++;
-
+
if (ue->prach_cnt==3)
ue->generate_prach=0;
@@ -1348,44 +1348,44 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
// get harq_pid from subframe relationship
harq_pid = subframe2harq_pid(&ue->frame_parms,
- frame_tx,
- subframe_tx);
-
-
+ frame_tx,
+ subframe_tx);
+
+
if (ue->mac_enabled == 1) {
if ((ue->ulsch_Msg3_active[eNB_id] == 1) &&
- (ue->ulsch_Msg3_frame[eNB_id] == frame_tx) &&
- (ue->ulsch_Msg3_subframe[eNB_id] == subframe_tx)) { // Initial Transmission of Msg3
-
+ (ue->ulsch_Msg3_frame[eNB_id] == frame_tx) &&
+ (ue->ulsch_Msg3_subframe[eNB_id] == subframe_tx)) { // Initial Transmission of Msg3
+
ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 1;
-
+
if (ue->ulsch[eNB_id]->harq_processes[harq_pid]->round==0)
- generate_ue_ulsch_params_from_rar(ue,
- proc,
- eNB_id);
-
+ generate_ue_ulsch_params_from_rar(ue,
+ proc,
+ eNB_id);
+
ue->ulsch[eNB_id]->power_offset = 14;
LOG_D(PHY,"[UE %d][RAPROC] Frame %d: Setting Msg3_flag in subframe %d, for harq_pid %d\n",
- Mod_id,
- frame_tx,
- subframe_tx,
- harq_pid);
+ Mod_id,
+ frame_tx,
+ subframe_tx,
+ harq_pid);
Msg3_flag = 1;
} else {
-
+
if (harq_pid==255) {
- LOG_E(PHY,"[UE%d] Frame %d subframe %d ulsch_decoding.c: FATAL ERROR: illegal harq_pid, returning\n",
- Mod_id,frame_tx, subframe_tx);
- mac_xface->macphy_exit("Error in ulsch_decoding");
- VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
- stop_meas(&ue->phy_proc_tx);
- return;
+ LOG_E(PHY,"[UE%d] Frame %d subframe %d ulsch_decoding.c: FATAL ERROR: illegal harq_pid, returning\n",
+ Mod_id,frame_tx, subframe_tx);
+ mac_xface->macphy_exit("Error in ulsch_decoding");
+ VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
+ stop_meas(&ue->phy_proc_tx);
+ return;
}
-
+
Msg3_flag=0;
}
}
-
+
if (ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag == 1) {
uint8_t isBad = 0;
@@ -1430,9 +1430,9 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
}
}
if (ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag == 1) {
-
+
ue->generate_ul_signal[eNB_id] = 1;
-
+
// deactivate service request
// ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 0;
LOG_D(PHY,"Generating PUSCH (Abssubframe: %d.%d): harq-Id: %d, round: %d, MaxReTrans: %d \n",frame_tx,subframe_tx,harq_pid,ue->ulsch[eNB_id]->harq_processes[harq_pid]->round,ue->ulsch[eNB_id]->Mlimit);
@@ -1442,7 +1442,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 0;
ue->ulsch[eNB_id]->harq_processes[harq_pid]->round = 0;
}
-
+
ack_status_cw0 = reset_ack(&ue->frame_parms,
ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack,
subframe_tx,
@@ -1453,12 +1453,9 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
ue->ulsch[eNB_id]->o_ACK,1);
Nbundled = ack_status_cw0;
+
first_rb = ue->ulsch[eNB_id]->harq_processes[harq_pid]->first_rb;
nb_rb = ue->ulsch[eNB_id]->harq_processes[harq_pid]->nb_rb;
-
-
-
-
if (ack_status_cw0 > 0) {
@@ -1469,13 +1466,13 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
#if T_TRACER
if(ue->ulsch[eNB_id]->o_ACK[0])
{
- LOG_I(PHY,"PUSCH ACK\n");
+ LOG_I(PHY,"PUSCH ACK\n");
T(T_UE_PHY_DLSCH_UE_ACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(Mod_id), T_INT(ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti),
T_INT(ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->current_harq_pid));
}
else
{
- LOG_I(PHY,"PUSCH NACK\n");
+ LOG_I(PHY,"PUSCH NACK\n");
T(T_UE_PHY_DLSCH_UE_NACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(Mod_id), T_INT(ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti),
T_INT(ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->current_harq_pid));
}
@@ -1492,155 +1489,155 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
#ifdef DEBUG_PHY_PROC
LOG_D(PHY,
"[UE %d][PUSCH %d] AbsSubframe %d.%d Generating PUSCH : first_rb %d, nb_rb %d, round %d, mcs %d, rv %d, cyclic_shift %d (cyclic_shift_common %d,n_DMRS2 %d,n_PRS %d), ACK (%d,%d), O_ACK %d, bundling %d\n",
- Mod_id,harq_pid,frame_tx,subframe_tx,
- first_rb,nb_rb,
- ue->ulsch[eNB_id]->harq_processes[harq_pid]->round,
- ue->ulsch[eNB_id]->harq_processes[harq_pid]->mcs,
- ue->ulsch[eNB_id]->harq_processes[harq_pid]->rvidx,
- (ue->frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift+
- ue->ulsch[eNB_id]->harq_processes[harq_pid]->n_DMRS2+
- ue->frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[subframe_tx<<1])%12,
- ue->frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift,
- ue->ulsch[eNB_id]->harq_processes[harq_pid]->n_DMRS2,
- ue->frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[subframe_tx<<1],
- ue->ulsch[eNB_id]->o_ACK[0],ue->ulsch[eNB_id]->o_ACK[1],
- ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK,
- ue->ulsch[eNB_id]->bundling);
+ Mod_id,harq_pid,frame_tx,subframe_tx,
+ first_rb,nb_rb,
+ ue->ulsch[eNB_id]->harq_processes[harq_pid]->round,
+ ue->ulsch[eNB_id]->harq_processes[harq_pid]->mcs,
+ ue->ulsch[eNB_id]->harq_processes[harq_pid]->rvidx,
+ (ue->frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift+
+ ue->ulsch[eNB_id]->harq_processes[harq_pid]->n_DMRS2+
+ ue->frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[subframe_tx<<1])%12,
+ ue->frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift,
+ ue->ulsch[eNB_id]->harq_processes[harq_pid]->n_DMRS2,
+ ue->frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[subframe_tx<<1],
+ ue->ulsch[eNB_id]->o_ACK[0],ue->ulsch[eNB_id]->o_ACK[1],
+ ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK,
+ ue->ulsch[eNB_id]->bundling);
#endif
-
-
-
-
-
+
+
+
+
+
if (Msg3_flag == 1) {
LOG_I(PHY,"[UE %d][RAPROC] Frame %d, Subframe %d Generating (RRCConnectionRequest) Msg3 (nb_rb %d, first_rb %d, round %d, rvidx %d) Msg3: %x.%x.%x|%x.%x.%x.%x.%x.%x\n",Mod_id,frame_tx,
- subframe_tx,
- ue->ulsch[eNB_id]->harq_processes[harq_pid]->nb_rb,
- ue->ulsch[eNB_id]->harq_processes[harq_pid]->first_rb,
- ue->ulsch[eNB_id]->harq_processes[harq_pid]->round,
- ue->ulsch[eNB_id]->harq_processes[harq_pid]->rvidx,
- ue->prach_resources[eNB_id]->Msg3[0],
- ue->prach_resources[eNB_id]->Msg3[1],
- ue->prach_resources[eNB_id]->Msg3[2],
- ue->prach_resources[eNB_id]->Msg3[3],
- ue->prach_resources[eNB_id]->Msg3[4],
- ue->prach_resources[eNB_id]->Msg3[5],
- ue->prach_resources[eNB_id]->Msg3[6],
- ue->prach_resources[eNB_id]->Msg3[7],
- ue->prach_resources[eNB_id]->Msg3[8]);
-
+ subframe_tx,
+ ue->ulsch[eNB_id]->harq_processes[harq_pid]->nb_rb,
+ ue->ulsch[eNB_id]->harq_processes[harq_pid]->first_rb,
+ ue->ulsch[eNB_id]->harq_processes[harq_pid]->round,
+ ue->ulsch[eNB_id]->harq_processes[harq_pid]->rvidx,
+ ue->prach_resources[eNB_id]->Msg3[0],
+ ue->prach_resources[eNB_id]->Msg3[1],
+ ue->prach_resources[eNB_id]->Msg3[2],
+ ue->prach_resources[eNB_id]->Msg3[3],
+ ue->prach_resources[eNB_id]->Msg3[4],
+ ue->prach_resources[eNB_id]->Msg3[5],
+ ue->prach_resources[eNB_id]->Msg3[6],
+ ue->prach_resources[eNB_id]->Msg3[7],
+ ue->prach_resources[eNB_id]->Msg3[8]);
+
start_meas(&ue->ulsch_encoding_stats);
-
+
if (abstraction_flag==0) {
- if (ulsch_encoding(ue->prach_resources[eNB_id]->Msg3,
- ue,
- harq_pid,
- eNB_id,
- ue->transmission_mode[eNB_id],0,0)!=0) {
- LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n");
- mac_xface->macphy_exit("Error in ulsch_coding");
- VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
- stop_meas(&ue->phy_proc_tx);
- //printf("------FULL TX PROC : %5.2f ------\n",ue->phy_proc_tx.p_time/(cpuf*1000.0));
- return;
- }
+ if (ulsch_encoding(ue->prach_resources[eNB_id]->Msg3,
+ ue,
+ harq_pid,
+ eNB_id,
+ ue->transmission_mode[eNB_id],0,0)!=0) {
+ LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n");
+ mac_xface->macphy_exit("Error in ulsch_coding");
+ VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
+ stop_meas(&ue->phy_proc_tx);
+ //printf("------FULL TX PROC : %5.2f ------\n",ue->phy_proc_tx.p_time/(cpuf*1000.0));
+ return;
+ }
}
-
+
#ifdef PHY_ABSTRACTION
else {
- ulsch_encoding_emul(ue->prach_resources[eNB_id]->Msg3,ue,eNB_id,harq_pid,0);
+ ulsch_encoding_emul(ue->prach_resources[eNB_id]->Msg3,ue,eNB_id,harq_pid,0);
}
-
+
#endif
-
+
stop_meas(&ue->ulsch_encoding_stats);
-
+
if (ue->mac_enabled == 1) {
- // signal MAC that Msg3 was sent
- mac_xface->Msg3_transmitted(Mod_id,
- CC_id,
- frame_tx,
- eNB_id);
+ // signal MAC that Msg3 was sent
+ mac_xface->Msg3_transmitted(Mod_id,
+ CC_id,
+ frame_tx,
+ eNB_id);
}
} // Msg3_flag==1
else {
input_buffer_length = ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS/8;
-
+
if (ue->mac_enabled==1) {
- // LOG_D(PHY,"[UE %d] ULSCH : Searching for MAC SDUs\n",Mod_id);
- if (ue->ulsch[eNB_id]->harq_processes[harq_pid]->round==0) {
- //if (ue->ulsch[eNB_id]->harq_processes[harq_pid]->calibration_flag == 0) {
- access_mode=SCHEDULED_ACCESS;
- mac_xface->ue_get_sdu(Mod_id,
- CC_id,
- frame_tx,
- subframe_tx,
- eNB_id,
- ulsch_input_buffer,
- input_buffer_length,
- &access_mode);
- }
-
+ // LOG_D(PHY,"[UE %d] ULSCH : Searching for MAC SDUs\n",Mod_id);
+ if (ue->ulsch[eNB_id]->harq_processes[harq_pid]->round==0) {
+ //if (ue->ulsch[eNB_id]->harq_processes[harq_pid]->calibration_flag == 0) {
+ access_mode=SCHEDULED_ACCESS;
+ mac_xface->ue_get_sdu(Mod_id,
+ CC_id,
+ frame_tx,
+ subframe_tx,
+ eNB_id,
+ ulsch_input_buffer,
+ input_buffer_length,
+ &access_mode);
+ }
+
#ifdef DEBUG_PHY_PROC
#ifdef DEBUG_ULSCH
- LOG_D(PHY,"[UE] Frame %d, subframe %d : ULSCH SDU (TX harq_pid %d) (%d bytes) : \n",frame_tx,subframe_tx,harq_pid, ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS>>3);
-
- for (i=0; i<ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS>>3; i++)
- LOG_T(PHY,"%x.",ulsch_input_buffer[i]);
-
- LOG_T(PHY,"\n");
+ LOG_D(PHY,"[UE] Frame %d, subframe %d : ULSCH SDU (TX harq_pid %d) (%d bytes) : \n",frame_tx,subframe_tx,harq_pid, ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS>>3);
+
+ for (i=0; i<ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS>>3; i++)
+ LOG_T(PHY,"%x.",ulsch_input_buffer[i]);
+
+ LOG_T(PHY,"\n");
#endif
#endif
}
else {
- unsigned int taus(void);
-
- for (i=0; i<input_buffer_length; i++)
- ulsch_input_buffer[i]= (uint8_t)(taus()&0xff);
-
+ unsigned int taus(void);
+
+ for (i=0; i<input_buffer_length; i++)
+ ulsch_input_buffer[i]= (uint8_t)(taus()&0xff);
+
}
-
+
start_meas(&ue->ulsch_encoding_stats);
-
+
if (abstraction_flag==0) {
-
- if (ulsch_encoding(ulsch_input_buffer,
- ue,
- harq_pid,
- eNB_id,
+
+ if (ulsch_encoding(ulsch_input_buffer,
+ ue,
+ harq_pid,
+ eNB_id,
ue->transmission_mode[eNB_id],0,
Nbundled)!=0) {
- LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n");
- VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
- stop_meas(&ue->phy_proc_tx);
- return;
- }
+ LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n");
+ VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
+ stop_meas(&ue->phy_proc_tx);
+ return;
+ }
}
-
+
#ifdef PHY_ABSTRACTION
else {
- ulsch_encoding_emul(ulsch_input_buffer,ue,eNB_id,harq_pid,0);
+ ulsch_encoding_emul(ulsch_input_buffer,ue,eNB_id,harq_pid,0);
}
-
+
#endif
stop_meas(&ue->ulsch_encoding_stats);
}
-
+
if (abstraction_flag == 0) {
if (ue->mac_enabled==1) {
- pusch_power_cntl(ue,proc,eNB_id,1, abstraction_flag);
- ue->tx_power_dBm[subframe_tx] = ue->ulsch[eNB_id]->Po_PUSCH;
+ pusch_power_cntl(ue,proc,eNB_id,1, abstraction_flag);
+ ue->tx_power_dBm[subframe_tx] = ue->ulsch[eNB_id]->Po_PUSCH;
}
else {
- ue->tx_power_dBm[subframe_tx] = ue->tx_power_max_dBm;
+ ue->tx_power_dBm[subframe_tx] = ue->tx_power_max_dBm;
}
ue->tx_total_RE[subframe_tx] = nb_rb*12;
-
+
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
tx_amp = get_tx_amp(ue->tx_power_dBm[subframe_tx],
- ue->tx_power_max_dBm,
- ue->frame_parms.N_RB_UL,
- nb_rb);
+ ue->tx_power_max_dBm,
+ ue->frame_parms.N_RB_UL,
+ nb_rb);
#else
tx_amp = AMP;
#endif
@@ -1649,27 +1646,27 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
T_INT(tx_amp),T_INT(ue->ulsch[eNB_id]->f_pusch),T_INT(get_PL(Mod_id,0,eNB_id)),T_INT(nb_rb));
#endif
LOG_D(PHY,"[UE %d][PUSCH %d] AbsSubFrame %d.%d, generating PUSCH, Po_PUSCH: %d dBm (max %d dBm), amp %d\n",
- Mod_id,harq_pid,frame_tx%1024,subframe_tx,ue->tx_power_dBm[subframe_tx],ue->tx_power_max_dBm, tx_amp);
+ Mod_id,harq_pid,frame_tx%1024,subframe_tx,ue->tx_power_dBm[subframe_tx],ue->tx_power_max_dBm, tx_amp);
start_meas(&ue->ulsch_modulation_stats);
ulsch_modulation(ue->common_vars.txdataF,
- tx_amp,
- frame_tx,
- subframe_tx,
- &ue->frame_parms,
- ue->ulsch[eNB_id]);
+ tx_amp,
+ frame_tx,
+ subframe_tx,
+ &ue->frame_parms,
+ ue->ulsch[eNB_id]);
for (aa=0; aa<1/*frame_parms->nb_antennas_tx*/; aa++)
- generate_drs_pusch(ue,
- proc,
- eNB_id,
- tx_amp,
- subframe_tx,
- first_rb,
- nb_rb,
- aa);
-
+ generate_drs_pusch(ue,
+ proc,
+ eNB_id,
+ tx_amp,
+ subframe_tx,
+ first_rb,
+ nb_rb,
+ aa);
+
stop_meas(&ue->ulsch_modulation_stats);
}
-
+
if (abstraction_flag==1) {
// clear SR
ue->sr[subframe_tx]=0;
@@ -1738,7 +1735,7 @@ int16_t get_pucch2_cqi(PHY_VARS_UE *ue,int eNB_id,int *len) {
// 4-bit CQI message
*len=4;
return(sinr2cqi((double)ue->measurements.wideband_cqi_avg[eNB_id],
- ue->transmission_mode[eNB_id]));
+ ue->transmission_mode[eNB_id]));
}
else { // Mode 1-1 feedback, later
*len=0;
@@ -1841,7 +1838,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
uint8_t ri_status=0;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PUCCH,VCD_FUNCTION_IN);
-
+
SOUNDINGRS_UL_CONFIG_DEDICATED *pSoundingrs_ul_config_dedicated=&ue->soundingrs_ul_config_dedicated[eNB_id];
// 36.213 8.2
@@ -1864,7 +1861,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
uint8_t isShortenPucch = (pSoundingrs_ul_config_dedicated->srsCellSubframe && frame_parms->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission);
bundling_flag = ue->pucch_config_dedicated[eNB_id].tdd_AckNackFeedbackMode;
-
+
if ((frame_parms->frame_type==FDD) ||
(bundling_flag==bundling) ||
((frame_parms->frame_type==TDD)&&(frame_parms->tdd_config==1)&&((subframe_tx!=2)||(subframe_tx!=7)))) {
@@ -1874,7 +1871,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
format = pucch_format1b;
LOG_D(PHY,"[UE] PUCCH 1b\n");
}
-
+
// Part - I
// Collect feedback that should be transmitted at this subframe
// - SR
@@ -1948,8 +1945,8 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
&len);
LOG_D(PHY,"PUCCH feedback AbsSubframe %d.%d SR %d NbCW %d AckNack %d.%d CQI %d RI %d format %d pucch_resource %d pucch_payload %d %d \n",
- frame_tx%1024, subframe_tx, SR_payload, nb_cw, pucch_ack_payload[0], pucch_ack_payload[1], cqi_status, ri_status, format, pucch_resource,pucch_payload[0],pucch_payload[1]);
+ frame_tx%1024, subframe_tx, SR_payload, nb_cw, pucch_ack_payload[0], pucch_ack_payload[1], cqi_status, ri_status, format, pucch_resource,pucch_payload[0],pucch_payload[1]);
// Part - IV
// Generate PUCCH signal
@@ -2132,14 +2129,14 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
}
void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode,relaying_type_t r_type) {
-
+
LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
//int32_t ulsch_start=0;
int subframe_tx = proc->subframe_tx;
int frame_tx = proc->frame_tx;
unsigned int aa;
-
+
@@ -2158,15 +2155,15 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,ui
#endif
ue->tx_power_dBm[subframe_tx]=-127;
-
+
if (abstraction_flag==0) {
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
memset(&ue->common_vars.txdataF[aa][subframe_tx*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti],
- 0,
- frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*sizeof(int32_t));
+ 0,
+ frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*sizeof(int32_t));
}
}
-
+
if (ue->UE_mode[eNB_id] != PRACH) {
// check cell srs subframe and ue srs subframe. This has an impact on pusch encoding
ue_compute_srs_occasion(ue,proc,eNB_id);
@@ -2174,17 +2171,17 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,ui
ue_ulsch_uespec_procedures(ue,proc,eNB_id,abstraction_flag);
}
-
+
if (ue->UE_mode[eNB_id] == PUSCH) {
// check if we need to use PUCCH 1a/1b
ue_pucch_procedures(ue,proc,eNB_id,abstraction_flag);
// check if we need to use SRS
ue_srs_procedures(ue,proc,eNB_id,abstraction_flag);
} // UE_mode==PUSCH
-
-
+
+
#ifdef CBA
-
+
if ((ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_cba_scheduling_flag >= 1) &&
(ue->ulsch[eNB_id]->harq_processes[harq_pid]->status == CBA_ACTIVE)) {
ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag=0; //-=1
@@ -2194,61 +2191,61 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,ui
//cba_mcs=ue->ulsch[eNB_id]->harq_processes[harq_pid]->mcs;
input_buffer_length = ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS/8;
access_mode=CBA_ACCESS;
-
+
LOG_D(PHY,"[UE %d] Frame %d, subframe %d: CBA num dci %d\n",
- Mod_id,frame_tx,subframe_tx,
- ue->ulsch[eNB_id]->num_cba_dci[subframe_tx]);
-
+ Mod_id,frame_tx,subframe_tx,
+ ue->ulsch[eNB_id]->num_cba_dci[subframe_tx]);
+
mac_xface->ue_get_sdu(Mod_id,
- CC_id,
- frame_tx,
- subframe_tx,
- eNB_id,
- ulsch_input_buffer,
- input_buffer_length,
- &access_mode);
-
+ CC_id,
+ frame_tx,
+ subframe_tx,
+ eNB_id,
+ ulsch_input_buffer,
+ input_buffer_length,
+ &access_mode);
+
ue->ulsch[eNB_id]->num_cba_dci[subframe_tx]=0;
-
+
if (access_mode > UNKNOWN_ACCESS) {
-
+
if (abstraction_flag==0) {
- if (ulsch_encoding(ulsch_input_buffer,
- ue,
- harq_pid,
- eNB_id,
- ue->transmission_mode[eNB_id],0,
- 0)!=0) { // Nbundled, to be updated!!!!
- LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n");
- return;
- }
+ if (ulsch_encoding(ulsch_input_buffer,
+ ue,
+ harq_pid,
+ eNB_id,
+ ue->transmission_mode[eNB_id],0,
+ 0)!=0) { // Nbundled, to be updated!!!!
+ LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n");
+ return;
+ }
}
-
+
#ifdef PHY_ABSTRACTION
else {
- ulsch_encoding_emul(ulsch_input_buffer,ue,eNB_id,harq_pid,0);
+ ulsch_encoding_emul(ulsch_input_buffer,ue,eNB_id,harq_pid,0);
}
-
+
#endif
} else {
ue->ulsch[eNB_id]->harq_processes[harq_pid]->status= IDLE;
//reset_cba_uci(ue->ulsch[eNB_id]->o);
LOG_N(PHY,"[UE %d] Frame %d, subframe %d: CBA transmission cancelled or postponed\n",
- Mod_id, frame_tx,subframe_tx);
+ Mod_id, frame_tx,subframe_tx);
}
}
-
+
#endif // end CBA
-
+
if (abstraction_flag == 0) {
ulsch_common_procedures(ue,proc, (ue->generate_ul_signal[eNB_id] == 0));
} // mode != PRACH
-
-
- if ((ue->UE_mode[eNB_id] == PRACH) &&
+
+
+ if ((ue->UE_mode[eNB_id] == PRACH) &&
(ue->frame_parms.prach_config_common.prach_Config_enabled==1)) {
-
+
// check if we have PRACH opportunity
if (is_prach_subframe(&ue->frame_parms,frame_tx,subframe_tx)) {
@@ -2259,7 +2256,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,ui
else {
ue->generate_prach=0;
}
-
+
// reset DL ACK/NACK status
reset_ack(&ue->frame_parms,
ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack,
@@ -2271,7 +2268,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,ui
subframe_tx,
ue->ulsch[eNB_id]->o_ACK,0);
-
+
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
stop_meas(&ue->phy_proc_tx);
}
@@ -2280,21 +2277,21 @@ void phy_procedures_UE_S_TX(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t abstraction_f
{
int aa;//i,aa;
LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
-
+
if (abstraction_flag==0) {
-
+
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
#if defined(EXMIMO) //this is the EXPRESS MIMO case
int i;
// set the whole tx buffer to RX
for (i=0; i<LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti; i++)
- ue->common_vars.txdata[aa][i] = 0x00010001;
-
+ ue->common_vars.txdata[aa][i] = 0x00010001;
+
#else //this is the normal case
memset(&ue->common_vars.txdata[aa][0],0,
- (LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti)*sizeof(int32_t));
+ (LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti)*sizeof(int32_t));
#endif //else EXMIMO
-
+
}
}
}
@@ -2302,10 +2299,10 @@ void phy_procedures_UE_S_TX(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t abstraction_f
void ue_measurement_procedures(
uint16_t l, // symbol index of each slot [0..6]
PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uint8_t eNB_id,
- uint16_t slot, // slot index of each radio frame [0..19]
+ uint16_t slot, // slot index of each radio frame [0..19]
uint8_t abstraction_flag,runmode_t mode)
{
-
+
LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
int subframe_rx = proc->subframe_rx;
@@ -2318,14 +2315,17 @@ void ue_measurement_procedures(
LOG_D(PHY,"Calling measurements subframe %d, rxdata %p\n",subframe_rx,ue->common_vars.rxdata);
lte_ue_measurements(ue,
- (subframe_rx*frame_parms->samples_per_tti+ue->rx_offset)%(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME),
- (subframe_rx == 1) ? 1 : 0,
- 0,subframe_rx);
+ (subframe_rx*frame_parms->samples_per_tti+ue->rx_offset)%(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME),
+ (subframe_rx == 1) ? 1 : 0,
+ 0,
+ 0,
+ subframe_rx);
} else {
lte_ue_measurements(ue,
- 0,
- 0,
- 1,
+ 0,
+ 0,
+ 1,
+ 0,
subframe_rx);
}
#if T_TRACER
@@ -2342,13 +2342,13 @@ void ue_measurement_procedures(
}
if (l==(6-ue->frame_parms.Ncp)) {
-
+
// make sure we have signal from PSS/SSS for N0 measurement
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_RRC_MEASUREMENTS, VCD_FUNCTION_IN);
ue_rrc_measurements(ue,
- slot,
- abstraction_flag);
+ slot,
+ abstraction_flag);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_RRC_MEASUREMENTS, VCD_FUNCTION_OUT);
if (abstraction_flag==1)
@@ -2373,16 +2373,16 @@ void ue_measurement_procedures(
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GAIN_CONTROL, VCD_FUNCTION_OUT);
eNB_id = 0;
-
+
if (abstraction_flag == 0) {
if (ue->no_timing_correction==0)
- lte_adjust_synch(&ue->frame_parms,
- ue,
- eNB_id,
- subframe_rx,
- 0,
- 16384);
- }
+ lte_adjust_synch(&ue->frame_parms,
+ ue,
+ eNB_id,
+ subframe_rx,
+ 0,
+ 16384);
+ }
}
@@ -2414,14 +2414,14 @@ void phy_procedures_emos_UE_RX(PHY_VARS_UE *ue,uint8_t last_slot,uint8_t eNB_id)
if ((last_slot==10) || (last_slot==11)) {
for (i=0; i<ue->frame_parms.nb_antennas_rx; i++)
for (j=0; j<ue->frame_parms.nb_antennas_tx; j++) {
- // first OFDM symbol with pilots
- memcpy(&emos_dump_UE.channel[i][j][(last_slot%2)*2*ue->frame_parms.ofdm_symbol_size],
- &ue->common_vars.dl_ch_estimates[eNB_id][(j<<1) + i][0],
- ue->frame_parms.ofdm_symbol_size*sizeof(int));
- // second OFDM symbol with pilots
- memcpy(&emos_dump_UE.channel[i][j][((last_slot%2)*2+1)*ue->frame_parms.ofdm_symbol_size],
- &ue->common_vars.dl_ch_estimates[eNB_id][(j<<1) + i][(ue->frame_parms.Ncp == 0 ? 4 : 3)*ue->frame_parms.ofdm_symbol_size],
- ue->frame_parms.ofdm_symbol_size*sizeof(int));
+ // first OFDM symbol with pilots
+ memcpy(&emos_dump_UE.channel[i][j][(last_slot%2)*2*ue->frame_parms.ofdm_symbol_size],
+ &ue->common_vars.dl_ch_estimates[eNB_id][(j<<1) + i][0],
+ ue->frame_parms.ofdm_symbol_size*sizeof(int));
+ // second OFDM symbol with pilots
+ memcpy(&emos_dump_UE.channel[i][j][((last_slot%2)*2+1)*ue->frame_parms.ofdm_symbol_size],
+ &ue->common_vars.dl_ch_estimates[eNB_id][(j<<1) + i][(ue->frame_parms.Ncp == 0 ? 4 : 3)*ue->frame_parms.ofdm_symbol_size],
+ ue->frame_parms.ofdm_symbol_size*sizeof(int));
}
}
@@ -2469,7 +2469,7 @@ void phy_procedures_emos_UE_RX(PHY_VARS_UE *ue,uint8_t last_slot,uint8_t eNB_id)
LOG_W(PHY,"[UE %d] frame %d, slot %d, Problem writing EMOS data to FIFO\n",Mod_id,proc->frame_rx, last_slot);
} else {
if (proc->frame_rx%100==0) {
- LOG_I(PHY,"[UE %d] frame %d, slot %d, Writing %d bytes EMOS data to FIFO\n",Mod_id,proc->frame_rx, last_slot, bytes);
+ LOG_I(PHY,"[UE %d] frame %d, slot %d, Writing %d bytes EMOS data to FIFO\n",Mod_id,proc->frame_rx, last_slot, bytes);
}
}
}
@@ -2565,12 +2565,12 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin
//LOG_I(PHY,"[UE %d] Frame %d, Trying PBCH %d (NidCell %d, eNB_id %d)\n",ue->Mod_id,frame_rx,pbch_phase,ue->frame_parms.Nid_cell,eNB_id);
if (abstraction_flag == 0) {
pbch_tx_ant = rx_pbch(&ue->common_vars,
- ue->pbch_vars[eNB_id],
- &ue->frame_parms,
- eNB_id,
- ue->frame_parms.mode1_flag==1?SISO:ALAMOUTI,
- ue->high_speed_flag,
- pbch_phase);
+ ue->pbch_vars[eNB_id],
+ &ue->frame_parms,
+ eNB_id,
+ ue->frame_parms.mode1_flag==1?SISO:ALAMOUTI,
+ ue->high_speed_flag,
+ pbch_phase);
@@ -2579,8 +2579,8 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin
#ifdef PHY_ABSTRACTION
else {
pbch_tx_ant = rx_pbch_emul(ue,
- eNB_id,
- pbch_phase);
+ eNB_id,
+ pbch_phase);
}
#endif
@@ -2624,9 +2624,9 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin
if (ue->mac_enabled==1) {
mac_xface->dl_phy_sync_success(ue->Mod_id,frame_rx,eNB_id,
- ue->UE_mode[eNB_id]==NOT_SYNCHED ? 1 : 0);
+ ue->UE_mode[eNB_id]==NOT_SYNCHED ? 1 : 0);
}
-
+
#ifdef EMOS
//emos_dump_UE.frame_tx = frame_tx;
//emos_dump_UE.mimo_mode = ue->pbch_vars[eNB_id]->decoded_output[1];
@@ -2640,26 +2640,26 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin
ue->proc.proc_rxtx[1].frame_rx = proc->frame_rx;
ue->proc.proc_rxtx[1].frame_tx = proc->frame_tx;
LOG_I(PHY,"[UE %d] frame %d, subframe %d: Adjusting frame counter (PBCH ant_tx=%d, frame_tx=%d, phase %d, rx_offset %d) => new frame %d\n",
- ue->Mod_id,
- frame_rx,
- subframe_rx,
- pbch_tx_ant,
- frame_tx,
- pbch_phase,
- ue->rx_offset,
- proc->frame_rx);
+ ue->Mod_id,
+ frame_rx,
+ subframe_rx,
+ pbch_tx_ant,
+ frame_tx,
+ pbch_phase,
+ ue->rx_offset,
+ proc->frame_rx);
frame_rx = proc->frame_rx;
-
+
} else if (((frame_tx & 0x03FF) != (proc->frame_rx & 0x03FF))) {
//(pbch_tx_ant != ue->frame_parms.nb_antennas_tx)) {
LOG_D(PHY,"[UE %d] frame %d, subframe %d: Re-adjusting frame counter (PBCH ant_tx=%d, frame_rx=%d, frame%%1024=%d, phase %d).\n",
- ue->Mod_id,
- proc->frame_rx,
- subframe_rx,
- pbch_tx_ant,
- frame_tx,
- frame_rx & 0x03FF,
- pbch_phase);
+ ue->Mod_id,
+ proc->frame_rx,
+ subframe_rx,
+ pbch_tx_ant,
+ frame_tx,
+ frame_rx & 0x03FF,
+ pbch_phase);
proc->frame_rx = (proc->frame_rx & 0xFFFFFC00) | (frame_tx & 0x000003FF);
ue->proc.proc_rxtx[1].frame_rx = (proc->frame_rx & 0xFFFFFC00) | (frame_tx & 0x000003FF);
@@ -2671,21 +2671,21 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin
#ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[UE %d] frame %d, subframe %d, Received PBCH (MIB): mode1_flag %d, tx_ant %d, frame_tx %d. N_RB_DL %d, phich_duration %d, phich_resource %d/6!\n",
- ue->Mod_id,
- frame_rx,
- subframe_rx,
- ue->frame_parms.mode1_flag,
- pbch_tx_ant,
- frame_tx,
- ue->frame_parms.N_RB_DL,
- ue->frame_parms.phich_config_common.phich_duration,
- ue->frame_parms.phich_config_common.phich_resource);
+ ue->Mod_id,
+ frame_rx,
+ subframe_rx,
+ ue->frame_parms.mode1_flag,
+ pbch_tx_ant,
+ frame_tx,
+ ue->frame_parms.N_RB_DL,
+ ue->frame_parms.phich_config_common.phich_duration,
+ ue->frame_parms.phich_config_common.phich_resource);
#endif
- } else {
+ } else {
/*
LOG_E(PHY,"[UE %d] frame %d, subframe %d, Error decoding PBCH!\n",
- ue->Mod_id,frame_rx, subframe_rx);
+ ue->Mod_id,frame_rx, subframe_rx);
LOG_I(PHY,"[UE %d] rx_offset %d\n",ue->Mod_id,ue->rx_offset);
@@ -2709,8 +2709,8 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin
}
else{
if (ue->pbch_vars[eNB_id]->pdu_errors_conseq>=100) {
- LOG_E(PHY,"More that 100 consecutive PBCH errors! Exiting!\n");
- mac_xface->macphy_exit("More that 100 consecutive PBCH errors!");
+ LOG_E(PHY,"More that 100 consecutive PBCH errors! Exiting!\n");
+ mac_xface->macphy_exit("More that 100 consecutive PBCH errors!");
}
}
}
@@ -2722,9 +2722,9 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin
#ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[UE %d] frame %d, slot %d, PBCH errors = %d, consecutive errors = %d!\n",
- ue->Mod_id,frame_rx, subframe_rx,
- ue->pbch_vars[eNB_id]->pdu_errors,
- ue->pbch_vars[eNB_id]->pdu_errors_conseq);
+ ue->Mod_id,frame_rx, subframe_rx,
+ ue->pbch_vars[eNB_id]->pdu_errors,
+ ue->pbch_vars[eNB_id]->pdu_errors_conseq);
#endif
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PBCH_PROCEDURES, VCD_FUNCTION_OUT);
}
@@ -2754,30 +2754,30 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH, VCD_FUNCTION_IN);
rx_pdcch(&ue->common_vars,
- ue->pdcch_vars,
- &ue->frame_parms,
- proc->frame_rx,
- subframe_rx,
- eNB_id,
- (ue->frame_parms.mode1_flag == 1) ? SISO : ALAMOUTI,
- ue->high_speed_flag,
- ue->is_secondary_ue);
+ ue->pdcch_vars,
+ &ue->frame_parms,
+ proc->frame_rx,
+ subframe_rx,
+ eNB_id,
+ (ue->frame_parms.mode1_flag == 1) ? SISO : ALAMOUTI,
+ ue->high_speed_flag,
+ ue->is_secondary_ue);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH, VCD_FUNCTION_OUT);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DCI_DECODING, VCD_FUNCTION_IN);
dci_cnt = dci_decoding_procedure(ue,
- dci_alloc_rx,
- (ue->UE_mode[eNB_id] < PUSCH)? 1 : 0, // if we're in PUSCH don't listen to common search space,
- // later when we need paging or RA during connection, update this ...
- eNB_id,subframe_rx);
+ dci_alloc_rx,
+ (ue->UE_mode[eNB_id] < PUSCH)? 1 : 0, // if we're in PUSCH don't listen to common search space,
+ // later when we need paging or RA during connection, update this ...
+ eNB_id,subframe_rx);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DCI_DECODING, VCD_FUNCTION_OUT);
//LOG_D(PHY,"[UE %d][PUSCH] Frame %d subframe %d PHICH RX\n",ue->Mod_id,frame_rx,subframe_rx);
if (is_phich_subframe(&ue->frame_parms,subframe_rx)) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PHICH, VCD_FUNCTION_IN);
rx_phich(ue,proc,
- subframe_rx,eNB_id);
+ subframe_rx,eNB_id);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PHICH, VCD_FUNCTION_OUT);
}
}
@@ -2786,11 +2786,11 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
else {
for (i=0; i<NB_eNB_INST; i++) {
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++)
- if (PHY_vars_eNB_g[i][CC_id]->frame_parms.Nid_cell == ue->frame_parms.Nid_cell)
- break;
+ if (PHY_vars_eNB_g[i][CC_id]->frame_parms.Nid_cell == ue->frame_parms.Nid_cell)
+ break;
if (CC_id < MAX_NUM_CCs)
- break;
+ break;
}
if (i==NB_eNB_INST) {
@@ -2802,28 +2802,28 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
LOG_D(PHY,"Calling dci_decoding_proc_emul ...\n");
dci_cnt = dci_decoding_procedure_emul(ue->pdcch_vars,
- PHY_vars_eNB_g[i][CC_id]->num_ue_spec_dci[subframe_rx&1],
- PHY_vars_eNB_g[i][CC_id]->num_common_dci[subframe_rx&1],
- PHY_vars_eNB_g[i][CC_id]->dci_alloc[subframe_rx&1],
- dci_alloc_rx,
- eNB_id);
+ PHY_vars_eNB_g[i][CC_id]->num_ue_spec_dci[subframe_rx&1],
+ PHY_vars_eNB_g[i][CC_id]->num_common_dci[subframe_rx&1],
+ PHY_vars_eNB_g[i][CC_id]->dci_alloc[subframe_rx&1],
+ dci_alloc_rx,
+ eNB_id);
// printf("DCI: dci_cnt %d\n",dci_cnt);
UE_id = (uint32_t)find_ue((int16_t)ue->pdcch_vars[eNB_id]->crnti,PHY_vars_eNB_g[i][CC_id]);
if (UE_id>=0) {
// printf("Checking PHICH for UE %d (eNB %d)\n",UE_id,i);
if (is_phich_subframe(&ue->frame_parms,subframe_rx)) {
- harq_pid = phich_subframe_to_harq_pid(&ue->frame_parms,frame_rx,subframe_rx);
+ harq_pid = phich_subframe_to_harq_pid(&ue->frame_parms,frame_rx,subframe_rx);
- if (ue->ulsch[eNB_id]->harq_processes[harq_pid]->status == ACTIVE) {
- // ue->ulsch[eNB_id]->harq_processes[harq_pid]->phich_ACK=1;
- ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag =0;
- ue->ulsch[eNB_id]->harq_processes[harq_pid]->status = IDLE;
- ue->ulsch_Msg3_active[eNB_id] = 0;
- ue->ulsch[eNB_id]->harq_processes[harq_pid]->round = 0;
- LOG_D(PHY,"Msg3 inactive\n");
+ if (ue->ulsch[eNB_id]->harq_processes[harq_pid]->status == ACTIVE) {
+ // ue->ulsch[eNB_id]->harq_processes[harq_pid]->phich_ACK=1;
+ ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag =0;
+ ue->ulsch[eNB_id]->harq_processes[harq_pid]->status = IDLE;
+ ue->ulsch_Msg3_active[eNB_id] = 0;
+ ue->ulsch[eNB_id]->harq_processes[harq_pid]->round = 0;
+ LOG_D(PHY,"Msg3 inactive\n");
- } // harq_pid is ACTIVE
+ } // harq_pid is ACTIVE
} // This is a PHICH subframe
} // UE_id exists
}
@@ -2844,37 +2844,37 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
if ((ue->UE_mode[eNB_id]>PRACH) &&
- (dci_alloc_rx[i].rnti == ue->pdcch_vars[eNB_id]->crnti) &&
- (dci_alloc_rx[i].format != format0)) {
-
+ (dci_alloc_rx[i].rnti == ue->pdcch_vars[eNB_id]->crnti) &&
+ (dci_alloc_rx[i].format != format0)) {
+
LOG_D(PHY,"[UE %d][DCI][PDSCH %x] AbsSubframe %d.%d: format %d, num_pdcch_symbols %d, nCCE %d, total CCEs %d\n",
- ue->Mod_id,dci_alloc_rx[i].rnti,
- frame_rx%1024,subframe_rx,
- dci_alloc_rx[i].format,
- ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
- ue->pdcch_vars[eNB_id]->nCCE[subframe_rx],
- get_nCCE(3,&ue->frame_parms,get_mi(&ue->frame_parms,0)));
+ ue->Mod_id,dci_alloc_rx[i].rnti,
+ frame_rx%1024,subframe_rx,
+ dci_alloc_rx[i].format,
+ ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
+ ue->pdcch_vars[eNB_id]->nCCE[subframe_rx],
+ get_nCCE(3,&ue->frame_parms,get_mi(&ue->frame_parms,0)));
+
-
//dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
if ((ue->UE_mode[eNB_id] > PRACH) &&
- (generate_ue_dlsch_params_from_dci(frame_rx,
- subframe_rx,
- (void *)&dci_alloc_rx[i].dci_pdu,
- ue->pdcch_vars[eNB_id]->crnti,
- dci_alloc_rx[i].format,
- ue->dlsch[subframe_rx&0x1][eNB_id],
- &ue->frame_parms,
- ue->pdsch_config_dedicated,
- SI_RNTI,
- 0,
- P_RNTI,
- ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id],
- ue->pdcch_vars[eNB_id]->crnti_is_temporary? ue->pdcch_vars[eNB_id]->crnti: 0)==0)) {
+ (generate_ue_dlsch_params_from_dci(frame_rx,
+ subframe_rx,
+ (void *)&dci_alloc_rx[i].dci_pdu,
+ ue->pdcch_vars[eNB_id]->crnti,
+ dci_alloc_rx[i].format,
+ ue->dlsch[subframe_rx&0x1][eNB_id],
+ &ue->frame_parms,
+ ue->pdsch_config_dedicated,
+ SI_RNTI,
+ 0,
+ P_RNTI,
+ ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id],
+ ue->pdcch_vars[eNB_id]->crnti_is_temporary? ue->pdcch_vars[eNB_id]->crnti: 0)==0)) {
// update TPC for PUCCH
if((dci_alloc_rx[i].format == format1) ||
@@ -2887,31 +2887,31 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
ue->dlsch[subframe_rx&0x1][eNB_id][0]->g_pucch += ue->dlsch[subframe_rx&0x1][eNB_id][0]->harq_processes[ue->dlsch[subframe_rx&0x1][eNB_id][0]->current_harq_pid]->delta_PUCCH;
}
- ue->dlsch_received[eNB_id]++;
-
+ ue->dlsch_received[eNB_id]++;
+
#ifdef DEBUG_PHY_PROC
- LOG_D(PHY,"[UE %d] Generated UE DLSCH C_RNTI format %d\n",ue->Mod_id,dci_alloc_rx[i].format);
- dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
- LOG_D(PHY,"[UE %d] *********** dlsch->active in subframe %d=> %d\n",ue->Mod_id,subframe_rx,ue->dlsch[subframe_rx&0x1][eNB_id][0]->active);
+ LOG_D(PHY,"[UE %d] Generated UE DLSCH C_RNTI format %d\n",ue->Mod_id,dci_alloc_rx[i].format);
+ dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
+ LOG_D(PHY,"[UE %d] *********** dlsch->active in subframe %d=> %d\n",ue->Mod_id,subframe_rx,ue->dlsch[subframe_rx&0x1][eNB_id][0]->active);
#endif
-
- // we received a CRNTI, so we're in PUSCH
- if (ue->UE_mode[eNB_id] != PUSCH) {
+
+ // we received a CRNTI, so we're in PUSCH
+ if (ue->UE_mode[eNB_id] != PUSCH) {
#ifdef DEBUG_PHY_PROC
- LOG_D(PHY,"[UE %d] Frame %d, subframe %d: Received DCI with CRNTI %x => Mode PUSCH\n",ue->Mod_id,frame_rx,subframe_rx,ue->pdcch_vars[eNB_id]->crnti);
+ LOG_D(PHY,"[UE %d] Frame %d, subframe %d: Received DCI with CRNTI %x => Mode PUSCH\n",ue->Mod_id,frame_rx,subframe_rx,ue->pdcch_vars[eNB_id]->crnti);
#endif
- //dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
- ue->UE_mode[eNB_id] = PUSCH;
- //mac_xface->macphy_exit("Connected. Exiting\n");
- }
+ //dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
+ ue->UE_mode[eNB_id] = PUSCH;
+ //mac_xface->macphy_exit("Connected. Exiting\n");
+ }
} else {
- LOG_E(PHY,"[UE %d] Frame %d, subframe %d: Problem in DCI!\n",ue->Mod_id,frame_rx,subframe_rx);
- dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
+ LOG_E(PHY,"[UE %d] Frame %d, subframe %d: Problem in DCI!\n",ue->Mod_id,frame_rx,subframe_rx);
+ dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
}
}
else if ((dci_alloc_rx[i].rnti == SI_RNTI) &&
- ((dci_alloc_rx[i].format == format1A) || (dci_alloc_rx[i].format == format1C))) {
+ ((dci_alloc_rx[i].format == format1A) || (dci_alloc_rx[i].format == format1C))) {
#ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[UE %d] subframe %d: Found rnti %x, format 1%s, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,dci_alloc_rx[i].format==format1A?"A":"C",i);
@@ -2919,30 +2919,30 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
if (generate_ue_dlsch_params_from_dci(frame_rx,
- subframe_rx,
- (void *)&dci_alloc_rx[i].dci_pdu,
- SI_RNTI,
- dci_alloc_rx[i].format,
- &ue->dlsch_SI[eNB_id],
- &ue->frame_parms,
- ue->pdsch_config_dedicated,
- SI_RNTI,
- 0,
- P_RNTI,
- ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id],
+ subframe_rx,
+ (void *)&dci_alloc_rx[i].dci_pdu,
+ SI_RNTI,
+ dci_alloc_rx[i].format,
+ &ue->dlsch_SI[eNB_id],
+ &ue->frame_parms,
+ ue->pdsch_config_dedicated,
+ SI_RNTI,
+ 0,
+ P_RNTI,
+ ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id],
0)==0) {
- ue->dlsch_SI_received[eNB_id]++;
-
+ ue->dlsch_SI_received[eNB_id]++;
+
- LOG_D(PHY,"[UE %d] Frame %d, subframe %d : Generate UE DLSCH SI_RNTI format 1%s\n",ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].format==format1A?"A":"C");
- //dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
+ LOG_D(PHY,"[UE %d] Frame %d, subframe %d : Generate UE DLSCH SI_RNTI format 1%s\n",ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].format==format1A?"A":"C");
+ //dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
}
}
else if ((dci_alloc_rx[i].rnti == P_RNTI) &&
- ((dci_alloc_rx[i].format == format1A) || (dci_alloc_rx[i].format == format1C))) {
+ ((dci_alloc_rx[i].format == format1A) || (dci_alloc_rx[i].format == format1C))) {
#ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[UE %d] subframe %d: Found rnti %x, format 1%s, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,dci_alloc_rx[i].format==format1A?"A":"C",i);
@@ -2950,31 +2950,29 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
if (generate_ue_dlsch_params_from_dci(frame_rx,
- subframe_rx,
- (void *)&dci_alloc_rx[i].dci_pdu,
- P_RNTI,
- dci_alloc_rx[i].format,
- &ue->dlsch_SI[eNB_id],
- &ue->frame_parms,
- ue->pdsch_config_dedicated,
- SI_RNTI,
- 0,
- P_RNTI,
- ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id],
+ subframe_rx,
+ (void *)&dci_alloc_rx[i].dci_pdu,
+ P_RNTI,
+ dci_alloc_rx[i].format,
+ &ue->dlsch_SI[eNB_id],
+ &ue->frame_parms,
+ ue->pdsch_config_dedicated,
+ SI_RNTI,
+ 0,
+ P_RNTI,
+ ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id],
0)==0) {
- ue->dlsch_p_received[eNB_id]++;
-
-
- LOG_D(PHY,"[UE %d] Frame %d, subframe %d : Generate UE DLSCH P_RNTI format 1%s\n",ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].format==format1A?"A":"C");
- //dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
+ ue->dlsch_p_received[eNB_id]++;
+ LOG_D(PHY,"[UE %d] Frame %d, subframe %d : Generate UE DLSCH P_RNTI format 1%s\n",ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].format==format1A?"A":"C");
+ //dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
}
}
else if ((ue->prach_resources[eNB_id]) &&
- (dci_alloc_rx[i].rnti == ue->prach_resources[eNB_id]->ra_RNTI) &&
- (dci_alloc_rx[i].format == format1A)) {
+ (dci_alloc_rx[i].rnti == ue->prach_resources[eNB_id]->ra_RNTI) &&
+ (dci_alloc_rx[i].format == format1A)) {
#ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[UE %d][RAPROC] subframe %d: Found RA rnti %x, format 1A, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,i);
@@ -2986,49 +2984,49 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
if (generate_ue_dlsch_params_from_dci(frame_rx,
- subframe_rx,
- (DCI1A_5MHz_TDD_1_6_t *)&dci_alloc_rx[i].dci_pdu,
- ue->prach_resources[eNB_id]->ra_RNTI,
- format1A,
- &ue->dlsch_ra[eNB_id],
- &ue->frame_parms,
- ue->pdsch_config_dedicated,
- SI_RNTI,
- ue->prach_resources[eNB_id]->ra_RNTI,
- P_RNTI,
- ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id],
+ subframe_rx,
+ (DCI1A_5MHz_TDD_1_6_t *)&dci_alloc_rx[i].dci_pdu,
+ ue->prach_resources[eNB_id]->ra_RNTI,
+ format1A,
+ &ue->dlsch_ra[eNB_id],
+ &ue->frame_parms,
+ ue->pdsch_config_dedicated,
+ SI_RNTI,
+ ue->prach_resources[eNB_id]->ra_RNTI,
+ P_RNTI,
+ ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id],
0)==0) {
- ue->dlsch_ra_received[eNB_id]++;
+ ue->dlsch_ra_received[eNB_id]++;
#ifdef DEBUG_PHY_PROC
- LOG_D(PHY,"[UE %d] Generate UE DLSCH RA_RNTI format 1A, rb_alloc %x, dlsch_ra[eNB_id] %p\n",
- ue->Mod_id,ue->dlsch_ra[eNB_id]->harq_processes[0]->rb_alloc_even[0],ue->dlsch_ra[eNB_id]);
+ LOG_D(PHY,"[UE %d] Generate UE DLSCH RA_RNTI format 1A, rb_alloc %x, dlsch_ra[eNB_id] %p\n",
+ ue->Mod_id,ue->dlsch_ra[eNB_id]->harq_processes[0]->rb_alloc_even[0],ue->dlsch_ra[eNB_id]);
#endif
}
} else if( (dci_alloc_rx[i].rnti == ue->pdcch_vars[eNB_id]->crnti) &&
- (dci_alloc_rx[i].format == format0)) {
+ (dci_alloc_rx[i].format == format0)) {
#ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[UE %d][PUSCH] Frame %d subframe %d: Found rnti %x, format 0, dci_cnt %d\n",
- ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].rnti,i);
+ ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].rnti,i);
#endif
ue->ulsch_no_allocation_counter[eNB_id] = 0;
//dump_dci(&ue->frame_parms,&dci_alloc_rx[i]);
if ((ue->UE_mode[eNB_id] > PRACH) &&
- (generate_ue_ulsch_params_from_dci((void *)&dci_alloc_rx[i].dci_pdu,
- ue->pdcch_vars[eNB_id]->crnti,
- subframe_rx,
- format0,
- ue,
- proc,
- SI_RNTI,
- 0,
- P_RNTI,
- CBA_RNTI,
- eNB_id,
- 0)==0)) {
+ (generate_ue_ulsch_params_from_dci((void *)&dci_alloc_rx[i].dci_pdu,
+ ue->pdcch_vars[eNB_id]->crnti,
+ subframe_rx,
+ format0,
+ ue,
+ proc,
+ SI_RNTI,
+ 0,
+ P_RNTI,
+ CBA_RNTI,
+ eNB_id,
+ 0)==0)) {
#if T_TRACER
LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
@@ -3045,20 +3043,20 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS));
#endif
#ifdef DEBUG_PHY_PROC
- LOG_D(PHY,"[UE %d] Generate UE ULSCH C_RNTI format 0 (subframe %d)\n",ue->Mod_id,subframe_rx);
+ LOG_D(PHY,"[UE %d] Generate UE ULSCH C_RNTI format 0 (subframe %d)\n",ue->Mod_id,subframe_rx);
#endif
}
} else if( (dci_alloc_rx[i].rnti == ue->ulsch[eNB_id]->cba_rnti[0]) &&
- (dci_alloc_rx[i].format == format0)) {
+ (dci_alloc_rx[i].format == format0)) {
// UE could belong to more than one CBA group
// ue->Mod_id%ue->ulsch[eNB_id]->num_active_cba_groups]
#ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[UE %d][PUSCH] Frame %d subframe %d: Found cba rnti %x, format 0, dci_cnt %d\n",
- ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].rnti,i);
+ ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].rnti,i);
/*
- if (((frame_rx%100) == 0) || (frame_rx < 20))
- dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
+ if (((frame_rx%100) == 0) || (frame_rx < 20))
+ dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
*/
#endif
@@ -3066,32 +3064,32 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
//dump_dci(&ue->frame_parms,&dci_alloc_rx[i]);
if ((ue->UE_mode[eNB_id] > PRACH) &&
- (generate_ue_ulsch_params_from_dci((void *)&dci_alloc_rx[i].dci_pdu,
- ue->ulsch[eNB_id]->cba_rnti[0],
- subframe_rx,
- format0,
- ue,
- proc,
- SI_RNTI,
- 0,
- P_RNTI,
- CBA_RNTI,
- eNB_id,
- 0)==0)) {
+ (generate_ue_ulsch_params_from_dci((void *)&dci_alloc_rx[i].dci_pdu,
+ ue->ulsch[eNB_id]->cba_rnti[0],
+ subframe_rx,
+ format0,
+ ue,
+ proc,
+ SI_RNTI,
+ 0,
+ P_RNTI,
+ CBA_RNTI,
+ eNB_id,
+ 0)==0)) {
#ifdef DEBUG_PHY_PROC
- LOG_D(PHY,"[UE %d] Generate UE ULSCH CBA_RNTI format 0 (subframe %d)\n",ue->Mod_id,subframe_rx);
+ LOG_D(PHY,"[UE %d] Generate UE ULSCH CBA_RNTI format 0 (subframe %d)\n",ue->Mod_id,subframe_rx);
#endif
- ue->ulsch[eNB_id]->num_cba_dci[(subframe_rx+4)%10]++;
+ ue->ulsch[eNB_id]->num_cba_dci[(subframe_rx+4)%10]++;
}
}
else {
#ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[UE %d] frame %d, subframe %d: received DCI %d with RNTI=%x (C-RNTI:%x, CBA_RNTI %x) and format %d!\n",ue->Mod_id,frame_rx,subframe_rx,i,dci_alloc_rx[i].rnti,
- ue->pdcch_vars[eNB_id]->crnti,
- ue->ulsch[eNB_id]->cba_rnti[0],
- dci_alloc_rx[i].format);
+ ue->pdcch_vars[eNB_id]->crnti,
+ ue->ulsch[eNB_id]->cba_rnti[0],
+ dci_alloc_rx[i].format);
// dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
#endif
}
@@ -3117,129 +3115,129 @@ void ue_pmch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,int eNB_id,int abs
if (is_pmch_subframe(frame_rx,subframe_rx,&ue->frame_parms)) {
LOG_D(PHY,"ue calling pmch subframe ..\n ");
-
+
LOG_D(PHY,"[UE %d] Frame %d, subframe %d: Querying for PMCH demodulation\n",
- ue->Mod_id,(subframe_rx==9?-1:0)+frame_rx,subframe_rx);
+ ue->Mod_id,(subframe_rx==9?-1:0)+frame_rx,subframe_rx);
#ifdef Rel10
pmch_mcs = mac_xface->ue_query_mch(ue->Mod_id,
- CC_id,
- frame_rx,
- subframe_rx,
- eNB_id,
- &sync_area,
- &mcch_active);
-
+ CC_id,
+ frame_rx,
+ subframe_rx,
+ eNB_id,
+ &sync_area,
+ &mcch_active);
+
#else
pmch_mcs=-1;
#endif
-
+
if (pmch_mcs>=0) {
LOG_D(PHY,"[UE %d] Frame %d, subframe %d: Programming PMCH demodulation for mcs %d\n",ue->Mod_id,frame_rx,subframe_rx,pmch_mcs);
fill_UE_dlsch_MCH(ue,pmch_mcs,1,0,0);
-
+
if (abstraction_flag == 0 ) {
- for (l=2; l<12; l++) {
-
- slot_fep_mbsfn(ue,
- l,
- subframe_rx,
- 0,0);//ue->rx_offset,0);
- }
-
- for (l=2; l<12; l++) {
- rx_pmch(ue,
- 0,
- subframe_rx,
- l);
- }
-
-
- ue->dlsch_MCH[0]->harq_processes[0]->G = get_G(&ue->frame_parms,
- ue->dlsch_MCH[0]->harq_processes[0]->nb_rb,
- ue->dlsch_MCH[0]->harq_processes[0]->rb_alloc_even,
- ue->dlsch_MCH[0]->harq_processes[0]->Qm,
- 1,
- 2,
- frame_rx,
- subframe_rx,
- 0);
-
- dlsch_unscrambling(&ue->frame_parms,1,ue->dlsch_MCH[0],
- ue->dlsch_MCH[0]->harq_processes[0]->G,
- ue->pdsch_vars_MCH[0]->llr[0],0,subframe_rx<<1);
-
- ret = dlsch_decoding(ue,
- ue->pdsch_vars_MCH[0]->llr[0],
- &ue->frame_parms,
- ue->dlsch_MCH[0],
- ue->dlsch_MCH[0]->harq_processes[0],
- frame_rx,
- subframe_rx,
- 0,
- 0,1);
+ for (l=2; l<12; l++) {
+
+ slot_fep_mbsfn(ue,
+ l,
+ subframe_rx,
+ 0,0);//ue->rx_offset,0);
+ }
+
+ for (l=2; l<12; l++) {
+ rx_pmch(ue,
+ 0,
+ subframe_rx,
+ l);
+ }
+
+
+ ue->dlsch_MCH[0]->harq_processes[0]->G = get_G(&ue->frame_parms,
+ ue->dlsch_MCH[0]->harq_processes[0]->nb_rb,
+ ue->dlsch_MCH[0]->harq_processes[0]->rb_alloc_even,
+ ue->dlsch_MCH[0]->harq_processes[0]->Qm,
+ 1,
+ 2,
+ frame_rx,
+ subframe_rx,
+ 0);
+
+ dlsch_unscrambling(&ue->frame_parms,1,ue->dlsch_MCH[0],
+ ue->dlsch_MCH[0]->harq_processes[0]->G,
+ ue->pdsch_vars_MCH[0]->llr[0],0,subframe_rx<<1);
+
+ ret = dlsch_decoding(ue,
+ ue->pdsch_vars_MCH[0]->llr[0],
+ &ue->frame_parms,
+ ue->dlsch_MCH[0],
+ ue->dlsch_MCH[0]->harq_processes[0],
+ frame_rx,
+ subframe_rx,
+ 0,
+ 0,1);
} else { // abstraction
#ifdef PHY_ABSTRACTION
- ret = dlsch_decoding_emul(ue,
- subframe_rx,
- 5, // PMCH
- eNB_id);
+ ret = dlsch_decoding_emul(ue,
+ subframe_rx,
+ 5, // PMCH
+ eNB_id);
#endif
}
-
+
if (mcch_active == 1)
- ue->dlsch_mcch_trials[sync_area][0]++;
+ ue->dlsch_mcch_trials[sync_area][0]++;
else
- ue->dlsch_mtch_trials[sync_area][0]++;
-
+ ue->dlsch_mtch_trials[sync_area][0]++;
+
if (ret == (1+ue->dlsch_MCH[0]->max_turbo_iterations)) {
- if (mcch_active == 1)
- ue->dlsch_mcch_errors[sync_area][0]++;
- else
- ue->dlsch_mtch_errors[sync_area][0]++;
-
- LOG_D(PHY,"[UE %d] Frame %d, subframe %d: PMCH in error (%d,%d), not passing to L2 (TBS %d, iter %d,G %d)\n",
- ue->Mod_id,
+ if (mcch_active == 1)
+ ue->dlsch_mcch_errors[sync_area][0]++;
+ else
+ ue->dlsch_mtch_errors[sync_area][0]++;
+
+ LOG_D(PHY,"[UE %d] Frame %d, subframe %d: PMCH in error (%d,%d), not passing to L2 (TBS %d, iter %d,G %d)\n",
+ ue->Mod_id,
frame_rx,subframe_rx,
- ue->dlsch_mcch_errors[sync_area][0],
- ue->dlsch_mtch_errors[sync_area][0],
- ue->dlsch_MCH[0]->harq_processes[0]->TBS>>3,
- ue->dlsch_MCH[0]->max_turbo_iterations,
- ue->dlsch_MCH[0]->harq_processes[0]->G);
- dump_mch(ue,0,ue->dlsch_MCH[0]->harq_processes[0]->G,subframe_rx);
+ ue->dlsch_mcch_errors[sync_area][0],
+ ue->dlsch_mtch_errors[sync_area][0],
+ ue->dlsch_MCH[0]->harq_processes[0]->TBS>>3,
+ ue->dlsch_MCH[0]->max_turbo_iterations,
+ ue->dlsch_MCH[0]->harq_processes[0]->G);
+ dump_mch(ue,0,ue->dlsch_MCH[0]->harq_processes[0]->G,subframe_rx);
#ifdef DEBUG_DLSCH
-
- for (int i=0; i<ue->dlsch_MCH[0]->harq_processes[0]->TBS>>3; i++) {
- LOG_T(PHY,"%02x.",ue->dlsch_MCH[0]->harq_processes[0]->c[0][i]);
- }
-
- LOG_T(PHY,"\n");
+
+ for (int i=0; i<ue->dlsch_MCH[0]->harq_processes[0]->TBS>>3; i++) {
+ LOG_T(PHY,"%02x.",ue->dlsch_MCH[0]->harq_processes[0]->c[0][i]);
+ }
+
+ LOG_T(PHY,"\n");
#endif
-
- if (subframe_rx==9)
- mac_xface->macphy_exit("Why are we exiting here?");
+
+ if (subframe_rx==9)
+ mac_xface->macphy_exit("Why are we exiting here?");
} else { // decoding successful
#ifdef Rel10
-
- if (mcch_active == 1) {
- mac_xface->ue_send_mch_sdu(ue->Mod_id,
- CC_id,
- frame_rx,
- ue->dlsch_MCH[0]->harq_processes[0]->b,
- ue->dlsch_MCH[0]->harq_processes[0]->TBS>>3,
- eNB_id,// not relevant in eMBMS context
- sync_area);
- ue->dlsch_mcch_received[sync_area][0]++;
-
-
- if (ue->dlsch_mch_received_sf[subframe_rx%5][0] == 1 ) {
- ue->dlsch_mch_received_sf[subframe_rx%5][0]=0;
- } else {
- ue->dlsch_mch_received[0]+=1;
- ue->dlsch_mch_received_sf[subframe_rx][0]=1;
- }
-
-
- }
+
+ if (mcch_active == 1) {
+ mac_xface->ue_send_mch_sdu(ue->Mod_id,
+ CC_id,
+ frame_rx,
+ ue->dlsch_MCH[0]->harq_processes[0]->b,
+ ue->dlsch_MCH[0]->harq_processes[0]->TBS>>3,
+ eNB_id,// not relevant in eMBMS context
+ sync_area);
+ ue->dlsch_mcch_received[sync_area][0]++;
+
+
+ if (ue->dlsch_mch_received_sf[subframe_rx%5][0] == 1 ) {
+ ue->dlsch_mch_received_sf[subframe_rx%5][0]=0;
+ } else {
+ ue->dlsch_mch_received[0]+=1;
+ ue->dlsch_mch_received_sf[subframe_rx][0]=1;
+ }
+
+
+ }
#endif // Rel10
} // decoding sucessful
} // pmch_mcs>=0
@@ -3262,14 +3260,13 @@ void ue_pdsch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, PDSC
if (dlsch0 && (!dlsch1)) {
harq_pid = dlsch0->current_harq_pid;
LOG_D(PHY,"[UE %d] PDSCH active in subframe %d, harq_pid %d\n",ue->Mod_id,subframe_rx,harq_pid);
-
- if ((pdsch==PDSCH) &&
- (ue->transmission_mode[eNB_id] == 5) &&
- (dlsch0->harq_processes[harq_pid]->dl_power_off==0) &&
- (ue->use_ia_receiver ==1)) {
- dual_stream_UE = 1;
- eNB_id_i = ue->n_connected_eNB;
- i_mod = dlsch0->harq_processes[harq_pid]->Qm;
+ if ((pdsch==PDSCH) &&
+ (ue->transmission_mode[eNB_id] == 5) &&
+ (dlsch0->harq_processes[harq_pid]->dl_power_off==0) &&
+ (ue->use_ia_receiver ==1)) {
+ dual_stream_UE = 1;
+ eNB_id_i = ue->n_connected_eNB;
+ i_mod = dlsch0->harq_processes[harq_pid]->Qm;
}
else if((pdsch==PDSCH) && (ue->transmission_mode[eNB_id]==3))
{
@@ -3278,9 +3275,9 @@ void ue_pdsch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, PDSC
i_mod = 0;
}
else {
- dual_stream_UE = 0;
- eNB_id_i = eNB_id+1;
- i_mod = 0;
+ dual_stream_UE = 0;
+ eNB_id_i = eNB_id+1;
+ i_mod = 0;
}
//TM7 UE specific channel estimation here!!!
@@ -3293,29 +3290,29 @@ void ue_pdsch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, PDSC
LOG_E(PHY,"[UE %d]Beamforming channel estimation not supported yet for TM7 extented CP.\n",ue->Mod_id);
}
}
-
+
if ((m==s0) && (m<4))
- first_symbol_flag = 1;
+ first_symbol_flag = 1;
else
- first_symbol_flag = 0;
+ first_symbol_flag = 0;
start_meas(&ue->dlsch_llr_stats);
// process DLSCH received in first slot
rx_pdsch(ue,
- pdsch,
- eNB_id,
- eNB_id_i,
- proc->frame_rx,
- subframe_rx, // subframe,
- m,
- first_symbol_flag,
- dual_stream_UE,
- i_mod,
- dlsch0->current_harq_pid);
+ pdsch,
+ eNB_id,
+ eNB_id_i,
+ proc->frame_rx,
+ subframe_rx, // subframe,
+ m,
+ first_symbol_flag,
+ dual_stream_UE,
+ i_mod,
+ dlsch0->current_harq_pid);
stop_meas(&ue->dlsch_llr_stats);
} // CRNTI active
}
-}
+}
void process_rar(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, runmode_t mode, int abstraction_flag) {
@@ -3327,71 +3324,71 @@ void process_rar(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, runmode_t mo
uint8_t *rar;
LOG_D(PHY,"[UE %d][RAPROC] Frame %d subframe %d Received RAR mode %d\n",
- ue->Mod_id,
- frame_rx,
- subframe_rx, ue->UE_mode[eNB_id]);
-
-
+ ue->Mod_id,
+ frame_rx,
+ subframe_rx, ue->UE_mode[eNB_id]);
+
+
if (ue->mac_enabled == 1) {
- if ((ue->UE_mode[eNB_id] != PUSCH) &&
- (ue->prach_resources[eNB_id]->Msg3!=NULL)) {
+ if ((ue->UE_mode[eNB_id] != PUSCH) &&
+ (ue->prach_resources[eNB_id]->Msg3!=NULL)) {
LOG_D(PHY,"[UE %d][RAPROC] Frame %d subframe %d Invoking MAC for RAR (current preamble %d)\n",
- ue->Mod_id,frame_rx,
- subframe_rx,
- ue->prach_resources[eNB_id]->ra_PreambleIndex);
-
+ ue->Mod_id,frame_rx,
+ subframe_rx,
+ ue->prach_resources[eNB_id]->ra_PreambleIndex);
+
timing_advance = mac_xface->ue_process_rar(ue->Mod_id,
- ue->CC_id,
- frame_rx,
- ue->prach_resources[eNB_id]->ra_RNTI,
- dlsch0->harq_processes[0]->b,
- &ue->pdcch_vars[eNB_id]->crnti,
- ue->prach_resources[eNB_id]->ra_PreambleIndex);
-
-
+ ue->CC_id,
+ frame_rx,
+ ue->prach_resources[eNB_id]->ra_RNTI,
+ dlsch0->harq_processes[0]->b,
+ &ue->pdcch_vars[eNB_id]->crnti,
+ ue->prach_resources[eNB_id]->ra_PreambleIndex);
+
+
if (timing_advance!=0xffff) {
-
- LOG_D(PHY,"[UE %d][RAPROC] Frame %d subframe %d Got rnti %x and timing advance %d from RAR\n",
- ue->Mod_id,
- frame_rx,
- subframe_rx,
- ue->pdcch_vars[eNB_id]->crnti,
- timing_advance);
-
+
+ LOG_D(PHY,"[UE %d][RAPROC] Frame %d subframe %d Got rnti %x and timing advance %d from RAR\n",
+ ue->Mod_id,
+ frame_rx,
+ subframe_rx,
+ ue->pdcch_vars[eNB_id]->crnti,
+ timing_advance);
+
// remember this c-rnti is still a tc-rnti
- ue->pdcch_vars[eNB_id]->crnti_is_temporary = 1;
-
- //timing_advance = 0;
- process_timing_advance_rar(ue,proc,timing_advance);
-
- if (mode!=debug_prach) {
- ue->ulsch_Msg3_active[eNB_id]=1;
- get_Msg3_alloc(&ue->frame_parms,
- subframe_rx,
- frame_rx,
- &ue->ulsch_Msg3_frame[eNB_id],
- &ue->ulsch_Msg3_subframe[eNB_id]);
-
- LOG_D(PHY,"[UE %d][RAPROC] Got Msg3_alloc Frame %d subframe %d: Msg3_frame %d, Msg3_subframe %d\n",
- ue->Mod_id,
- frame_rx,
- subframe_rx,
- ue->ulsch_Msg3_frame[eNB_id],
- ue->ulsch_Msg3_subframe[eNB_id]);
- harq_pid = subframe2harq_pid(&ue->frame_parms,
- ue->ulsch_Msg3_frame[eNB_id],
- ue->ulsch_Msg3_subframe[eNB_id]);
- ue->ulsch[eNB_id]->harq_processes[harq_pid]->round = 0;
-
- ue->UE_mode[eNB_id] = RA_RESPONSE;
- // ue->Msg3_timer[eNB_id] = 10;
- ue->ulsch[eNB_id]->power_offset = 6;
- ue->ulsch_no_allocation_counter[eNB_id] = 0;
- }
+ ue->pdcch_vars[eNB_id]->crnti_is_temporary = 1;
+
+ //timing_advance = 0;
+ process_timing_advance_rar(ue,proc,timing_advance);
+
+ if (mode!=debug_prach) {
+ ue->ulsch_Msg3_active[eNB_id]=1;
+ get_Msg3_alloc(&ue->frame_parms,
+ subframe_rx,
+ frame_rx,
+ &ue->ulsch_Msg3_frame[eNB_id],
+ &ue->ulsch_Msg3_subframe[eNB_id]);
+
+ LOG_D(PHY,"[UE %d][RAPROC] Got Msg3_alloc Frame %d subframe %d: Msg3_frame %d, Msg3_subframe %d\n",
+ ue->Mod_id,
+ frame_rx,
+ subframe_rx,
+ ue->ulsch_Msg3_frame[eNB_id],
+ ue->ulsch_Msg3_subframe[eNB_id]);
+ harq_pid = subframe2harq_pid(&ue->frame_parms,
+ ue->ulsch_Msg3_frame[eNB_id],
+ ue->ulsch_Msg3_subframe[eNB_id]);
+ ue->ulsch[eNB_id]->harq_processes[harq_pid]->round = 0;
+
+ ue->UE_mode[eNB_id] = RA_RESPONSE;
+ // ue->Msg3_timer[eNB_id] = 10;
+ ue->ulsch[eNB_id]->power_offset = 6;
+ ue->ulsch_no_allocation_counter[eNB_id] = 0;
+ }
} else { // PRACH preamble doesn't match RAR
- LOG_W(PHY,"[UE %d][RAPROC] Received RAR preamble (%d) doesn't match !!!\n",
- ue->Mod_id,
- ue->prach_resources[eNB_id]->ra_PreambleIndex);
+ LOG_W(PHY,"[UE %d][RAPROC] Received RAR preamble (%d) doesn't match !!!\n",
+ ue->Mod_id,
+ ue->prach_resources[eNB_id]->ra_PreambleIndex);
}
} // mode != PUSCH
}
@@ -3400,18 +3397,18 @@ void process_rar(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, runmode_t mo
timing_advance = ((((uint16_t)(rar[0]&0x7f))<<4) + (rar[1]>>4));
process_timing_advance_rar(ue,proc,timing_advance);
}
-
+
}
-void ue_dlsch_procedures(PHY_VARS_UE *ue,
- UE_rxtx_proc_t *proc,
- int eNB_id,
- PDSCH_t pdsch,
- LTE_UE_DLSCH_t *dlsch0,
- LTE_UE_DLSCH_t *dlsch1,
- int *dlsch_errors,
- runmode_t mode,
- int abstraction_flag) {
+void ue_dlsch_procedures(PHY_VARS_UE *ue,
+ UE_rxtx_proc_t *proc,
+ int eNB_id,
+ PDSCH_t pdsch,
+ LTE_UE_DLSCH_t *dlsch0,
+ LTE_UE_DLSCH_t *dlsch1,
+ int *dlsch_errors,
+ runmode_t mode,
+ int abstraction_flag) {
int harq_pid;
int frame_rx = proc->frame_rx;
@@ -3469,17 +3466,16 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
break;
}
-
if (frame_rx < *dlsch_errors)
*dlsch_errors=0;
if (pdsch==RA_PDSCH) {
if (ue->prach_resources[eNB_id]!=NULL)
- dlsch0->rnti = ue->prach_resources[eNB_id]->ra_RNTI;
+ dlsch0->rnti = ue->prach_resources[eNB_id]->ra_RNTI;
else {
- LOG_E(PHY,"[UE %d] Frame %d, subframe %d: FATAL, prach_resources is NULL\n",ue->Mod_id,frame_rx,subframe_rx);
- mac_xface->macphy_exit("prach_resources is NULL");
- return;
+ LOG_E(PHY,"[UE %d] Frame %d, subframe %d: FATAL, prach_resources is NULL\n",ue->Mod_id,frame_rx,subframe_rx);
+ mac_xface->macphy_exit("prach_resources is NULL");
+ return;
}
}
@@ -3487,24 +3483,24 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
// start turbo decode for CW 0
dlsch0->harq_processes[harq_pid]->G = get_G(&ue->frame_parms,
- dlsch0->harq_processes[harq_pid]->nb_rb,
- dlsch0->harq_processes[harq_pid]->rb_alloc_even,
- dlsch0->harq_processes[harq_pid]->Qm,
- dlsch0->harq_processes[harq_pid]->Nl,
- ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
- frame_rx,
- subframe_rx,
- ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id]);
+ dlsch0->harq_processes[harq_pid]->nb_rb,
+ dlsch0->harq_processes[harq_pid]->rb_alloc_even,
+ dlsch0->harq_processes[harq_pid]->Qm,
+ dlsch0->harq_processes[harq_pid]->Nl,
+ ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
+ frame_rx,
+ subframe_rx,
+ ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id]);
start_meas(&ue->dlsch_unscrambling_stats);
dlsch_unscrambling(&ue->frame_parms,
- 0,
- dlsch0,
- dlsch0->harq_processes[harq_pid]->G,
- pdsch_vars->llr[0],
- 0,
- subframe_rx<<1);
+ 0,
+ dlsch0,
+ dlsch0->harq_processes[harq_pid]->G,
+ pdsch_vars->llr[0],
+ 0,
+ subframe_rx<<1);
stop_meas(&ue->dlsch_unscrambling_stats);
-
+
//LOG_I(PHY,"start turbo decode for CW 0 --> nb_rb %d \n", dlsch0->harq_processes[harq_pid]->nb_rb);
//LOG_I(PHY,"start turbo decode for CW 0 --> rb_alloc_even %x \n", dlsch0->harq_processes[harq_pid]->rb_alloc_even);
//LOG_I(PHY,"start turbo decode for CW 0 --> Qm %d \n", dlsch0->harq_processes[harq_pid]->Qm);
@@ -3514,15 +3510,15 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
start_meas(&ue->dlsch_decoding_stats);
ret = dlsch_decoding(ue,
- pdsch_vars->llr[0],
- &ue->frame_parms,
- dlsch0,
- dlsch0->harq_processes[harq_pid],
- frame_rx,
- subframe_rx,
- harq_pid,
- pdsch==PDSCH?1:0,
- dlsch0->harq_processes[harq_pid]->TBS>256?1:0);
+ pdsch_vars->llr[0],
+ &ue->frame_parms,
+ dlsch0,
+ dlsch0->harq_processes[harq_pid],
+ frame_rx,
+ subframe_rx,
+ harq_pid,
+ pdsch==PDSCH?1:0,
+ dlsch0->harq_processes[harq_pid]->TBS>256?1:0);
stop_meas(&ue->dlsch_decoding_stats);
//printf(" --> Unscrambling for CW0 %5.3f\n",
@@ -3579,100 +3575,99 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
// (ue->dlsch_decoding_stats.p_time)/(cpuf*1000.0));
}
}
-
+
else {
LOG_D(PHY,"Calling dlsch_decoding_emul ...\n");
#ifdef PHY_ABSTRACTION
ret = dlsch_decoding_emul(ue,
- subframe_rx,
- pdsch,
- eNB_id);
+ subframe_rx,
+ pdsch,
+ eNB_id);
#endif
}
-
- // Check CRC for CW 0
+
if (ret == (1+dlsch0->max_turbo_iterations)) {
*dlsch_errors=*dlsch_errors+1;
-
+
if(dlsch0->rnti != 0xffff)
{
+
LOG_D(PHY,"[UE %d][PDSCH %x/%d] AbsSubframe %d.%d : DLSCH CW0 in error (rv %d,mcs %d,TBS %d)\n",
- ue->Mod_id,dlsch0->rnti,
- harq_pid,frame_rx,subframe_rx,
- dlsch0->harq_processes[harq_pid]->rvidx,
- dlsch0->harq_processes[harq_pid]->mcs,
- dlsch0->harq_processes[harq_pid]->TBS);
+ ue->Mod_id,dlsch0->rnti,
+ harq_pid,frame_rx,subframe_rx,
+ dlsch0->harq_processes[harq_pid]->rvidx,
+ dlsch0->harq_processes[harq_pid]->mcs,
+ dlsch0->harq_processes[harq_pid]->TBS);
}
-
+
} else {
if(dlsch0->rnti != 0xffff)
{
LOG_D(PHY,"[UE %d][PDSCH %x/%d] AbsSubframe %d.%d : Received DLSCH CW0 (rv %d,mcs %d,TBS %d)\n",
- ue->Mod_id,dlsch0->rnti,
- harq_pid,frame_rx,subframe_rx,
- dlsch0->harq_processes[harq_pid]->rvidx,
- dlsch0->harq_processes[harq_pid]->mcs,
- dlsch0->harq_processes[harq_pid]->TBS);
+ ue->Mod_id,dlsch0->rnti,
+ harq_pid,frame_rx,subframe_rx,
+ dlsch0->harq_processes[harq_pid]->rvidx,
+ dlsch0->harq_processes[harq_pid]->mcs,
+ dlsch0->harq_processes[harq_pid]->TBS);
}
#ifdef DEBUG_DLSCH
int j;
LOG_D(PHY,"dlsch harq_pid %d (rx): \n",dlsch0->current_harq_pid);
-
+
for (j=0; j<dlsch0->harq_processes[dlsch0->current_harq_pid]->TBS>>3; j++)
- LOG_T(PHY,"%x.",dlsch0->harq_processes[dlsch0->current_harq_pid]->b[j]);
-
+ LOG_T(PHY,"%x.",dlsch0->harq_processes[dlsch0->current_harq_pid]->b[j]);
+
LOG_T(PHY,"\n");
#endif
-
+
if (ue->mac_enabled == 1) {
- switch (pdsch) {
- case PDSCH:
- mac_xface->ue_send_sdu(ue->Mod_id,
- CC_id,
- frame_rx,
+ switch (pdsch) {
+ case PDSCH:
+ mac_xface->ue_send_sdu(ue->Mod_id,
+ CC_id,
+ frame_rx,
subframe_rx,
- dlsch0->harq_processes[dlsch0->current_harq_pid]->b,
- dlsch0->harq_processes[dlsch0->current_harq_pid]->TBS>>3,
- eNB_id);
- break;
- case SI_PDSCH:
- mac_xface->ue_decode_si(ue->Mod_id,
- CC_id,
- frame_rx,
- eNB_id,
- ue->dlsch_SI[eNB_id]->harq_processes[0]->b,
- ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS>>3);
- break;
- case P_PDSCH:
- mac_xface->ue_decode_p(ue->Mod_id,
- CC_id,
- frame_rx,
- eNB_id,
- ue->dlsch_SI[eNB_id]->harq_processes[0]->b,
- ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS>>3);
- break;
- case RA_PDSCH:
- process_rar(ue,proc,eNB_id,mode,abstraction_flag);
- break;
- case PDSCH1:
- LOG_E(PHY,"Shouldn't have PDSCH1 yet, come back later\n");
- AssertFatal(1==0,"exiting");
- break;
- case PMCH:
- LOG_E(PHY,"Shouldn't have PMCH here\n");
- AssertFatal(1==0,"exiting");
- break;
- }
+ dlsch0->harq_processes[dlsch0->current_harq_pid]->b,
+ dlsch0->harq_processes[dlsch0->current_harq_pid]->TBS>>3,
+ eNB_id);
+ break;
+ case SI_PDSCH:
+ mac_xface->ue_decode_si(ue->Mod_id,
+ CC_id,
+ frame_rx,
+ eNB_id,
+ ue->dlsch_SI[eNB_id]->harq_processes[0]->b,
+ ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS>>3);
+ break;
+ case P_PDSCH:
+ mac_xface->ue_decode_p(ue->Mod_id,
+ CC_id,
+ frame_rx,
+ eNB_id,
+ ue->dlsch_SI[eNB_id]->harq_processes[0]->b,
+ ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS>>3);
+ break;
+ case RA_PDSCH:
+ process_rar(ue,proc,eNB_id,mode,abstraction_flag);
+ break;
+ case PDSCH1:
+ LOG_E(PHY,"Shouldn't have PDSCH1 yet, come back later\n");
+ AssertFatal(1==0,"exiting");
+ break;
+ case PMCH:
+ LOG_E(PHY,"Shouldn't have PMCH here\n");
+ AssertFatal(1==0,"exiting");
+ break;
+ }
}
ue->total_TBS[eNB_id] = ue->total_TBS[eNB_id] +
- dlsch0->harq_processes[dlsch0->current_harq_pid]->TBS;
+ dlsch0->harq_processes[dlsch0->current_harq_pid]->TBS;
ue->total_received_bits[eNB_id] = ue->total_TBS[eNB_id] +
- dlsch0->harq_processes[dlsch0->current_harq_pid]->TBS;
+ dlsch0->harq_processes[dlsch0->current_harq_pid]->TBS;
}
-
// Check CRC for CW 1
if(is_cw1_active)
{
@@ -3716,27 +3711,26 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
}
}
}
-
-
+
#ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[UE %d][PDSCH %x/%d] Frame %d subframe %d: PDSCH/DLSCH decoding iter %d (mcs %d, rv %d, TBS %d)\n",
- ue->Mod_id,
- dlsch0->rnti,harq_pid,
- frame_rx,subframe_rx,ret,
- dlsch0->harq_processes[harq_pid]->mcs,
- dlsch0->harq_processes[harq_pid]->rvidx,
- dlsch0->harq_processes[harq_pid]->TBS);
-
+ ue->Mod_id,
+ dlsch0->rnti,harq_pid,
+ frame_rx,subframe_rx,ret,
+ dlsch0->harq_processes[harq_pid]->mcs,
+ dlsch0->harq_processes[harq_pid]->rvidx,
+ dlsch0->harq_processes[harq_pid]->TBS);
+
if (frame_rx%100==0) {
LOG_D(PHY,"[UE %d][PDSCH %x] Frame %d subframe %d dlsch_errors %d, dlsch_received %d, dlsch_fer %d, current_dlsch_cqi %d\n",
- ue->Mod_id,dlsch0->rnti,
- frame_rx,subframe_rx,
- ue->dlsch_errors[eNB_id],
- ue->dlsch_received[eNB_id],
- ue->dlsch_fer[eNB_id],
- ue->measurements.wideband_cqi_tot[eNB_id]);
+ ue->Mod_id,dlsch0->rnti,
+ frame_rx,subframe_rx,
+ ue->dlsch_errors[eNB_id],
+ ue->dlsch_received[eNB_id],
+ ue->dlsch_fer[eNB_id],
+ ue->measurements.wideband_cqi_tot[eNB_id]);
}
-
+
#endif
}
@@ -3744,15 +3738,15 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
}
int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode,
- relaying_type_t r_type,PHY_VARS_RN *phy_vars_rn) {
-
+ relaying_type_t r_type,PHY_VARS_RN *phy_vars_rn) {
+
int l,l2;
int pilot1;
int pmch_flag=0;
int frame_rx = proc->frame_rx;
int subframe_rx = proc->subframe_rx;
-
+
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_IN);
@@ -3784,11 +3778,11 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
if (ue->dlsch_ra[eNB_id])
ue->dlsch_ra[eNB_id]->active = 0;
-
+
#ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[%s %d] Frame %d subframe %d: Doing phy_procedures_UE_RX\n",
- (r_type == multicast_relay) ? "RN/UE" : "UE",
- ue->Mod_id,frame_rx, subframe_rx);
+ (r_type == multicast_relay) ? "RN/UE" : "UE",
+ ue->Mod_id,frame_rx, subframe_rx);
#endif
if (ue->frame_parms.Ncp == 0) { // normal prefix
@@ -3796,8 +3790,8 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
} else { // extended prefix
pilot1 = 3;
}
-
-
+
+
if (subframe_select(&ue->frame_parms,subframe_rx) == SF_S) { // S-subframe, do first 5 symbols only
l2 = 5;
} else if (pmch_flag == 1) { // do first 2 symbols only
@@ -3805,7 +3799,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
} else { // normal subframe, last symbol to be processed is the first of the second slot
l2 = (ue->frame_parms.symbols_per_tti/2)-1;
}
-
+
int prev_subframe_rx = (subframe_rx - 1)<0? 9: (subframe_rx - 1);
if (subframe_select(&ue->frame_parms,prev_subframe_rx) != SF_DL) {
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -3823,30 +3817,30 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
start_meas(&ue->ofdm_demod_stats);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
slot_fep(ue,
- l,
- (subframe_rx<<1),
- 0,
- 0,
- 0);
+ l,
+ (subframe_rx<<1),
+ 0,
+ 0,
+ 0);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
stop_meas(&ue->ofdm_demod_stats);
}
-
+
ue_measurement_procedures(l-1,ue,proc,eNB_id,(subframe_rx<<1),abstraction_flag,mode);
if ((l==pilot1) ||
- ((pmch_flag==1)&(l==l2))) {
+ ((pmch_flag==1)&(l==l2))) {
LOG_D(PHY,"[UE %d] Frame %d: Calling pdcch procedures (eNB %d)\n",ue->Mod_id,frame_rx,eNB_id);
-
+
if (ue_pdcch_procedures(eNB_id,ue,proc,abstraction_flag) == -1) {
- LOG_E(PHY,"[UE %d] Frame %d, subframe %d: Error in pdcch procedures\n",ue->Mod_id,frame_rx,subframe_rx);
- return(-1);
+ LOG_E(PHY,"[UE %d] Frame %d, subframe %d: Error in pdcch procedures\n",ue->Mod_id,frame_rx,subframe_rx);
+ return(-1);
}
LOG_D(PHY,"num_pdcch_symbols %d\n",ue->pdcch_vars[eNB_id]->num_pdcch_symbols);
}
-
+
} // for l=1..l2
- ue_measurement_procedures(l-1,ue,proc,eNB_id,(subframe_rx<<1),abstraction_flag,mode);
-
+ ue_measurement_procedures(l-1,ue,proc,eNB_id,(subframe_rx<<1),abstraction_flag,mode);
+
// If this is PMCH, call procedures and return
if (pmch_flag == 1) {
ue_pmch_procedures(ue,proc,eNB_id,abstraction_flag);
@@ -3854,43 +3848,44 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
}
slot_fep(ue,
- 0,
- 1+(subframe_rx<<1),
- 0,
- 0,
- 0);
+ 0,
+ 1+(subframe_rx<<1),
+ 0,
+ 0,
+ 0);
// first slot has been processed (FFTs + Channel Estimation, PCFICH/PHICH/PDCCH)
stop_meas(&ue->generic_stat);
//printf("[SFN %d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
start_meas(&ue->generic_stat);
+
// do procedures for C-RNTI
if (ue->dlsch[subframe_rx&0x1][eNB_id][0]->active == 1) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
ue_pdsch_procedures(ue,
- proc,
- eNB_id,
- PDSCH,
- ue->dlsch[subframe_rx&0x1][eNB_id][0],
- NULL,
- ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
- ue->frame_parms.symbols_per_tti>>1,
- abstraction_flag);
+ proc,
+ eNB_id,
+ PDSCH,
+ ue->dlsch[subframe_rx&0x1][eNB_id][0],
+ NULL,
+ ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
+ ue->frame_parms.symbols_per_tti>>1,
+ abstraction_flag);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_OUT);
}
// do procedures for SI-RNTI
if ((ue->dlsch_SI[eNB_id]) && (ue->dlsch_SI[eNB_id]->active == 1)) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_SI, VCD_FUNCTION_IN);
ue_pdsch_procedures(ue,
- proc,
- eNB_id,
- SI_PDSCH,
- ue->dlsch_SI[eNB_id],
- NULL,
- ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
- ue->frame_parms.symbols_per_tti>>1,
- abstraction_flag);
+ proc,
+ eNB_id,
+ SI_PDSCH,
+ ue->dlsch_SI[eNB_id],
+ NULL,
+ ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
+ ue->frame_parms.symbols_per_tti>>1,
+ abstraction_flag);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_SI, VCD_FUNCTION_OUT);
}
@@ -3898,14 +3893,14 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
if ((ue->dlsch_p[eNB_id]) && (ue->dlsch_p[eNB_id]->active == 1)) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_P, VCD_FUNCTION_IN);
ue_pdsch_procedures(ue,
- proc,
- eNB_id,
- P_PDSCH,
- ue->dlsch_p[eNB_id],
- NULL,
- ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
- ue->frame_parms.symbols_per_tti>>1,
- abstraction_flag);
+ proc,
+ eNB_id,
+ P_PDSCH,
+ ue->dlsch_p[eNB_id],
+ NULL,
+ ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
+ ue->frame_parms.symbols_per_tti>>1,
+ abstraction_flag);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_P, VCD_FUNCTION_OUT);
}
@@ -3913,34 +3908,34 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
if ((ue->dlsch_ra[eNB_id]) && (ue->dlsch_ra[eNB_id]->active == 1)) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_RA, VCD_FUNCTION_IN);
ue_pdsch_procedures(ue,
- proc,
- eNB_id,
- RA_PDSCH,
- ue->dlsch_ra[eNB_id],
- NULL,
- ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
- ue->frame_parms.symbols_per_tti>>1,
- abstraction_flag);
+ proc,
+ eNB_id,
+ RA_PDSCH,
+ ue->dlsch_ra[eNB_id],
+ NULL,
+ ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
+ ue->frame_parms.symbols_per_tti>>1,
+ abstraction_flag);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_RA, VCD_FUNCTION_OUT);
- }
-
+ }
+
if (subframe_select(&ue->frame_parms,subframe_rx) != SF_S) { // do front-end processing for second slot, and first symbol of next subframe
for (l=1; l<ue->frame_parms.symbols_per_tti>>1; l++) {
if (abstraction_flag == 0) {
- start_meas(&ue->ofdm_demod_stats);
- VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
- slot_fep(ue,
- l,
- 1+(subframe_rx<<1),
- 0,
- 0,
- 0);
- VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
- stop_meas(&ue->ofdm_demod_stats);
+ start_meas(&ue->ofdm_demod_stats);
+ VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
+ slot_fep(ue,
+ l,
+ 1+(subframe_rx<<1),
+ 0,
+ 0,
+ 0);
+ VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
+ stop_meas(&ue->ofdm_demod_stats);
}
-
+
ue_measurement_procedures(l-1,ue,proc,eNB_id,1+(subframe_rx<<1),abstraction_flag,mode);
-
+
} // for l=1..l2
// do first symbol of next downlink subframe for channel estimation
@@ -3964,32 +3959,34 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
{
ue_pbch_procedures(eNB_id,ue,proc,abstraction_flag);
}
-
+
+
+
// do procedures for C-RNTI
if (ue->dlsch[subframe_rx&0x1][eNB_id][0]->active == 1) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
start_meas(&ue->pdsch_procedures_stat);
ue_pdsch_procedures(ue,
- proc,
- eNB_id,
- PDSCH,
- ue->dlsch[subframe_rx&0x1][eNB_id][0],
- NULL,
- 1+(ue->frame_parms.symbols_per_tti>>1),
- ue->frame_parms.symbols_per_tti-1,
- abstraction_flag);
+ proc,
+ eNB_id,
+ PDSCH,
+ ue->dlsch[subframe_rx&0x1][eNB_id][0],
+ NULL,
+ 1+(ue->frame_parms.symbols_per_tti>>1),
+ ue->frame_parms.symbols_per_tti-1,
+ abstraction_flag);
stop_meas(&ue->pdsch_procedures_stat);
start_meas(&ue->dlsch_procedures_stat);
ue_dlsch_procedures(ue,
- proc,
- eNB_id,
- PDSCH,
- ue->dlsch[subframe_rx&0x1][eNB_id][0],
- ue->dlsch[subframe_rx&0x1][eNB_id][1],
- &ue->dlsch_errors[eNB_id],
- mode,
- abstraction_flag);
+ proc,
+ eNB_id,
+ PDSCH,
+ ue->dlsch[subframe_rx&0x1][eNB_id][0],
+ ue->dlsch[subframe_rx&0x1][eNB_id][1],
+ &ue->dlsch_errors[eNB_id],
+ mode,
+ abstraction_flag);
stop_meas(&ue->dlsch_procedures_stat);
//printf("[SFN %d] Slot1: Pdsch Proc %5.2f\n",subframe_rx,ue->pdsch_procedures_stat.p_time/(cpuf*1000.0));
//printf("[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f\n",subframe_rx,ue->dlsch_procedures_stat.p_time/(cpuf*1000.0));
@@ -4003,77 +4000,77 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
// do procedures for SI-RNTI
if ((ue->dlsch_SI[eNB_id]) && (ue->dlsch_SI[eNB_id]->active == 1)) {
ue_pdsch_procedures(ue,
- proc,
- eNB_id,
- SI_PDSCH,
- ue->dlsch_SI[eNB_id],
- NULL,
- 1+(ue->frame_parms.symbols_per_tti>>1),
- ue->frame_parms.symbols_per_tti-1,
- abstraction_flag);
+ proc,
+ eNB_id,
+ SI_PDSCH,
+ ue->dlsch_SI[eNB_id],
+ NULL,
+ 1+(ue->frame_parms.symbols_per_tti>>1),
+ ue->frame_parms.symbols_per_tti-1,
+ abstraction_flag);
ue_dlsch_procedures(ue,
- proc,
- eNB_id,
- SI_PDSCH,
- ue->dlsch_SI[eNB_id],
- NULL,
- &ue->dlsch_SI_errors[eNB_id],
- mode,
- abstraction_flag);
+ proc,
+ eNB_id,
+ SI_PDSCH,
+ ue->dlsch_SI[eNB_id],
+ NULL,
+ &ue->dlsch_SI_errors[eNB_id],
+ mode,
+ abstraction_flag);
ue->dlsch_SI[eNB_id]->active = 0;
}
// do procedures for P-RNTI
if ((ue->dlsch_p[eNB_id]) && (ue->dlsch_p[eNB_id]->active == 1)) {
ue_pdsch_procedures(ue,
- proc,
- eNB_id,
- P_PDSCH,
- ue->dlsch_p[eNB_id],
- NULL,
- 1+(ue->frame_parms.symbols_per_tti>>1),
- ue->frame_parms.symbols_per_tti-1,
- abstraction_flag);
+ proc,
+ eNB_id,
+ P_PDSCH,
+ ue->dlsch_p[eNB_id],
+ NULL,
+ 1+(ue->frame_parms.symbols_per_tti>>1),
+ ue->frame_parms.symbols_per_tti-1,
+ abstraction_flag);
ue_dlsch_procedures(ue,
- proc,
- eNB_id,
- P_PDSCH,
- ue->dlsch_p[eNB_id],
- NULL,
- &ue->dlsch_p_errors[eNB_id],
- mode,
- abstraction_flag);
+ proc,
+ eNB_id,
+ P_PDSCH,
+ ue->dlsch_p[eNB_id],
+ NULL,
+ &ue->dlsch_p_errors[eNB_id],
+ mode,
+ abstraction_flag);
ue->dlsch_p[eNB_id]->active = 0;
}
// do procedures for RA-RNTI
if ((ue->dlsch_ra[eNB_id]) && (ue->dlsch_ra[eNB_id]->active == 1)) {
ue_pdsch_procedures(ue,
- proc,
- eNB_id,
- RA_PDSCH,
- ue->dlsch_ra[eNB_id],
- NULL,
- 1+(ue->frame_parms.symbols_per_tti>>1),
- ue->frame_parms.symbols_per_tti-1,
- abstraction_flag);
+ proc,
+ eNB_id,
+ RA_PDSCH,
+ ue->dlsch_ra[eNB_id],
+ NULL,
+ 1+(ue->frame_parms.symbols_per_tti>>1),
+ ue->frame_parms.symbols_per_tti-1,
+ abstraction_flag);
ue_dlsch_procedures(ue,
- proc,
- eNB_id,
- RA_PDSCH,
- ue->dlsch_ra[eNB_id],
- NULL,
- &ue->dlsch_ra_errors[eNB_id],
- mode,
- abstraction_flag);
+ proc,
+ eNB_id,
+ RA_PDSCH,
+ ue->dlsch_ra[eNB_id],
+ NULL,
+ &ue->dlsch_ra_errors[eNB_id],
+ mode,
+ abstraction_flag);
ue->dlsch_ra[eNB_id]->active = 0;
}
if (subframe_rx==9) {
if (frame_rx % 10 == 0) {
if ((ue->dlsch_received[eNB_id] - ue->dlsch_received_last[eNB_id]) != 0)
- ue->dlsch_fer[eNB_id] = (100*(ue->dlsch_errors[eNB_id] - ue->dlsch_errors_last[eNB_id]))/(ue->dlsch_received[eNB_id] - ue->dlsch_received_last[eNB_id]);
+ ue->dlsch_fer[eNB_id] = (100*(ue->dlsch_errors[eNB_id] - ue->dlsch_errors_last[eNB_id]))/(ue->dlsch_received[eNB_id] - ue->dlsch_received_last[eNB_id]);
ue->dlsch_errors_last[eNB_id] = ue->dlsch_errors[eNB_id];
ue->dlsch_received_last[eNB_id] = ue->dlsch_received[eNB_id];
@@ -4083,8 +4080,8 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
ue->bitrate[eNB_id] = (ue->total_TBS[eNB_id] - ue->total_TBS_last[eNB_id])*100;
ue->total_TBS_last[eNB_id] = ue->total_TBS[eNB_id];
LOG_D(PHY,"[UE %d] Calculating bitrate Frame %d: total_TBS = %d, total_TBS_last = %d, bitrate %f kbits\n",
- ue->Mod_id,frame_rx,ue->total_TBS[eNB_id],
- ue->total_TBS_last[eNB_id],(float) ue->bitrate[eNB_id]/1000.0);
+ ue->Mod_id,frame_rx,ue->total_TBS[eNB_id],
+ ue->total_TBS_last[eNB_id],(float) ue->bitrate[eNB_id]/1000.0);
#if UE_AUTOTEST_TRACE
if ((frame_rx % 100 == 0)) {
@@ -4101,7 +4098,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
phy_procedures_emos_UE_RX(ue,slot,eNB_id);
#endif
-
+
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
stop_meas(&ue->phy_proc_rx[subframe_rx&0x1]);
@@ -4109,39 +4106,39 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
return (0);
}
-
+
#ifdef Rel10
int phy_procedures_RN_UE_RX(uint8_t slot_rx, uint8_t next_slot, relaying_type_t r_type)
{
-
+
int do_proc =0; // do nothing by default
-
+
switch(r_type) {
case no_relay:
do_proc=no_relay; // perform the normal UE operation
break;
-
+
case multicast_relay:
if (slot_rx > 12)
do_proc = 0; // do nothing
else // SF#1, SF#2, SF3, SF#3, SF#4, SF#5, SF#6(do rx slot 12)
do_proc = multicast_relay ; // do PHY procedures UE RX
-
+
break;
-
+
default: // should'not be here
LOG_W(PHY,"Not supported relay type %d, do nothing \n", r_type);
do_proc= 0;
break;
}
-
+
return do_proc;
}
#endif
-
-
+
+
void phy_procedures_UE_lte(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode,
- relaying_type_t r_type, PHY_VARS_RN *phy_vars_rn)
+ relaying_type_t r_type, PHY_VARS_RN *phy_vars_rn)
{
#if defined(ENABLE_ITTI)
MessageDef *msg_p;
@@ -4150,21 +4147,21 @@ void phy_procedures_UE_lte(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,u
unsigned int Mod_id;
int result;
#endif
-
+
int frame_rx = proc->frame_rx;
int frame_tx = proc->frame_tx;
int subframe_rx = proc->subframe_rx;
int subframe_tx = proc->subframe_tx;
#undef DEBUG_PHY_PROC
-
+
UE_L2_STATE_t ret;
int slot;
if (ue->mac_enabled == 0) {
ue->UE_mode[eNB_id]=PUSCH;
}
-
-
+
+
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_LTE,1);
start_meas(&ue->phy_proc);
#if defined(ENABLE_ITTI)
@@ -4172,61 +4169,61 @@ void phy_procedures_UE_lte(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,u
do {
// Checks if a message has been sent to PHY sub-task
itti_poll_msg (TASK_PHY_UE, &msg_p);
-
+
if (msg_p != NULL) {
msg_name = ITTI_MSG_NAME (msg_p);
instance = ITTI_MSG_INSTANCE (msg_p);
Mod_id = instance - NB_eNB_INST;
-
+
switch (ITTI_MSG_ID(msg_p)) {
case PHY_FIND_CELL_REQ:
- LOG_I(PHY, "[UE %d] Received %s\n", Mod_id, msg_name);
-
- /* TODO process the message */
- break;
-
+ LOG_I(PHY, "[UE %d] Received %s\n", Mod_id, msg_name);
+
+ /* TODO process the message */
+ break;
+
default:
- LOG_E(PHY, "[UE %d] Received unexpected message %s\n", Mod_id, msg_name);
- break;
+ LOG_E(PHY, "[UE %d] Received unexpected message %s\n", Mod_id, msg_name);
+ break;
}
-
+
result = itti_free (ITTI_MSG_ORIGIN_ID(msg_p), msg_p);
AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
}
} while(msg_p != NULL);
-
+
#endif
-
+
for (slot=0;slot<2;slot++) {
-
+
if ((subframe_select(&ue->frame_parms,subframe_tx)==SF_UL)||
- (ue->frame_parms.frame_type == FDD)) {
+ (ue->frame_parms.frame_type == FDD)) {
phy_procedures_UE_TX(ue,proc,eNB_id,abstraction_flag,mode,r_type);
}
-
+
if ((subframe_select(&ue->frame_parms,subframe_rx)==SF_DL) ||
- (ue->frame_parms.frame_type == FDD)) {
+ (ue->frame_parms.frame_type == FDD)) {
#ifdef Rel10
-
+
if (phy_procedures_RN_UE_RX(subframe_rx, subframe_tx, r_type) != 0 )
#endif
- phy_procedures_UE_RX(ue,proc,eNB_id,abstraction_flag,mode,r_type,phy_vars_rn);
+ phy_procedures_UE_RX(ue,proc,eNB_id,abstraction_flag,mode,r_type,phy_vars_rn);
}
-
+
if ((subframe_select(&ue->frame_parms,subframe_tx)==SF_S) &&
- (slot==1)) {
+ (slot==1)) {
phy_procedures_UE_S_TX(ue,eNB_id,abstraction_flag,r_type);
}
-
+
if ((subframe_select(&ue->frame_parms,subframe_rx)==SF_S) &&
- (slot==0)) {
+ (slot==0)) {
#ifdef Rel10
-
+
if (phy_procedures_RN_UE_RX(subframe_rx, subframe_tx, r_type) != 0 )
#endif
- phy_procedures_UE_RX(ue,proc,eNB_id,abstraction_flag,mode,r_type,phy_vars_rn);
+ phy_procedures_UE_RX(ue,proc,eNB_id,abstraction_flag,mode,r_type,phy_vars_rn);
}
-
+
if (ue->mac_enabled==1) {
if (slot==0) {
ret = mac_xface->ue_scheduler(ue->Mod_id,
@@ -4237,29 +4234,29 @@ void phy_procedures_UE_lte(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,u
subframe_select(&ue->frame_parms,subframe_tx),
eNB_id,
0/*FIXME CC_id*/);
-
- if (ret == CONNECTION_LOST) {
- LOG_E(PHY,"[UE %d] Frame %d, subframe %d RRC Connection lost, returning to PRACH\n",ue->Mod_id,
- frame_rx,subframe_tx);
- ue->UE_mode[eNB_id] = PRACH;
- // mac_xface->macphy_exit("Connection lost");
- } else if (ret == PHY_RESYNCH) {
- LOG_E(PHY,"[UE %d] Frame %d, subframe %d RRC Connection lost, trying to resynch\n",
- ue->Mod_id,
- frame_rx,subframe_tx);
- ue->UE_mode[eNB_id] = RESYNCH;
- // mac_xface->macphy_exit("Connection lost");
- } else if (ret == PHY_HO_PRACH) {
- LOG_I(PHY,"[UE %d] Frame %d, subframe %d, return to PRACH and perform a contention-free access\n",
- ue->Mod_id,frame_rx,subframe_tx);
- ue->UE_mode[eNB_id] = PRACH;
- }
+
+ if (ret == CONNECTION_LOST) {
+ LOG_E(PHY,"[UE %d] Frame %d, subframe %d RRC Connection lost, returning to PRACH\n",ue->Mod_id,
+ frame_rx,subframe_tx);
+ ue->UE_mode[eNB_id] = PRACH;
+ // mac_xface->macphy_exit("Connection lost");
+ } else if (ret == PHY_RESYNCH) {
+ LOG_E(PHY,"[UE %d] Frame %d, subframe %d RRC Connection lost, trying to resynch\n",
+ ue->Mod_id,
+ frame_rx,subframe_tx);
+ ue->UE_mode[eNB_id] = RESYNCH;
+ // mac_xface->macphy_exit("Connection lost");
+ } else if (ret == PHY_HO_PRACH) {
+ LOG_I(PHY,"[UE %d] Frame %d, subframe %d, return to PRACH and perform a contention-free access\n",
+ ue->Mod_id,frame_rx,subframe_tx);
+ ue->UE_mode[eNB_id] = PRACH;
+ }
}
}
-
+
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_LTE,0);
stop_meas(&ue->phy_proc);
} // slot
}
-
-
+
+
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c b/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c
index 483331de9fc4be297fcb8ddf082ca7455b62a78b..043aebcc2f346a4aebd61f191e0a86022acca104 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c
@@ -168,6 +168,7 @@ int main(int argc, char **argv)
int hold_rank1_precoder=0;
int tpmi_retr=0;
bool is_first_time;
+ int rank_adapt =0;
int updated_csi = 0;
SCM_t channel_model=Rayleigh1;
@@ -257,6 +258,7 @@ int main(int argc, char **argv)
double cpu_freq_GHz;
//time_stats_t ts;//,sts,usts;
int avg_iter[2],iter_trials[2];
+ int rank_indc[4]={0,0,0,0};
int rballocset=0;
int print_perf=0;
int test_perf=0;
@@ -942,6 +944,10 @@ int main(int argc, char **argv)
exit(-1);
}
+ if ((transmission_mode == 3) && (transmission_mode == 4))
+ for (n=0; n<4; ++n)
+ rank_indc[n]=1;
+
if ((transmission_mode == 3) || (transmission_mode==4) || (transmission_mode==8))
Kmimo=2;
else
@@ -2126,7 +2132,7 @@ int main(int argc, char **argv)
is_first_time = true;
#ifdef DEBUG_HARQ
printf("[DLSIM] TRIAL %d\n", trials);
- printf("TPMI_retr= %d\n", tpmi_retr);
+ printf("[DLSIM] TPMI_retr= %d\n", tpmi_retr);
#endif
for (i=0; i<frame_parms->nb_antennas_tx; i++) {
@@ -2143,6 +2149,9 @@ int main(int argc, char **argv)
TB0_active=1;
TB1_active=1;
+ if (transmission_mode == 3 || transmission_mode == 4)
+ rank_indc[0]=1;
+
while (((transmission_mode == 3 || transmission_mode == 4) &&
((round < num_rounds) && ((ret[0] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations) ||
(ret[1] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations)))) ||
@@ -2210,9 +2219,19 @@ int main(int argc, char **argv)
eNB->dlsch[0][1]->harq_processes[0]->rvidx = round&3;
if (round == 0) { // First round
- TB0_active = 1;
- TB1_active = 1;
-
+ if ((rank_indc[round]==1) || (rank_indc[round]==0 && rank_adapt==0)) {
+ TB0_active = 1;
+ TB1_active = 1;
+#ifdef DEBUG_HARQ
+ printf("Simulating HARQ both active \n");
+#endif
+ }else {
+ TB0_active = 1;
+ TB1_active = 0;
+#ifdef DEBUG_HARQ
+ printf("Simulating HARQ only TB0 active \n");
+#endif
+ }
if (eNB->frame_parms.frame_type == TDD) {
switch (transmission_mode) {
@@ -2274,47 +2293,98 @@ int main(int argc, char **argv)
}
break;
case 4:
- switch (eNB->frame_parms.N_RB_DL) {
- case 6:
- ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 2;
- ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs1 = mcs1;
- ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = mcs2;
- ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
- ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = 0;
- ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi2 = trials&1;
- ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 0;
- memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_1_5MHz_2A_TDD_t));
- break;
- case 25:
- ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 2;
- ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs1 = mcs1;
- ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = mcs2;
- ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
- ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = 0;
- ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi2 = trials&1;
- ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 0;
- memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_5MHz_2A_TDD_t));
- break;
- case 50:
- ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 2;
- ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs1 = mcs1;
- ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = mcs2;
- ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
- ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = 0;
- ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi2 = trials&1;
- ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 0;
- memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_10MHz_2A_TDD_t));
- break;
- case 100:
- ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 2;
- ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs1 = mcs1;
- ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = mcs2;
- ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
- ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = 0;
- ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi2 = trials&1;
- ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 0;
- memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_20MHz_2A_TDD_t));
- break;
+ if ((TB0_active == 1) && (TB1_active == 1)) {
+ switch (eNB->frame_parms.N_RB_DL) {
+ case 6:
+ ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 2;
+ ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs1 = mcs1;
+ ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = mcs2;
+ ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
+ ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = 0;
+ ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi2 = trials&1;
+ ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 0;
+ memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_1_5MHz_2A_TDD_t));
+ break;
+ case 25:
+ ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 2;
+ ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs1 = mcs1;
+ ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = mcs2;
+ ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
+ ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = 0;
+ ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi2 = trials&1;
+ ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 0;
+ memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_5MHz_2A_TDD_t));
+ break;
+ case 50:
+ ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 2;
+ ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs1 = mcs1;
+ ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = mcs2;
+ ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
+ ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = 0;
+ ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi2 = trials&1;
+ ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 0;
+ memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_10MHz_2A_TDD_t));
+ break;
+ case 100:
+ ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 2;
+ ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs1 = mcs1;
+ ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = mcs2;
+ ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
+ ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = 0;
+ ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi2 = trials&1;
+ ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 0;
+ memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_20MHz_2A_TDD_t));
+ break;
+ }
+ } else if ((TB0_active == 1) && (TB1_active == 0)) {
+ switch (eNB->frame_parms.N_RB_DL) {
+ case 6:
+ ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 0;
+ ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
+ ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = round&3;
+ ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = 0;
+ ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 1;
+ memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_1_5MHz_2A_TDD_t));
+ break;
+ case 25:
+ ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 0;
+ ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
+ ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = round&3;
+ ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = 0;
+ ((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 1;
+ memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_5MHz_2A_TDD_t));
+ break;
+ case 50:
+ ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 0;
+ ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
+ ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = round&3;
+ ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = 0;
+ ((DCI2_10MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 1;
+ memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_10MHz_2A_TDD_t));
+ break;
+ case 100:
+ ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 0;
+ ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
+ ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = round&3;
+ ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = 0;
+ ((DCI2_20MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 1;
+ memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_20MHz_2A_TDD_t));
+ break;
+ }
+ generate_eNB_dlsch_params_from_dci(0,
+ subframe,
+ &DLSCH_alloc_pdu_1[0],
+ n_rnti+k,
+ format2,
+ eNB->dlsch[0],
+ &eNB->frame_parms,
+ eNB->pdsch_config_dedicated,
+ SI_RNTI,
+ 0,
+ P_RNTI,
+ UE->dlsch[subframe&0x1][0][1]->pmi_alloc,
+ transmission_mode>=7?transmission_mode:0
+ );
}
break;
case 5:
@@ -2324,8 +2394,7 @@ int main(int argc, char **argv)
memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu2_1E[0],sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
break;
}
- }
- else { // FDD
+ } else { // FDD
switch (transmission_mode) {
case 1:
case 2:
@@ -2385,49 +2454,101 @@ int main(int argc, char **argv)
}
break;
case 4:
- switch (eNB->frame_parms.N_RB_DL) {
- case 6:
- ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 2;
- ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
- ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->mcs1 = mcs1;
- ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = mcs2;
- ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = 0;
- ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi2 = trials&1;
- ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 0;
- memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_1_5MHz_2A_FDD_t));
- break;
- case 25:
- ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 2;
- ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
- ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->mcs1 = mcs1;
- ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = mcs2;
- ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = 0;
- ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi2 = trials&1;
- ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 0;
- memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_5MHz_2A_FDD_t));
- break;
- case 50:
- ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 2;
- ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
- ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->mcs1 = mcs1;
- ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = mcs2;
- ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = 0;
- ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi2 = trials&1;
- ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 0;
- memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_10MHz_2A_FDD_t));
- break;
- case 100:
- ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 2;
- ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->mcs1 = mcs1;
- ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = mcs2;
- ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
- ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = 0;
- ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi2 = trials&1;
- ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 0;
- memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_20MHz_2A_FDD_t));
- break;
+ if ((TB0_active == 1) && (TB1_active == 1)) {
+ switch (eNB->frame_parms.N_RB_DL) {
+ case 6:
+ ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 2;
+ ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
+ ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->mcs1 = mcs1;
+ ((DCI2_1_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = mcs2;
+ ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = 0;
+ ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi2 = trials&1;
+ ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 0;
+ memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_1_5MHz_2A_FDD_t));
+ break;
+ case 25:
+ ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 2;
+ ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
+ ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->mcs1 = mcs1;
+ ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = mcs2;
+ ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = 0;
+ ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi2 = trials&1;
+ ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 0;
+ memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_5MHz_2A_FDD_t));
+ break;
+ case 50:
+ ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 2;
+ ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
+ ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->mcs1 = mcs1;
+ ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = mcs2;
+ ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = 0;
+ ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi2 = trials&1;
+ ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 0;
+ memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_10MHz_2A_FDD_t));
+ break;
+ case 100:
+ ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 2;
+ ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->mcs1 = mcs1;
+ ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = mcs2;
+ ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
+ ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = 0;
+ ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi2 = trials&1;
+ ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 0;
+ memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_20MHz_2A_FDD_t));
+ break;
+ }
+ } else if ((TB0_active == 1) && (TB1_active == 0)) {
+ switch (eNB->frame_parms.N_RB_DL) {
+ case 6:
+ ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 0;
+ ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
+ ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = round&3;
+ ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = 0;
+ ((DCI2_1_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 1;
+ memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_1_5MHz_2A_FDD_t));
+ break;
+ case 25:
+ ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 0;
+ ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
+ ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = round&3;
+ ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = 0;
+ ((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 1;
+ memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_5MHz_2A_FDD_t));
+ break;
+ case 50:
+ ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 0;
+ ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
+ ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = round&3;
+ ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = 0;
+ ((DCI2_10MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 1;
+ memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_10MHz_2A_FDD_t));
+ break;
+ case 100:
+ ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = 0;
+ ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
+ ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = round&3;
+ ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->mcs2 = 0;
+ ((DCI2_20MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = 1;
+ memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu_1[0],sizeof(DCI2_20MHz_2A_FDD_t));
+ break;
+ }
}
+ generate_eNB_dlsch_params_from_dci(0,
+ subframe,
+ &DLSCH_alloc_pdu_1[0],
+ n_rnti+k,
+ format2,
+ eNB->dlsch[0],
+ &eNB->frame_parms,
+ eNB->pdsch_config_dedicated,
+ SI_RNTI,
+ 0,
+ P_RNTI,
+ UE->dlsch[subframe&0x1][0][1]->pmi_alloc,
+ transmission_mode>=7?transmission_mode:0
+ );
break;
+
case 5:
case 6:
DLSCH_alloc_pdu2_1E[0].ndi = trials&1;
@@ -2593,9 +2714,6 @@ int main(int argc, char **argv)
((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = round&3;
}
else if (TB0_active == 0){ // deactivate TB0
-#ifdef DEBUG_HARQ
- printf("\n[DLSIM] Requesting only TB1 from temp DCI\n");
-#endif
((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = tpmi_retr;
((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->mcs1 = 0;
((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = 1;
@@ -2603,9 +2721,6 @@ int main(int argc, char **argv)
((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = round&3;
}
else { // deactivate TB1
-#ifdef DEBUG_HARQ
- printf("\n[DLSIM] TDD Requesting only TB0 from temp DCI\n");
-#endif
((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = tpmi_retr;
((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = round&3;
@@ -2821,9 +2936,6 @@ int main(int argc, char **argv)
((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = round&3;
}
else if (TB0_active == 0){ // deactivate TB0
-#ifdef DEBUG_HARQ
- printf("\n [DLSIM] Requesting only TB1 from temp DCI\n");
-#endif
((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = tpmi_retr;
((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->mcs1 = 0;
((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = 1;
@@ -2831,9 +2943,6 @@ int main(int argc, char **argv)
((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv2 = round&3;
}
else { // deactivate TB1
-#ifdef DEBUG_HARQ
- printf("\n[DLSIM] FDD Requesting only TB0 from temp DCI\n");
-#endif
((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->tpmi = tpmi_retr;
((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi1 = trials&1;
((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[0])->rv1 = round&3;
@@ -2994,17 +3103,20 @@ int main(int argc, char **argv)
}
*/
}
+#ifdef DEBUG_HARQ
+ printf("[DLSIM] UE->dlsch[subframe&0x1][0][%d]->pmi_alloc %d \n", TB, UE->dlsch[subframe&0x1][0][TB]->pmi_alloc);
+#endif
//if standard case when both TBs are active
if (transmission_mode == 4) {
if (((((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 2) ||(((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 2)) && TB0_active == 1 && TB1_active == 1){
#ifdef DEBUG_HARQ
- printf ("[DLSIM] I am calling from the eNode B 1\n");
+ printf ("[DLSIM] I am calling from the eNode B 1\n");
#endif
eNB->dlsch[0][TB]->harq_processes[0]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,eNB->frame_parms.N_RB_DL);
#ifdef DEBUG_HARQ
- printf ("[DLSIM] I am calling from the eNode B 2\n");
+ printf ("[DLSIM] I am calling from the eNode B 2\n");
#endif
UE->dlsch[subframe&0x1][0][TB]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL);
@@ -3014,22 +3126,22 @@ int main(int argc, char **argv)
if (hold_rank1_precoder == 0 && ((((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 5) ||(((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 5))){
#ifdef DEBUG_HARQ
- printf ("[DLSIM] I am calling from the eNode B 1\n");
+ printf ("[DLSIM] I am calling from the eNode B 1\n");
#endif
eNB->dlsch[0][TB]->harq_processes[0]->pmi_alloc = pmi_convert_rank1_from_rank2(eNB->dlsch[0][TB]->harq_processes[0]->pmi_alloc,5,eNB->frame_parms.N_RB_DL);
#ifdef DEBUG_HARQ
- printf ("[DLSIM] I am calling from the eNode B 2\n");
+ printf ("[DLSIM] I am calling from the eNode B 2\n");
#endif
UE->dlsch[subframe&0x1][0][TB]->pmi_alloc = pmi_convert_rank1_from_rank2(UE->dlsch[subframe&0x1][0][TB]->pmi_alloc,5,UE->frame_parms.N_RB_DL);
}
else if (hold_rank1_precoder == 0 && ((((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 6) ||(((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 6))){
#ifdef DEBUG_HARQ
- printf ("[DLSIM] I am calling from the eNode B 1\n");
+ printf ("[DLSIM] I am calling from the eNode B 1\n");
#endif
eNB->dlsch[0][TB]->harq_processes[0]->pmi_alloc = pmi_convert_rank1_from_rank2(eNB->dlsch[0][TB]->harq_processes[0]->pmi_alloc,6,eNB->frame_parms.N_RB_DL);
#ifdef DEBUG_HARQ
- printf ("[DLSIM] I am calling from the eNode B 2\n");
+ printf ("[DLSIM] I am calling from the eNode B 2\n");
#endif
UE->dlsch[subframe&0x1][0][TB]->pmi_alloc = pmi_convert_rank1_from_rank2(UE->dlsch[subframe&0x1][0][TB]->pmi_alloc,6,UE->frame_parms.N_RB_DL);
}
@@ -3079,6 +3191,9 @@ int main(int argc, char **argv)
}
}
+#ifdef DEBUG_HARQ
+ printf("[DLSIM 2 ] UE->dlsch[subframe&0x1][0][%d]->pmi_alloc %d \n", TB, UE->dlsch[subframe&0x1][0][TB]->pmi_alloc);
+#endif
start_meas(&eNB->dlsch_encoding_stats);
if (dlsch_encoding(eNB,
@@ -3163,7 +3278,7 @@ int main(int argc, char **argv)
(subframe*2)+2,
&eNB->frame_parms);
- if (n_frames==1) {
+ if (n_frames==2) {
write_output("txsigF0.m","txsF0", &eNB->common_vars.txdataF[eNB_id][0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1);
if (eNB->frame_parms.nb_antennas_tx>1)
write_output("txsigF1.m","txsF1", &eNB->common_vars.txdataF[eNB_id][1][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1);
@@ -3177,7 +3292,7 @@ int main(int argc, char **argv)
}
tx_lev_dB = (unsigned int) dB_fixed(tx_lev);
- if (n_frames==1) {
+ if (n_frames==2) {
write_output("txsigF0.m","txsF0", &eNB->common_vars.txdataF[eNB_id][0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1);
if (eNB->frame_parms.nb_antennas_tx>1)
write_output("txsigF1.m","txsF1", &eNB->common_vars.txdataF[eNB_id][1][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1);
@@ -3378,7 +3493,7 @@ int main(int argc, char **argv)
for (Ns=(2*subframe);Ns<((2*subframe)+3);Ns++) {
for (l=0;l<pilot2;l++) {
if (n_frames==1)
- printf("Ns %d, l %d, l2 %d\n",Ns, l, l+(Ns%2)*pilot2);
+ // printf("Ns %d, l %d, l2 %d\n",Ns, l, l+(Ns%2)*pilot2);
/*
This function implements the OFDM front end processor (FEP).
@@ -3443,14 +3558,19 @@ int main(int argc, char **argv)
}
if ((Ns==((2*subframe))) && (l==0)) {
- ue_rrc_measurements(UE,
+ /*ue_rrc_measurements(UE,
0,
- 0);
+ 0);*/
lte_ue_measurements(UE,
subframe*UE->frame_parms.samples_per_tti,
1,
0,
+ rank_adapt,
subframe);
+
+ if ((transmission_mode == 3) || (transmission_mode == 4))
+ rank_indc[round] = UE->measurements.rank[0];
+
//printf ("Trial %d, Measurements are done \n", trials);
/*
debug_msg("RX RSSI %d dBm, digital (%d, %d) dB, linear (%d, %d), avg rx power %d dB (%d lin), RX gain %d dB\n",
@@ -3610,6 +3730,9 @@ int main(int argc, char **argv)
UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->first_tx=1;
UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->first_tx=1;
}
+#ifdef DEBUG_HARQ
+ printf("[DLSIM 3 ] UE->dlsch[subframe&0x1][0][1]->pmi_alloc %d \n", UE->dlsch[subframe&0x1][0][1]->pmi_alloc);
+#endif
switch (transmission_mode) {
case 1:
@@ -3661,7 +3784,6 @@ int main(int argc, char **argv)
P_RNTI,
transmission_mode<7?0:transmission_mode,
UE->pdcch_vars[0]->crnti_is_temporary? UE->pdcch_vars[0]->crnti: 0);
-
break;
case 5:
case 6:
@@ -3702,7 +3824,6 @@ int main(int argc, char **argv)
start_meas(&UE->dlsch_llr_stats);
-
for (m=UE->pdcch_vars[0]->num_pdcch_symbols; m<pilot2; m++) {
if (rx_pdsch(UE,
PDSCH,
@@ -3890,7 +4011,7 @@ int main(int argc, char **argv)
/*avg_iter[TB] += ret[TB];
iter_trials[TB]++;*/
- if (n_frames==2) {
+ if (n_frames==1) {
printf("cw non sic %d, round %d: No DLSCH errors found, uncoded ber %f\n",TB,round,uncoded_ber);
#ifdef PRINT_BYTES
for (s=0;s<UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->C;s++) {
@@ -4045,22 +4166,8 @@ int main(int argc, char **argv)
dlsch0_eNB_harq->dl_power_off = dlsch0_ue_harq->dl_power_off;
dlsch0_eNB_harq->status = dlsch0_ue_harq->status;
- if (round_sic == 0){
- UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][1]->current_harq_pid]->rvidx = 0;
- UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->rvidx=0;
- }
- else if (round_sic == 1){
- UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][1]->current_harq_pid]->rvidx = 1;
- UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->rvidx=1;
- }
- else if (round_sic == 2){
- UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][1]->current_harq_pid]->rvidx = 2;
- UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->rvidx=2;
- }
- else{
- UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][1]->current_harq_pid]->rvidx = 3;
- UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->rvidx=3;
- }
+ UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][1]->current_harq_pid]->rvidx = round_sic;
+ UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->rvidx=round_sic;
UE->dlsch_eNB[eNB_id]->active = UE->dlsch[subframe&0x1][eNB_id][0]->active;
UE->dlsch_eNB[eNB_id]->rnti = UE->dlsch[subframe&0x1][eNB_id][0]->rnti;
@@ -4178,7 +4285,7 @@ int main(int argc, char **argv)
UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->G = coded_bits_per_codeword[1];
UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->Qm = get_Qm(eNB->dlsch[0][1]->harq_processes[0]->mcs);
- if (n_frames==2) {
+ if (n_frames==1) {
printf("Kmimo=%d, cw=%d, G=%d, TBS=%d\n",Kmimo,1,coded_bits_per_codeword[1],
UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->TBS);
@@ -4250,7 +4357,7 @@ int main(int argc, char **argv)
iter_trials[1]++;
- if (n_frames==2) {
+ if (n_frames==1) {
printf("cw sic %d, round %d: No DLSCH errors found, uncoded ber %f\n",1,round,uncoded_ber);
#ifdef PRINT_BYTES
@@ -4285,7 +4392,7 @@ int main(int argc, char **argv)
avg_iter[1] += ret[1]-1;
iter_trials[1]++;
- if (n_frames==2) {
+ if (n_frames==1) {
//if ((n_frames==1) || (SNR>=30)) {
printf("cw sic %d, round %d: DLSCH errors found, uncoded ber %f\n",1,round,uncoded_ber);
#ifdef PRINT_BYTES
@@ -4336,7 +4443,7 @@ int main(int argc, char **argv)
}*/
- if (n_frames==2) {
+ if (n_frames==1) {
//if ((n_frames==1) || (SNR>=30)) {
printf("cw %d, round %d: DLSCH errors found, uncoded ber %f\n",TB,round,uncoded_ber);
#ifdef PRINT_BYTES
@@ -4362,7 +4469,7 @@ int main(int argc, char **argv)
stop_meas(&UE->phy_proc_rx[subframe&0x1]);
- if (n_frames==1) {
+ if (n_frames==4) {
//rxsig
sprintf(fname,"rxsig0_r%d.m",round);
@@ -5294,7 +5401,7 @@ int main(int argc, char **argv)
}
- if (n_frames==1)
+ if (n_frames==2)
break;
}// SNR