fix dlsim
This commit is contained in:
@@ -89,7 +89,6 @@ extern void print_shorts(char *s,int16_t *x);
|
|||||||
|
|
||||||
|
|
||||||
int rx_pdsch(PHY_VARS_UE *ue,
|
int rx_pdsch(PHY_VARS_UE *ue,
|
||||||
UE_rxtx_proc_t *proc,
|
|
||||||
PDSCH_t type,
|
PDSCH_t type,
|
||||||
unsigned char eNB_id,
|
unsigned char eNB_id,
|
||||||
unsigned char eNB_id_i, //if this == ue->n_connected_eNB, we assume MU interference
|
unsigned char eNB_id_i, //if this == ue->n_connected_eNB, we assume MU interference
|
||||||
@@ -519,15 +518,17 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
//wait until pdcch is decoded
|
//wait until pdcch is decoded
|
||||||
proc->channel_level = 1;
|
//proc->channel_level = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
uint32_t wait = 0;
|
uint32_t wait = 0;
|
||||||
while(proc->channel_level == 0)
|
while(proc->channel_level == 0)
|
||||||
{
|
{
|
||||||
usleep(1);
|
usleep(1);
|
||||||
wait++;
|
wait++;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
#if T_TRACER
|
#if T_TRACER
|
||||||
if (type == PDSCH)
|
if (type == PDSCH)
|
||||||
|
|||||||
@@ -1348,7 +1348,6 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue,
|
|||||||
@param i_mod Modulation order of the interfering stream
|
@param i_mod Modulation order of the interfering stream
|
||||||
*/
|
*/
|
||||||
int32_t rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
int32_t rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||||
UE_rxtx_proc_t *proc,
|
|
||||||
PDSCH_t type,
|
PDSCH_t type,
|
||||||
uint8_t eNB_id,
|
uint8_t eNB_id,
|
||||||
uint8_t eNB_id_i,
|
uint8_t eNB_id_i,
|
||||||
|
|||||||
+3
-2
@@ -418,7 +418,7 @@ typedef struct {
|
|||||||
uint8_t llr_slot1_available;
|
uint8_t llr_slot1_available;
|
||||||
uint8_t dci_slot0_available;
|
uint8_t dci_slot0_available;
|
||||||
uint8_t first_symbol_available;
|
uint8_t first_symbol_available;
|
||||||
uint8_t channel_level;
|
//uint8_t channel_level;
|
||||||
/// scheduling parameters for fep_slot1 thread
|
/// scheduling parameters for fep_slot1 thread
|
||||||
struct sched_param sched_param_fep_slot1;
|
struct sched_param sched_param_fep_slot1;
|
||||||
|
|
||||||
@@ -940,7 +940,8 @@ typedef struct {
|
|||||||
time_stats_t dlsch_rate_unmatching_stats;
|
time_stats_t dlsch_rate_unmatching_stats;
|
||||||
time_stats_t dlsch_turbo_decoding_stats;
|
time_stats_t dlsch_turbo_decoding_stats;
|
||||||
time_stats_t dlsch_deinterleaving_stats;
|
time_stats_t dlsch_deinterleaving_stats;
|
||||||
time_stats_t dlsch_llr_stats[RX_NB_TH][LTE_SLOTS_PER_SUBFRAME];
|
time_stats_t dlsch_llr_stats;
|
||||||
|
time_stats_t dlsch_llr_stats_parallelization[RX_NB_TH][LTE_SLOTS_PER_SUBFRAME];
|
||||||
time_stats_t dlsch_unscrambling_stats;
|
time_stats_t dlsch_unscrambling_stats;
|
||||||
time_stats_t dlsch_rate_matching_stats;
|
time_stats_t dlsch_rate_matching_stats;
|
||||||
time_stats_t dlsch_turbo_encoding_stats;
|
time_stats_t dlsch_turbo_encoding_stats;
|
||||||
|
|||||||
@@ -3721,11 +3721,10 @@ void ue_pdsch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, PDSC
|
|||||||
uint8_t slot = 0;
|
uint8_t slot = 0;
|
||||||
if(m >= ue->frame_parms.symbols_per_tti>>1)
|
if(m >= ue->frame_parms.symbols_per_tti>>1)
|
||||||
slot = 1;
|
slot = 1;
|
||||||
start_meas(&ue->dlsch_llr_stats[ue->current_thread_id[subframe_rx]][slot]);
|
start_meas(&ue->dlsch_llr_stats_parallelization[ue->current_thread_id[subframe_rx]][slot]);
|
||||||
#endif
|
#endif
|
||||||
// process DLSCH received in first slot
|
// process DLSCH received in first slot
|
||||||
rx_pdsch(ue,
|
rx_pdsch(ue,
|
||||||
proc,
|
|
||||||
pdsch,
|
pdsch,
|
||||||
eNB_id,
|
eNB_id,
|
||||||
eNB_id_i,
|
eNB_id_i,
|
||||||
@@ -3737,11 +3736,11 @@ void ue_pdsch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, PDSC
|
|||||||
i_mod,
|
i_mod,
|
||||||
dlsch0->current_harq_pid);
|
dlsch0->current_harq_pid);
|
||||||
#if UE_TIMING_TRACE
|
#if UE_TIMING_TRACE
|
||||||
stop_meas(&ue->dlsch_llr_stats[ue->current_thread_id[subframe_rx]][slot]);
|
stop_meas(&ue->dlsch_llr_stats_parallelization[ue->current_thread_id[subframe_rx]][slot]);
|
||||||
#if DISABLE_LOG_X
|
#if DISABLE_LOG_X
|
||||||
printf("[AbsSFN %d.%d] LLR Computation Symbol %d %5.2f \n",proc->frame_rx,subframe_rx,m,ue->dlsch_llr_stats[ue->current_thread_id[subframe_rx]][slot].p_time/(cpuf*1000.0));
|
printf("[AbsSFN %d.%d] LLR Computation Symbol %d %5.2f \n",proc->frame_rx,subframe_rx,m,ue->dlsch_llr_stats_parallelization[ue->current_thread_id[subframe_rx]][slot].p_time/(cpuf*1000.0));
|
||||||
#else
|
#else
|
||||||
LOG_D(PHY, "[AbsSFN %d.%d] LLR Computation Symbol %d %5.2f \n",proc->frame_rx,subframe_rx,m,ue->dlsch_llr_stats[ue->current_thread_id[subframe_rx]][slot].p_time/(cpuf*1000.0));
|
LOG_D(PHY, "[AbsSFN %d.%d] LLR Computation Symbol %d %5.2f \n",proc->frame_rx,subframe_rx,m,ue->dlsch_llr_stats_parallelization[ue->current_thread_id[subframe_rx]][slot].p_time/(cpuf*1000.0));
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -4622,7 +4621,7 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *pr
|
|||||||
proc->dci_slot0_available=0;
|
proc->dci_slot0_available=0;
|
||||||
proc->first_symbol_available=0;
|
proc->first_symbol_available=0;
|
||||||
proc->chan_est_slot1_available=0;
|
proc->chan_est_slot1_available=0;
|
||||||
proc->channel_level=0;
|
//proc->channel_level=0;
|
||||||
|
|
||||||
if (pthread_mutex_lock(&proc->mutex_slot1_dl_processing) != 0) {
|
if (pthread_mutex_lock(&proc->mutex_slot1_dl_processing) != 0) {
|
||||||
LOG_E( PHY, "[SCHED][UE %d][Slot0] error locking mutex for UE slot1 dl processing\n",ue->Mod_id );
|
LOG_E( PHY, "[SCHED][UE %d][Slot0] error locking mutex for UE slot1 dl processing\n",ue->Mod_id );
|
||||||
|
|||||||
@@ -2263,7 +2263,7 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (SNR=snr0; SNR<snr1; SNR+=snr_step) {
|
for (SNR=snr0; SNR<snr1; SNR+=snr_step) {
|
||||||
UE->proc.proc_rxtx[subframe&1].frame_rx=0;
|
UE->proc.proc_rxtx[UE->current_thread_id[subframe]].frame_rx=0;
|
||||||
errs[0]=0;
|
errs[0]=0;
|
||||||
errs[1]=0;
|
errs[1]=0;
|
||||||
errs[2]=0;
|
errs[2]=0;
|
||||||
@@ -2332,7 +2332,7 @@ int main(int argc, char **argv)
|
|||||||
struct list time_vector_rx_dec;
|
struct list time_vector_rx_dec;
|
||||||
initialize(&time_vector_rx_dec);
|
initialize(&time_vector_rx_dec);
|
||||||
|
|
||||||
eNB_rxtx_proc_t *proc_eNB = &eNB->proc.proc_rxtx[subframe&1];
|
eNB_rxtx_proc_t *proc_eNB = &eNB->proc.proc_rxtx[UE->current_thread_id[subframe]];
|
||||||
|
|
||||||
for (trials = 0; trials<n_frames; trials++) {
|
for (trials = 0; trials<n_frames; trials++) {
|
||||||
//printf("Trial %d\n",trials);
|
//printf("Trial %d\n",trials);
|
||||||
@@ -2517,7 +2517,7 @@ int main(int argc, char **argv)
|
|||||||
DL_channel(eNB,UE,subframe,awgn_flag,SNR,tx_lev,hold_channel,abstx,num_rounds,trials,round,eNB2UE,s_re,s_im,r_re,r_im,csv_fd);
|
DL_channel(eNB,UE,subframe,awgn_flag,SNR,tx_lev,hold_channel,abstx,num_rounds,trials,round,eNB2UE,s_re,s_im,r_re,r_im,csv_fd);
|
||||||
|
|
||||||
|
|
||||||
UE_rxtx_proc_t *proc = &UE->proc.proc_rxtx[subframe&1];
|
UE_rxtx_proc_t *proc = &UE->proc.proc_rxtx[UE->current_thread_id[subframe]];
|
||||||
proc->subframe_rx = subframe;
|
proc->subframe_rx = subframe;
|
||||||
UE->UE_mode[0] = PUSCH;
|
UE->UE_mode[0] = PUSCH;
|
||||||
|
|
||||||
@@ -2539,7 +2539,9 @@ int main(int argc, char **argv)
|
|||||||
(void *)&dci_alloc[0].dci_pdu,
|
(void *)&dci_alloc[0].dci_pdu,
|
||||||
n_rnti,
|
n_rnti,
|
||||||
dci_alloc[0].format,
|
dci_alloc[0].format,
|
||||||
UE->dlsch[proc->subframe_rx&0x1][eNB_id],
|
UE->pdcch_vars[UE->current_thread_id[proc->subframe_rx]][eNB_id],
|
||||||
|
UE->pdsch_vars[UE->current_thread_id[proc->subframe_rx]][eNB_id],
|
||||||
|
UE->dlsch[UE->current_thread_id[proc->subframe_rx]][0],
|
||||||
&UE->frame_parms,
|
&UE->frame_parms,
|
||||||
UE->pdsch_config_dedicated,
|
UE->pdsch_config_dedicated,
|
||||||
SI_RNTI,
|
SI_RNTI,
|
||||||
@@ -2756,7 +2758,7 @@ int main(int argc, char **argv)
|
|||||||
subframe);
|
subframe);
|
||||||
}
|
}
|
||||||
|
|
||||||
UE->proc.proc_rxtx[subframe&1].frame_rx++;
|
UE->proc.proc_rxtx[UE->current_thread_id[subframe]].frame_rx++;
|
||||||
} //round
|
} //round
|
||||||
|
|
||||||
// printf("\n");
|
// printf("\n");
|
||||||
@@ -2767,7 +2769,7 @@ int main(int argc, char **argv)
|
|||||||
//len = chbch_stats_read(stats_buffer,NULL,0,4096);
|
//len = chbch_stats_read(stats_buffer,NULL,0,4096);
|
||||||
//printf("%s\n\n",stats_buffer);
|
//printf("%s\n\n",stats_buffer);
|
||||||
|
|
||||||
if (UE->proc.proc_rxtx[subframe&1].frame_rx % 10 == 0) {
|
if (UE->proc.proc_rxtx[UE->current_thread_id[subframe]].frame_rx % 10 == 0) {
|
||||||
UE->bitrate[eNB_id] = (UE->total_TBS[eNB_id] - UE->total_TBS_last[eNB_id])*10;
|
UE->bitrate[eNB_id] = (UE->total_TBS[eNB_id] - UE->total_TBS_last[eNB_id])*10;
|
||||||
LOG_D(PHY,"[UE %d] Calculating bitrate: total_TBS = %d, total_TBS_last = %d, bitrate = %d kbits/s\n",UE->Mod_id,UE->total_TBS[eNB_id],UE->total_TBS_last[eNB_id],
|
LOG_D(PHY,"[UE %d] Calculating bitrate: total_TBS = %d, total_TBS_last = %d, bitrate = %d kbits/s\n",UE->Mod_id,UE->total_TBS[eNB_id],UE->total_TBS_last[eNB_id],
|
||||||
UE->bitrate[eNB_id]/1000);
|
UE->bitrate[eNB_id]/1000);
|
||||||
@@ -2789,7 +2791,7 @@ int main(int argc, char **argv)
|
|||||||
double t_rx = (double)UE->phy_proc_rx[subframe&0x1].p_time/cpu_freq_GHz/1000.0;
|
double t_rx = (double)UE->phy_proc_rx[subframe&0x1].p_time/cpu_freq_GHz/1000.0;
|
||||||
double t_rx_fft = (double)UE->ofdm_demod_stats.p_time/cpu_freq_GHz/1000.0;
|
double t_rx_fft = (double)UE->ofdm_demod_stats.p_time/cpu_freq_GHz/1000.0;
|
||||||
double t_rx_demod = (double)UE->dlsch_rx_pdcch_stats.p_time/cpu_freq_GHz/1000.0;
|
double t_rx_demod = (double)UE->dlsch_rx_pdcch_stats.p_time/cpu_freq_GHz/1000.0;
|
||||||
double t_rx_dec = (double)UE->dlsch_decoding_stats[subframe&1].p_time/cpu_freq_GHz/1000.0;
|
double t_rx_dec = (double)UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].p_time/cpu_freq_GHz/1000.0;
|
||||||
|
|
||||||
if (t_tx > t_tx_max)
|
if (t_tx > t_tx_max)
|
||||||
t_tx_max = t_tx;
|
t_tx_max = t_tx;
|
||||||
@@ -3002,12 +3004,12 @@ int main(int argc, char **argv)
|
|||||||
printf("|__ Statistcs std: %fus median %fus q1 %fus q3 %fus \n",std_phy_proc_rx_demod, rx_demod_median, rx_demod_q1, rx_demod_q3);
|
printf("|__ Statistcs std: %fus median %fus q1 %fus q3 %fus \n",std_phy_proc_rx_demod, rx_demod_median, rx_demod_q1, rx_demod_q3);
|
||||||
printf("DLSCH unscrambling time :%f us (%d trials)\n",(double)UE->dlsch_unscrambling_stats.diff/UE->dlsch_unscrambling_stats.trials/cpu_freq_GHz/1000.0,
|
printf("DLSCH unscrambling time :%f us (%d trials)\n",(double)UE->dlsch_unscrambling_stats.diff/UE->dlsch_unscrambling_stats.trials/cpu_freq_GHz/1000.0,
|
||||||
UE->dlsch_unscrambling_stats.trials);
|
UE->dlsch_unscrambling_stats.trials);
|
||||||
std_phy_proc_rx_dec = sqrt((double)UE->dlsch_decoding_stats[subframe&1].diff_square/pow(cpu_freq_GHz,2)/pow(1000,
|
std_phy_proc_rx_dec = sqrt((double)UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].diff_square/pow(cpu_freq_GHz,2)/pow(1000,
|
||||||
2)/UE->dlsch_decoding_stats[subframe&1].trials - pow((double)UE->dlsch_decoding_stats[subframe&1].diff/UE->dlsch_decoding_stats[subframe&1].trials/cpu_freq_GHz/1000,2));
|
2)/UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].trials - pow((double)UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].diff/UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].trials/cpu_freq_GHz/1000,2));
|
||||||
printf("DLSCH Decoding time (%02.2f Mbit/s, avg iter %1.2f) :%f us (%d trials, max %f)\n",
|
printf("DLSCH Decoding time (%02.2f Mbit/s, avg iter %1.2f) :%f us (%d trials, max %f)\n",
|
||||||
eNB->dlsch[0][0]->harq_processes[0]->TBS/1000.0,(double)avg_iter/iter_trials,
|
eNB->dlsch[0][0]->harq_processes[0]->TBS/1000.0,(double)avg_iter/iter_trials,
|
||||||
(double)UE->dlsch_decoding_stats[subframe&1].diff/UE->dlsch_decoding_stats[subframe&1].trials/cpu_freq_GHz/1000.0,UE->dlsch_decoding_stats[subframe&1].trials,
|
(double)UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].diff/UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].trials/cpu_freq_GHz/1000.0,UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].trials,
|
||||||
(double)UE->dlsch_decoding_stats[subframe&1].max/cpu_freq_GHz/1000.0);
|
(double)UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].max/cpu_freq_GHz/1000.0);
|
||||||
printf("|__ Statistcs std: %fus median %fus q1 %fus q3 %fus \n",std_phy_proc_rx_dec, rx_dec_median, rx_dec_q1, rx_dec_q3);
|
printf("|__ Statistcs std: %fus median %fus q1 %fus q3 %fus \n",std_phy_proc_rx_dec, rx_dec_median, rx_dec_q1, rx_dec_q3);
|
||||||
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);
|
||||||
@@ -3195,7 +3197,7 @@ int main(int argc, char **argv)
|
|||||||
UE->dlsch_rx_pdcch_stats.trials,
|
UE->dlsch_rx_pdcch_stats.trials,
|
||||||
UE->dlsch_llr_stats.trials,
|
UE->dlsch_llr_stats.trials,
|
||||||
UE->dlsch_unscrambling_stats.trials,
|
UE->dlsch_unscrambling_stats.trials,
|
||||||
UE->dlsch_decoding_stats[subframe&1].trials
|
UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].trials
|
||||||
);
|
);
|
||||||
fprintf(time_meas_fd,"%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;",
|
fprintf(time_meas_fd,"%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;",
|
||||||
get_time_meas_us(&eNB->phy_proc_tx),
|
get_time_meas_us(&eNB->phy_proc_tx),
|
||||||
@@ -3208,7 +3210,7 @@ int main(int argc, char **argv)
|
|||||||
get_time_meas_us(&UE->dlsch_rx_pdcch_stats),
|
get_time_meas_us(&UE->dlsch_rx_pdcch_stats),
|
||||||
3*get_time_meas_us(&UE->dlsch_llr_stats),
|
3*get_time_meas_us(&UE->dlsch_llr_stats),
|
||||||
get_time_meas_us(&UE->dlsch_unscrambling_stats),
|
get_time_meas_us(&UE->dlsch_unscrambling_stats),
|
||||||
get_time_meas_us(&UE->dlsch_decoding_stats[subframe&1])
|
get_time_meas_us(&UE->dlsch_decoding_stats[UE->current_thread_id[subframe]])
|
||||||
);
|
);
|
||||||
//fprintf(time_meas_fd,"eNB_PROC_TX_STD;eNB_PROC_TX_MAX;eNB_PROC_TX_MIN;eNB_PROC_TX_MED;eNB_PROC_TX_Q1;eNB_PROC_TX_Q3;eNB_PROC_TX_DROPPED;\n");
|
//fprintf(time_meas_fd,"eNB_PROC_TX_STD;eNB_PROC_TX_MAX;eNB_PROC_TX_MIN;eNB_PROC_TX_MED;eNB_PROC_TX_Q1;eNB_PROC_TX_Q3;eNB_PROC_TX_DROPPED;\n");
|
||||||
fprintf(time_meas_fd,"%f;%f;%f;%f;%f;%f;%d;", std_phy_proc_tx, t_tx_max, t_tx_min, tx_median, tx_q1, tx_q3, n_tx_dropped);
|
fprintf(time_meas_fd,"%f;%f;%f;%f;%f;%f;%d;", std_phy_proc_tx, t_tx_max, t_tx_min, tx_median, tx_q1, tx_q3, n_tx_dropped);
|
||||||
@@ -3248,7 +3250,7 @@ int main(int argc, char **argv)
|
|||||||
UE->dlsch_rx_pdcch_stats.trials,
|
UE->dlsch_rx_pdcch_stats.trials,
|
||||||
UE->dlsch_llr_stats.trials,
|
UE->dlsch_llr_stats.trials,
|
||||||
UE->dlsch_unscrambling_stats.trials,
|
UE->dlsch_unscrambling_stats.trials,
|
||||||
UE->dlsch_decoding_stats[subframe&1].trials);
|
UE->dlsch_decoding_stats[UE->current_thread_id[subframe]].trials);
|
||||||
*/
|
*/
|
||||||
printf("[passed] effective rate : %f (%2.1f%%,%f)): log and break \n",rate*effective_rate, 100*effective_rate, rate );
|
printf("[passed] effective rate : %f (%2.1f%%,%f)): log and break \n",rate*effective_rate, 100*effective_rate, rate );
|
||||||
test_passed = 1;
|
test_passed = 1;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -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&0x1][0][i] = new_ue_dlsch(Kmimo,8,Nsoft,MAX_TURBO_ITERATIONS,N_RB_DL,0);
|
UE->dlsch[UE->current_thread_id[subframe]][0][i] = new_ue_dlsch(Kmimo,8,Nsoft,MAX_TURBO_ITERATIONS,N_RB_DL,0);
|
||||||
|
|
||||||
if (!UE->dlsch[subframe&0x1][0][i]) {
|
if (!UE->dlsch[UE->current_thread_id[subframe]][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&0x1][0][i]->rnti = n_rnti;
|
UE->dlsch[UE->current_thread_id[subframe]][0][i]->rnti = n_rnti;
|
||||||
}
|
}
|
||||||
|
|
||||||
// structure for SIC at UE
|
// structure for SIC at UE
|
||||||
@@ -2076,7 +2076,7 @@ int main(int argc, char **argv)
|
|||||||
reset_meas(&eNB->dlsch_rate_matching_stats);
|
reset_meas(&eNB->dlsch_rate_matching_stats);
|
||||||
reset_meas(&eNB->dlsch_turbo_encoding_stats);
|
reset_meas(&eNB->dlsch_turbo_encoding_stats);
|
||||||
|
|
||||||
reset_meas(&UE->phy_proc_rx[subframe&0x1]); // total UE rx
|
reset_meas(&UE->phy_proc_rx[UE->current_thread_id[subframe]]); // total UE rx
|
||||||
reset_meas(&UE->ofdm_demod_stats);
|
reset_meas(&UE->ofdm_demod_stats);
|
||||||
reset_meas(&UE->dlsch_channel_estimation_stats);
|
reset_meas(&UE->dlsch_channel_estimation_stats);
|
||||||
reset_meas(&UE->dlsch_freq_offset_estimation_stats);
|
reset_meas(&UE->dlsch_freq_offset_estimation_stats);
|
||||||
@@ -2119,9 +2119,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&0x1][0][0]->max_turbo_iterations+1;
|
ret = UE->dlsch[UE->current_thread_id[subframe]][0][0]->max_turbo_iterations+1;
|
||||||
|
|
||||||
while ((round < num_rounds) && (ret > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations)) {
|
while ((round < num_rounds) && (ret > UE->dlsch[UE->current_thread_id[subframe]][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]++;
|
||||||
|
|
||||||
@@ -2607,7 +2607,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&0x1][0][0]->harq_processes[0]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL);
|
UE->dlsch[UE->current_thread_id[subframe]][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);
|
||||||
@@ -3065,7 +3065,7 @@ PMI_FEEDBACK:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
start_meas(&UE->phy_proc_rx[subframe&0x1]);
|
start_meas(&UE->phy_proc_rx[UE->current_thread_id[subframe]]);
|
||||||
|
|
||||||
// Inner receiver scheduling for 3 slots
|
// Inner receiver scheduling for 3 slots
|
||||||
|
|
||||||
@@ -3102,24 +3102,24 @@ PMI_FEEDBACK:
|
|||||||
for(aa=0; aa<frame_parms->nb_antenna_ports_eNB; aa++) {
|
for(aa=0; aa<frame_parms->nb_antenna_ports_eNB; aa++) {
|
||||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
||||||
for (i=0; i<frame_parms->N_RB_DL*12; i++) {
|
for (i=0; i<frame_parms->N_RB_DL*12; i++) {
|
||||||
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[k][(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[k][(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(
|
||||||
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP);
|
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP);
|
||||||
//printf("x=%d,AMP=%d\n",eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x,AMP);
|
//printf("x=%d,AMP=%d\n",eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x,AMP);
|
||||||
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[k][(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[k][(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(
|
||||||
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP);
|
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP);
|
||||||
|
|
||||||
if (transmission_mode == 7){
|
if (transmission_mode == 7){
|
||||||
//this should include the BF weights! Will not work for a random channel
|
//this should include the BF weights! Will not work for a random channel
|
||||||
if (UE->high_speed_flag==0) {
|
if (UE->high_speed_flag==0) {
|
||||||
((int16_t *)UE->pdsch_vars[subframe&0x1][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i]=(int16_t)(
|
((int16_t *)UE->pdsch_vars[UE->current_thread_id[subframe]][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i]=(int16_t)(
|
||||||
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP);
|
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP);
|
||||||
((int16_t *)UE->pdsch_vars[subframe&0x1][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1]=(int16_t)(
|
((int16_t *)UE->pdsch_vars[UE->current_thread_id[subframe]][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1]=(int16_t)(
|
||||||
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP);
|
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP);
|
||||||
//printf("**,x=%d,AMP=%d\n",eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x,AMP);
|
//printf("**,x=%d,AMP=%d\n",eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x,AMP);
|
||||||
} else {
|
} else {
|
||||||
((int16_t *)UE->pdsch_vars[subframe&0x1][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(int16_t)(
|
((int16_t *)UE->pdsch_vars[UE->current_thread_id[subframe]][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(int16_t)(
|
||||||
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP);
|
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP);
|
||||||
((int16_t *)UE->pdsch_vars[subframe&0x1][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(int16_t)(
|
((int16_t *)UE->pdsch_vars[UE->current_thread_id[subframe]][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(int16_t)(
|
||||||
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP);
|
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3132,15 +3132,15 @@ PMI_FEEDBACK:
|
|||||||
for(aa=0; aa<frame_parms->nb_antenna_ports_eNB; aa++) {
|
for(aa=0; aa<frame_parms->nb_antenna_ports_eNB; aa++) {
|
||||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
||||||
for (i=0; i<frame_parms->N_RB_DL*12; i++) {
|
for (i=0; i<frame_parms->N_RB_DL*12; i++) {
|
||||||
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP);
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[0][(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP);
|
||||||
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0/2;
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[0][(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0/2;
|
||||||
if (transmission_mode == 7) {
|
if (transmission_mode == 7) {
|
||||||
if (UE->high_speed_flag==0){
|
if (UE->high_speed_flag==0){
|
||||||
((int16_t *) UE->pdsch_vars[subframe&0x1][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i]=(short)(AMP);
|
((int16_t *) UE->pdsch_vars[UE->current_thread_id[subframe]][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i]=(short)(AMP);
|
||||||
((int16_t *) UE->pdsch_vars[subframe&0x1][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1]=0/2;
|
((int16_t *) UE->pdsch_vars[UE->current_thread_id[subframe]][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1]=0/2;
|
||||||
} else {
|
} else {
|
||||||
((int16_t *) UE->pdsch_vars[subframe&0x1][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(short)(AMP);
|
((int16_t *) UE->pdsch_vars[UE->current_thread_id[subframe]][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(short)(AMP);
|
||||||
((int16_t *) UE->pdsch_vars[subframe&0x1][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=0/2;
|
((int16_t *) UE->pdsch_vars[UE->current_thread_id[subframe]][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=0/2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3233,7 +3233,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&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->first_tx=1;
|
if (round == 0) UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][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,
|
||||||
@@ -3241,7 +3241,9 @@ 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&0x1][0],
|
UE->pdcch_vars[UE->current_thread_id[subframe]][eNB_id],
|
||||||
|
UE->pdsch_vars[UE->current_thread_id[subframe]][eNB_id],
|
||||||
|
UE->dlsch[UE->current_thread_id[subframe]][0],
|
||||||
&UE->frame_parms,
|
&UE->frame_parms,
|
||||||
UE->pdsch_config_dedicated,
|
UE->pdsch_config_dedicated,
|
||||||
SI_RNTI,
|
SI_RNTI,
|
||||||
@@ -3250,23 +3252,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&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->nb_rb,
|
UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][0][0]->current_harq_pid]->nb_rb,
|
||||||
UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->rb_alloc_even,
|
UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][0][0]->current_harq_pid]->rb_alloc_even,
|
||||||
get_Qm(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs),
|
get_Qm(UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][0][0]->current_harq_pid]->mcs),
|
||||||
UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->Nl,
|
UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][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&0x1][0][0]->harq_processes[0]->mimo_mode = TM7; */
|
UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->mimo_mode = TM7; */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
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 = (double)dlsch_tbs25[get_I_TBS(UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][0][0]->current_harq_pid]->mcs)][UE->dlsch[UE->current_thread_id[subframe]][0][0]->nb_rb-1]/(coded_bits_per_codeword);
|
||||||
rate*=get_Qm(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs);
|
rate*=get_Qm(UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][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&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->TBS);
|
UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][0][0]->current_harq_pid]->TBS);
|
||||||
|
|
||||||
dlsch_active = 1;
|
dlsch_active = 1;
|
||||||
} else {
|
} else {
|
||||||
@@ -3294,7 +3296,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&0x1][0][0]->harq_processes[0]->first_tx=1;
|
if (round == 0) UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->first_tx=1;
|
||||||
|
|
||||||
switch (transmission_mode) {
|
switch (transmission_mode) {
|
||||||
case 1:
|
case 1:
|
||||||
@@ -3305,7 +3307,9 @@ 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&0x1][0],
|
UE->pdcch_vars[UE->current_thread_id[subframe]][eNB_id],
|
||||||
|
UE->pdsch_vars[UE->current_thread_id[subframe]][eNB_id],
|
||||||
|
UE->dlsch[UE->current_thread_id[subframe]][0],
|
||||||
&UE->frame_parms,
|
&UE->frame_parms,
|
||||||
UE->pdsch_config_dedicated,
|
UE->pdsch_config_dedicated,
|
||||||
SI_RNTI,
|
SI_RNTI,
|
||||||
@@ -3313,24 +3317,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&0x1][0][0]->harq_processes[0]->mimo_mode = TM7;*/
|
UE->dlsch[UE->current_thread_id[subframe]][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&0x1][0][0]->harq_processes[0]->round,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->first_tx);
|
// printf("Rate: TM3 (before) round %d (%d) first_tx %d\n",round,UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->round,UE->dlsch[UE->current_thread_id[subframe]][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&0x1][0],
|
UE->dlsch[UE->current_thread_id[subframe]][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&0x1][0][0]->harq_processes[0]->round,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->first_tx);
|
// printf("Rate: TM3 (after) round %d (%d) first_tx %d\n",round,UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->round,UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->first_tx);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
@@ -3339,7 +3343,9 @@ 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&0x1][0],
|
UE->pdcch_vars[UE->current_thread_id[subframe]][eNB_id],
|
||||||
|
UE->pdsch_vars[UE->current_thread_id[subframe]][eNB_id],
|
||||||
|
UE->dlsch[UE->current_thread_id[subframe]][0],
|
||||||
&UE->frame_parms,
|
&UE->frame_parms,
|
||||||
UE->pdsch_config_dedicated,
|
UE->pdsch_config_dedicated,
|
||||||
SI_RNTI,
|
SI_RNTI,
|
||||||
@@ -3355,7 +3361,9 @@ 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&0x1][0],
|
ue->pdcch_vars[UE->current_thread_id[subframe]][eNB_id],
|
||||||
|
ue->pdsch_vars[UE->current_thread_id[subframe]][eNB_id],
|
||||||
|
UE->dlsch[UE->current_thread_id[subframe]][0],
|
||||||
&UE->frame_parms,
|
&UE->frame_parms,
|
||||||
UE->pdsch_config_dedicated,
|
UE->pdsch_config_dedicated,
|
||||||
SI_RNTI,
|
SI_RNTI,
|
||||||
@@ -3387,7 +3395,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&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->dl_power_off==0) &&
|
(UE->dlsch[UE->current_thread_id[subframe]][eNB_id][0]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][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 {
|
||||||
@@ -3410,7 +3418,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&0x1][0][0]->current_harq_pid)==-1) {
|
UE->dlsch[UE->current_thread_id[subframe]][0][0]->current_harq_pid)==-1) {
|
||||||
dlsch_active = 0;
|
dlsch_active = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -3436,7 +3444,7 @@ PMI_FEEDBACK:
|
|||||||
0,
|
0,
|
||||||
dual_stream_UE,
|
dual_stream_UE,
|
||||||
i_mod,
|
i_mod,
|
||||||
UE->dlsch[subframe&0x1][0][0]->current_harq_pid)==-1) {
|
UE->dlsch[UE->current_thread_id[subframe]][0][0]->current_harq_pid)==-1) {
|
||||||
dlsch_active=0;
|
dlsch_active=0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -3462,7 +3470,7 @@ PMI_FEEDBACK:
|
|||||||
0,
|
0,
|
||||||
dual_stream_UE,
|
dual_stream_UE,
|
||||||
i_mod,
|
i_mod,
|
||||||
UE->dlsch[subframe&0x1][0][0]->current_harq_pid)==-1) {
|
UE->dlsch[UE->current_thread_id[subframe]][0][0]->current_harq_pid)==-1) {
|
||||||
dlsch_active=0;
|
dlsch_active=0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -3483,30 +3491,30 @@ PMI_FEEDBACK:
|
|||||||
//write_output("rxsig0.m","rxs0", &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1);
|
//write_output("rxsig0.m","rxs0", &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1);
|
||||||
write_output("rxsig0.m","rxs0", &UE->common_vars.rxdata[0][subframe*UE->frame_parms.samples_per_tti],UE->frame_parms.samples_per_tti,1,1);
|
write_output("rxsig0.m","rxs0", &UE->common_vars.rxdata[0][subframe*UE->frame_parms.samples_per_tti],UE->frame_parms.samples_per_tti,1,1);
|
||||||
//write_output("rxsigF0.m","rxsF0", &UE->common_vars.rxdataF[0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
//write_output("rxsigF0.m","rxsF0", &UE->common_vars.rxdataF[0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
write_output("rxsigF0.m","rxsF0", &UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[0][0],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
write_output("rxsigF0.m","rxsF0", &UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[0][0],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
|
|
||||||
if (UE->frame_parms.nb_antennas_rx>1) {
|
if (UE->frame_parms.nb_antennas_rx>1) {
|
||||||
write_output("rxsig1.m","rxs1", UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1);
|
write_output("rxsig1.m","rxs1", UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1);
|
||||||
write_output("rxsigF1.m","rxsF1", UE->common_vars..common_vars_rx_data_per_thread[subframe&0x1]rxdataF[1],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
write_output("rxsigF1.m","rxsF1", UE->common_vars..common_vars_rx_data_per_thread[UE->current_thread_id[subframe]]rxdataF[1],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
write_output("dlsch00_r0.m","dl00_r0",
|
write_output("dlsch00_r0.m","dl00_r0",
|
||||||
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][0][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][0][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
|
|
||||||
if (UE->frame_parms.nb_antennas_rx>1)
|
if (UE->frame_parms.nb_antennas_rx>1)
|
||||||
write_output("dlsch01_r0.m","dl01_r0",
|
write_output("dlsch01_r0.m","dl01_r0",
|
||||||
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][1][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][1][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
|
|
||||||
if (eNB->frame_parms.nb_antennas_tx>1)
|
if (eNB->frame_parms.nb_antennas_tx>1)
|
||||||
write_output("dlsch10_r0.m","dl10_r0",
|
write_output("dlsch10_r0.m","dl10_r0",
|
||||||
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][2][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][2][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
|
|
||||||
if ((UE->frame_parms.nb_antennas_rx>1) && (eNB->frame_parms.nb_antennas_tx>1))
|
if ((UE->frame_parms.nb_antennas_rx>1) && (eNB->frame_parms.nb_antennas_tx>1))
|
||||||
write_output("dlsch11_r0.m","dl11_r0",
|
write_output("dlsch11_r0.m","dl11_r0",
|
||||||
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][3][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][3][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
||||||
|
|
||||||
//pdsch_vars
|
//pdsch_vars
|
||||||
@@ -3533,14 +3541,14 @@ PMI_FEEDBACK:
|
|||||||
if (trials==0 && round==0 && transmission_mode>=5 && transmission_mode<7) {
|
if (trials==0 && round==0 && transmission_mode>=5 && transmission_mode<7) {
|
||||||
for (iii=0; iii<NB_RB; iii++) {
|
for (iii=0; iii<NB_RB; iii++) {
|
||||||
//fprintf(csv_fd, "%d, %d", (UE->pdsch_vars[eNB_id]->pmi_ext[iii]),(UE->pdsch_vars[eNB_id_i]->pmi_ext[iii]));
|
//fprintf(csv_fd, "%d, %d", (UE->pdsch_vars[eNB_id]->pmi_ext[iii]),(UE->pdsch_vars[eNB_id_i]->pmi_ext[iii]));
|
||||||
fprintf(csv_fd,"%x,%x,",(UE->pdsch_vars[subframe&0x1][eNB_id]->pmi_ext[iii]),(UE->pdsch_vars[eNB_id]->pmi_ext[iii]));
|
fprintf(csv_fd,"%x,%x,",(UE->pdsch_vars[UE->current_thread_id[subframe]][eNB_id]->pmi_ext[iii]),(UE->pdsch_vars[eNB_id]->pmi_ext[iii]));
|
||||||
printf("%x ",(UE->pdsch_vars[subframe&0x1][eNB_id]->pmi_ext[iii]));
|
printf("%x ",(UE->pdsch_vars[UE->current_thread_id[subframe]][eNB_id]->pmi_ext[iii]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int cw=Kmimo-1; cw>=0; cw--) {
|
for (int cw=Kmimo-1; cw>=0; cw--) {
|
||||||
UE->dlsch[subframe&0x1][0][cw]->rnti = (common_flag==0) ? n_rnti: SI_RNTI;
|
UE->dlsch[UE->current_thread_id[subframe]][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,
|
||||||
@@ -3551,14 +3559,14 @@ PMI_FEEDBACK:
|
|||||||
subframe,
|
subframe,
|
||||||
(transmission_mode<7?0:transmission_mode));
|
(transmission_mode<7?0:transmission_mode));
|
||||||
|
|
||||||
UE->dlsch[subframe&0x1][0][cw]->harq_processes[UE->dlsch[subframe&0x1][0][cw]->current_harq_pid]->G = coded_bits_per_codeword;
|
UE->dlsch[UE->current_thread_id[subframe]][0][cw]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][0][cw]->current_harq_pid]->G = coded_bits_per_codeword;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// calculate uncoded BLER
|
// calculate uncoded BLER
|
||||||
uncoded_ber=0;
|
uncoded_ber=0;
|
||||||
for (i=0;i<coded_bits_per_codeword;i++)
|
for (i=0;i<coded_bits_per_codeword;i++)
|
||||||
if (eNB->dlsch[0][0]->harq_processes[0]->e[i] != (UE->pdsch_vars[subframe&0x1][0]->llr[0][i]<0)) {
|
if (eNB->dlsch[0][0]->harq_processes[0]->e[i] != (UE->pdsch_vars[UE->current_thread_id[subframe]][0]->llr[0][i]<0)) {
|
||||||
uncoded_ber_bit[i] = 1;
|
uncoded_ber_bit[i] = 1;
|
||||||
uncoded_ber++;
|
uncoded_ber++;
|
||||||
}
|
}
|
||||||
@@ -3575,26 +3583,26 @@ PMI_FEEDBACK:
|
|||||||
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&0x1][0][cw],
|
UE->dlsch[UE->current_thread_id[subframe]][0][cw],
|
||||||
coded_bits_per_codeword,
|
coded_bits_per_codeword,
|
||||||
UE->pdsch_vars[subframe&0x1][eNB_id]->llr[cw],
|
UE->pdsch_vars[UE->current_thread_id[subframe]][eNB_id]->llr[cw],
|
||||||
0,
|
0,
|
||||||
subframe<<1);
|
subframe<<1);
|
||||||
stop_meas(&UE->dlsch_unscrambling_stats);
|
stop_meas(&UE->dlsch_unscrambling_stats);
|
||||||
|
|
||||||
start_meas(&UE->dlsch_decoding_stats);
|
start_meas(&UE->dlsch_decoding_stats);
|
||||||
ret = dlsch_decoding(UE,
|
ret = dlsch_decoding(UE,
|
||||||
UE->pdsch_vars[subframe&0x1][eNB_id]->llr[cw],
|
UE->pdsch_vars[UE->current_thread_id[subframe]][eNB_id]->llr[cw],
|
||||||
&UE->frame_parms,
|
&UE->frame_parms,
|
||||||
UE->dlsch[subframe&0x1][0][cw],
|
UE->dlsch[UE->current_thread_id[subframe]][0][cw],
|
||||||
UE->dlsch[subframe&0x1][0][cw]->harq_processes[UE->dlsch[subframe&0x1][0][cw]->current_harq_pid],
|
UE->dlsch[UE->current_thread_id[subframe]][0][cw]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][0][cw]->current_harq_pid],
|
||||||
subframe,
|
subframe,
|
||||||
UE->dlsch[subframe&0x1][0][cw]->current_harq_pid,
|
UE->dlsch[UE->current_thread_id[subframe]][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&0x1][0][cw]->max_turbo_iterations) {
|
if (ret <= UE->dlsch[UE->current_thread_id[subframe]][0][cw]->max_turbo_iterations) {
|
||||||
} else {
|
} else {
|
||||||
errs2[round]++;
|
errs2[round]++;
|
||||||
}
|
}
|
||||||
@@ -3602,10 +3610,10 @@ PMI_FEEDBACK:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
stop_meas(&UE->phy_proc_rx[subframe&0x1]);
|
stop_meas(&UE->phy_proc_rx[UE->current_thread_id[subframe]]);
|
||||||
|
|
||||||
|
|
||||||
if (ret <= UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations) {
|
if (ret <= UE->dlsch[UE->current_thread_id[subframe]][0][0]->max_turbo_iterations) {
|
||||||
|
|
||||||
avg_iter += ret;
|
avg_iter += ret;
|
||||||
iter_trials++;
|
iter_trials++;
|
||||||
@@ -3613,15 +3621,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&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->TBS;
|
UE->total_TBS[eNB_id] = UE->total_TBS[eNB_id] + UE->dlsch[UE->current_thread_id[subframe]][eNB_id][0]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][eNB_id][0]->current_harq_pid]->TBS;
|
||||||
TB0_active = 0;
|
TB0_active = 0;
|
||||||
|
|
||||||
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
|
if (UE->dlsch[UE->current_thread_id[subframe]][eNB_id][0]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][eNB_id][0]->current_harq_pid]->mimo_mode == LARGE_CDD) { //try to decode second stream using SIC
|
||||||
/*
|
/*
|
||||||
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++) {
|
for (round = 0 ; round < UE->dlsch[UE->current_thread_id[subframe]][eNB_id][0]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][eNB_id][0]->current_harq_pid]->round ; round++) {
|
||||||
// re-encoding of first stream
|
// re-encoding of first stream
|
||||||
dlsch0_ue_harq = UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid];
|
dlsch0_ue_harq = UE->dlsch[UE->current_thread_id[subframe]][eNB_id][0]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][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 = UE->dlsch[UE->current_thread_id[subframe]][eNB_id]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][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;
|
||||||
@@ -3633,13 +3641,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&0x1][eNB_id]->active = UE->dlsch[subframe&0x1][eNB_id][0]->active;
|
UE->dlsch[UE->current_thread_id[subframe]][eNB_id]->active = UE->dlsch[UE->current_thread_id[subframe]][eNB_id][0]->active;
|
||||||
UE->dlsch[subframe&0x1][eNB_id]->rnti = UE->dlsch[subframe&0x1][eNB_id][0]->rnti;
|
UE->dlsch[UE->current_thread_id[subframe]][eNB_id]->rnti = UE->dlsch[UE->current_thread_id[subframe]][eNB_id][0]->rnti;
|
||||||
|
|
||||||
dlsch_encoding(UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->b,
|
dlsch_encoding(UE->dlsch[UE->current_thread_id[subframe]][eNB_id][0]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][eNB_id][0]->current_harq_pid]->b,
|
||||||
&UE->frame_parms,
|
&UE->frame_parms,
|
||||||
num_pdcch_symbols,
|
num_pdcch_symbols,
|
||||||
UE->dlsch[subframe&0x1][0],
|
UE->dlsch[UE->current_thread_id[subframe]][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,
|
||||||
@@ -3666,18 +3674,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&0x1][0][0]->harq_processes[0]->C; s++) {
|
for (s=0; s<UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->C; s++) {
|
||||||
if (s<UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Cminus)
|
if (s<UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->Cminus)
|
||||||
Kr = UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kminus;
|
Kr = UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->Kminus;
|
||||||
else
|
else
|
||||||
Kr = UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kplus;
|
Kr = UE->dlsch[UE->current_thread_id[subframe]][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&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]);
|
printf("%d : %x (%x)\n",i,UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->c[s][i],UE->dlsch[UE->current_thread_id[subframe]][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);
|
||||||
@@ -3685,7 +3693,7 @@ PMI_FEEDBACK:
|
|||||||
write_output(fname,vname, &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1);
|
write_output(fname,vname, &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1);
|
||||||
sprintf(fname,"rxsigF0_r%d.m",round);
|
sprintf(fname,"rxsigF0_r%d.m",round);
|
||||||
sprintf(vname,"rxs0F_r%d",round);
|
sprintf(vname,"rxs0F_r%d",round);
|
||||||
write_output(fname,vname, &UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[0][0],2*UE->frame_parms.ofdm_symbol_size*nsymb,2,1);
|
write_output(fname,vname, &UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[0][0],2*UE->frame_parms.ofdm_symbol_size*nsymb,2,1);
|
||||||
|
|
||||||
if (UE->frame_parms.nb_antennas_rx>1) {
|
if (UE->frame_parms.nb_antennas_rx>1) {
|
||||||
sprintf(fname,"rxsig1_r%d.m",round);
|
sprintf(fname,"rxsig1_r%d.m",round);
|
||||||
@@ -3693,20 +3701,20 @@ PMI_FEEDBACK:
|
|||||||
write_output(fname,vname, UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1);
|
write_output(fname,vname, UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1);
|
||||||
sprintf(fname,"rxsig1F_r%d.m",round);
|
sprintf(fname,"rxsig1F_r%d.m",round);
|
||||||
sprintf(vname,"rxs1F_r%d.m",round);
|
sprintf(vname,"rxs1F_r%d.m",round);
|
||||||
write_output(fname,vname, UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[1],2*UE->frame_parms.ofdm_symbol_size*nsymb,2,1);
|
write_output(fname,vname, UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[1],2*UE->frame_parms.ofdm_symbol_size*nsymb,2,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(fname,"dlsch00_r%d.m",round);
|
sprintf(fname,"dlsch00_r%d.m",round);
|
||||||
sprintf(vname,"dl00_r%d",round);
|
sprintf(vname,"dl00_r%d",round);
|
||||||
write_output(fname,vname,
|
write_output(fname,vname,
|
||||||
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][0][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][0][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
|
|
||||||
if (UE->frame_parms.nb_antennas_rx>1) {
|
if (UE->frame_parms.nb_antennas_rx>1) {
|
||||||
sprintf(fname,"dlsch01_r%d.m",round);
|
sprintf(fname,"dlsch01_r%d.m",round);
|
||||||
sprintf(vname,"dl01_r%d",round);
|
sprintf(vname,"dl01_r%d",round);
|
||||||
write_output(fname,vname,
|
write_output(fname,vname,
|
||||||
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][1][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][1][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3714,7 +3722,7 @@ PMI_FEEDBACK:
|
|||||||
sprintf(fname,"dlsch10_r%d.m",round);
|
sprintf(fname,"dlsch10_r%d.m",round);
|
||||||
sprintf(vname,"dl10_r%d",round);
|
sprintf(vname,"dl10_r%d",round);
|
||||||
write_output(fname,vname,
|
write_output(fname,vname,
|
||||||
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][2][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][2][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3722,7 +3730,7 @@ PMI_FEEDBACK:
|
|||||||
sprintf(fname,"dlsch11_r%d.m",round);
|
sprintf(fname,"dlsch11_r%d.m",round);
|
||||||
sprintf(vname,"dl11_r%d",round);
|
sprintf(vname,"dl11_r%d",round);
|
||||||
write_output(fname,vname,
|
write_output(fname,vname,
|
||||||
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][3][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][3][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3732,7 +3740,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&0x1][0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0);
|
write_output("dlsch_w.m","w",UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (round == 3) exit(-1);
|
if (round == 3) exit(-1);
|
||||||
@@ -3741,7 +3749,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&0x1][0][0]->harq_processes[0]->round++;
|
// UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->round++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xforms==1) {
|
if (xforms==1) {
|
||||||
@@ -3781,7 +3789,7 @@ PMI_FEEDBACK:
|
|||||||
double t_tx_enc = (double)eNB->dlsch_encoding_stats.p_time/cpu_freq_GHz/1000.0;
|
double t_tx_enc = (double)eNB->dlsch_encoding_stats.p_time/cpu_freq_GHz/1000.0;
|
||||||
|
|
||||||
|
|
||||||
double t_rx = (double)UE->phy_proc_rx[subframe&0x1].p_time/cpu_freq_GHz/1000.0;
|
double t_rx = (double)UE->phy_proc_rx[UE->current_thread_id[subframe]].p_time/cpu_freq_GHz/1000.0;
|
||||||
double t_rx_fft = (double)UE->ofdm_demod_stats.p_time/cpu_freq_GHz/1000.0;
|
double t_rx_fft = (double)UE->ofdm_demod_stats.p_time/cpu_freq_GHz/1000.0;
|
||||||
double t_rx_demod = (double)UE->dlsch_rx_pdcch_stats.p_time/cpu_freq_GHz/1000.0;
|
double t_rx_demod = (double)UE->dlsch_rx_pdcch_stats.p_time/cpu_freq_GHz/1000.0;
|
||||||
double t_rx_dec = (double)UE->dlsch_decoding_stats.p_time/cpu_freq_GHz/1000.0;
|
double t_rx_dec = (double)UE->dlsch_decoding_stats.p_time/cpu_freq_GHz/1000.0;
|
||||||
@@ -3931,7 +3939,7 @@ PMI_FEEDBACK:
|
|||||||
rate*effective_rate,
|
rate*effective_rate,
|
||||||
100*effective_rate,
|
100*effective_rate,
|
||||||
rate,
|
rate,
|
||||||
rate*get_Qm(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs),
|
rate*get_Qm(UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[UE->dlsch[UE->current_thread_id[subframe]][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]));
|
||||||
@@ -3970,10 +3978,10 @@ PMI_FEEDBACK:
|
|||||||
eNB->dlsch_interleaving_stats.diff/eNB->dlsch_interleaving_stats.trials/cpu_freq_GHz/1000.0,eNB->dlsch_interleaving_stats.trials);
|
eNB->dlsch_interleaving_stats.diff/eNB->dlsch_interleaving_stats.trials/cpu_freq_GHz/1000.0,eNB->dlsch_interleaving_stats.trials);
|
||||||
|
|
||||||
printf("\n\nUE RX function statistics (per 1ms subframe)\n\n");
|
printf("\n\nUE RX function statistics (per 1ms subframe)\n\n");
|
||||||
std_phy_proc_rx = sqrt((double)UE->phy_proc_rx[subframe&0x1].diff_square/pow(cpu_freq_GHz,2)/pow(1000,
|
std_phy_proc_rx = sqrt((double)UE->phy_proc_rx[UE->current_thread_id[subframe]].diff_square/pow(cpu_freq_GHz,2)/pow(1000,
|
||||||
2)/UE->phy_proc_rx[subframe&0x1].trials - pow((double)UE->phy_proc_rx[subframe&0x1].diff/UE->phy_proc_rx[subframe&0x1].trials/cpu_freq_GHz/1000,2));
|
2)/UE->phy_proc_rx[UE->current_thread_id[subframe]].trials - pow((double)UE->phy_proc_rx[UE->current_thread_id[subframe]].diff/UE->phy_proc_rx[UE->current_thread_id[subframe]].trials/cpu_freq_GHz/1000,2));
|
||||||
printf("Total PHY proc rx :%f us (%d trials)\n",(double)UE->phy_proc_rx[subframe&0x1].diff/UE->phy_proc_rx[subframe&0x1].trials/cpu_freq_GHz/1000.0,
|
printf("Total PHY proc rx :%f us (%d trials)\n",(double)UE->phy_proc_rx[UE->current_thread_id[subframe]].diff/UE->phy_proc_rx[UE->current_thread_id[subframe]].trials/cpu_freq_GHz/1000.0,
|
||||||
UE->phy_proc_rx[subframe&0x1].trials*2/3);
|
UE->phy_proc_rx[UE->current_thread_id[subframe]].trials*2/3);
|
||||||
printf("|__Statistcs std: %fus max: %fus min: %fus median %fus q1 %fus q3 %fus n_dropped: %d packet \n", std_phy_proc_rx, t_rx_max, t_rx_min, rx_median,
|
printf("|__Statistcs std: %fus max: %fus min: %fus median %fus q1 %fus q3 %fus n_dropped: %d packet \n", std_phy_proc_rx, t_rx_max, t_rx_min, rx_median,
|
||||||
rx_q1, rx_q3, n_rx_dropped);
|
rx_q1, rx_q3, n_rx_dropped);
|
||||||
std_phy_proc_rx_fft = sqrt((double)UE->ofdm_demod_stats.diff_square/pow(cpu_freq_GHz,2)/pow(1000,
|
std_phy_proc_rx_fft = sqrt((double)UE->ofdm_demod_stats.diff_square/pow(cpu_freq_GHz,2)/pow(1000,
|
||||||
@@ -4007,7 +4015,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&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,
|
UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->Cminus ? UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->Kminus : UE->dlsch[UE->current_thread_id[subframe]][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,
|
||||||
@@ -4185,7 +4193,7 @@ PMI_FEEDBACK:
|
|||||||
eNB->dlsch_modulation_stats.trials,
|
eNB->dlsch_modulation_stats.trials,
|
||||||
eNB->dlsch_scrambling_stats.trials,
|
eNB->dlsch_scrambling_stats.trials,
|
||||||
eNB->dlsch_encoding_stats.trials,
|
eNB->dlsch_encoding_stats.trials,
|
||||||
UE->phy_proc_rx[subframe&0x1].trials,
|
UE->phy_proc_rx[UE->current_thread_id[subframe]].trials,
|
||||||
UE->ofdm_demod_stats.trials,
|
UE->ofdm_demod_stats.trials,
|
||||||
UE->dlsch_rx_pdcch_stats.trials,
|
UE->dlsch_rx_pdcch_stats.trials,
|
||||||
UE->dlsch_llr_stats.trials,
|
UE->dlsch_llr_stats.trials,
|
||||||
@@ -4198,7 +4206,7 @@ PMI_FEEDBACK:
|
|||||||
get_time_meas_us(&eNB->dlsch_modulation_stats),
|
get_time_meas_us(&eNB->dlsch_modulation_stats),
|
||||||
get_time_meas_us(&eNB->dlsch_scrambling_stats),
|
get_time_meas_us(&eNB->dlsch_scrambling_stats),
|
||||||
get_time_meas_us(&eNB->dlsch_encoding_stats),
|
get_time_meas_us(&eNB->dlsch_encoding_stats),
|
||||||
get_time_meas_us(&UE->phy_proc_rx[subframe&0x1]),
|
get_time_meas_us(&UE->phy_proc_rx[UE->current_thread_id[subframe]]),
|
||||||
nsymb*get_time_meas_us(&UE->ofdm_demod_stats),
|
nsymb*get_time_meas_us(&UE->ofdm_demod_stats),
|
||||||
get_time_meas_us(&UE->dlsch_rx_pdcch_stats),
|
get_time_meas_us(&UE->dlsch_rx_pdcch_stats),
|
||||||
3*get_time_meas_us(&UE->dlsch_llr_stats),
|
3*get_time_meas_us(&UE->dlsch_llr_stats),
|
||||||
@@ -4238,7 +4246,7 @@ PMI_FEEDBACK:
|
|||||||
eNB->dlsch_modulation_stats.trials,
|
eNB->dlsch_modulation_stats.trials,
|
||||||
eNB->dlsch_scrambling_stats.trials,
|
eNB->dlsch_scrambling_stats.trials,
|
||||||
eNB->dlsch_encoding_stats.trials,
|
eNB->dlsch_encoding_stats.trials,
|
||||||
UE->phy_proc_rx[subframe&0x1].trials,
|
UE->phy_proc_rx[UE->current_thread_id[subframe]].trials,
|
||||||
UE->ofdm_demod_stats.trials,
|
UE->ofdm_demod_stats.trials,
|
||||||
UE->dlsch_rx_pdcch_stats.trials,
|
UE->dlsch_rx_pdcch_stats.trials,
|
||||||
UE->dlsch_llr_stats.trials,
|
UE->dlsch_llr_stats.trials,
|
||||||
@@ -4296,7 +4304,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&0x1][0][i]);
|
free_ue_dlsch(UE->dlsch[UE->current_thread_id[subframe]][0][i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user