Remove subframe_DL function npot anymore needed

This commit is contained in:
gabrielC
2017-05-03 15:42:32 +02:00
parent 966291029d
commit f2f79a1647
13 changed files with 320 additions and 356 deletions
+2 -2
View File
@@ -7209,7 +7209,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
uint8_t transmission_mode = ue->transmission_mode[eNB_id]; uint8_t transmission_mode = ue->transmission_mode[eNB_id];
ANFBmode_t AckNackFBMode; ANFBmode_t AckNackFBMode;
LTE_UE_ULSCH_t *ulsch = ue->ulsch[eNB_id]; LTE_UE_ULSCH_t *ulsch = ue->ulsch[eNB_id];
LTE_UE_DLSCH_t **dlsch = ue->dlsch[subframe_DL(&ue->frame_parms,subframe)&0x1][0]; LTE_UE_DLSCH_t **dlsch = ue->dlsch[subframe&0x1][0];
PHY_MEASUREMENTS *meas = &ue->measurements; PHY_MEASUREMENTS *meas = &ue->measurements;
LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms; LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
// uint32_t current_dlsch_cqi = ue->current_dlsch_cqi[eNB_id]; // uint32_t current_dlsch_cqi = ue->current_dlsch_cqi[eNB_id];
@@ -8016,7 +8016,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
//int dl_subframe = (subframe<4) ? (subframe+6) : (subframe-4); //int dl_subframe = (subframe<4) ? (subframe+6) : (subframe-4);
int dl_subframe = subframe; int dl_subframe = subframe;
if (ue->dlsch[subframe_DL(&ue->frame_parms,dl_subframe)&0x1][eNB_id][0]->harq_ack[dl_subframe].send_harq_status>0) { // we have downlink transmission if (ue->dlsch[dl_subframe&0x1][eNB_id][0]->harq_ack[dl_subframe].send_harq_status>0) { // we have downlink transmission
ulsch->harq_processes[harq_pid]->O_ACK = 1; ulsch->harq_processes[harq_pid]->O_ACK = 1;
} else { } else {
ulsch->harq_processes[harq_pid]->O_ACK = 0; ulsch->harq_processes[harq_pid]->O_ACK = 0;
+3 -3
View File
@@ -929,7 +929,7 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue,
break; break;
case PDSCH: // TB0 case PDSCH: // TB0
dlsch_ue = phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][0]; dlsch_ue = phy_vars_ue->dlsch[subframe&0x1][eNB_id][0];
harq_pid = dlsch_ue->current_harq_pid; harq_pid = dlsch_ue->current_harq_pid;
ue_id= (uint32_t)find_ue((int16_t)phy_vars_ue->pdcch_vars[subframe & 0x1][(uint32_t)eNB_id]->crnti,PHY_vars_eNB_g[eNB_id2][CC_id]); ue_id= (uint32_t)find_ue((int16_t)phy_vars_ue->pdcch_vars[subframe & 0x1][(uint32_t)eNB_id]->crnti,PHY_vars_eNB_g[eNB_id2][CC_id]);
DevAssert( ue_id != (uint32_t)-1 ); DevAssert( ue_id != (uint32_t)-1 );
@@ -975,7 +975,7 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue,
break; break;
case PDSCH1: { // TB1 case PDSCH1: { // TB1
dlsch_ue = phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][1]; dlsch_ue = phy_vars_ue->dlsch[subframe&0x1][eNB_id][1];
harq_pid = dlsch_ue->current_harq_pid; harq_pid = dlsch_ue->current_harq_pid;
int8_t UE_id = find_ue( phy_vars_ue->pdcch_vars[subframe & 0x1][eNB_id]->crnti, PHY_vars_eNB_g[eNB_id2][CC_id] ); int8_t UE_id = find_ue( phy_vars_ue->pdcch_vars[subframe & 0x1][eNB_id]->crnti, PHY_vars_eNB_g[eNB_id2][CC_id] );
DevAssert( UE_id != -1 ); DevAssert( UE_id != -1 );
@@ -1029,7 +1029,7 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue,
break; break;
default: default:
dlsch_ue = phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][0]; dlsch_ue = phy_vars_ue->dlsch[subframe&0x1][eNB_id][0];
LOG_E(PHY,"dlsch_decoding_emul: FATAL, unknown DLSCH_id %d\n",dlsch_id); LOG_E(PHY,"dlsch_decoding_emul: FATAL, unknown DLSCH_id %d\n",dlsch_id);
dlsch_ue->last_iteration_cnt = 1+dlsch_ue->max_turbo_iterations; dlsch_ue->last_iteration_cnt = 1+dlsch_ue->max_turbo_iterations;
return(1+dlsch_ue->max_turbo_iterations); return(1+dlsch_ue->max_turbo_iterations);
@@ -146,7 +146,7 @@ int rx_pdsch(PHY_VARS_UE *ue,
case PDSCH: case PDSCH:
pdsch_vars = ue->pdsch_vars[subframe&0x1]; pdsch_vars = ue->pdsch_vars[subframe&0x1];
dlsch = ue->dlsch[subframe_DL(&ue->frame_parms,subframe)&0x1][eNB_id]; dlsch = ue->dlsch[subframe&0x1][eNB_id];
LOG_D(PHY,"AbsSubframe %d.%d / Sym %d harq_pid %d, harq status %d.%d \n", LOG_D(PHY,"AbsSubframe %d.%d / Sym %d harq_pid %d, harq status %d.%d \n",
frame,subframe,symbol,harq_pid, frame,subframe,symbol,harq_pid,
dlsch[0]->harq_processes[harq_pid]->status, dlsch[0]->harq_processes[harq_pid]->status,
+8 -8
View File
@@ -514,16 +514,16 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
int beamforming_mode = phy_vars_ue->transmission_mode[eNB_id]>6 ? phy_vars_ue->transmission_mode[eNB_id] : 0; int beamforming_mode = phy_vars_ue->transmission_mode[eNB_id]>6 ? phy_vars_ue->transmission_mode[eNB_id] : 0;
if (phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][0]!=NULL) { if (phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]!=NULL) {
harq_pid = phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid; harq_pid = phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid;
if (harq_pid>=8) if (harq_pid>=8)
return; return;
mcs = phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[harq_pid]->mcs; mcs = phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->mcs;
// Button 0 // Button 0
if(!phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[harq_pid]->dl_power_off) { if(!phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->dl_power_off) {
// we are in TM5 // we are in TM5
fl_show_object(form->button_0); fl_show_object(form->button_0);
} }
@@ -534,12 +534,12 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
} }
// coded_bits_per_codeword = frame_parms->N_RB_DL*12*get_Qm(mcs)*(frame_parms->symbols_per_tti); // coded_bits_per_codeword = frame_parms->N_RB_DL*12*get_Qm(mcs)*(frame_parms->symbols_per_tti);
if (phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][0]!=NULL) { if (phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]!=NULL) {
coded_bits_per_codeword = get_G(frame_parms, coded_bits_per_codeword = get_G(frame_parms,
phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[harq_pid]->nb_rb, phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->nb_rb,
phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even, phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even,
get_Qm(mcs), get_Qm(mcs),
phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[harq_pid]->Nl, phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->Nl,
num_pdcch_symbols, num_pdcch_symbols,
frame, frame,
subframe, subframe,
+14 -14
View File
@@ -448,11 +448,11 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
int mcs1=0; int mcs1=0;
unsigned char harq_pid = 0; unsigned char harq_pid = 0;
int beamforming_mode = phy_vars_ue->transmission_mode[eNB_id]>6 ? phy_vars_ue->transmission_mode[eNB_id] : 0; int beamforming_mode = phy_vars_ue->transmission_mode[eNB_id]>6 ? phy_vars_ue->transmission_mode[eNB_id] : 0;
if (phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][0]!=NULL) { if (phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]!=NULL) {
harq_pid = phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid; harq_pid = phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid;
if (harq_pid>=8) if (harq_pid>=8)
return; return;
mcs0 = phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[harq_pid]->mcs; mcs0 = phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->mcs;
// Button 0 // Button 0
/* /*
if(!phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->dl_power_off) { if(!phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->dl_power_off) {
@@ -461,23 +461,23 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
} }
*/ */
} }
if (phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][1]!=NULL) { if (phy_vars_ue->dlsch[subframe&0x1][eNB_id][1]!=NULL) {
harq_pid = phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][1]->current_harq_pid; harq_pid = phy_vars_ue->dlsch[subframe&0x1][eNB_id][1]->current_harq_pid;
if (harq_pid>=8) if (harq_pid>=8)
return; return;
mcs1 = phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][1]->harq_processes[harq_pid]->mcs; mcs1 = phy_vars_ue->dlsch[subframe&0x1][eNB_id][1]->harq_processes[harq_pid]->mcs;
} }
if (phy_vars_ue->pdcch_vars[subframe&0x1][eNB_id]!=NULL) { if (phy_vars_ue->pdcch_vars[subframe&0x1][eNB_id]!=NULL) {
num_pdcch_symbols = phy_vars_ue->pdcch_vars[subframe&0x1][eNB_id]->num_pdcch_symbols; num_pdcch_symbols = phy_vars_ue->pdcch_vars[subframe&0x1][eNB_id]->num_pdcch_symbols;
} }
// coded_bits_per_codeword = frame_parms->N_RB_DL*12*get_Qm(mcs)*(frame_parms->symbols_per_tti); // coded_bits_per_codeword = frame_parms->N_RB_DL*12*get_Qm(mcs)*(frame_parms->symbols_per_tti);
if (phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][0]!=NULL) { if (phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]!=NULL) {
mod0 = get_Qm(mcs0); mod0 = get_Qm(mcs0);
coded_bits_per_codeword0 = get_G(frame_parms, coded_bits_per_codeword0 = get_G(frame_parms,
phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[harq_pid]->nb_rb, phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->nb_rb,
phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even, phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even,
get_Qm(mcs0), get_Qm(mcs0),
phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[harq_pid]->Nl, phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->Nl,
num_pdcch_symbols, num_pdcch_symbols,
frame, frame,
subframe, subframe,
@@ -486,13 +486,13 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
coded_bits_per_codeword0 = 0; //frame_parms->N_RB_DL*12*get_Qm(mcs)*(frame_parms->symbols_per_tti); coded_bits_per_codeword0 = 0; //frame_parms->N_RB_DL*12*get_Qm(mcs)*(frame_parms->symbols_per_tti);
mod0=0; mod0=0;
} }
if (phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][1]!=NULL) { if (phy_vars_ue->dlsch[subframe&0x1][eNB_id][1]!=NULL) {
mod1 = get_Qm(mcs1); mod1 = get_Qm(mcs1);
coded_bits_per_codeword1 = get_G(frame_parms, coded_bits_per_codeword1 = get_G(frame_parms,
phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][1]->harq_processes[harq_pid]->nb_rb, phy_vars_ue->dlsch[subframe&0x1][eNB_id][1]->harq_processes[harq_pid]->nb_rb,
phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][1]->harq_processes[harq_pid]->rb_alloc_even, phy_vars_ue->dlsch[subframe&0x1][eNB_id][1]->harq_processes[harq_pid]->rb_alloc_even,
get_Qm(mcs1), get_Qm(mcs1),
phy_vars_ue->dlsch[subframe_DL(&phy_vars_ue->frame_parms,subframe)&0x1][eNB_id][1]->harq_processes[harq_pid]->Nl, phy_vars_ue->dlsch[subframe&0x1][eNB_id][1]->harq_processes[harq_pid]->Nl,
num_pdcch_symbols, num_pdcch_symbols,
frame, frame,
subframe, subframe,
-5
View File
@@ -212,11 +212,6 @@ void prach_procedures(PHY_VARS_eNB *eNB);
lte_subframe_t subframe_select(LTE_DL_FRAME_PARMS *frame_parms,uint8_t subframe); lte_subframe_t subframe_select(LTE_DL_FRAME_PARMS *frame_parms,uint8_t subframe);
/*!
* \brief Function that return the DL SFN, used for TDD where the DL is not always 4 SFN before UL
*/
uint8_t subframe_DL(LTE_DL_FRAME_PARMS *frame_parms,uint8_t current_sfn);
/*! \brief Function to compute which type of DCIs to detect in the given subframe /*! \brief Function to compute which type of DCIs to detect in the given subframe
@param frame_parms Pointer to DL frame parameter descriptor @param frame_parms Pointer to DL frame parameter descriptor
@@ -619,37 +619,6 @@ lte_subframe_t subframe_select(LTE_DL_FRAME_PARMS *frame_parms,unsigned char sub
} }
} }
uint8_t subframe_DL(LTE_DL_FRAME_PARMS *frame_parms,uint8_t current_sfn)
{
// if FDD return dummy value
if (frame_parms->frame_type == FDD)
return(current_sfn);
switch (frame_parms->tdd_config) {
case 1:
switch (current_sfn) {
case 3:
case 8:
return(current_sfn-3);
break;
default:
return(current_sfn);
break;
}
case 3:
return(current_sfn);
break;
default:
AssertFatal(0,"TDD config %d not coded",frame_parms->tdd_config);
}
}
dci_detect_mode_t dci_detect_mode_select(LTE_DL_FRAME_PARMS *frame_parms,uint8_t subframe) dci_detect_mode_t dci_detect_mode_select(LTE_DL_FRAME_PARMS *frame_parms,uint8_t subframe)
{ {
dci_detect_mode_t ret = 0; dci_detect_mode_t ret = 0;
+48 -48
View File
@@ -91,10 +91,10 @@ void dump_dlsch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subf
uint8_t nsymb = (ue->frame_parms.Ncp == 0) ? 14 : 12; uint8_t nsymb = (ue->frame_parms.Ncp == 0) ? 14 : 12;
coded_bits_per_codeword = get_G(&ue->frame_parms, coded_bits_per_codeword = get_G(&ue->frame_parms,
ue->dlsch[subframe_DL(&ue->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[harq_pid]->nb_rb, ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->nb_rb,
ue->dlsch[subframe_DL(&ue->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even, ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even,
ue->dlsch[subframe_DL(&ue->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[harq_pid]->Qm, ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->Qm,
ue->dlsch[subframe_DL(&ue->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[harq_pid]->Nl, ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->Nl,
ue->pdcch_vars[0&0x1][eNB_id]->num_pdcch_symbols, ue->pdcch_vars[0&0x1][eNB_id]->num_pdcch_symbols,
proc->frame_rx, proc->frame_rx,
subframe, subframe,
@@ -528,7 +528,7 @@ void ue_compute_srs_occasion(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id
uint8_t pucch_ack_payload[2]; uint8_t pucch_ack_payload[2];
if (get_ack(&ue->frame_parms, if (get_ack(&ue->frame_parms,
ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->harq_ack, ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack,
subframe_tx,proc->subframe_rx,pucch_ack_payload,0) > 0) subframe_tx,proc->subframe_rx,pucch_ack_payload,0) > 0)
{ {
is_sr_an_subframe = 1; is_sr_an_subframe = 1;
@@ -829,11 +829,11 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
n1_pucch1 = get_Np(frame_parms->N_RB_DL,nCCE1,1) + nCCE1 + frame_parms->pucch_config_common.n1PUCCH_AN; n1_pucch1 = get_Np(frame_parms->N_RB_DL,nCCE1,1) + nCCE1 + frame_parms->pucch_config_common.n1PUCCH_AN;
// set ACK/NAK to values if not DTX // set ACK/NAK to values if not DTX
if (ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->harq_ack[(6+last_dl)%10].send_harq_status>0) // n-6 // subframe 6 is to be ACK/NAKed if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(6+last_dl)%10].send_harq_status>0) // n-6 // subframe 6 is to be ACK/NAKed
harq_ack1 = ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->harq_ack[(6+last_dl)%10].ack; harq_ack1 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(6+last_dl)%10].ack;
if (ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->harq_ack[5+last_dl].send_harq_status>0) // n-6 // subframe 5 is to be ACK/NAKed if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[5+last_dl].send_harq_status>0) // n-6 // subframe 5 is to be ACK/NAKed
harq_ack0 = ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->harq_ack[5+last_dl].ack; harq_ack0 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[5+last_dl].ack;
if (harq_ack1!=2) { // n-6 // subframe 6,8,0 and maybe 5,7,9 is to be ACK/NAKed if (harq_ack1!=2) { // n-6 // subframe 6,8,0 and maybe 5,7,9 is to be ACK/NAKed
@@ -1341,21 +1341,21 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
} }
ack_status_cw0 = reset_ack(&ue->frame_parms, ack_status_cw0 = reset_ack(&ue->frame_parms,
ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->harq_ack, ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack,
subframe_tx, subframe_tx,
proc->subframe_rx, proc->subframe_rx,
ue->ulsch[eNB_id]->o_ACK, ue->ulsch[eNB_id]->o_ACK,
&Nbundled, &Nbundled,
0); 0);
ack_status_cw1 = reset_ack(&ue->frame_parms, ack_status_cw1 = reset_ack(&ue->frame_parms,
ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][1]->harq_ack, ue->dlsch[proc->subframe_rx&0x1][eNB_id][1]->harq_ack,
subframe_tx, subframe_tx,
proc->subframe_rx, proc->subframe_rx,
ue->ulsch[eNB_id]->o_ACK, ue->ulsch[eNB_id]->o_ACK,
&NbundledCw1, &NbundledCw1,
1); 1);
//Nbundled = ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->harq_ack; //Nbundled = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack;
//ue->ulsch[eNB_id]->bundling = Nbundled; //ue->ulsch[eNB_id]->bundling = Nbundled;
first_rb = ue->ulsch[eNB_id]->harq_processes[harq_pid]->first_rb; first_rb = ue->ulsch[eNB_id]->harq_processes[harq_pid]->first_rb;
@@ -1383,14 +1383,14 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
if(ue->ulsch[eNB_id]->o_ACK[0]) 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[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->rnti), 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[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->current_harq_pid)); T_INT(ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->current_harq_pid));
} }
else 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[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->rnti), 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[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->current_harq_pid)); T_INT(ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->current_harq_pid));
} }
#endif #endif
@@ -1711,7 +1711,7 @@ void get_pucch_param(PHY_VARS_UE *ue,
{ {
pucch_resource[0] = get_n1_pucch(ue, pucch_resource[0] = get_n1_pucch(ue,
proc, proc,
ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->harq_ack, ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack,
eNB_id, eNB_id,
ack_payload, ack_payload,
SR); SR);
@@ -1828,14 +1828,14 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
} }
ack_status_cw0 = get_ack(&ue->frame_parms, ack_status_cw0 = get_ack(&ue->frame_parms,
ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->harq_ack, ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack,
subframe_tx, subframe_tx,
proc->subframe_rx, proc->subframe_rx,
pucch_ack_payload, pucch_ack_payload,
0); 0);
ack_status_cw1 = get_ack(&ue->frame_parms, ack_status_cw1 = get_ack(&ue->frame_parms,
ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][1]->harq_ack, ue->dlsch[proc->subframe_rx&0x1][eNB_id][1]->harq_ack,
subframe_tx, subframe_tx,
proc->subframe_rx, proc->subframe_rx,
pucch_ack_payload, pucch_ack_payload,
@@ -1910,13 +1910,13 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
#endif #endif
#if T_TRACER #if T_TRACER
T(T_UE_PHY_PUCCH_TX_POWER, T_INT(eNB_id),T_INT(Mod_id), T_INT(frame_tx%1024), T_INT(subframe_tx),T_INT(ue->tx_power_dBm[subframe_tx]), T(T_UE_PHY_PUCCH_TX_POWER, T_INT(eNB_id),T_INT(Mod_id), T_INT(frame_tx%1024), T_INT(subframe_tx),T_INT(ue->tx_power_dBm[subframe_tx]),
T_INT(tx_amp),T_INT(ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id))); T_INT(tx_amp),T_INT(ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id)));
#endif #endif
if(format == pucch_format1) if(format == pucch_format1)
{ {
LOG_D(PHY,"[UE %d][SR %x] AbsSubframe %d.%d Generating PUCCH 1 (SR for PUSCH), an_srs_simultanous %d, shorten_pucch %d, n1_pucch %d, Po_PUCCH %d\n", LOG_D(PHY,"[UE %d][SR %x] AbsSubframe %d.%d Generating PUCCH 1 (SR for PUSCH), an_srs_simultanous %d, shorten_pucch %d, n1_pucch %d, Po_PUCCH %d\n",
Mod_id, Mod_id,
ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->rnti, ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti,
frame_tx%1024, subframe_tx, frame_tx%1024, subframe_tx,
frame_parms->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission, frame_parms->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission,
isShortenPucch, isShortenPucch,
@@ -1928,7 +1928,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
if (SR_payload>0) { if (SR_payload>0) {
LOG_D(PHY,"[UE %d][SR %x] AbsSubFrame %d.%d Generating PUCCH %s payload %d,%d (with SR for PUSCH), an_srs_simultanous %d, shorten_pucch %d, n1_pucch %d, Po_PUCCH %d, amp %d\n", LOG_D(PHY,"[UE %d][SR %x] AbsSubFrame %d.%d Generating PUCCH %s payload %d,%d (with SR for PUSCH), an_srs_simultanous %d, shorten_pucch %d, n1_pucch %d, Po_PUCCH %d, amp %d\n",
Mod_id, Mod_id,
ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->rnti, ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti,
frame_tx % 1024, subframe_tx, frame_tx % 1024, subframe_tx,
(format == pucch_format1a? "1a": ( (format == pucch_format1a? "1a": (
format == pucch_format1b? "1b" : "??")), format == pucch_format1b? "1b" : "??")),
@@ -1941,7 +1941,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
} else { } else {
LOG_D(PHY,"[UE %d][PDSCH %x] AbsSubFrame %d.%d rx_offset_diff: %d, Generating PUCCH %s, an_srs_simultanous %d, shorten_pucch %d, n1_pucch %d, b[0]=%d,b[1]=%d (SR_Payload %d), Po_PUCCH %d, amp %d\n", LOG_D(PHY,"[UE %d][PDSCH %x] AbsSubFrame %d.%d rx_offset_diff: %d, Generating PUCCH %s, an_srs_simultanous %d, shorten_pucch %d, n1_pucch %d, b[0]=%d,b[1]=%d (SR_Payload %d), Po_PUCCH %d, amp %d\n",
Mod_id, Mod_id,
ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->rnti, ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti,
frame_tx%1024, subframe_tx,ue->rx_offset_diff, frame_tx%1024, subframe_tx,ue->rx_offset_diff,
(format == pucch_format1a? "1a": ( (format == pucch_format1a? "1a": (
format == pucch_format1b? "1b" : "??")), format == pucch_format1b? "1b" : "??")),
@@ -1956,13 +1956,13 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
#if T_TRACER #if T_TRACER
if(pucch_payload[0]) if(pucch_payload[0])
{ {
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[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->rnti), 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[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->current_harq_pid)); T_INT(ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->current_harq_pid));
} }
else else
{ {
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[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->rnti), 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[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->current_harq_pid)); T_INT(ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->current_harq_pid));
} }
#endif #endif
@@ -2015,12 +2015,12 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
#endif #endif
#if T_TRACER #if T_TRACER
T(T_UE_PHY_PUCCH_TX_POWER, T_INT(eNB_id),T_INT(Mod_id), T_INT(frame_tx%1024), T_INT(subframe_tx),T_INT(ue->tx_power_dBm[subframe_tx]), T(T_UE_PHY_PUCCH_TX_POWER, T_INT(eNB_id),T_INT(Mod_id), T_INT(frame_tx%1024), T_INT(subframe_tx),T_INT(ue->tx_power_dBm[subframe_tx]),
T_INT(tx_amp),T_INT(ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id))); T_INT(tx_amp),T_INT(ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id)));
#endif #endif
LOG_D(PHY,"[UE %d][RNTI %x] AbsSubFrame %d.%d Generating PUCCH 2 (RI or CQI), n2_pucch %d, Po_PUCCH %d, isShortenPucch %d, amp %d\n", LOG_D(PHY,"[UE %d][RNTI %x] AbsSubFrame %d.%d Generating PUCCH 2 (RI or CQI), n2_pucch %d, Po_PUCCH %d, isShortenPucch %d, amp %d\n",
Mod_id, Mod_id,
ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->rnti, ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti,
frame_tx%1024, subframe_tx, frame_tx%1024, subframe_tx,
n2_pucch, n2_pucch,
Po_PUCCH, Po_PUCCH,
@@ -2045,13 +2045,13 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
case pucch_format2a: case pucch_format2a:
LOG_D(PHY,"[UE %d][RNTI %x] AbsSubFrame %d.%d Generating PUCCH 2a (RI or CQI) Ack/Nack 1bit \n", LOG_D(PHY,"[UE %d][RNTI %x] AbsSubFrame %d.%d Generating PUCCH 2a (RI or CQI) Ack/Nack 1bit \n",
Mod_id, Mod_id,
ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->rnti, ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti,
frame_tx%1024, subframe_tx); frame_tx%1024, subframe_tx);
break; break;
case pucch_format2b: case pucch_format2b:
LOG_D(PHY,"[UE %d][RNTI %x] AbsSubFrame %d.%d Generating PUCCH 2b (RI or CQI) Ack/Nack 2bits\n", LOG_D(PHY,"[UE %d][RNTI %x] AbsSubFrame %d.%d Generating PUCCH 2b (RI or CQI) Ack/Nack 2bits\n",
Mod_id, Mod_id,
ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->rnti, ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti,
frame_tx%1024, subframe_tx); frame_tx%1024, subframe_tx);
break; break;
default: default:
@@ -2194,17 +2194,17 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,ui
// reset DL ACK/NACK status // reset DL ACK/NACK status
uint8_t N_bundled = 0; uint8_t N_bundled = 0;
if (ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0] != NULL) if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0] != NULL)
{ {
reset_ack(&ue->frame_parms, reset_ack(&ue->frame_parms,
ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->harq_ack, ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack,
subframe_tx, subframe_tx,
proc->subframe_rx, proc->subframe_rx,
ue->ulsch[eNB_id]->o_ACK, ue->ulsch[eNB_id]->o_ACK,
&N_bundled, &N_bundled,
0); 0);
reset_ack(&ue->frame_parms, reset_ack(&ue->frame_parms,
ue->dlsch[(subframe_DL(&ue->frame_parms,proc->subframe_rx)+1)&0x1][eNB_id][0]->harq_ack, ue->dlsch[(proc->subframe_rx+1)&0x1][eNB_id][0]->harq_ack,
subframe_tx, subframe_tx,
proc->subframe_rx, proc->subframe_rx,
ue->ulsch[eNB_id]->o_ACK, ue->ulsch[eNB_id]->o_ACK,
@@ -2412,8 +2412,8 @@ void phy_procedures_emos_UE_RX(PHY_VARS_UE *ue,uint8_t last_slot,uint8_t eNB_id)
emos_dump_UE.total_TBS_last = ue->total_TBS_last[eNB_id]; emos_dump_UE.total_TBS_last = ue->total_TBS_last[eNB_id];
emos_dump_UE.bitrate = ue->bitrate[eNB_id]; emos_dump_UE.bitrate = ue->bitrate[eNB_id];
emos_dump_UE.total_received_bits = ue->total_received_bits[eNB_id]; emos_dump_UE.total_received_bits = ue->total_received_bits[eNB_id];
emos_dump_UE.pmi_saved = ue->dlsch[subframe_DL(&ue->frame_parms,subframe)&0x1][eNB_id][0]->pmi_alloc; emos_dump_UE.pmi_saved = ue->dlsch[subframe&0x1][eNB_id][0]->pmi_alloc;
emos_dump_UE.mcs = ue->dlsch[subframe_DL(&ue->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[ue->dlsch[subframe_DL(&ue->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid]->mcs; emos_dump_UE.mcs = ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[ue->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->mcs;
emos_dump_UE.use_ia_receiver = openair_daq_vars.use_ia_receiver; emos_dump_UE.use_ia_receiver = openair_daq_vars.use_ia_receiver;
bytes = rtf_put(CHANSOUNDER_FIFO_MINOR, &emos_dump_UE, sizeof(fifo_dump_emos_UE)); bytes = rtf_put(CHANSOUNDER_FIFO_MINOR, &emos_dump_UE, sizeof(fifo_dump_emos_UE));
@@ -2845,7 +2845,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
(dci_alloc_rx[i].format == format2A) || (dci_alloc_rx[i].format == format2A) ||
(dci_alloc_rx[i].format == format2B)) (dci_alloc_rx[i].format == format2B))
{ {
ue->dlsch[subframe_DL(&ue->frame_parms,subframe_rx)&0x1][eNB_id][0]->g_pucch += ue->dlsch[subframe_rx&0x1][eNB_id][0]->harq_processes[ue->dlsch[subframe_DL(&ue->frame_parms,subframe_rx)&0x1][eNB_id][0]->current_harq_pid]->delta_PUCCH; 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]++;
@@ -2853,7 +2853,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
#ifdef DEBUG_PHY_PROC #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); 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]); 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_DL(&ue->frame_parms,subframe_rx)&0x1][eNB_id][0]->active); 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 #endif
// we received a CRNTI, so we're in PUSCH // we received a CRNTI, so we're in PUSCH
@@ -3796,10 +3796,10 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
// deactivate reception until we scan pdcch // deactivate reception until we scan pdcch
if (ue->dlsch[subframe_DL(&ue->frame_parms,subframe_rx)&0x1][eNB_id][0]) if (ue->dlsch[subframe_rx&0x1][eNB_id][0])
ue->dlsch[subframe_DL(&ue->frame_parms,subframe_rx)&0x1][eNB_id][0]->active = 0; ue->dlsch[subframe_rx&0x1][eNB_id][0]->active = 0;
if (ue->dlsch[subframe_DL(&ue->frame_parms,subframe_rx)&0x1][eNB_id][1]) if (ue->dlsch[subframe_rx&0x1][eNB_id][1])
ue->dlsch[subframe_DL(&ue->frame_parms,subframe_rx)&0x1][eNB_id][1]->active = 0; ue->dlsch[subframe_rx&0x1][eNB_id][1]->active = 0;
if (ue->dlsch_SI[eNB_id]) if (ue->dlsch_SI[eNB_id])
ue->dlsch_SI[eNB_id]->active = 0; ue->dlsch_SI[eNB_id]->active = 0;
@@ -3895,13 +3895,13 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
start_meas(&ue->generic_stat); start_meas(&ue->generic_stat);
// do procedures for C-RNTI // do procedures for C-RNTI
if (ue->dlsch[subframe_DL(&ue->frame_parms,subframe_rx)&0x1][eNB_id][0]->active == 1) { 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); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
ue_pdsch_procedures(ue, ue_pdsch_procedures(ue,
proc, proc,
eNB_id, eNB_id,
PDSCH, PDSCH,
ue->dlsch[subframe_DL(&ue->frame_parms,subframe_rx)&0x1][eNB_id][0], ue->dlsch[subframe_rx&0x1][eNB_id][0],
NULL, NULL,
ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->num_pdcch_symbols, ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->num_pdcch_symbols,
ue->frame_parms.symbols_per_tti>>1, ue->frame_parms.symbols_per_tti>>1,
@@ -4002,14 +4002,14 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
// do procedures for C-RNTI // do procedures for C-RNTI
LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx); LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
if (ue->dlsch[subframe_DL(&ue->frame_parms,subframe_rx)&0x1][eNB_id][0]->active == 1) { 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); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
start_meas(&ue->pdsch_procedures_stat); start_meas(&ue->pdsch_procedures_stat);
ue_pdsch_procedures(ue, ue_pdsch_procedures(ue,
proc, proc,
eNB_id, eNB_id,
PDSCH, PDSCH,
ue->dlsch[subframe_DL(&ue->frame_parms,subframe_rx)&0x1][eNB_id][0], ue->dlsch[subframe_rx&0x1][eNB_id][0],
NULL, NULL,
1+(ue->frame_parms.symbols_per_tti>>1), 1+(ue->frame_parms.symbols_per_tti>>1),
ue->frame_parms.symbols_per_tti-1, ue->frame_parms.symbols_per_tti-1,
@@ -4024,8 +4024,8 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
proc, proc,
eNB_id, eNB_id,
PDSCH, PDSCH,
ue->dlsch[subframe_DL(&ue->frame_parms,subframe_rx)&0x1][eNB_id][0], ue->dlsch[subframe_rx&0x1][eNB_id][0],
ue->dlsch[subframe_DL(&ue->frame_parms,subframe_rx)&0x1][eNB_id][1], ue->dlsch[subframe_rx&0x1][eNB_id][1],
&ue->dlsch_errors[eNB_id], &ue->dlsch_errors[eNB_id],
mode, mode,
abstraction_flag); abstraction_flag);
+5 -5
View File
@@ -52,7 +52,7 @@ int16_t pucch_power_cntl(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t subframe,u
Po_PUCCH = get_PL(ue->Mod_id,ue->CC_id,eNB_id)+ Po_PUCCH = get_PL(ue->Mod_id,ue->CC_id,eNB_id)+
ue->frame_parms.ul_power_control_config_common.p0_NominalPUCCH+ ue->frame_parms.ul_power_control_config_common.p0_NominalPUCCH+
ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->g_pucch; ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->g_pucch;
switch (pucch_fmt) { switch (pucch_fmt) {
case pucch_format1: case pucch_format1:
@@ -91,19 +91,19 @@ int16_t pucch_power_cntl(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t subframe,u
if (pucch_fmt!=pucch_format1) { if (pucch_fmt!=pucch_format1) {
LOG_D(PHY,"[UE %d][PDSCH %x] AbsSubframe %d.%d: Po_PUCCH %d dBm : Po_NOMINAL_PUCCH %d dBm, PL %d dB, g_pucch %d dB\n", LOG_D(PHY,"[UE %d][PDSCH %x] AbsSubframe %d.%d: Po_PUCCH %d dBm : Po_NOMINAL_PUCCH %d dBm, PL %d dB, g_pucch %d dB\n",
ue->Mod_id, ue->Mod_id,
ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->rnti,proc->frame_tx%1024,subframe, ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti,proc->frame_tx%1024,subframe,
Po_PUCCH, Po_PUCCH,
ue->frame_parms.ul_power_control_config_common.p0_NominalPUCCH, ue->frame_parms.ul_power_control_config_common.p0_NominalPUCCH,
get_PL(ue->Mod_id,ue->CC_id,eNB_id), get_PL(ue->Mod_id,ue->CC_id,eNB_id),
ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->g_pucch); ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->g_pucch);
} else { } else {
LOG_D(PHY,"[UE %d][SR %x] AbsSubframe %d.%d: Po_PUCCH %d dBm : Po_NOMINAL_PUCCH %d dBm, PL %d dB g_pucch %d dB\n", LOG_D(PHY,"[UE %d][SR %x] AbsSubframe %d.%d: Po_PUCCH %d dBm : Po_NOMINAL_PUCCH %d dBm, PL %d dB g_pucch %d dB\n",
ue->Mod_id, ue->Mod_id,
ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->rnti,proc->frame_tx%1024,subframe, ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti,proc->frame_tx%1024,subframe,
Po_PUCCH, Po_PUCCH,
ue->frame_parms.ul_power_control_config_common.p0_NominalPUCCH, ue->frame_parms.ul_power_control_config_common.p0_NominalPUCCH,
get_PL(ue->Mod_id,ue->CC_id,eNB_id), get_PL(ue->Mod_id,ue->CC_id,eNB_id),
ue->dlsch[subframe_DL(&ue->frame_parms,proc->subframe_rx)&0x1][eNB_id][0]->g_pucch); ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->g_pucch);
} }
return(Po_PUCCH); return(Po_PUCCH);
+19 -19
View File
@@ -2105,14 +2105,14 @@ int main(int argc, char **argv)
} }
for (i=0; i<2; i++) { for (i=0; i<2; i++) {
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][i] = new_ue_dlsch(Kmimo,8,Nsoft,MAX_TURBO_ITERATIONS,N_RB_DL,0); UE->dlsch[subframe&0x1][0][i] = new_ue_dlsch(Kmimo,8,Nsoft,MAX_TURBO_ITERATIONS,N_RB_DL,0);
if (!UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][i]) { if (!UE->dlsch[subframe&0x1][0][i]) {
printf("Can't get ue dlsch structures\n"); printf("Can't get ue dlsch structures\n");
exit(-1); exit(-1);
} }
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][i]->rnti = n_rnti; UE->dlsch[subframe&0x1][0][i]->rnti = n_rnti;
} }
UE->dlsch_SI[0] = new_ue_dlsch(1,1,Nsoft,MAX_TURBO_ITERATIONS,N_RB_DL,0); UE->dlsch_SI[0] = new_ue_dlsch(1,1,Nsoft,MAX_TURBO_ITERATIONS,N_RB_DL,0);
@@ -2500,7 +2500,7 @@ int main(int argc, char **argv)
if (n_frames==1) printf("Running phy_procedures_UE_RX\n"); if (n_frames==1) printf("Running phy_procedures_UE_RX\n");
phy_procedures_UE_RX(UE,proc,0,0,normal_txrx,no_relay,NULL); phy_procedures_UE_RX(UE,proc,0,0,normal_txrx,no_relay,NULL);
if (UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->active == 0) { if (UE->dlsch[subframe&0x1][0][0]->active == 0) {
//printf("DCI not received\n"); //printf("DCI not received\n");
dci_errors[round]++; dci_errors[round]++;
UE->dlsch_errors[0] = 1; UE->dlsch_errors[0] = 1;
@@ -2558,7 +2558,7 @@ int main(int argc, char **argv)
//pdsch_vars //pdsch_vars
dump_dlsch2(UE,eNB_id,subframe,&coded_bits_per_codeword,round, UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid); dump_dlsch2(UE,eNB_id,subframe,&coded_bits_per_codeword,round, UE->dlsch[subframe&0x1][0][0]->current_harq_pid);
write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4); write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4);
@@ -2576,13 +2576,13 @@ int main(int argc, char **argv)
if (UE->dlsch_errors[0] == 0) { if (UE->dlsch_errors[0] == 0) {
avg_iter += UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->last_iteration_cnt; avg_iter += UE->dlsch[subframe&0x1][eNB_id][0]->last_iteration_cnt;
iter_trials++; iter_trials++;
if (n_frames==1) if (n_frames==1)
printf("No DLSCH errors found (round %d),uncoded ber %f\n",round,uncoded_ber); printf("No DLSCH errors found (round %d),uncoded ber %f\n",round,uncoded_ber);
UE->total_TBS[eNB_id] = UE->total_TBS[eNB_id] + UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid]->TBS; UE->total_TBS[eNB_id] = UE->total_TBS[eNB_id] + UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->TBS;
TB0_active = 0; TB0_active = 0;
@@ -2590,25 +2590,25 @@ int main(int argc, char **argv)
else { else {
errs[round]++; errs[round]++;
avg_iter += UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->last_iteration_cnt-1; avg_iter += UE->dlsch[subframe&0x1][eNB_id][0]->last_iteration_cnt-1;
iter_trials++; iter_trials++;
if (n_frames==1) { if (n_frames==1) {
//if ((n_frames==1) || (SNR>=30)) { //if ((n_frames==1) || (SNR>=30)) {
printf("DLSCH errors found (round %d), uncoded ber %f\n",round,uncoded_ber); printf("DLSCH errors found (round %d), uncoded ber %f\n",round,uncoded_ber);
for (s=0; s<UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->C; s++) { for (s=0; s<UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->C; s++) {
if (s<UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->Cminus) if (s<UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Cminus)
Kr = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->Kminus; Kr = UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kminus;
else else
Kr = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->Kplus; Kr = UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kplus;
Kr_bytes = Kr>>3; Kr_bytes = Kr>>3;
printf("Decoded_output (Segment %d):\n",s); printf("Decoded_output (Segment %d):\n",s);
for (i=0; i<Kr_bytes; i++) for (i=0; i<Kr_bytes; i++)
printf("%d : %x (%x)\n",i,UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->c[s][i],UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->c[s][i]^eNB->dlsch[0][0]->harq_processes[0]->c[s][i]); printf("%d : %x (%x)\n",i,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->c[s][i],UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->c[s][i]^eNB->dlsch[0][0]->harq_processes[0]->c[s][i]);
} }
sprintf(fname,"rxsig0_r%d.m",round); sprintf(fname,"rxsig0_r%d.m",round);
@@ -2659,13 +2659,13 @@ int main(int argc, char **argv)
} }
//pdsch_vars //pdsch_vars
dump_dlsch2(UE,eNB_id,subframe,&coded_bits_per_codeword,round, UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid); dump_dlsch2(UE,eNB_id,subframe,&coded_bits_per_codeword,round, UE->dlsch[subframe&0x1][0][0]->current_harq_pid);
//write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4); //write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4);
//write_output("dlsch_ber_bit.m","ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0); //write_output("dlsch_ber_bit.m","ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0);
//write_output("dlsch_w.m","w",eNB->dlsch[0][0]->harq_processes[0]->w[0],3*(tbs+64),1,4); //write_output("dlsch_w.m","w",eNB->dlsch[0][0]->harq_processes[0]->w[0],3*(tbs+64),1,4);
//write_output("dlsch_w.m","w",UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0); //write_output("dlsch_w.m","w",UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0);
//pdcch_vars //pdcch_vars
write_output("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[0][eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1); write_output("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[0][eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1);
write_output("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[0][eNB_id]->dl_ch_estimates_ext[0],300*3,1,1); write_output("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[0][eNB_id]->dl_ch_estimates_ext[0],300*3,1,1);
@@ -2679,7 +2679,7 @@ int main(int argc, char **argv)
// printf("round %d errors %d/%d\n",round,errs[round],trials); // printf("round %d errors %d/%d\n",round,errs[round],trials);
round++; round++;
// UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->round++; // UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->round++;
} }
if (xforms==1) { if (xforms==1) {
@@ -2869,7 +2869,7 @@ int main(int argc, char **argv)
//rate*effective_rate, //rate*effective_rate,
100*effective_rate, 100*effective_rate,
//rate, //rate,
//rate*get_Qm(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->mcs), //rate*get_Qm(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs),
(1.0*(round_trials[0]-errs[0])+2.0*(round_trials[1]-errs[1])+3.0*(round_trials[2]-errs[2])+4.0*(round_trials[3]-errs[3]))/((double)round_trials[0])/ (1.0*(round_trials[0]-errs[0])+2.0*(round_trials[1]-errs[1])+3.0*(round_trials[2]-errs[2])+4.0*(round_trials[3]-errs[3]))/((double)round_trials[0])/
(double)eNB->dlsch[0][0]->harq_processes[0]->TBS, (double)eNB->dlsch[0][0]->harq_processes[0]->TBS,
(1.0*(round_trials[0]-errs[0])+2.0*(round_trials[1]-errs[1])+3.0*(round_trials[2]-errs[2])+4.0*(round_trials[3]-errs[3]))/((double)round_trials[0])); (1.0*(round_trials[0]-errs[0])+2.0*(round_trials[1]-errs[1])+3.0*(round_trials[2]-errs[2])+4.0*(round_trials[3]-errs[3]))/((double)round_trials[0]));
@@ -2946,7 +2946,7 @@ int main(int argc, char **argv)
printf("|__ DLSCH Rate Unmatching :%f us (%d trials)\n", printf("|__ DLSCH Rate Unmatching :%f us (%d trials)\n",
(double)UE->dlsch_rate_unmatching_stats.diff/UE->dlsch_rate_unmatching_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_rate_unmatching_stats.trials); (double)UE->dlsch_rate_unmatching_stats.diff/UE->dlsch_rate_unmatching_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_rate_unmatching_stats.trials);
printf("|__ DLSCH Turbo Decoding(%d bits) :%f us (%d trials)\n", printf("|__ DLSCH Turbo Decoding(%d bits) :%f us (%d trials)\n",
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->Cminus ? UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->Kminus : UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->Kplus, UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Cminus ? UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kminus : UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kplus,
(double)UE->dlsch_turbo_decoding_stats.diff/UE->dlsch_turbo_decoding_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_turbo_decoding_stats.trials); (double)UE->dlsch_turbo_decoding_stats.diff/UE->dlsch_turbo_decoding_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_turbo_decoding_stats.trials);
printf(" |__ init %f us (cycles/iter %f, %d trials)\n", printf(" |__ init %f us (cycles/iter %f, %d trials)\n",
(double)UE->dlsch_tc_init_stats.diff/UE->dlsch_tc_init_stats.trials/cpu_freq_GHz/1000.0, (double)UE->dlsch_tc_init_stats.diff/UE->dlsch_tc_init_stats.trials/cpu_freq_GHz/1000.0,
@@ -3235,7 +3235,7 @@ int main(int argc, char **argv)
printf("eNB %d\n",i); printf("eNB %d\n",i);
free_eNB_dlsch(eNB->dlsch[0][i]); free_eNB_dlsch(eNB->dlsch[0][i]);
printf("UE %d\n",i); printf("UE %d\n",i);
free_ue_dlsch(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][i]); free_ue_dlsch(UE->dlsch[subframe&0x1][0][i]);
} }
+162 -162
View File
@@ -981,15 +981,15 @@ int main(int argc, char **argv)
} }
for (i=0; i<2; i++) { for (i=0; i<2; i++) {
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][i] = new_ue_dlsch(Kmimo,8,Nsoft,MAX_TURBO_ITERATIONS,N_RB_DL,0); UE->dlsch[subframe&0x1][0][i] = new_ue_dlsch(Kmimo,8,Nsoft,MAX_TURBO_ITERATIONS,N_RB_DL,0);
if (!UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][i]) { if (!UE->dlsch[subframe&0x1][0][i]) {
printf("Can't get ue dlsch structures\n"); printf("Can't get ue dlsch structures\n");
exit(-1); exit(-1);
} }
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][i]->rnti = n_rnti; UE->dlsch[subframe&0x1][0][i]->rnti = n_rnti;
} }
// structure for SIC at UE // structure for SIC at UE
@@ -2137,8 +2137,8 @@ int main(int argc, char **argv)
eNB2UE[0]->first_run = 1; eNB2UE[0]->first_run = 1;
ret[0] = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations+1; ret[0] = UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations+1;
ret[1] = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations+1; ret[1] = UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations+1;
resend_cw0_cw1=1; resend_cw0_cw1=1;
resend_cw1=0; resend_cw1=0;
@@ -2146,10 +2146,10 @@ int main(int argc, char **argv)
TB1_active=1; TB1_active=1;
while (((transmission_mode == 3 || transmission_mode == 4) && while (((transmission_mode == 3 || transmission_mode == 4) &&
((round < num_rounds) && ((ret[0] > UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations) || ((round < num_rounds) && ((ret[0] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations) ||
(ret[1] > UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations)))) || (ret[1] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations)))) ||
((transmission_mode!=4 && transmission_mode != 3) && ((round< num_rounds) && ((transmission_mode!=4 && transmission_mode != 3) && ((round< num_rounds) &&
(ret[0] > UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations)))) { (ret[0] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations)))) {
#ifdef DEBUG_HARQ #ifdef DEBUG_HARQ
printf("\n [DLSIM] On top round is %d\n", round); printf("\n [DLSIM] On top round is %d\n", round);
#endif #endif
@@ -2160,10 +2160,10 @@ int main(int argc, char **argv)
//printf("Trial %d, round %d , ret[0] %d, ret[1] %d, round_trials %d\n",trials,round, ret[0], ret[1], round_trials[round]); //printf("Trial %d, round %d , ret[0] %d, ret[1] %d, round_trials %d\n",trials,round, ret[0], ret[1], round_trials[round]);
/*if (ret[0] > UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations) { /*if (ret[0] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations) {
round_trials[0][round]++; round_trials[0][round]++;
round_trials[1][round]++; round_trials[1][round]++;
} else if ((ret[1] > UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations) && (ret[0] <= UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations)) } else if ((ret[1] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations) && (ret[0] <= UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations))
round_trials[1][round]++;*/ round_trials[1][round]++;*/
@@ -2626,7 +2626,7 @@ int main(int argc, char **argv)
SI_RNTI, SI_RNTI,
0, 0,
P_RNTI, P_RNTI,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->pmi_alloc, UE->dlsch[subframe&0x1][0][1]->pmi_alloc,
transmission_mode>=7?transmission_mode:0 transmission_mode>=7?transmission_mode:0
); );
break; break;
@@ -2854,7 +2854,7 @@ int main(int argc, char **argv)
SI_RNTI, SI_RNTI,
0, 0,
P_RNTI, P_RNTI,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->pmi_alloc, UE->dlsch[subframe&0x1][0][1]->pmi_alloc,
transmission_mode>=7?transmission_mode:0 transmission_mode>=7?transmission_mode:0
); );
break; break;
@@ -2985,7 +2985,7 @@ int main(int argc, char **argv)
// use the PMI from previous trial // use the PMI from previous trial
if (DLSCH_alloc_pdu2_1E[0].tpmi == 5) { if (DLSCH_alloc_pdu2_1E[0].tpmi == 5) {
eNB->dlsch[0][0]->harq_processes[0]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,eNB->frame_parms.N_RB_DL); eNB->dlsch[0][0]->harq_processes[0]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,eNB->frame_parms.N_RB_DL);
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL); UE->dlsch[subframe&0x1][0][0]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL);
if (n_users>1) if (n_users>1)
eNB->dlsch[1][0]->harq_processes[0]->pmi_alloc = (eNB->dlsch[0][0]->harq_processes[0]->pmi_alloc ^ 0x1555); eNB->dlsch[1][0]->harq_processes[0]->pmi_alloc = (eNB->dlsch[0][0]->harq_processes[0]->pmi_alloc ^ 0x1555);
/* /*
@@ -3009,7 +3009,7 @@ int main(int argc, char **argv)
printf ("[DLSIM] I am calling from the eNode B 2\n"); printf ("[DLSIM] I am calling from the eNode B 2\n");
#endif #endif
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL); UE->dlsch[subframe&0x1][0][TB]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL);
} }
else if (updated_csi == 0){ else if (updated_csi == 0){
@@ -3022,7 +3022,7 @@ int main(int argc, char **argv)
#ifdef DEBUG_HARQ #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 #endif
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->pmi_alloc = pmi_convert_rank1_from_rank2(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->pmi_alloc,5,UE->frame_parms.N_RB_DL); 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))){ 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))){
@@ -3033,7 +3033,7 @@ int main(int argc, char **argv)
#ifdef DEBUG_HARQ #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 #endif
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->pmi_alloc = pmi_convert_rank1_from_rank2(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->pmi_alloc,6,UE->frame_parms.N_RB_DL); 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);
} }
} else if (updated_csi == 1){ } else if (updated_csi == 1){
@@ -3052,11 +3052,11 @@ int main(int argc, char **argv)
#ifdef DEBUG_HARQ #ifdef DEBUG_HARQ
printf ("[DLSIM] I quantize from ENodeB 2\n"); printf ("[DLSIM] I quantize from ENodeB 2\n");
#endif #endif
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL); UE->dlsch[subframe&0x1][0][TB]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL);
#ifdef DEBUG_HARQ #ifdef DEBUG_HARQ
printf ("[DLSIM] I convert pmi to rank1 eNode B 2\n"); printf ("[DLSIM] I convert pmi to rank1 eNode B 2\n");
#endif #endif
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->pmi_alloc = pmi_convert_rank1_from_rank2(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->pmi_alloc,5,UE->frame_parms.N_RB_DL); 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 (((((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 6) ||(((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 6))){ else if (((((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 #ifdef DEBUG_HARQ
@@ -3072,11 +3072,11 @@ int main(int argc, char **argv)
#ifdef DEBUG_HARQ #ifdef DEBUG_HARQ
printf ("[DLSIM] I quantize from ENodeB 2\n"); printf ("[DLSIM] I quantize from ENodeB 2\n");
#endif #endif
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL); UE->dlsch[subframe&0x1][0][TB]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL);
#ifdef DEBUG_HARQ #ifdef DEBUG_HARQ
printf ("[DLSIM] I convert pmi to rank1 eNode B 2\n"); printf ("[DLSIM] I convert pmi to rank1 eNode B 2\n");
#endif #endif
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->pmi_alloc = pmi_convert_rank1_from_rank2(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->pmi_alloc,6,UE->frame_parms.N_RB_DL); 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);
} }
} }
@@ -3525,10 +3525,10 @@ int main(int argc, char **argv)
//printf("Generating dlsch parameters for RNTI %x\n",dci_alloc_rx[i].rnti); //printf("Generating dlsch parameters for RNTI %x\n",dci_alloc_rx[i].rnti);
if (round == 0) { if (round == 0) {
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->first_tx=1; UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->first_tx=1;
} }
if ((transmission_mode == 3 || transmission_mode ==4) && (round == 0)) { if ((transmission_mode == 3 || transmission_mode ==4) && (round == 0)) {
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[0]->first_tx=1; UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->first_tx=1;
} }
if ((dci_alloc_rx[i].rnti == n_rnti) && if ((dci_alloc_rx[i].rnti == n_rnti) &&
@@ -3537,7 +3537,7 @@ int main(int argc, char **argv)
dci_alloc_rx[i].dci_pdu, dci_alloc_rx[i].dci_pdu,
dci_alloc_rx[i].rnti, dci_alloc_rx[i].rnti,
dci_alloc_rx[i].format, dci_alloc_rx[i].format,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0], UE->dlsch[subframe&0x1][0],
&UE->frame_parms, &UE->frame_parms,
UE->pdsch_config_dedicated, UE->pdsch_config_dedicated,
SI_RNTI, SI_RNTI,
@@ -3547,30 +3547,30 @@ int main(int argc, char **argv)
UE->pdcch_vars[subframe&0x1][0]->crnti_is_temporary? UE->pdcch_vars[subframe&0x1][0]->crnti: 0)==0)) { UE->pdcch_vars[subframe&0x1][0]->crnti_is_temporary? UE->pdcch_vars[subframe&0x1][0]->crnti: 0)==0)) {
dump_dci(&UE->frame_parms,&dci_alloc_rx[i]); dump_dci(&UE->frame_parms,&dci_alloc_rx[i]);
coded_bits_per_codeword[0]= get_G(&eNB->frame_parms, coded_bits_per_codeword[0]= get_G(&eNB->frame_parms,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->nb_rb, UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->nb_rb,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->rb_alloc_even, UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->rb_alloc_even,
get_Qm(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->mcs), get_Qm(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs),
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->Nl, UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->Nl,
UE->pdcch_vars[subframe_DL(&UE->frame_parms,subframe)&0x1][0]->num_pdcch_symbols, UE->pdcch_vars[subframe&0x1][0]->num_pdcch_symbols,
0, 0,
subframe, subframe,
transmission_mode>=7?transmission_mode:0); transmission_mode>=7?transmission_mode:0);
if (transmission_mode == 3 || transmission_mode == 4) { if (transmission_mode == 3 || transmission_mode == 4) {
coded_bits_per_codeword[1]= get_G(&eNB->frame_parms, coded_bits_per_codeword[1]= get_G(&eNB->frame_parms,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->nb_rb, UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->nb_rb,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->rb_alloc_even, UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->rb_alloc_even,
get_Qm(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->mcs), get_Qm(UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs),
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->Nl, UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->Nl,
UE->pdcch_vars[subframe&0x1][1]->num_pdcch_symbols, UE->pdcch_vars[subframe&0x1][1]->num_pdcch_symbols,
0, 0,
subframe, subframe,
transmission_mode>=7?transmission_mode:0); transmission_mode>=7?transmission_mode:0);
} }
/* /*
rate = (double)dlsch_tbs25[get_I_TBS(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->mcs)][UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->nb_rb-1]/(coded_bits_per_codeword); rate = (double)dlsch_tbs25[get_I_TBS(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs)][UE->dlsch[subframe&0x1][0][0]->nb_rb-1]/(coded_bits_per_codeword);
rate*=get_Qm(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->mcs); rate*=get_Qm(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs);
*/ */
printf("num_pdcch_symbols %d, G %d, TBS %d\n",UE->pdcch_vars[subframe&0x1][0]->num_pdcch_symbols,coded_bits_per_codeword [0],UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->TBS); printf("num_pdcch_symbols %d, G %d, TBS %d\n",UE->pdcch_vars[subframe&0x1][0]->num_pdcch_symbols,coded_bits_per_codeword [0],UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->TBS);
dlsch_active = 1; // what does it indicates??? dlsch_active = 1; // what does it indicates???
} else { } else {
@@ -3594,8 +3594,8 @@ int main(int argc, char **argv)
UE->pdcch_vars[subframe&0x1][0]->crnti = n_rnti; UE->pdcch_vars[subframe&0x1][0]->crnti = n_rnti;
UE->pdcch_vars[subframe&0x1][0]->num_pdcch_symbols = num_pdcch_symbols; UE->pdcch_vars[subframe&0x1][0]->num_pdcch_symbols = num_pdcch_symbols;
if (round == 0) { if (round == 0) {
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->first_tx=1; UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->first_tx=1;
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[0]->first_tx=1; UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->first_tx=1;
} }
switch (transmission_mode) { switch (transmission_mode) {
@@ -3606,7 +3606,7 @@ int main(int argc, char **argv)
&DLSCH_alloc_pdu_1[0], &DLSCH_alloc_pdu_1[0],
(common_flag==0)? C_RNTI : SI_RNTI, (common_flag==0)? C_RNTI : SI_RNTI,
(common_flag==0)? format1 : format1A, (common_flag==0)? format1 : format1A,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0], UE->dlsch[subframe&0x1][0],
&UE->frame_parms, &UE->frame_parms,
UE->pdsch_config_dedicated, UE->pdsch_config_dedicated,
SI_RNTI, SI_RNTI,
@@ -3617,14 +3617,14 @@ int main(int argc, char **argv)
break; break;
case 3: case 3:
//printf("Rate: TM3 (before) round %d (%d) first_tx %d\n",round,UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->round,UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->first_tx); //printf("Rate: TM3 (before) round %d (%d) first_tx %d\n",round,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->round,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->first_tx);
generate_ue_dlsch_params_from_dci(0, generate_ue_dlsch_params_from_dci(0,
subframe, subframe,
&DLSCH_alloc_pdu_1[0], &DLSCH_alloc_pdu_1[0],
(common_flag==0)? C_RNTI : SI_RNTI, (common_flag==0)? C_RNTI : SI_RNTI,
(common_flag==0)? format2A : format1A, (common_flag==0)? format2A : format1A,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0], UE->dlsch[subframe&0x1][0],
&UE->frame_parms, &UE->frame_parms,
UE->pdsch_config_dedicated, UE->pdsch_config_dedicated,
SI_RNTI, SI_RNTI,
@@ -3632,7 +3632,7 @@ int main(int argc, char **argv)
P_RNTI, P_RNTI,
transmission_mode<7?0:transmission_mode, transmission_mode<7?0:transmission_mode,
UE->pdcch_vars[subframe&0x1][0]->crnti_is_temporary? UE->pdcch_vars[subframe&0x1][0]->crnti: 0); UE->pdcch_vars[subframe&0x1][0]->crnti_is_temporary? UE->pdcch_vars[subframe&0x1][0]->crnti: 0);
//printf("Rate: TM3 (after) round %d (%d) first_tx %d\n",round,UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->round,UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->first_tx); //printf("Rate: TM3 (after) round %d (%d) first_tx %d\n",round,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->round,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->first_tx);
break; break;
case 4: case 4:
generate_ue_dlsch_params_from_dci(0, generate_ue_dlsch_params_from_dci(0,
@@ -3640,7 +3640,7 @@ int main(int argc, char **argv)
&DLSCH_alloc_pdu_1[0], &DLSCH_alloc_pdu_1[0],
(common_flag==0)? C_RNTI : SI_RNTI, (common_flag==0)? C_RNTI : SI_RNTI,
(common_flag==0)? format2 : format1A,//format1A only for a codeblock (common_flag==0)? format2 : format1A,//format1A only for a codeblock
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0], UE->dlsch[subframe&0x1][0],
&UE->frame_parms, &UE->frame_parms,
UE->pdsch_config_dedicated, UE->pdsch_config_dedicated,
SI_RNTI, SI_RNTI,
@@ -3657,7 +3657,7 @@ int main(int argc, char **argv)
&DLSCH_alloc_pdu2_1E[0], &DLSCH_alloc_pdu2_1E[0],
C_RNTI, C_RNTI,
format1E_2A_M10PRB, format1E_2A_M10PRB,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0], UE->dlsch[subframe&0x1][0],
&UE->frame_parms, &UE->frame_parms,
UE->pdsch_config_dedicated, UE->pdsch_config_dedicated,
SI_RNTI, SI_RNTI,
@@ -3673,13 +3673,13 @@ int main(int argc, char **argv)
if (dlsch_active == 1) { if (dlsch_active == 1) {
if (TB0_active==1) if (TB0_active==1)
cur_harq_pid =UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid; cur_harq_pid =UE->dlsch[subframe&0x1][0][0]->current_harq_pid;
else else
cur_harq_pid =UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->current_harq_pid; cur_harq_pid =UE->dlsch[subframe&0x1][0][1]->current_harq_pid;
if ((Ns==(1+(2*subframe))) && (l==0)) {// process PDSCH symbols 1,2,3,4,5,(6 Normal Prefix if ((Ns==(1+(2*subframe))) && (l==0)) {// process PDSCH symbols 1,2,3,4,5,(6 Normal Prefix
/* if (transmission_mode == 5) { /* if (transmission_mode == 5) {
if ((UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[cur_harq_pid]->dl_power_off==0) && if ((UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[cur_harq_pid]->dl_power_off==0) &&
(openair_daq_vars.use_ia_receiver ==1)) { (openair_daq_vars.use_ia_receiver ==1)) {
rx_type = rx_IC_single_stream; rx_type = rx_IC_single_stream;
} else { } else {
@@ -3701,7 +3701,7 @@ int main(int argc, char **argv)
(m==UE->pdcch_vars[subframe&0x1][0]->num_pdcch_symbols)?1:0, (m==UE->pdcch_vars[subframe&0x1][0]->num_pdcch_symbols)?1:0,
rx_type, rx_type,
i_mod, i_mod,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid)==-1){ UE->dlsch[subframe&0x1][0][0]->current_harq_pid)==-1){
dlsch_active = 0; dlsch_active = 0;
break; break;
} }
@@ -3788,7 +3788,7 @@ int main(int argc, char **argv)
break; break;
} }
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->rnti = (common_flag==0) ? n_rnti: SI_RNTI; UE->dlsch[subframe&0x1][0][TB]->rnti = (common_flag==0) ? n_rnti: SI_RNTI;
coded_bits_per_codeword[TB] = get_G(&eNB->frame_parms, coded_bits_per_codeword[TB] = get_G(&eNB->frame_parms,
eNB->dlsch[0][TB]->harq_processes[0]->nb_rb, eNB->dlsch[0][TB]->harq_processes[0]->nb_rb,
eNB->dlsch[0][TB]->harq_processes[0]->rb_alloc, eNB->dlsch[0][TB]->harq_processes[0]->rb_alloc,
@@ -3798,12 +3798,12 @@ int main(int argc, char **argv)
0,subframe, 0,subframe,
transmission_mode>=7?transmission_mode:0); transmission_mode>=7?transmission_mode:0);
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->current_harq_pid]->G = coded_bits_per_codeword[TB]; UE->dlsch[subframe&0x1][0][TB]->harq_processes[UE->dlsch[subframe&0x1][0][TB]->current_harq_pid]->G = coded_bits_per_codeword[TB];
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->current_harq_pid]->Qm = get_Qm(eNB->dlsch[0][TB]->harq_processes[0]->mcs); UE->dlsch[subframe&0x1][0][TB]->harq_processes[UE->dlsch[subframe&0x1][0][TB]->current_harq_pid]->Qm = get_Qm(eNB->dlsch[0][TB]->harq_processes[0]->mcs);
if (n_frames==2) { if (n_frames==2) {
printf("Kmimo=%d, TB=%d, G=%d, TBS=%d\n",Kmimo,TB,coded_bits_per_codeword[TB], printf("Kmimo=%d, TB=%d, G=%d, TBS=%d\n",Kmimo,TB,coded_bits_per_codeword[TB],
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->current_harq_pid]->TBS); UE->dlsch[subframe&0x1][0][TB]->harq_processes[UE->dlsch[subframe&0x1][0][TB]->current_harq_pid]->TBS);
// calculate uncoded BER // calculate uncoded BER
uncoded_ber_bit = (short*) malloc(sizeof(short)*coded_bits_per_codeword[TB]); uncoded_ber_bit = (short*) malloc(sizeof(short)*coded_bits_per_codeword[TB]);
@@ -3812,7 +3812,7 @@ int main(int argc, char **argv)
sprintf(fname,"dlsch%d_rxF_r%d_cw%d_llr.m",eNB_id,round, TB); sprintf(fname,"dlsch%d_rxF_r%d_cw%d_llr.m",eNB_id,round, TB);
sprintf(vname,"dl%d_r%d_cw%d_llr",eNB_id,round, TB); sprintf(vname,"dl%d_r%d_cw%d_llr",eNB_id,round, TB);
write_output(fname,vname, UE->pdsch_vars[subframe&0x1][0]->llr[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->current_harq_pid]->codeword],coded_bits_per_codeword[TB],1,0); write_output(fname,vname, UE->pdsch_vars[subframe&0x1][0]->llr[UE->dlsch[subframe&0x1][0][TB]->harq_processes[UE->dlsch[subframe&0x1][0][TB]->current_harq_pid]->codeword],coded_bits_per_codeword[TB],1,0);
sprintf(fname,"dlsch_cw%d_e.m", TB); sprintf(fname,"dlsch_cw%d_e.m", TB);
sprintf(vname,"dlschcw%d_e", TB); sprintf(vname,"dlschcw%d_e", TB);
write_output(fname, vname,eNB->dlsch[0][TB]->harq_processes[0]->e,coded_bits_per_codeword[TB],1,4); write_output(fname, vname,eNB->dlsch[0][TB]->harq_processes[0]->e,coded_bits_per_codeword[TB],1,4);
@@ -3820,7 +3820,7 @@ int main(int argc, char **argv)
printf("trials=%d\n", trials); printf("trials=%d\n", trials);
for (i=0;i<coded_bits_per_codeword[TB];i++) for (i=0;i<coded_bits_per_codeword[TB];i++)
if (eNB->dlsch[0][TB]->harq_processes[0]->e[i] != (UE->pdsch_vars[subframe&0x1][0]->llr[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->current_harq_pid]->codeword][i]<0)) { if (eNB->dlsch[0][TB]->harq_processes[0]->e[i] != (UE->pdsch_vars[subframe&0x1][0]->llr[UE->dlsch[subframe&0x1][0][TB]->harq_processes[UE->dlsch[subframe&0x1][0][TB]->current_harq_pid]->codeword][i]<0)) {
uncoded_ber_bit[i] = 1; uncoded_ber_bit[i] = 1;
uncoded_ber++; uncoded_ber++;
} }
@@ -3842,22 +3842,22 @@ int main(int argc, char **argv)
start_meas(&UE->dlsch_unscrambling_stats); start_meas(&UE->dlsch_unscrambling_stats);
dlsch_unscrambling(&UE->frame_parms, dlsch_unscrambling(&UE->frame_parms,
0, 0,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB], UE->dlsch[subframe&0x1][0][TB],
coded_bits_per_codeword[TB], coded_bits_per_codeword[TB],
UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->current_harq_pid]->codeword], UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[subframe&0x1][0][TB]->harq_processes[UE->dlsch[subframe&0x1][0][TB]->current_harq_pid]->codeword],
TB, TB,
subframe<<1); subframe<<1);
stop_meas(&UE->dlsch_unscrambling_stats); stop_meas(&UE->dlsch_unscrambling_stats);
start_meas(&UE->dlsch_decoding_stats[subframe&0x1]); start_meas(&UE->dlsch_decoding_stats[subframe&0x1]);
ret[TB] = dlsch_decoding(UE, ret[TB] = dlsch_decoding(UE,
UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->current_harq_pid]->codeword], UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[subframe&0x1][0][TB]->harq_processes[UE->dlsch[subframe&0x1][0][TB]->current_harq_pid]->codeword],
&UE->frame_parms, &UE->frame_parms,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB], UE->dlsch[subframe&0x1][0][TB],
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->current_harq_pid], UE->dlsch[subframe&0x1][0][TB]->harq_processes[UE->dlsch[subframe&0x1][0][TB]->current_harq_pid],
0, 0,
subframe, subframe,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->current_harq_pid, UE->dlsch[subframe&0x1][0][TB]->current_harq_pid,
1,llr8_flag); 1,llr8_flag);
stop_meas(&UE->dlsch_decoding_stats[subframe&0x1]); stop_meas(&UE->dlsch_decoding_stats[subframe&0x1]);
#ifdef DEBUG_HARQ #ifdef DEBUG_HARQ
@@ -3865,11 +3865,11 @@ int main(int argc, char **argv)
#endif #endif
//printf("retr cw 0 = %d\n", ret[0]); //printf("retr cw 0 = %d\n", ret[0]);
//printf("current round = %d\n", UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][cw_non_sic]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][cw_non_sic]->current_harq_pid]->round); //printf("current round = %d\n", UE->dlsch[subframe&0x1][0][cw_non_sic]->harq_processes[UE->dlsch[subframe&0x1][0][cw_non_sic]->current_harq_pid]->round);
if (ret[TB] <= UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations ) { //if CW0 is decoded, approach CW1 if (ret[TB] <= UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations ) { //if CW0 is decoded, approach CW1
#ifdef DEBUG_HARQ #ifdef DEBUG_HARQ
printf("[DLSIM] TB%d is decoded\n", TB); printf("[DLSIM] TB%d is decoded\n", TB);
#endif #endif
@@ -3880,33 +3880,33 @@ int main(int argc, char **argv)
if (n_frames==2) { if (n_frames==2) {
printf("cw non sic %d, round %d: No DLSCH errors found, uncoded ber %f\n",TB,round,uncoded_ber); printf("cw non sic %d, round %d: No DLSCH errors found, uncoded ber %f\n",TB,round,uncoded_ber);
#ifdef PRINT_BYTES #ifdef PRINT_BYTES
for (s=0;s<UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->harq_processes[0]->C;s++) { for (s=0;s<UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->C;s++) {
if (s<UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->harq_processes[0]->Cminus) if (s<UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->Cminus)
Kr = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->harq_processes[0]->Kminus; Kr = UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->Kminus;
else else
Kr = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->harq_processes[0]->Kplus; Kr = UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->Kplus;
Kr_bytes = Kr>>3; Kr_bytes = Kr>>3;
printf("Decoded_output (Segment %d):\n",s); printf("Decoded_output (Segment %d):\n",s);
for (i=0;i<Kr_bytes;i++) for (i=0;i<Kr_bytes;i++)
printf("%d : %x (%x)\n",i,UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->harq_processes[0]->c[s][i], printf("%d : %x (%x)\n",i,UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->c[s][i],
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->harq_processes[0]->c[s][i]^eNB->dlsch[0][TB]->harq_processes[0]->c[s][i]); UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->c[s][i]^eNB->dlsch[0][TB]->harq_processes[0]->c[s][i]);
} }
#endif #endif
} }
UE->total_TBS[eNB_id] = UE->total_TBS[eNB_id] + UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][TB]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][TB]->current_harq_pid]->TBS; UE->total_TBS[eNB_id] = UE->total_TBS[eNB_id] + UE->dlsch[subframe&0x1][eNB_id][TB]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][TB]->current_harq_pid]->TBS;
// If the receiver is NOT SIC, Here we are done with both CW, now only to calculate BLER // If the receiver is NOT SIC, Here we are done with both CW, now only to calculate BLER
//If the receiver IS SIC, we are done only with CW0, CW1 was only compensated by this moment (y1' obtained) //If the receiver IS SIC, we are done only with CW0, CW1 was only compensated by this moment (y1' obtained)
if (UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid]->mimo_mode == LARGE_CDD) { //try to decode second stream using SIC if (UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->mimo_mode == LARGE_CDD) { //try to decode second stream using SIC
/* /*
//for (round = 0 ; round < UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid]->round ; round++) { //for (round = 0 ; round < UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->round ; round++) {
// we assume here that the second stream has a lower MCS and is thus more likely to be decoded // we assume here that the second stream has a lower MCS and is thus more likely to be decoded
// re-encoding of second stream // re-encoding of second stream
dlsch0_ue_harq = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid]; dlsch0_ue_harq = UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid];
dlsch0_eNB_harq = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid]; dlsch0_eNB_harq = UE->dlsch[subframe&0x1][eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid];
dlsch0_eNB_harq->mimo_mode = LARGE_CDD; dlsch0_eNB_harq->mimo_mode = LARGE_CDD;
dlsch0_eNB_harq->rb_alloc[0] = dlsch0_ue_harq->rb_alloc[0]; dlsch0_eNB_harq->rb_alloc[0] = dlsch0_ue_harq->rb_alloc[0];
@@ -3920,14 +3920,14 @@ int main(int argc, char **argv)
dlsch0_eNB_harq->dl_power_off = dlsch0_ue_harq->dl_power_off; dlsch0_eNB_harq->dl_power_off = dlsch0_ue_harq->dl_power_off;
dlsch0_eNB_harq->status = dlsch0_ue_harq->status; dlsch0_eNB_harq->status = dlsch0_ue_harq->status;
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id]->active = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->active; UE->dlsch[subframe&0x1][eNB_id]->active = UE->dlsch[subframe&0x1][eNB_id][0]->active;
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id]->rnti = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->rnti; UE->dlsch[subframe&0x1][eNB_id]->rnti = UE->dlsch[subframe&0x1][eNB_id][0]->rnti;
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id]->current_harq_pid = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid; UE->dlsch[subframe&0x1][eNB_id]->current_harq_pid = UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid;
dlsch_encoding(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid]->b, dlsch_encoding(UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->b,
&UE->frame_parms, &UE->frame_parms,
num_pdcch_symbols, num_pdcch_symbols,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id], UE->dlsch[subframe&0x1][eNB_id],
0,subframe, 0,subframe,
&UE->dlsch_rate_matching_stats, &UE->dlsch_rate_matching_stats,
&UE->dlsch_turbo_encoding_stats, &UE->dlsch_turbo_encoding_stats,
@@ -3935,10 +3935,10 @@ int main(int argc, char **argv)
); );
coded_bits_per_codeword = get_G(&UE->frame_parms, coded_bits_per_codeword = get_G(&UE->frame_parms,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id]->current_harq_pid]->nb_rb, UE->dlsch[subframe&0x1][eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id]->current_harq_pid]->nb_rb,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id]->current_harq_pid]->rb_alloc, UE->dlsch[subframe&0x1][eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id]->current_harq_pid]->rb_alloc,
get_Qm(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id]->current_harq_pid]->mcs), get_Qm(UE->dlsch[subframe&0x1][eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id]->current_harq_pid]->mcs),
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id]->current_harq_pid]->Nl, UE->dlsch[subframe&0x1][eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id]->current_harq_pid]->Nl,
num_pdcch_symbols, num_pdcch_symbols,
0,subframe); 0,subframe);
@@ -3946,7 +3946,7 @@ int main(int argc, char **argv)
//scrambling //scrambling
dlsch_scrambling(&UE->frame_parms, dlsch_scrambling(&UE->frame_parms,
0, 0,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id], UE->dlsch[subframe&0x1][eNB_id],
coded_bits_per_codeword, coded_bits_per_codeword,
0, 0,
subframe<<1); subframe<<1);
@@ -3958,7 +3958,7 @@ int main(int argc, char **argv)
subframe, subframe,
&UE->frame_parms, &UE->frame_parms,
num_pdcch_symbols, num_pdcch_symbols,
&UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0], &UE->dlsch[subframe&0x1][0][0],
NULL); NULL);
// sic_buffer is a vector of size nb_antennas_tx, but both contain the same signal, since we do modulation without precoding // sic_buffer is a vector of size nb_antennas_tx, but both contain the same signal, since we do modulation without precoding
// precoding is contained in effective channel estimate // precoding is contained in effective channel estimate
@@ -3998,8 +3998,8 @@ int main(int argc, char **argv)
} }
if ((UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid]->mimo_mode >=DUALSTREAM_UNIFORM_PRECODING1) && if ((UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->mimo_mode >=DUALSTREAM_UNIFORM_PRECODING1) &&
(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid]->mimo_mode <=DUALSTREAM_PUSCH_PRECODING) && (TB0_active == 1) && (UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->mimo_mode <=DUALSTREAM_PUSCH_PRECODING) && (TB0_active == 1) &&
(rx_type==rx_SIC_dual_stream)) { (rx_type==rx_SIC_dual_stream)) {
#ifdef DEBUG_HARQ #ifdef DEBUG_HARQ
printf("[DLSIM] Starting SIC procedure\n"); printf("[DLSIM] Starting SIC procedure\n");
@@ -4018,10 +4018,10 @@ int main(int argc, char **argv)
#endif #endif
//printf("I enter round_sic loop \n"); //printf("I enter round_sic loop \n");
//printf("round_sic= %d\n", round_sic); //printf("round_sic= %d\n", round_sic);
dlsch0_ue_harq = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid]; dlsch0_ue_harq = UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid];
dlsch0_eNB_harq = UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid]; dlsch0_eNB_harq = UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid];
dlsch0_eNB_harq->mimo_mode = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid]->mimo_mode; dlsch0_eNB_harq->mimo_mode = UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->mimo_mode;
dlsch0_eNB_harq->rb_alloc[0] = dlsch0_ue_harq->rb_alloc_even[0]; dlsch0_eNB_harq->rb_alloc[0] = dlsch0_ue_harq->rb_alloc_even[0];
dlsch0_eNB_harq->nb_rb = dlsch0_ue_harq->nb_rb; dlsch0_eNB_harq->nb_rb = dlsch0_ue_harq->nb_rb;
dlsch0_eNB_harq->mcs = dlsch0_ue_harq->mcs; dlsch0_eNB_harq->mcs = dlsch0_ue_harq->mcs;
@@ -4033,25 +4033,25 @@ int main(int argc, char **argv)
dlsch0_eNB_harq->status = dlsch0_ue_harq->status; dlsch0_eNB_harq->status = dlsch0_ue_harq->status;
if (round_sic == 0){ if (round_sic == 0){
UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][1]->current_harq_pid]->rvidx = 0; UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][1]->current_harq_pid]->rvidx = 0;
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][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){ else if (round_sic == 1){
UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][1]->current_harq_pid]->rvidx = 1; UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][1]->current_harq_pid]->rvidx = 1;
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][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){ else if (round_sic == 2){
UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][1]->current_harq_pid]->rvidx = 2; UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][1]->current_harq_pid]->rvidx = 2;
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][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{ else{
UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][1]->current_harq_pid]->rvidx = 3; UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][1]->current_harq_pid]->rvidx = 3;
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][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]->active = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->active; UE->dlsch_eNB[eNB_id]->active = UE->dlsch[subframe&0x1][eNB_id][0]->active;
UE->dlsch_eNB[eNB_id]->rnti = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->rnti; UE->dlsch_eNB[eNB_id]->rnti = UE->dlsch[subframe&0x1][eNB_id][0]->rnti;
UE->dlsch_eNB[eNB_id]->current_harq_pid = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid; UE->dlsch_eNB[eNB_id]->current_harq_pid = UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid;
dlsch_encoding_SIC(UE, dlsch_encoding_SIC(UE,
input_buffer0[0], //UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[PHY_vars_UE->dlsch_ue[eNB_id][0]->current_harq_pid]->b,, input_buffer0[0], //UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[PHY_vars_UE->dlsch_ue[eNB_id][0]->current_harq_pid]->b,,
@@ -4089,8 +4089,8 @@ int main(int argc, char **argv)
coded_bits_per_codeword[0]); coded_bits_per_codeword[0]);
// write_output("sic_buffer.m","sic", *sic_buffer,re_allocated,1,1); // write_output("sic_buffer.m","sic", *sic_buffer,re_allocated,1,1);
// write_output("rxdataF_comp1.m","rxF_comp1", *UE->pdsch_vars[eNB_id]->rxdataF_comp1[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid][round],14*12*25,1,1); // write_output("rxdataF_comp1.m","rxF_comp1", *UE->pdsch_vars[eNB_id]->rxdataF_comp1[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round],14*12*25,1,1);
// write_output("rxdataF_rho.m","rho", *UE->pdsch_vars[eNB_id]->dl_ch_rho_ext[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid][round],14*12*25,1,1); // write_output("rxdataF_rho.m","rho", *UE->pdsch_vars[eNB_id]->dl_ch_rho_ext[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round],14*12*25,1,1);
switch (get_Qm(eNB->dlsch[0][1]->harq_processes[0]->mcs)){ switch (get_Qm(eNB->dlsch[0][1]->harq_processes[0]->mcs)){
@@ -4100,58 +4100,58 @@ int main(int argc, char **argv)
case 2: case 2:
dlsch_qpsk_llr_SIC(&UE->frame_parms, dlsch_qpsk_llr_SIC(&UE->frame_parms,
UE->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp1[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid][round_sic], UE->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp1[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round_sic],
sic_buffer, sic_buffer,
UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_rho_ext[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid][round_sic], UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_rho_ext[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round_sic],
UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->current_harq_pid]->codeword], UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->codeword],
num_pdcch_symbols, num_pdcch_symbols,
dlsch0_eNB_harq->nb_rb, dlsch0_eNB_harq->nb_rb,
subframe, subframe,
dlsch0_eNB_harq->rb_alloc[0], dlsch0_eNB_harq->rb_alloc[0],
get_Qm(eNB->dlsch[0][0]->harq_processes[0]->mcs), get_Qm(eNB->dlsch[0][0]->harq_processes[0]->mcs),
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]); UE->dlsch[subframe&0x1][eNB_id][0]);
break; break;
case 4: case 4:
dlsch_16qam_llr_SIC(&UE->frame_parms, dlsch_16qam_llr_SIC(&UE->frame_parms,
UE->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp1[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid][round_sic], UE->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp1[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round_sic],
sic_buffer, sic_buffer,
UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_rho_ext[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid][round_sic], UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_rho_ext[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round_sic],
UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->current_harq_pid]->codeword], UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->codeword],
num_pdcch_symbols, num_pdcch_symbols,
UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_mag1[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid][round_sic], UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_mag1[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round_sic],
dlsch0_eNB_harq->nb_rb, dlsch0_eNB_harq->nb_rb,
subframe, subframe,
dlsch0_eNB_harq->rb_alloc[0], dlsch0_eNB_harq->rb_alloc[0],
get_Qm(eNB->dlsch[0][TB]->harq_processes[0]->mcs), get_Qm(eNB->dlsch[0][TB]->harq_processes[0]->mcs),
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]); UE->dlsch[subframe&0x1][eNB_id][0]);
break; break;
case 6: case 6:
dlsch_64qam_llr_SIC(&UE->frame_parms, dlsch_64qam_llr_SIC(&UE->frame_parms,
UE->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp1[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid][round_sic], UE->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp1[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round_sic],
sic_buffer, sic_buffer,
UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_rho_ext[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid][round_sic], UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_rho_ext[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round_sic],
UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->current_harq_pid]->codeword], UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->codeword],
num_pdcch_symbols, num_pdcch_symbols,
UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_mag1[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid][round_sic], UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_mag1[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round_sic],
UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_magb1[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid][round_sic], UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_magb1[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round_sic],
dlsch0_eNB_harq->nb_rb, dlsch0_eNB_harq->nb_rb,
subframe, subframe,
dlsch0_eNB_harq->rb_alloc[0], dlsch0_eNB_harq->rb_alloc[0],
get_Qm(eNB->dlsch[0][0]->harq_processes[0]->mcs), get_Qm(eNB->dlsch[0][0]->harq_processes[0]->mcs),
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][TB]); UE->dlsch[subframe&0x1][eNB_id][TB]);
break; break;
} }
//}// rouns sic //}// rouns sic
#ifdef DEBUG_HARQ #ifdef DEBUG_HARQ
printf("[DLSIM] TB1 is mapped into CW%d\n", UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->current_harq_pid]->codeword); printf("[DLSIM] TB1 is mapped into CW%d\n", UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->codeword);
#endif #endif
// write_output("rxdata_llr1.m","llr1", UE->pdsch_vars[eNB_id]->llr[1],re_allocated*2,1,0); // write_output("rxdata_llr1.m","llr1", UE->pdsch_vars[eNB_id]->llr[1],re_allocated*2,1,0);
// replace cw_sic with TB+1 // replace cw_sic with TB+1
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->rnti = (common_flag==0) ? n_rnti: SI_RNTI; UE->dlsch[subframe&0x1][0][1]->rnti = (common_flag==0) ? n_rnti: SI_RNTI;
coded_bits_per_codeword[1]= get_G(&eNB->frame_parms, coded_bits_per_codeword[1]= get_G(&eNB->frame_parms,
eNB->dlsch[0][1]->harq_processes[0]->nb_rb, eNB->dlsch[0][1]->harq_processes[0]->nb_rb,
eNB->dlsch[0][1]->harq_processes[0]->rb_alloc, eNB->dlsch[0][1]->harq_processes[0]->rb_alloc,
@@ -4162,12 +4162,12 @@ int main(int argc, char **argv)
subframe, subframe,
transmission_mode>=7?transmission_mode:0); transmission_mode>=7?transmission_mode:0);
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,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]->G = coded_bits_per_codeword[1];
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->current_harq_pid]->Qm = get_Qm(eNB->dlsch[0][1]->harq_processes[0]->mcs); 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==2) {
printf("Kmimo=%d, cw=%d, G=%d, TBS=%d\n",Kmimo,1,coded_bits_per_codeword[1], printf("Kmimo=%d, cw=%d, G=%d, TBS=%d\n",Kmimo,1,coded_bits_per_codeword[1],
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->current_harq_pid]->TBS); UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->TBS);
// calculate uncoded BER // calculate uncoded BER
uncoded_ber_bit = (short*) malloc(sizeof(short)*coded_bits_per_codeword[1]); uncoded_ber_bit = (short*) malloc(sizeof(short)*coded_bits_per_codeword[1]);
@@ -4181,7 +4181,7 @@ int main(int argc, char **argv)
uncoded_ber=0; uncoded_ber=0;
printf("trials=%d\n", trials); printf("trials=%d\n", trials);
for (i=0;i<coded_bits_per_codeword[1];i++) for (i=0;i<coded_bits_per_codeword[1];i++)
if (eNB->dlsch[0][1]->harq_processes[0]->e[i] != (UE->pdsch_vars[subframe&0x1][0]->llr[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->current_harq_pid]->codeword][i]<0)) { if (eNB->dlsch[0][1]->harq_processes[0]->e[i] != (UE->pdsch_vars[subframe&0x1][0]->llr[UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->codeword][i]<0)) {
uncoded_ber_bit[i] = 1; uncoded_ber_bit[i] = 1;
uncoded_ber++; uncoded_ber++;
} }
@@ -4203,7 +4203,7 @@ int main(int argc, char **argv)
0, 0,
UE->dlsch[subframe&0x1][0][1], UE->dlsch[subframe&0x1][0][1],
coded_bits_per_codeword[1], coded_bits_per_codeword[1],
UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->current_harq_pid]->codeword], UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->codeword],
1, 1,
subframe<<1); subframe<<1);
stop_meas(&UE->dlsch_unscrambling_stats); stop_meas(&UE->dlsch_unscrambling_stats);
@@ -4211,13 +4211,13 @@ int main(int argc, char **argv)
start_meas(&UE->dlsch_decoding_stats[subframe&0x1]); start_meas(&UE->dlsch_decoding_stats[subframe&0x1]);
ret[1] = dlsch_decoding(UE, ret[1] = dlsch_decoding(UE,
UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->current_harq_pid]->codeword], UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->codeword],
&UE->frame_parms, &UE->frame_parms,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1], UE->dlsch[subframe&0x1][0][1],
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->current_harq_pid], UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid],
0, 0,
subframe, subframe,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->current_harq_pid, UE->dlsch[subframe&0x1][0][1]->current_harq_pid,
1,llr8_flag); 1,llr8_flag);
stop_meas(&UE->dlsch_decoding_stats[subframe&0x1]); stop_meas(&UE->dlsch_decoding_stats[subframe&0x1]);
@@ -4227,7 +4227,7 @@ int main(int argc, char **argv)
//printf("ret TB 1 = %d round %d \n", ret[1], round); //printf("ret TB 1 = %d round %d \n", ret[1], round);
if (ret[1] <=UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations ) { if (ret[1] <=UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations ) {
decoded_in_sic[round]++; decoded_in_sic[round]++;
round_sic = round+1; // to exit round_sic round_sic = round+1; // to exit round_sic
#ifdef DEBUG_HARQ #ifdef DEBUG_HARQ
@@ -4241,19 +4241,19 @@ int main(int argc, char **argv)
printf("cw sic %d, round %d: No DLSCH errors found, uncoded ber %f\n",1,round,uncoded_ber); printf("cw sic %d, round %d: No DLSCH errors found, uncoded ber %f\n",1,round,uncoded_ber);
#ifdef PRINT_BYTES #ifdef PRINT_BYTES
for (s=0;s<UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[0]->C;s++) { for (s=0;s<UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->C;s++) {
if (s<UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[0]->Cminus) if (s<UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->Cminus)
Kr = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[0]->Kminus; Kr = UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->Kminus;
else else
Kr = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[0]->Kplus; Kr = UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->Kplus;
Kr_bytes = Kr>>3; Kr_bytes = Kr>>3;
printf("Decoded_output (Segment %d):\n",s); printf("Decoded_output (Segment %d):\n",s);
for (i=0;i<Kr_bytes;i++) for (i=0;i<Kr_bytes;i++)
printf("%d : %x (%x)\n",i,UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[0]->c[s][i], printf("%d : %x (%x)\n",i,UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->c[s][i],
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[0]->c[s][i]^eNB->dlsch[0][1]->harq_processes[0]->c[s][i]); UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->c[s][i]^eNB->dlsch[0][1]->harq_processes[0]->c[s][i]);
} }
#endif #endif
} }
@@ -4261,7 +4261,7 @@ int main(int argc, char **argv)
} //round_sic } //round_sic
if (ret[1] > UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations ){ if (ret[1] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations ){
errs[1][round]++; errs[1][round]++;
#ifdef DEBUG_HARQ #ifdef DEBUG_HARQ
printf("[DLSIM] TB1 is not decoded in SIC loop, errs[TB1][round %d] = %d\n",round, errs[1][round]); printf("[DLSIM] TB1 is not decoded in SIC loop, errs[TB1][round %d] = %d\n",round, errs[1][round]);
@@ -4276,23 +4276,23 @@ int main(int argc, char **argv)
//if ((n_frames==1) || (SNR>=30)) { //if ((n_frames==1) || (SNR>=30)) {
printf("cw sic %d, round %d: DLSCH errors found, uncoded ber %f\n",1,round,uncoded_ber); printf("cw sic %d, round %d: DLSCH errors found, uncoded ber %f\n",1,round,uncoded_ber);
#ifdef PRINT_BYTES #ifdef PRINT_BYTES
for (s=0;s<UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[0]->C;s++) { for (s=0;s<UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->C;s++) {
if (s<UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[0]->Cminus) if (s<UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->Cminus)
Kr = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[0]->Kminus; Kr = UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->Kminus;
else else
Kr = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[0]->Kplus; Kr = UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->Kplus;
Kr_bytes = Kr>>3; Kr_bytes = Kr>>3;
printf("Decoded_output (Segment %d):\n",s); printf("Decoded_output (Segment %d):\n",s);
for (i=0;i<Kr_bytes;i++) for (i=0;i<Kr_bytes;i++)
printf("%d : %x (%x)\n",i,UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[0]->c[s][i], printf("%d : %x (%x)\n",i,UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->c[s][i],
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->harq_processes[0]->c[s][i]^eNB->dlsch[0][1]->harq_processes[0]->c[s][i]); UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->c[s][i]^eNB->dlsch[0][1]->harq_processes[0]->c[s][i]);
} }
#endif #endif
} //n_frames==1 } //n_frames==1
// exit(0); // exit(0);
} //if (ret > UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][1]->max_turbo_iterations ) } //if (ret > UE->dlsch[subframe&0x1][0][1]->max_turbo_iterations )
}//if SIC }//if SIC
} else { } else {
@@ -4307,8 +4307,8 @@ int main(int argc, char **argv)
iter_trials[0]++; iter_trials[0]++;
}*/ }*/
if ((UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid]->mimo_mode >=DUALSTREAM_UNIFORM_PRECODING1) && if ((UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->mimo_mode >=DUALSTREAM_UNIFORM_PRECODING1) &&
(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid]->mimo_mode <=DUALSTREAM_PUSCH_PRECODING) && (UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->mimo_mode <=DUALSTREAM_PUSCH_PRECODING) &&
(rx_type==rx_SIC_dual_stream) && (TB0_active ==1)) { (rx_type==rx_SIC_dual_stream) && (TB0_active ==1)) {
errs[1][round]++; errs[1][round]++;
#ifdef DEBUG_HARQ #ifdef DEBUG_HARQ
@@ -4327,18 +4327,18 @@ int main(int argc, char **argv)
//if ((n_frames==1) || (SNR>=30)) { //if ((n_frames==1) || (SNR>=30)) {
printf("cw %d, round %d: DLSCH errors found, uncoded ber %f\n",TB,round,uncoded_ber); printf("cw %d, round %d: DLSCH errors found, uncoded ber %f\n",TB,round,uncoded_ber);
#ifdef PRINT_BYTES #ifdef PRINT_BYTES
for (s=0;s<UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->harq_processes[0]->C;s++) { for (s=0;s<UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->C;s++) {
if (s<UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->harq_processes[0]->Cminus) if (s<UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->Cminus)
Kr = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->harq_processes[0]->Kminus; Kr = UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->Kminus;
else else
Kr = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->harq_processes[0]->Kplus; Kr = UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->Kplus;
Kr_bytes = Kr>>3; Kr_bytes = Kr>>3;
printf("Decoded_output (Segment %d):\n",s); printf("Decoded_output (Segment %d):\n",s);
for (i=0;i<Kr_bytes;i++) for (i=0;i<Kr_bytes;i++)
printf("%d : %x (%x)\n",i,UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->harq_processes[0]->c[s][i], printf("%d : %x (%x)\n",i,UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->c[s][i],
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][TB]->harq_processes[0]->c[s][i]^eNB->dlsch[0][TB]->harq_processes[0]->c[s][i]); UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->c[s][i]^eNB->dlsch[0][TB]->harq_processes[0]->c[s][i]);
} }
#endif #endif
} }
@@ -4410,12 +4410,12 @@ int main(int argc, char **argv)
UE->frame_parms.ofdm_symbol_size*nsymb,1,1); UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
} }
//pdsch_vars //pdsch_vars
dump_dlsch2(UE,eNB_id,subframe,coded_bits_per_codeword,round, UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid); dump_dlsch2(UE,eNB_id,subframe,coded_bits_per_codeword,round, UE->dlsch[subframe&0x1][0][0]->current_harq_pid);
/* /*
write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4); write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4);
write_output("dlsch_ber_bit.m","ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0); write_output("dlsch_ber_bit.m","ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0);
write_output("dlsch_eNB_w.m","w",eNB->dlsch[0][0]->harq_processes[0]->w[0],3*(tbs+64),1,4); write_output("dlsch_eNB_w.m","w",eNB->dlsch[0][0]->harq_processes[0]->w[0],3*(tbs+64),1,4);
write_output("dlsch_UE_w.m","w",UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0); write_output("dlsch_UE_w.m","w",UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0);
*/ */
//pdcch_vars //pdcch_vars
@@ -4439,15 +4439,15 @@ int main(int argc, char **argv)
printf("[DLSIM] Errors errs[TB0][round %d] = %d, errs[TB1][round %d] = %d\n ", round, errs[0][round], round, errs[1][round]); printf("[DLSIM] Errors errs[TB0][round %d] = %d, errs[TB1][round %d] = %d\n ", round, errs[0][round], round, errs[1][round]);
#endif #endif
if ((transmission_mode != 3) && (transmission_mode !=4) && (ret[0] > UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations)){ if ((transmission_mode != 3) && (transmission_mode !=4) && (ret[0] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations)){
//printf("flag 1 \n"); //printf("flag 1 \n");
round++; round++;
} }
if (transmission_mode == 3 || transmission_mode == 4 ) { if (transmission_mode == 3 || transmission_mode == 4 ) {
if (ret[0] > UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations && if (ret[0] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations &&
ret[1] > UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations){ ret[1] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations){
resend_both[round]++; resend_both[round]++;
round++; round++;
resend_cw0_cw1=1; //resend both cws resend_cw0_cw1=1; //resend both cws
@@ -4455,8 +4455,8 @@ int main(int argc, char **argv)
TB0_active=1; TB0_active=1;
TB1_active=1; TB1_active=1;
} }
else if (ret[1] > UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations && else if (ret[1] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations &&
ret[0] <= UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations){ ret[0] <= UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations){
resend_one[round]++; resend_one[round]++;
resend_cw0_cw1=0; resend_cw0_cw1=0;
TB0_active=0; TB0_active=0;
@@ -4476,8 +4476,8 @@ int main(int argc, char **argv)
#endif #endif
round++; round++;
} }
else if (ret[0] > UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations && else if (ret[0] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations &&
ret[1] <= UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations){ ret[1] <= UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations){
resend_one[round]++; resend_one[round]++;
resend_cw0_cw1=0; resend_cw0_cw1=0;
TB0_active=1; TB0_active=1;
@@ -4796,7 +4796,7 @@ int main(int argc, char **argv)
rate[0]*effective_rate, rate[0]*effective_rate,
100*effective_rate, 100*effective_rate,
rate[0], rate[0],
rate[0]*get_Qm(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->mcs), rate[0]*get_Qm(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs),
(1.0*(round_trials[0][0]-errs[0][0])+2.0*(round_trials[0][1]-errs[0][1])+3.0*(round_trials[0][2]-errs[0][2])+ (1.0*(round_trials[0][0]-errs[0][0])+2.0*(round_trials[0][1]-errs[0][1])+3.0*(round_trials[0][2]-errs[0][2])+
4.0*(round_trials[0][3]-errs[0][3]))/((double)round_trials[0][0])/(double)eNB->dlsch[0][0]->harq_processes[0]->TBS, 4.0*(round_trials[0][3]-errs[0][3]))/((double)round_trials[0][0])/(double)eNB->dlsch[0][0]->harq_processes[0]->TBS,
(1.0*(round_trials[0][0]-errs[0][0])+2.0*(round_trials[0][1]-errs[0][1])+3.0*(round_trials[0][2]-errs[0][2]) (1.0*(round_trials[0][0]-errs[0][0])+2.0*(round_trials[0][1]-errs[0][1])+3.0*(round_trials[0][2]-errs[0][2])
@@ -4901,7 +4901,7 @@ int main(int argc, char **argv)
printf("|__ DLSCH Rate Unmatching :%f us (%d trials)\n", printf("|__ DLSCH Rate Unmatching :%f us (%d trials)\n",
(double)UE->dlsch_rate_unmatching_stats.diff/UE->dlsch_rate_unmatching_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_rate_unmatching_stats.trials); (double)UE->dlsch_rate_unmatching_stats.diff/UE->dlsch_rate_unmatching_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_rate_unmatching_stats.trials);
printf("|__ DLSCH Turbo Decoding(%d bits) :%f us (%d trials)\n", printf("|__ DLSCH Turbo Decoding(%d bits) :%f us (%d trials)\n",
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->Cminus ? UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->Kminus : UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->Kplus, UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Cminus ? UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kminus : UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kplus,
(double)UE->dlsch_turbo_decoding_stats.diff/UE->dlsch_turbo_decoding_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_turbo_decoding_stats.trials); (double)UE->dlsch_turbo_decoding_stats.diff/UE->dlsch_turbo_decoding_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_turbo_decoding_stats.trials);
printf(" |__ init %f us (cycles/iter %f, %d trials)\n", printf(" |__ init %f us (cycles/iter %f, %d trials)\n",
(double)UE->dlsch_tc_init_stats.diff/UE->dlsch_tc_init_stats.trials/cpu_freq_GHz/1000.0, (double)UE->dlsch_tc_init_stats.diff/UE->dlsch_tc_init_stats.trials/cpu_freq_GHz/1000.0,
@@ -5326,7 +5326,7 @@ int main(int argc, char **argv)
free_eNB_dlsch(eNB->dlsch[0][i]); free_eNB_dlsch(eNB->dlsch[0][i]);
printf("UE %d\n",i); printf("UE %d\n",i);
free_ue_dlsch(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][i]); free_ue_dlsch(UE->dlsch[subframe&0x1][0][i]);
} }
+54 -54
View File
@@ -953,14 +953,14 @@ int main(int argc, char **argv)
} }
for (i=0; i<2; i++) { for (i=0; i<2; i++) {
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][i] = new_ue_dlsch(Kmimo,8,Nsoft,MAX_TURBO_ITERATIONS,N_RB_DL,0); UE->dlsch[subframe&0x1][0][i] = new_ue_dlsch(Kmimo,8,Nsoft,MAX_TURBO_ITERATIONS,N_RB_DL,0);
if (!UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][i]) { if (!UE->dlsch[subframe&0x1][0][i]) {
printf("Can't get ue dlsch structures\n"); printf("Can't get ue dlsch structures\n");
exit(-1); exit(-1);
} }
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][i]->rnti = n_rnti; UE->dlsch[subframe&0x1][0][i]->rnti = n_rnti;
} }
// structure for SIC at UE // structure for SIC at UE
@@ -2112,9 +2112,9 @@ int main(int argc, char **argv)
//if (trials%100==0) //if (trials%100==0)
eNB2UE[0]->first_run = 1; eNB2UE[0]->first_run = 1;
ret = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations+1; ret = UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations+1;
while ((round < num_rounds) && (ret > UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations)) { while ((round < num_rounds) && (ret > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations)) {
//printf("Trial %d, round %d\n",trials,round); //printf("Trial %d, round %d\n",trials,round);
round_trials[round]++; round_trials[round]++;
@@ -2601,7 +2601,7 @@ PMI_FEEDBACK:
// use the PMI from previous trial // use the PMI from previous trial
if (DLSCH_alloc_pdu2_1E[0].tpmi == 5) { if (DLSCH_alloc_pdu2_1E[0].tpmi == 5) {
eNB->dlsch[0][0]->harq_processes[0]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,eNB->frame_parms.N_RB_DL); eNB->dlsch[0][0]->harq_processes[0]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,eNB->frame_parms.N_RB_DL);
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL); UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL);
if (n_users>1) if (n_users>1)
eNB->dlsch[1][0]->harq_processes[0]->pmi_alloc = (eNB->dlsch[0][0]->harq_processes[0]->pmi_alloc ^ 0x1555); eNB->dlsch[1][0]->harq_processes[0]->pmi_alloc = (eNB->dlsch[0][0]->harq_processes[0]->pmi_alloc ^ 0x1555);
@@ -3227,7 +3227,7 @@ PMI_FEEDBACK:
for (i=0; i<dci_cnt; i++) { for (i=0; i<dci_cnt; i++) {
// printf("Generating dlsch parameters for RNTI %x\n",dci_alloc_rx[i].rnti); // printf("Generating dlsch parameters for RNTI %x\n",dci_alloc_rx[i].rnti);
if (round == 0) UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->first_tx=1; if (round == 0) UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->first_tx=1;
if ((dci_alloc_rx[i].rnti == n_rnti) && if ((dci_alloc_rx[i].rnti == n_rnti) &&
(generate_ue_dlsch_params_from_dci(0, (generate_ue_dlsch_params_from_dci(0,
@@ -3235,7 +3235,7 @@ PMI_FEEDBACK:
dci_alloc_rx[i].dci_pdu, dci_alloc_rx[i].dci_pdu,
dci_alloc_rx[i].rnti, dci_alloc_rx[i].rnti,
dci_alloc_rx[i].format, dci_alloc_rx[i].format,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0], UE->dlsch[subframe&0x1][0],
&UE->frame_parms, &UE->frame_parms,
UE->pdsch_config_dedicated, UE->pdsch_config_dedicated,
SI_RNTI, SI_RNTI,
@@ -3244,23 +3244,23 @@ PMI_FEEDBACK:
transmission_mode<7?0:transmission_mode))) { transmission_mode<7?0:transmission_mode))) {
//dump_dci(&UE->frame_parms,&dci_alloc_rx[i]); //dump_dci(&UE->frame_parms,&dci_alloc_rx[i]);
coded_bits_per_codeword = get_G(&eNB->frame_parms, coded_bits_per_codeword = get_G(&eNB->frame_parms,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->nb_rb, UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->nb_rb,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->rb_alloc_even, UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->rb_alloc_even,
get_Qm(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->mcs), get_Qm(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs),
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->Nl, UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->Nl,
UE->pdcch_vars[0]->num_pdcch_symbols, UE->pdcch_vars[0]->num_pdcch_symbols,
0, 0,
subframe, subframe,
(transmission_mode<7?0:transmission_mode)); (transmission_mode<7?0:transmission_mode));
/*if (transmission_mode==7 && common_flag==0) /*if (transmission_mode==7 && common_flag==0)
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->mimo_mode = TM7; */ UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->mimo_mode = TM7; */
/* /*
rate = (double)dlsch_tbs25[get_I_TBS(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->mcs)][UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->nb_rb-1]/(coded_bits_per_codeword); rate = (double)dlsch_tbs25[get_I_TBS(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs)][UE->dlsch[subframe&0x1][0][0]->nb_rb-1]/(coded_bits_per_codeword);
rate*=get_Qm(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->mcs); rate*=get_Qm(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs);
*/ */
printf("num_pdcch_symbols %d, G %d, TBS %d\n",UE->pdcch_vars[0]->num_pdcch_symbols,coded_bits_per_codeword, printf("num_pdcch_symbols %d, G %d, TBS %d\n",UE->pdcch_vars[0]->num_pdcch_symbols,coded_bits_per_codeword,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->TBS); UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->TBS);
dlsch_active = 1; dlsch_active = 1;
} else { } else {
@@ -3288,7 +3288,7 @@ PMI_FEEDBACK:
UE->pdcch_vars[0]->crnti = n_rnti; UE->pdcch_vars[0]->crnti = n_rnti;
UE->pdcch_vars[0]->num_pdcch_symbols = num_pdcch_symbols; UE->pdcch_vars[0]->num_pdcch_symbols = num_pdcch_symbols;
if (round == 0) UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->first_tx=1; if (round == 0) UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->first_tx=1;
switch (transmission_mode) { switch (transmission_mode) {
case 1: case 1:
@@ -3299,7 +3299,7 @@ PMI_FEEDBACK:
&DLSCH_alloc_pdu_1[0], &DLSCH_alloc_pdu_1[0],
(common_flag==0)? C_RNTI : SI_RNTI, (common_flag==0)? C_RNTI : SI_RNTI,
(common_flag==0)? format1 : format1A, (common_flag==0)? format1 : format1A,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0], UE->dlsch[subframe&0x1][0],
&UE->frame_parms, &UE->frame_parms,
UE->pdsch_config_dedicated, UE->pdsch_config_dedicated,
SI_RNTI, SI_RNTI,
@@ -3307,24 +3307,24 @@ PMI_FEEDBACK:
P_RNTI, P_RNTI,
transmission_mode<7?0:transmission_mode); transmission_mode<7?0:transmission_mode);
/*if(transmission_mode==7 && common_flag==0) /*if(transmission_mode==7 && common_flag==0)
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->mimo_mode = TM7;*/ UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->mimo_mode = TM7;*/
break; break;
case 3: case 3:
// printf("Rate: TM3 (before) round %d (%d) first_tx %d\n",round,UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->round,UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->first_tx); // printf("Rate: TM3 (before) round %d (%d) first_tx %d\n",round,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->round,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->first_tx);
generate_ue_dlsch_params_from_dci(0, generate_ue_dlsch_params_from_dci(0,
subframe, subframe,
&DLSCH_alloc_pdu_1[0], &DLSCH_alloc_pdu_1[0],
(common_flag==0)? C_RNTI : SI_RNTI, (common_flag==0)? C_RNTI : SI_RNTI,
(common_flag==0)? format2A : format1A, (common_flag==0)? format2A : format1A,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0], UE->dlsch[subframe&0x1][0],
&UE->frame_parms, &UE->frame_parms,
UE->pdsch_config_dedicated, UE->pdsch_config_dedicated,
SI_RNTI, SI_RNTI,
0, 0,
P_RNTI, P_RNTI,
0); 0);
// printf("Rate: TM3 (after) round %d (%d) first_tx %d\n",round,UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->round,UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->first_tx); // printf("Rate: TM3 (after) round %d (%d) first_tx %d\n",round,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->round,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->first_tx);
break; break;
case 4: case 4:
@@ -3333,7 +3333,7 @@ PMI_FEEDBACK:
&DLSCH_alloc_pdu_1[0], &DLSCH_alloc_pdu_1[0],
(common_flag==0)? C_RNTI : SI_RNTI, (common_flag==0)? C_RNTI : SI_RNTI,
(common_flag==0)? format2 : format1A, (common_flag==0)? format2 : format1A,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0], UE->dlsch[subframe&0x1][0],
&UE->frame_parms, &UE->frame_parms,
UE->pdsch_config_dedicated, UE->pdsch_config_dedicated,
SI_RNTI, SI_RNTI,
@@ -3349,7 +3349,7 @@ PMI_FEEDBACK:
&DLSCH_alloc_pdu2_1E[0], &DLSCH_alloc_pdu2_1E[0],
C_RNTI, C_RNTI,
format1E_2A_M10PRB, format1E_2A_M10PRB,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0], UE->dlsch[subframe&0x1][0],
&UE->frame_parms, &UE->frame_parms,
UE->pdsch_config_dedicated, UE->pdsch_config_dedicated,
SI_RNTI, SI_RNTI,
@@ -3381,7 +3381,7 @@ PMI_FEEDBACK:
if ((Ns==(1+(2*subframe))) && (l==0)) {// process PDSCH symbols 1,2,3,4,5,(6 Normal Prefix) if ((Ns==(1+(2*subframe))) && (l==0)) {// process PDSCH symbols 1,2,3,4,5,(6 Normal Prefix)
if ((transmission_mode == 5) && if ((transmission_mode == 5) &&
(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->dl_power_off==0) && (UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->dl_power_off==0) &&
(UE->use_ia_receiver ==1)) { (UE->use_ia_receiver ==1)) {
dual_stream_UE = 1; dual_stream_UE = 1;
} else { } else {
@@ -3404,7 +3404,7 @@ PMI_FEEDBACK:
(m==UE->pdcch_vars[0]->num_pdcch_symbols)?1:0, (m==UE->pdcch_vars[0]->num_pdcch_symbols)?1:0,
dual_stream_UE, dual_stream_UE,
i_mod, i_mod,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid)==-1) { UE->dlsch[subframe&0x1][0][0]->current_harq_pid)==-1) {
dlsch_active = 0; dlsch_active = 0;
break; break;
} }
@@ -3430,7 +3430,7 @@ PMI_FEEDBACK:
0, 0,
dual_stream_UE, dual_stream_UE,
i_mod, i_mod,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid)==-1) { UE->dlsch[subframe&0x1][0][0]->current_harq_pid)==-1) {
dlsch_active=0; dlsch_active=0;
break; break;
} }
@@ -3456,7 +3456,7 @@ PMI_FEEDBACK:
0, 0,
dual_stream_UE, dual_stream_UE,
i_mod, i_mod,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid)==-1) { UE->dlsch[subframe&0x1][0][0]->current_harq_pid)==-1) {
dlsch_active=0; dlsch_active=0;
break; break;
} }
@@ -3534,7 +3534,7 @@ PMI_FEEDBACK:
} }
for (int cw=Kmimo-1; cw>=0; cw--) { for (int cw=Kmimo-1; cw>=0; cw--) {
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][cw]->rnti = (common_flag==0) ? n_rnti: SI_RNTI; UE->dlsch[subframe&0x1][0][cw]->rnti = (common_flag==0) ? n_rnti: SI_RNTI;
coded_bits_per_codeword = get_G(&eNB->frame_parms, coded_bits_per_codeword = get_G(&eNB->frame_parms,
eNB->dlsch[0][cw]->harq_processes[0]->nb_rb, eNB->dlsch[0][cw]->harq_processes[0]->nb_rb,
eNB->dlsch[0][cw]->harq_processes[0]->rb_alloc, eNB->dlsch[0][cw]->harq_processes[0]->rb_alloc,
@@ -3545,7 +3545,7 @@ PMI_FEEDBACK:
subframe, subframe,
(transmission_mode<7?0:transmission_mode)); (transmission_mode<7?0:transmission_mode));
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][cw]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][cw]->current_harq_pid]->G = coded_bits_per_codeword; UE->dlsch[subframe&0x1][0][cw]->harq_processes[UE->dlsch[subframe&0x1][0][cw]->current_harq_pid]->G = coded_bits_per_codeword;
@@ -3580,15 +3580,15 @@ PMI_FEEDBACK:
ret = dlsch_decoding(UE, ret = dlsch_decoding(UE,
UE->pdsch_vars[subframe&0x1][eNB_id]->llr[cw], UE->pdsch_vars[subframe&0x1][eNB_id]->llr[cw],
&UE->frame_parms, &UE->frame_parms,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][cw], UE->dlsch[subframe&0x1][0][cw],
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][cw]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][cw]->current_harq_pid], UE->dlsch[subframe&0x1][0][cw]->harq_processes[UE->dlsch[subframe&0x1][0][cw]->current_harq_pid],
subframe, subframe,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][cw]->current_harq_pid, UE->dlsch[subframe&0x1][0][cw]->current_harq_pid,
1,llr8_flag); 1,llr8_flag);
stop_meas(&UE->dlsch_decoding_stats); stop_meas(&UE->dlsch_decoding_stats);
if (cw==1) { if (cw==1) {
if (ret <= UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][cw]->max_turbo_iterations) { if (ret <= UE->dlsch[subframe&0x1][0][cw]->max_turbo_iterations) {
} else { } else {
errs2[round]++; errs2[round]++;
} }
@@ -3599,7 +3599,7 @@ PMI_FEEDBACK:
stop_meas(&UE->phy_proc_rx[subframe&0x1]); stop_meas(&UE->phy_proc_rx[subframe&0x1]);
if (ret <= UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->max_turbo_iterations) { if (ret <= UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations) {
avg_iter += ret; avg_iter += ret;
iter_trials++; iter_trials++;
@@ -3607,15 +3607,15 @@ PMI_FEEDBACK:
if (n_frames==1) if (n_frames==1)
printf("No DLSCH errors found (round %d),uncoded ber %f\n",round,uncoded_ber); printf("No DLSCH errors found (round %d),uncoded ber %f\n",round,uncoded_ber);
UE->total_TBS[eNB_id] = UE->total_TBS[eNB_id] + UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid]->TBS; UE->total_TBS[eNB_id] = UE->total_TBS[eNB_id] + UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->TBS;
TB0_active = 0; TB0_active = 0;
if (UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid]->mimo_mode == LARGE_CDD) { //try to decode second stream using SIC if (UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->mimo_mode == LARGE_CDD) { //try to decode second stream using SIC
/* /*
for (round = 0 ; round < UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid]->round ; round++) { for (round = 0 ; round < UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->round ; round++) {
// re-encoding of first stream // re-encoding of first stream
dlsch0_ue_harq = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid]; dlsch0_ue_harq = UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid];
dlsch0_eNB_harq = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid]; dlsch0_eNB_harq = UE->dlsch[subframe&0x1][eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid];
dlsch0_eNB_harq->mimo_mode = LARGE_CDD; dlsch0_eNB_harq->mimo_mode = LARGE_CDD;
dlsch0_eNB_harq->rb_alloc[0] = dlsch0_ue_harq->rb_alloc_even[0]; dlsch0_eNB_harq->rb_alloc[0] = dlsch0_ue_harq->rb_alloc_even[0];
dlsch0_eNB_harq->nb_rb = dlsch0_ue_harq->nb_rb; dlsch0_eNB_harq->nb_rb = dlsch0_ue_harq->nb_rb;
@@ -3627,13 +3627,13 @@ PMI_FEEDBACK:
dlsch0_eNB_harq->dl_power_off = dlsch0_ue_harq->dl_power_off; dlsch0_eNB_harq->dl_power_off = dlsch0_ue_harq->dl_power_off;
dlsch0_eNB_harq->status = dlsch0_ue_harq->status; dlsch0_eNB_harq->status = dlsch0_ue_harq->status;
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id]->active = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->active; UE->dlsch[subframe&0x1][eNB_id]->active = UE->dlsch[subframe&0x1][eNB_id][0]->active;
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id]->rnti = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->rnti; UE->dlsch[subframe&0x1][eNB_id]->rnti = UE->dlsch[subframe&0x1][eNB_id][0]->rnti;
dlsch_encoding(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][eNB_id][0]->current_harq_pid]->b, dlsch_encoding(UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->b,
&UE->frame_parms, &UE->frame_parms,
num_pdcch_symbols, num_pdcch_symbols,
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0], UE->dlsch[subframe&0x1][0],
0,subframe, 0,subframe,
&UE->dlsch_rate_matching_stats, &UE->dlsch_rate_matching_stats,
&UE->dlsch_turbo_encoding_stats, &UE->dlsch_turbo_encoding_stats,
@@ -3660,18 +3660,18 @@ PMI_FEEDBACK:
//if ((n_frames==1) || (SNR>=30)) //if ((n_frames==1) || (SNR>=30))
printf("DLSCH errors found (round %d), uncoded ber %f\n",round,uncoded_ber); printf("DLSCH errors found (round %d), uncoded ber %f\n",round,uncoded_ber);
for (s=0; s<UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->C; s++) { for (s=0; s<UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->C; s++) {
if (s<UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->Cminus) if (s<UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Cminus)
Kr = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->Kminus; Kr = UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kminus;
else else
Kr = UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->Kplus; Kr = UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kplus;
Kr_bytes = Kr>>3; Kr_bytes = Kr>>3;
printf("Decoded_output (Segment %d):\n",s); printf("Decoded_output (Segment %d):\n",s);
for (i=0; i<Kr_bytes; i++) for (i=0; i<Kr_bytes; i++)
printf("%d : %x (%x)\n",i,UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->c[s][i],UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->c[s][i]^eNB->dlsch[0][0]->harq_processes[0]->c[s][i]); printf("%d : %x (%x)\n",i,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->c[s][i],UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->c[s][i]^eNB->dlsch[0][0]->harq_processes[0]->c[s][i]);
} }
sprintf(fname,"rxsig0_r%d.m",round); sprintf(fname,"rxsig0_r%d.m",round);
@@ -3726,7 +3726,7 @@ PMI_FEEDBACK:
write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4); write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4);
write_output("dlsch_ber_bit.m","ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0); write_output("dlsch_ber_bit.m","ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0);
write_output("dlsch_w.m","w",eNB->dlsch[0][0]->harq_processes[0]->w[0],3*(tbs+64),1,4); write_output("dlsch_w.m","w",eNB->dlsch[0][0]->harq_processes[0]->w[0],3*(tbs+64),1,4);
write_output("dlsch_w.m","w",UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0); write_output("dlsch_w.m","w",UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0);
*/ */
if (round == 3) exit(-1); if (round == 3) exit(-1);
@@ -3735,7 +3735,7 @@ PMI_FEEDBACK:
// printf("round %d errors %d/%d\n",round,errs[round],trials); // printf("round %d errors %d/%d\n",round,errs[round],trials);
round++; round++;
// UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->round++; // UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->round++;
} }
if (xforms==1) { if (xforms==1) {
@@ -3925,7 +3925,7 @@ PMI_FEEDBACK:
rate*effective_rate, rate*effective_rate,
100*effective_rate, 100*effective_rate,
rate, rate,
rate*get_Qm(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->current_harq_pid]->mcs), rate*get_Qm(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs),
(1.0*(round_trials[0]-errs[0])+2.0*(round_trials[1]-errs[1])+3.0*(round_trials[2]-errs[2])+4.0*(round_trials[3]-errs[3]))/((double)round_trials[0])/ (1.0*(round_trials[0]-errs[0])+2.0*(round_trials[1]-errs[1])+3.0*(round_trials[2]-errs[2])+4.0*(round_trials[3]-errs[3]))/((double)round_trials[0])/
(double)eNB->dlsch[0][0]->harq_processes[0]->TBS, (double)eNB->dlsch[0][0]->harq_processes[0]->TBS,
(1.0*(round_trials[0]-errs[0])+2.0*(round_trials[1]-errs[1])+3.0*(round_trials[2]-errs[2])+4.0*(round_trials[3]-errs[3]))/((double)round_trials[0])); (1.0*(round_trials[0]-errs[0])+2.0*(round_trials[1]-errs[1])+3.0*(round_trials[2]-errs[2])+4.0*(round_trials[3]-errs[3]))/((double)round_trials[0]));
@@ -4001,7 +4001,7 @@ PMI_FEEDBACK:
printf("|__ DLSCH Rate Unmatching :%f us (%d trials)\n", printf("|__ DLSCH Rate Unmatching :%f us (%d trials)\n",
(double)UE->dlsch_rate_unmatching_stats.diff/UE->dlsch_rate_unmatching_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_rate_unmatching_stats.trials); (double)UE->dlsch_rate_unmatching_stats.diff/UE->dlsch_rate_unmatching_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_rate_unmatching_stats.trials);
printf("|__ DLSCH Turbo Decoding(%d bits) :%f us (%d trials)\n", printf("|__ DLSCH Turbo Decoding(%d bits) :%f us (%d trials)\n",
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->Cminus ? UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->Kminus : UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][0]->harq_processes[0]->Kplus, UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Cminus ? UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kminus : UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kplus,
(double)UE->dlsch_turbo_decoding_stats.diff/UE->dlsch_turbo_decoding_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_turbo_decoding_stats.trials); (double)UE->dlsch_turbo_decoding_stats.diff/UE->dlsch_turbo_decoding_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_turbo_decoding_stats.trials);
printf(" |__ init %f us (cycles/iter %f, %d trials)\n", printf(" |__ init %f us (cycles/iter %f, %d trials)\n",
(double)UE->dlsch_tc_init_stats.diff/UE->dlsch_tc_init_stats.trials/cpu_freq_GHz/1000.0, (double)UE->dlsch_tc_init_stats.diff/UE->dlsch_tc_init_stats.trials/cpu_freq_GHz/1000.0,
@@ -4290,7 +4290,7 @@ PMI_FEEDBACK:
printf("eNB %d\n",i); printf("eNB %d\n",i);
free_eNB_dlsch(eNB->dlsch[0][i]); free_eNB_dlsch(eNB->dlsch[0][i]);
printf("UE %d\n",i); printf("UE %d\n",i);
free_ue_dlsch(UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&0x1][0][i]); free_ue_dlsch(UE->dlsch[subframe&0x1][0][i]);
} }
+4 -4
View File
@@ -709,20 +709,20 @@ int main(int argc, char **argv)
// Create transport channel structures for 2 transport blocks (MIMO) // Create transport channel structures for 2 transport blocks (MIMO)
for (i=0; i<2; i++) { for (i=0; i<2; i++) {
eNB->dlsch[0][i] = new_eNB_dlsch(1,8,1827072,N_RB_DL,0,&eNB->frame_parms); eNB->dlsch[0][i] = new_eNB_dlsch(1,8,1827072,N_RB_DL,0,&eNB->frame_parms);
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&1][0][i] = new_ue_dlsch(1,8,1827072,MAX_TURBO_ITERATIONS,N_RB_DL,0); UE->dlsch[subframe&1][0][i] = new_ue_dlsch(1,8,1827072,MAX_TURBO_ITERATIONS,N_RB_DL,0);
if (!eNB->dlsch[0][i]) { if (!eNB->dlsch[0][i]) {
printf("Can't get eNB dlsch structures\n"); printf("Can't get eNB dlsch structures\n");
exit(-1); exit(-1);
} }
if (!UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&1][0][i]) { if (!UE->dlsch[subframe&1][0][i]) {
printf("Can't get ue dlsch structures\n"); printf("Can't get ue dlsch structures\n");
exit(-1); exit(-1);
} }
eNB->dlsch[0][i]->rnti = 14; eNB->dlsch[0][i]->rnti = 14;
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&1][0][i]->rnti = 14; UE->dlsch[subframe&1][0][i]->rnti = 14;
} }
@@ -763,7 +763,7 @@ int main(int argc, char **argv)
init_ul_hopping(&eNB->frame_parms); init_ul_hopping(&eNB->frame_parms);
UE->dlsch[subframe_DL(&UE->frame_parms,subframe)&1][0][0]->harq_ack[ul_subframe2pdcch_alloc_subframe(&eNB->frame_parms,subframe)].send_harq_status = 1; UE->dlsch[subframe&1][0][0]->harq_ack[ul_subframe2pdcch_alloc_subframe(&eNB->frame_parms,subframe)].send_harq_status = 1;
UE->ulsch_Msg3_active[eNB_id] = 0; UE->ulsch_Msg3_active[eNB_id] = 0;
UE->ul_power_control_dedicated[eNB_id].accumulationEnabled=1; UE->ul_power_control_dedicated[eNB_id].accumulationEnabled=1;