Merge branch 'bugfix-243-dlsim' into feature-59-tm4
This commit is contained in:
@@ -44,7 +44,11 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
|
||||
|
||||
uint8_t log2_osf;
|
||||
|
||||
#if DISABLE_LOG_X
|
||||
printf("Initializing frame parms for N_RB_DL %d, Ncp %d, osf %d\n",frame_parms->N_RB_DL,frame_parms->Ncp,osf);
|
||||
#else
|
||||
LOG_I(PHY,"Initializing frame parms for N_RB_DL %d, Ncp %d, osf %d\n",frame_parms->N_RB_DL,frame_parms->Ncp,osf);
|
||||
#endif
|
||||
|
||||
if (frame_parms->Ncp==EXTENDED) {
|
||||
frame_parms->nb_prefix_samples0=512;
|
||||
|
||||
@@ -1754,8 +1754,8 @@ int32_t rx_pdcch(PHY_VARS_UE *ue,
|
||||
avgs = cmax(avgs,avgP[(aarx<<1)+aatx]);
|
||||
|
||||
log2_maxh = (log2_approx(avgs)/2) + 5; //+frame_parms->nb_antennas_rx;
|
||||
#ifdef DEBUG_PHY
|
||||
LOG_I(PHY,"subframe %d: pdcch log2_maxh = %d (%d,%d)\n",subframe,log2_maxh,avgP[0],avgs);
|
||||
#ifdef UE_DEBUG_TRACE
|
||||
LOG_D(PHY,"subframe %d: pdcch log2_maxh = %d (%d,%d)\n",subframe,log2_maxh,avgP[0],avgs);
|
||||
#endif
|
||||
|
||||
#if T_TRACER
|
||||
@@ -2653,7 +2653,8 @@ int get_nCCE_offset_l1(int *CCE_table,
|
||||
search_space_free = 1;
|
||||
|
||||
for (l=0; l<L; l++) {
|
||||
if (CCE_table[(((Yk+m)%(nCCE/L))*L) + l] == 1) {
|
||||
int cce = (((Yk+m)%(nCCE/L))*L) + l;
|
||||
if (cce >= nCCE || CCE_table[cce] == 1) {
|
||||
search_space_free = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -6416,24 +6416,23 @@ int generate_ue_dlsch_params_from_dci(int frame,
|
||||
break;
|
||||
}
|
||||
|
||||
/*#ifdef DEBUG_DCI
|
||||
#ifdef UE_DEBUG_TRACE
|
||||
|
||||
if (dlsch[0] && (dlsch[0]->rnti != 0xffff)) {
|
||||
printf("dci_format:%d Abssubframe: %d.%d \n",dci_format,frame%1024,subframe);
|
||||
printf("PDSCH dlsch0 UE: rnti %x\n",dlsch[0]->rnti);
|
||||
printf("PDSCH dlsch0 UE: NBRB %d\n",dlsch0_harq->nb_rb);
|
||||
printf("PDSCH dlsch0 UE: rballoc %x\n",dlsch0_harq->rb_alloc_even[0]);
|
||||
printf("PDSCH dlsch0 UE: harq_pid %d\n",harq_pid);
|
||||
//printf("PDSCH dlsch0 UE: tpc %d\n",TPC);
|
||||
printf("PDSCH dlsch0 UE: g %d\n",dlsch[0]->g_pucch);
|
||||
printf("PDSCH dlsch0 UE: round %d\n",dlsch0_harq->round);
|
||||
printf("PDSCH dlsch0 UE: DCINdi %d\n",dlsch0_harq->DCINdi);
|
||||
printf("PDSCH dlsch0 UE: rvidx %d\n",dlsch0_harq->rvidx);
|
||||
printf("PDSCH dlsch0 UE: TBS %d\n",dlsch0_harq->TBS);
|
||||
printf("PDSCH dlsch0 UE: mcs %d\n",dlsch0_harq->mcs);
|
||||
printf("PDSCH dlsch0 UE: pwr_off %d\n",dlsch0_harq->dl_power_off);
|
||||
LOG_I(PHY,"dci_format:%d Abssubframe: %d.%d \n",dci_format,frame%1024,subframe);
|
||||
LOG_D(PHY,"PDSCH dlsch0 UE: rnti %x\n",dlsch[0]->rnti);
|
||||
LOG_D(PHY,"PDSCH dlsch0 UE: NBRB %d\n",dlsch0_harq->nb_rb);
|
||||
LOG_D(PHY,"PDSCH dlsch0 UE: rballoc %x\n",dlsch0_harq->rb_alloc_even[0]);
|
||||
LOG_D(PHY,"PDSCH dlsch0 UE: harq_pid %d\n",harq_pid);
|
||||
LOG_D(PHY,"PDSCH dlsch0 UE: g %d\n",dlsch[0]->g_pucch);
|
||||
LOG_D(PHY,"PDSCH dlsch0 UE: round %d\n",dlsch0_harq->round);
|
||||
LOG_D(PHY,"PDSCH dlsch0 UE: DCINdi %d\n",dlsch0_harq->DCINdi);
|
||||
LOG_D(PHY,"PDSCH dlsch0 UE: rvidx %d\n",dlsch0_harq->rvidx);
|
||||
LOG_D(PHY,"PDSCH dlsch0 UE: TBS %d\n",dlsch0_harq->TBS);
|
||||
LOG_D(PHY,"PDSCH dlsch0 UE: mcs %d\n",dlsch0_harq->mcs);
|
||||
LOG_D(PHY,"PDSCH dlsch0 UE: pwr_off %d\n",dlsch0_harq->dl_power_off);
|
||||
}
|
||||
#endif*/
|
||||
#endif
|
||||
|
||||
#if T_TRACER
|
||||
if( (dlsch[0]->rnti != si_rnti) && (dlsch[0]->rnti != ra_rnti) && (dlsch[0]->rnti != p_rnti))
|
||||
@@ -8061,7 +8060,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
|
||||
if (ulsch->bundling)
|
||||
ulsch->harq_processes[harq_pid]->O_ACK = (dai == 3)? 0 : 1;
|
||||
else
|
||||
ulsch->harq_processes[harq_pid]->O_ACK = (dai+1)&3;
|
||||
ulsch->harq_processes[harq_pid]->O_ACK = (dai >= 2)? 2 : (dai+1)&3; //(dai+1)&3;
|
||||
|
||||
// ulsch->harq_processes[harq_pid]->V_UL_DAI = dai+1;
|
||||
}
|
||||
@@ -8129,28 +8128,28 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
|
||||
|
||||
// ulsch->n_DMRS2 = ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->cshift;
|
||||
|
||||
#ifdef DEBUG_DCI
|
||||
#ifdef UE_DEBUG_TRACE
|
||||
|
||||
printf("Format 0 DCI : ulsch (ue): AbsSubframe %d.%d\n",proc->frame_rx%1024,subframe);
|
||||
printf("Format 0 DCI : ulsch (ue): NBRB %d\n",ulsch->harq_processes[harq_pid]->nb_rb);
|
||||
printf("Format 0 DCI :ulsch (ue): first_rb %d\n",ulsch->harq_processes[harq_pid]->first_rb);
|
||||
printf("Format 0 DCI :ulsch (ue): rballoc %d\n",rballoc);
|
||||
printf("Format 0 DCI :ulsch (ue): harq_pid %d\n",harq_pid);
|
||||
printf("Format 0 DCI :ulsch (ue): first_tx %d\n",ulsch->harq_processes[harq_pid]->first_tx);
|
||||
printf("Format 0 DCI :ulsch (ue): DCINdi %d\n",ulsch->harq_processes[harq_pid]->DCINdi);
|
||||
printf("Format 0 DCI :ulsch (ue): round %d\n",ulsch->harq_processes[harq_pid]->round);
|
||||
//printf("Format 0 DCI :ulsch (ue): TBS %d\n",ulsch->harq_processes[harq_pid]->TBS);
|
||||
printf("Format 0 DCI :ulsch (ue): mcs %d\n",ulsch->harq_processes[harq_pid]->mcs);
|
||||
//printf("Format 0 DCI :ulsch (ue): O %d\n",ulsch->O);
|
||||
//printf("Format 0 DCI :ulsch (ue): cqiReq %d\n",cqi_req);
|
||||
LOG_I(PHY,"Format 0 DCI : ulsch (ue): AbsSubframe %d.%d\n",proc->frame_rx%1024,subframe);
|
||||
LOG_D(PHY,"Format 0 DCI : ulsch (ue): NBRB %d\n",ulsch->harq_processes[harq_pid]->nb_rb);
|
||||
LOG_D(PHY,"Format 0 DCI :ulsch (ue): first_rb %d\n",ulsch->harq_processes[harq_pid]->first_rb);
|
||||
LOG_D(PHY,"Format 0 DCI :ulsch (ue): rballoc %d\n",rballoc);
|
||||
LOG_D(PHY,"Format 0 DCI :ulsch (ue): harq_pid %d\n",harq_pid);
|
||||
LOG_D(PHY,"Format 0 DCI :ulsch (ue): first_tx %d\n",ulsch->harq_processes[harq_pid]->first_tx);
|
||||
LOG_D(PHY,"Format 0 DCI :ulsch (ue): DCINdi %d\n",ulsch->harq_processes[harq_pid]->DCINdi);
|
||||
LOG_D(PHY,"Format 0 DCI :ulsch (ue): round %d\n",ulsch->harq_processes[harq_pid]->round);
|
||||
//LOG_I(PHY,"Format 0 DCI :ulsch (ue): TBS %d\n",ulsch->harq_processes[harq_pid]->TBS);
|
||||
LOG_D(PHY,"Format 0 DCI :ulsch (ue): mcs %d\n",ulsch->harq_processes[harq_pid]->mcs);
|
||||
//LOG_I(PHY,"Format 0 DCI :ulsch (ue): O %d\n",ulsch->O);
|
||||
//LOG_I(PHY,"Format 0 DCI :ulsch (ue): cqiReq %d\n",cqi_req);
|
||||
//if (frame_parms->frame_type == TDD)
|
||||
// printf("Format 0 DCI :ulsch (ue): O_ACK/DAI %d/%d\n",ulsch->harq_processes[harq_pid]->O_ACK,dai);
|
||||
// LOG_I(PHY,"Format 0 DCI :ulsch (ue): O_ACK/DAI %d/%d\n",ulsch->harq_processes[harq_pid]->O_ACK,dai);
|
||||
//else
|
||||
// printf("Format 0 DCI :ulsch (ue): O_ACK %d\n",ulsch->harq_processes[harq_pid]->O_ACK);
|
||||
// LOG_I(PHY,"Format 0 DCI :ulsch (ue): O_ACK %d\n",ulsch->harq_processes[harq_pid]->O_ACK);
|
||||
|
||||
printf("Format 0 DCI :ulsch (ue): Nsymb_pusch %d\n",ulsch->Nsymb_pusch);
|
||||
printf("Format 0 DCI :ulsch (ue): cshift %d\n",ulsch->harq_processes[harq_pid]->n_DMRS2);
|
||||
printf("Format 0 DCI :ulsch (ue): phich status %d\n",ulsch->harq_processes[harq_pid]->status);
|
||||
LOG_D(PHY,"Format 0 DCI :ulsch (ue): Nsymb_pusch %d\n",ulsch->Nsymb_pusch);
|
||||
LOG_D(PHY,"Format 0 DCI :ulsch (ue): cshift %d\n",ulsch->harq_processes[harq_pid]->n_DMRS2);
|
||||
LOG_D(PHY,"Format 0 DCI :ulsch (ue): phich status %d\n",ulsch->harq_processes[harq_pid]->status);
|
||||
#else
|
||||
UNUSED_VARIABLE(dai);
|
||||
#endif
|
||||
|
||||
@@ -167,10 +167,11 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
|
||||
uint8_t llr8_flag)
|
||||
{
|
||||
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
time_stats_t *dlsch_rate_unmatching_stats=&phy_vars_ue->dlsch_rate_unmatching_stats;
|
||||
time_stats_t *dlsch_turbo_decoding_stats=&phy_vars_ue->dlsch_turbo_decoding_stats;
|
||||
time_stats_t *dlsch_deinterleaving_stats=&phy_vars_ue->dlsch_deinterleaving_stats;
|
||||
#endif
|
||||
uint32_t A,E;
|
||||
uint32_t G;
|
||||
uint32_t ret,offset;
|
||||
@@ -372,7 +373,9 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
|
||||
printf("f1 %d, f2 %d, F %d\n",f1f2mat_old[2*iind],f1f2mat_old[1+(2*iind)],(r==0) ? harq_process->F : 0);
|
||||
#endif
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(dlsch_rate_unmatching_stats);
|
||||
#endif
|
||||
memset(&dummy_w[r][0],0,3*(6144+64)*sizeof(short));
|
||||
harq_process->RTC[r] = generate_dummy_w(4+(Kr_bytes*8),
|
||||
(uint8_t*) &dummy_w[r][0],
|
||||
@@ -408,12 +411,17 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
|
||||
harq_process->Nl,
|
||||
r,
|
||||
&E)==-1) {
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(dlsch_rate_unmatching_stats);
|
||||
#endif
|
||||
LOG_E(PHY,"dlsch_decoding.c: Problem in rate_matching\n");
|
||||
return(dlsch->max_turbo_iterations);
|
||||
} else
|
||||
{
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(dlsch_rate_unmatching_stats);
|
||||
|
||||
#endif
|
||||
}
|
||||
r_offset += E;
|
||||
|
||||
/*
|
||||
@@ -421,13 +429,16 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
|
||||
harq_process->d[r],
|
||||
harq_process->w);
|
||||
*/
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(dlsch_deinterleaving_stats);
|
||||
#endif
|
||||
sub_block_deinterleaving_turbo(4+Kr,
|
||||
&harq_process->d[r][96],
|
||||
|
||||
harq_process->w[r]);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(dlsch_deinterleaving_stats);
|
||||
|
||||
#endif
|
||||
#ifdef DEBUG_DLSCH_DECODING
|
||||
/*
|
||||
if (r==0) {
|
||||
@@ -472,8 +483,9 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
|
||||
AssertFatal (Kr >= 256, "turbo algo issue Kr=%d cb_cnt=%d C=%d nbRB=%d TBSInput=%d TBSHarq=%d TBSplus24=%d mcs=%d Qm=%d RIV=%d round=%d\n",
|
||||
Kr,r,harq_process->C,harq_process->nb_rb,A,harq_process->TBS,harq_process->B,harq_process->mcs,harq_process->Qm,harq_process->rvidx,harq_process->round);
|
||||
}
|
||||
|
||||
start_meas(dlsch_turbo_decoding_stats);
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(dlsch_turbo_decoding_stats);
|
||||
#endif
|
||||
LOG_D(PHY,"AbsSubframe %d.%d Start turbo segment %d/%d \n",frame%1024,subframe,r,harq_process->C-1);
|
||||
ret = tc
|
||||
(&harq_process->d[r][96],
|
||||
@@ -492,14 +504,17 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
|
||||
&phy_vars_ue->dlsch_tc_intl1_stats,
|
||||
&phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
|
||||
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(dlsch_turbo_decoding_stats);
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
if ((harq_process->C == 1) ||
|
||||
((r==harq_process->C-1) && (skipped_last==0))) { // last segment with odd number of segments
|
||||
|
||||
start_meas(dlsch_turbo_decoding_stats);
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(dlsch_turbo_decoding_stats);
|
||||
#endif
|
||||
ret = tc
|
||||
(&harq_process->d[r][96],
|
||||
harq_process->c[r],
|
||||
@@ -516,7 +531,9 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
|
||||
&phy_vars_ue->dlsch_tc_ext_stats,
|
||||
&phy_vars_ue->dlsch_tc_intl1_stats,
|
||||
&phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(dlsch_turbo_decoding_stats);
|
||||
#endif
|
||||
// printf("single decode, exit\n");
|
||||
// exit(-1);
|
||||
}
|
||||
@@ -533,7 +550,9 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
|
||||
#ifdef DEBUG_DLSCH_DECODING
|
||||
printf("single decoding segment %d (%p)\n",r-1,&harq_process->d[r-1][96]);
|
||||
#endif
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(dlsch_turbo_decoding_stats);
|
||||
#endif
|
||||
#ifdef DEBUG_DLSCH_DECODING
|
||||
printf("double decoding segments %d,%d (%p,%p)\n",r-1,r,&harq_process->d[r-1][96],&harq_process->d[r][96]);
|
||||
#endif
|
||||
@@ -574,10 +593,14 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
|
||||
&phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
|
||||
|
||||
exit(-1);*/
|
||||
stop_meas(dlsch_turbo_decoding_stats);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(dlsch_turbo_decoding_stats);
|
||||
#endif
|
||||
}
|
||||
else { // Kr_last != Kr
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(dlsch_turbo_decoding_stats);
|
||||
#endif
|
||||
ret = tc
|
||||
(&harq_process->d[r-1][96],
|
||||
harq_process->c[r-1],
|
||||
@@ -594,9 +617,12 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
|
||||
&phy_vars_ue->dlsch_tc_ext_stats,
|
||||
&phy_vars_ue->dlsch_tc_intl1_stats,
|
||||
&phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
|
||||
stop_meas(dlsch_turbo_decoding_stats);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(dlsch_turbo_decoding_stats);
|
||||
|
||||
start_meas(dlsch_turbo_decoding_stats);
|
||||
#endif
|
||||
|
||||
ret = tc
|
||||
(&harq_process->d[r][96],
|
||||
harq_process->c[r],
|
||||
@@ -613,6 +639,9 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
|
||||
&phy_vars_ue->dlsch_tc_ext_stats,
|
||||
&phy_vars_ue->dlsch_tc_intl1_stats,
|
||||
&phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
|
||||
stop_meas(dlsch_turbo_decoding_stats);
|
||||
|
||||
/*printf("Segmentation: C %d r %d, dlsch_rate_unmatching_stats %5.3f dlsch_deinterleaving_stats %5.3f dlsch_turbo_decoding_stats %5.3f \n",
|
||||
@@ -621,7 +650,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
|
||||
dlsch_rate_unmatching_stats->p_time/(cpuf*1000.0),
|
||||
dlsch_deinterleaving_stats->p_time/(cpuf*1000.0),
|
||||
dlsch_turbo_decoding_stats->p_time/(cpuf*1000.0));*/
|
||||
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -643,9 +672,10 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
|
||||
frame_rx_prev = frame_rx_prev%1024;
|
||||
|
||||
if (err_flag == 1) {
|
||||
//LOG_I(PHY,"[UE %d] DLSCH: Setting NAK for SFN/SF %d/%d (pid %d, status %d, round %d, TBS %d, mcs %d) Kr %d r %d harq_process->round %d\n",
|
||||
// phy_vars_ue->Mod_id, frame, subframe, harq_pid,harq_process->status, harq_process->round,harq_process->TBS,harq_process->mcs,Kr,r,harq_process->round);
|
||||
|
||||
#if UE_DEBUG_TRACE
|
||||
LOG_I(PHY,"[UE %d] DLSCH: Setting NAK for SFN/SF %d/%d (pid %d, status %d, round %d, TBS %d, mcs %d) Kr %d r %d harq_process->round %d\n",
|
||||
phy_vars_ue->Mod_id, frame, subframe, harq_pid,harq_process->status, harq_process->round,harq_process->TBS,harq_process->mcs,Kr,r,harq_process->round);
|
||||
#endif
|
||||
dlsch->harq_ack[subframe].ack = 0;
|
||||
dlsch->harq_ack[subframe].harq_id = harq_pid;
|
||||
dlsch->harq_ack[subframe].send_harq_status = 1;
|
||||
@@ -666,9 +696,10 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
|
||||
|
||||
return((1+dlsch->max_turbo_iterations));
|
||||
} else {
|
||||
|
||||
//LOG_I(PHY,"[UE %d] DLSCH: Setting ACK for subframe %d TBS %d harq_process->mcs %d harq_process->nb_rb %d\n",
|
||||
//phy_vars_ue->Mod_id,subframe,harq_process->TBS,harq_process->mcs,harq_process->nb_rb);
|
||||
#if UE_DEBUG_TRACE
|
||||
LOG_I(PHY,"[UE %d] DLSCH: Setting ACK for subframe %d TBS %d mcs %d nb_rb %d\n",
|
||||
phy_vars_ue->Mod_id,subframe,harq_process->TBS,harq_process->mcs,harq_process->nb_rb);
|
||||
#endif
|
||||
|
||||
harq_process->status = SCH_IDLE;
|
||||
harq_process->round = 0;
|
||||
|
||||
@@ -471,13 +471,13 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
||||
avg,
|
||||
symbol,
|
||||
nb_rb);
|
||||
#ifdef DEBUG_PHY
|
||||
LOG_I(PHY,"[DLSCH] AbsSubframe %d.%d log2_maxh = %d [log2_maxh0 %d log2_maxh1 %d] (%d,%d)\n",
|
||||
#ifdef UE_DEBUG_TRACE
|
||||
LOG_D(PHY,"[DLSCH] AbsSubframe %d.%d log2_maxh = %d [log2_maxh0 %d log2_maxh1 %d] (%d,%d)\n",
|
||||
frame%1024,subframe, pdsch_vars[eNB_id]->log2_maxh,
|
||||
pdsch_vars[eNB_id]->log2_maxh0,
|
||||
pdsch_vars[eNB_id]->log2_maxh1,
|
||||
avg[0],avgs);
|
||||
LOG_D(PHY,"[DLSCH] mimo_mode = %d\n", dlsch0_harq->mimo_mode);
|
||||
//LOG_D(PHY,"[DLSCH] mimo_mode = %d\n", dlsch0_harq->mimo_mode);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -87,7 +87,7 @@ int generate_drs_pusch(PHY_VARS_UE *ue,
|
||||
if (Msc_idx_ptr)
|
||||
Msc_RS_idx = Msc_idx_ptr - dftsizes;
|
||||
else {
|
||||
printf("generate_drs_pusch: index for Msc_RS=%d not found\n",Msc_RS);
|
||||
LOG_I(PHY,"generate_drs_pusch: index for Msc_RS=%d not found\n",Msc_RS);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
|
||||
@@ -468,13 +468,21 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
|
||||
if( (abs(ue->common_vars.freq_offset) > 150) && (ret == 0) )
|
||||
{
|
||||
ret=-1;
|
||||
LOG_E(HW,"Ignore MIB with high freq offset [%d Hz] estimation \n",ue->common_vars.freq_offset);
|
||||
#if DISABLE_LOG_X
|
||||
printf("Ignore MIB with high freq offset [%d Hz] estimation \n",ue->common_vars.freq_offset);
|
||||
#else
|
||||
LOG_E(HW, "Ignore MIB with high freq offset [%d Hz] estimation \n",ue->common_vars.freq_offset);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (ret==0) { // PBCH found so indicate sync to higher layers and configure frame parameters
|
||||
|
||||
//#ifdef DEBUG_INITIAL_SYNCH
|
||||
LOG_I(PHY,"[UE%d] In synch, rx_offset %d samples\n",ue->Mod_id, ue->rx_offset);
|
||||
#if DISABLE_LOG_X
|
||||
printf("[UE%d] In synch, rx_offset %d samples\n",ue->Mod_id, ue->rx_offset);
|
||||
#else
|
||||
LOG_I(PHY, "[UE%d] In synch, rx_offset %d samples\n",ue->Mod_id, ue->rx_offset);
|
||||
#endif
|
||||
//#endif
|
||||
|
||||
if (ue->UE_scan_carrier == 0) {
|
||||
@@ -505,7 +513,8 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
|
||||
|
||||
}
|
||||
|
||||
LOG_I(PHY,"[UE %d] Frame %d RRC Measurements => rssi %3.1f dBm (dig %3.1f dB, gain %d), N0 %d dBm, rsrp %3.1f dBm/RE, rsrq %3.1f dB\n",ue->Mod_id,
|
||||
#if DISABLE_LOG_X
|
||||
printf("[UE %d] Frame %d RRC Measurements => rssi %3.1f dBm (dig %3.1f dB, gain %d), N0 %d dBm, rsrp %3.1f dBm/RE, rsrq %3.1f dB\n",ue->Mod_id,
|
||||
ue->proc.proc_rxtx[0].frame_rx,
|
||||
10*log10(ue->measurements.rssi)-ue->rx_total_gain_dB,
|
||||
10*log10(ue->measurements.rssi),
|
||||
@@ -515,7 +524,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
|
||||
(10*log10(ue->measurements.rsrq[0])));
|
||||
|
||||
|
||||
LOG_I(PHY,"[UE %d] Frame %d MIB Information => %s, %s, NidCell %d, N_RB_DL %d, PHICH DURATION %d, PHICH RESOURCE %s, TX_ANT %d\n",
|
||||
printf("[UE %d] Frame %d MIB Information => %s, %s, NidCell %d, N_RB_DL %d, PHICH DURATION %d, PHICH RESOURCE %s, TX_ANT %d\n",
|
||||
ue->Mod_id,
|
||||
ue->proc.proc_rxtx[0].frame_rx,
|
||||
duplex_string[ue->frame_parms.frame_type],
|
||||
@@ -525,13 +534,42 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
|
||||
ue->frame_parms.phich_config_common.phich_duration,
|
||||
phich_string[ue->frame_parms.phich_config_common.phich_resource],
|
||||
ue->frame_parms.nb_antenna_ports_eNB);
|
||||
#else
|
||||
LOG_I(PHY, "[UE %d] Frame %d RRC Measurements => rssi %3.1f dBm (dig %3.1f dB, gain %d), N0 %d dBm, rsrp %3.1f dBm/RE, rsrq %3.1f dB\n",ue->Mod_id,
|
||||
ue->proc.proc_rxtx[0].frame_rx,
|
||||
10*log10(ue->measurements.rssi)-ue->rx_total_gain_dB,
|
||||
10*log10(ue->measurements.rssi),
|
||||
ue->rx_total_gain_dB,
|
||||
ue->measurements.n0_power_tot_dBm,
|
||||
10*log10(ue->measurements.rsrp[0])-ue->rx_total_gain_dB,
|
||||
(10*log10(ue->measurements.rsrq[0])));
|
||||
|
||||
LOG_I(PHY, "[UE %d] Frame %d MIB Information => %s, %s, NidCell %d, N_RB_DL %d, PHICH DURATION %d, PHICH RESOURCE %s, TX_ANT %d\n",
|
||||
ue->Mod_id,
|
||||
ue->proc.proc_rxtx[0].frame_rx,
|
||||
duplex_string[ue->frame_parms.frame_type],
|
||||
prefix_string[ue->frame_parms.Ncp],
|
||||
ue->frame_parms.Nid_cell,
|
||||
ue->frame_parms.N_RB_DL,
|
||||
ue->frame_parms.phich_config_common.phich_duration,
|
||||
phich_string[ue->frame_parms.phich_config_common.phich_resource],
|
||||
ue->frame_parms.nb_antenna_ports_eNB);
|
||||
#endif
|
||||
|
||||
#if defined(OAI_USRP) || defined(EXMIMO) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
LOG_I(PHY,"[UE %d] Frame %d Measured Carrier Frequency %.0f Hz (offset %d Hz)\n",
|
||||
# if DISABLE_LOG_X
|
||||
printf("[UE %d] Frame %d Measured Carrier Frequency %.0f Hz (offset %d Hz)\n",
|
||||
ue->Mod_id,
|
||||
ue->proc.proc_rxtx[0].frame_rx,
|
||||
openair0_cfg[0].rx_freq[0]-ue->common_vars.freq_offset,
|
||||
ue->common_vars.freq_offset);
|
||||
# else
|
||||
LOG_I(PHY, "[UE %d] Frame %d Measured Carrier Frequency %.0f Hz (offset %d Hz)\n",
|
||||
ue->Mod_id,
|
||||
ue->proc.proc_rxtx[0].frame_rx,
|
||||
openair0_cfg[0].rx_freq[0]-ue->common_vars.freq_offset,
|
||||
ue->common_vars.freq_offset);
|
||||
# endif
|
||||
#endif
|
||||
} else {
|
||||
#ifdef DEBUG_INITIAL_SYNC
|
||||
|
||||
@@ -1098,6 +1098,8 @@ void rx_phich(PHY_VARS_UE *ue,
|
||||
uint8_t NSF_PHICH = 4;
|
||||
uint8_t pusch_subframe;
|
||||
|
||||
int8_t delta_PUSCH_acc[4] = {-1,0,1,3};
|
||||
|
||||
// check if we're expecting a PHICH in this subframe
|
||||
LOG_D(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d PHICH RX\n",ue->Mod_id,harq_pid,proc->frame_rx,subframe);
|
||||
|
||||
@@ -1379,7 +1381,7 @@ void rx_phich(PHY_VARS_UE *ue,
|
||||
|
||||
if (HI16>0) { //NACK
|
||||
if (ue->ulsch_Msg3_active[eNB_id] == 1) {
|
||||
LOG_D(PHY,"[UE %d][PUSCH %d][RAPROC] Frame %d subframe %d Msg3 PHICH, received NAK (%d) nseq %d, ngroup %d\n",
|
||||
LOG_I(PHY,"[UE %d][PUSCH %d][RAPROC] Frame %d subframe %d Msg3 PHICH, received NAK (%d) nseq %d, ngroup %d\n",
|
||||
ue->Mod_id,harq_pid,
|
||||
proc->frame_rx,
|
||||
subframe,
|
||||
@@ -1387,6 +1389,14 @@ void rx_phich(PHY_VARS_UE *ue,
|
||||
nseq_PHICH,
|
||||
ngroup_PHICH);
|
||||
|
||||
ulsch->f_pusch += delta_PUSCH_acc[ulsch->harq_processes[harq_pid]->TPC];
|
||||
|
||||
LOG_I(PHY,"[PUSCH %d] AbsSubframe %d.%d: f_pusch (ACC) %d, adjusting by %d (TPC %d)\n",
|
||||
harq_pid,proc->frame_rx,subframe,ulsch->f_pusch,
|
||||
delta_PUSCH_acc[ulsch->harq_processes[harq_pid]->TPC],
|
||||
ulsch->harq_processes[harq_pid]->TPC);
|
||||
|
||||
|
||||
ulsch->harq_processes[harq_pid]->subframe_scheduling_flag = 1;
|
||||
// ulsch->harq_processes[harq_pid]->Ndi = 0;
|
||||
ulsch->harq_processes[harq_pid]->round++;
|
||||
@@ -1399,8 +1409,8 @@ void rx_phich(PHY_VARS_UE *ue,
|
||||
ue->ulsch_Msg3_active[eNB_id] = 0;
|
||||
}
|
||||
} else {
|
||||
//#ifdef DEBUG_PHICH
|
||||
LOG_D(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d PHICH, received NAK (%d) nseq %d, ngroup %d round %d (Mlimit %d)\n",
|
||||
#ifdef UE_DEBUG_TRACE
|
||||
LOG_I(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d PHICH, received NAK (%d) nseq %d, ngroup %d round %d (Mlimit %d)\n",
|
||||
ue->Mod_id,harq_pid,
|
||||
proc->frame_rx%1024,
|
||||
subframe,
|
||||
@@ -1409,7 +1419,7 @@ void rx_phich(PHY_VARS_UE *ue,
|
||||
ngroup_PHICH,
|
||||
ulsch->harq_processes[harq_pid]->round,
|
||||
ulsch->Mlimit);
|
||||
//#endif
|
||||
#endif
|
||||
|
||||
// ulsch->harq_processes[harq_pid]->Ndi = 0;
|
||||
ulsch->harq_processes[harq_pid]->round++;
|
||||
@@ -1448,20 +1458,20 @@ void rx_phich(PHY_VARS_UE *ue,
|
||||
|
||||
} else { //ACK
|
||||
if (ue->ulsch_Msg3_active[eNB_id] == 1) {
|
||||
LOG_D(PHY,"[UE %d][PUSCH %d][RAPROC] Frame %d subframe %d Msg3 PHICH, received ACK (%d) nseq %d, ngroup %d\n\n",
|
||||
LOG_I(PHY,"[UE %d][PUSCH %d][RAPROC] Frame %d subframe %d Msg3 PHICH, received ACK (%d) nseq %d, ngroup %d\n\n",
|
||||
ue->Mod_id,harq_pid,
|
||||
proc->frame_rx,
|
||||
subframe,
|
||||
HI16,
|
||||
nseq_PHICH,ngroup_PHICH);
|
||||
} else {
|
||||
//#ifdef PHICH_DEBUG
|
||||
LOG_D(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d PHICH, received ACK (%d) nseq %d, ngroup %d\n\n",
|
||||
#ifdef UE_DEBUG_TRACE
|
||||
LOG_I(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d PHICH, received ACK (%d) nseq %d, ngroup %d\n\n",
|
||||
ue->Mod_id,harq_pid,
|
||||
proc->frame_rx%1024,
|
||||
subframe, HI16,
|
||||
nseq_PHICH,ngroup_PHICH);
|
||||
//#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
// LOG_I(PHY,"[HARQ-UL harqId: %d] subframe_scheduling_flag = %d \n",harq_pid, ulsch->harq_processes[harq_pid]->subframe_scheduling_flag);
|
||||
|
||||
@@ -129,11 +129,15 @@ int slot_fep(PHY_VARS_UE *ue,
|
||||
dft((int16_t *)tmp_dft_in,
|
||||
(int16_t *)&common_vars->common_vars_rx_data_per_thread[(Ns>>1)&0x1].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
||||
} else { // use dft input from RX buffer directly
|
||||
start_meas(&ue->rx_dft_stats);
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->rx_dft_stats);
|
||||
#endif
|
||||
|
||||
dft((int16_t *)&common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
|
||||
(int16_t *)&common_vars->common_vars_rx_data_per_thread[(Ns>>1)&0x1].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->rx_dft_stats);
|
||||
#endif
|
||||
|
||||
}
|
||||
} else {
|
||||
@@ -150,8 +154,9 @@ int slot_fep(PHY_VARS_UE *ue,
|
||||
memcpy((void *)&common_vars->rxdata[aa][frame_length_samples],
|
||||
(void *)&common_vars->rxdata[aa][0],
|
||||
frame_parms->ofdm_symbol_size*sizeof(int));
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->rx_dft_stats);
|
||||
#endif
|
||||
|
||||
if ((rx_offset&7)!=0) { // if input to dft is not 128-bit aligned, issue for size 6 and 15 PRBs
|
||||
memcpy((void *)tmp_dft_in,
|
||||
@@ -164,8 +169,9 @@ int slot_fep(PHY_VARS_UE *ue,
|
||||
dft((int16_t *)&common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
|
||||
(int16_t *)&common_vars->common_vars_rx_data_per_thread[(Ns>>1)&0x1].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
||||
}
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->rx_dft_stats);
|
||||
#endif
|
||||
|
||||
|
||||
}
|
||||
@@ -183,13 +189,17 @@ int slot_fep(PHY_VARS_UE *ue,
|
||||
#ifdef DEBUG_FEP
|
||||
printf("Channel estimation eNB %d, aatx %d, slot %d, symbol %d\n",eNB_id,aa,Ns,l);
|
||||
#endif
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->dlsch_channel_estimation_stats);
|
||||
#endif
|
||||
lte_dl_channel_estimation(ue,eNB_id,0,
|
||||
Ns,
|
||||
aa,
|
||||
l,
|
||||
symbol);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->dlsch_channel_estimation_stats);
|
||||
#endif
|
||||
|
||||
for (i=0; i<ue->measurements.n_adj_cells; i++) {
|
||||
lte_dl_channel_estimation(ue,eNB_id,i+1,
|
||||
@@ -208,13 +218,17 @@ int slot_fep(PHY_VARS_UE *ue,
|
||||
#endif
|
||||
|
||||
if (l==(4-frame_parms->Ncp)) {
|
||||
start_meas(&ue->dlsch_freq_offset_estimation_stats);
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->dlsch_freq_offset_estimation_stats);
|
||||
#endif
|
||||
lte_est_freq_offset(common_vars->common_vars_rx_data_per_thread[(Ns>>1)&0x1].dl_ch_estimates[0],
|
||||
frame_parms,
|
||||
l,
|
||||
&common_vars->freq_offset,
|
||||
reset_freq_est);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->dlsch_freq_offset_estimation_stats);
|
||||
#endif
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,13 +111,17 @@ int slot_fep_mbsfn(PHY_VARS_UE *ue,
|
||||
for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
|
||||
memset(&common_vars->common_vars_rx_data_per_thread[subframe&0x1].rxdataF[aa][frame_parms->ofdm_symbol_size*l],0,frame_parms->ofdm_symbol_size*sizeof(int));
|
||||
if (l==0) {
|
||||
start_meas(&ue->rx_dft_stats);
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->rx_dft_stats);
|
||||
#endif
|
||||
dft((int16_t *)&common_vars->rxdata[aa][(sample_offset +
|
||||
nb_prefix_samples0 +
|
||||
subframe_offset -
|
||||
SOFFSET) % frame_length_samples],
|
||||
(int16_t *)&common_vars->common_vars_rx_data_per_thread[subframe&0x1].rxdataF[aa][frame_parms->ofdm_symbol_size*l],1);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->rx_dft_stats);
|
||||
#endif
|
||||
} else {
|
||||
if ((sample_offset +
|
||||
(frame_parms->ofdm_symbol_size+nb_prefix_samples0+nb_prefix_samples) +
|
||||
@@ -128,14 +132,18 @@ int slot_fep_mbsfn(PHY_VARS_UE *ue,
|
||||
(short *)&common_vars->rxdata[aa][0],
|
||||
frame_parms->ofdm_symbol_size*sizeof(int));
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->rx_dft_stats);
|
||||
#endif
|
||||
dft((int16_t *)&common_vars->rxdata[aa][(sample_offset +
|
||||
(frame_parms->ofdm_symbol_size+nb_prefix_samples0+nb_prefix_samples) +
|
||||
(frame_parms->ofdm_symbol_size+nb_prefix_samples)*(l-1) +
|
||||
subframe_offset-
|
||||
SOFFSET) % frame_length_samples],
|
||||
(int16_t *)&common_vars->common_vars_rx_data_per_thread[subframe&0x1].rxdataF[aa][frame_parms->ofdm_symbol_size*l],1);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->rx_dft_stats);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -576,16 +576,16 @@ uint8_t get_reset_ack(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
|
||||
case 4:
|
||||
if (subframe_tx == 2) { // ACK subframes 4, 5 and 0
|
||||
subframe_dl0 = 4;
|
||||
subframe_dl1 = 5;
|
||||
subframe_dl2 = 0;
|
||||
subframe_dl0 = 0;
|
||||
subframe_dl1 = 4;
|
||||
subframe_dl2 = 5;
|
||||
subframe_ul = 2;
|
||||
//printf("subframe_tx 2, TDD config 3: harq_ack[5] = %d (%d),harq_ack[6] = %d (%d)\n",harq_ack[5].ack,harq_ack[5].send_harq_status,harq_ack[6].ack,harq_ack[6].send_harq_status);
|
||||
} else if (subframe_tx == 3) { // ACK subframes 6, 7 8 and 9
|
||||
subframe_dl0 = 6;
|
||||
subframe_dl1 = 7;
|
||||
subframe_dl2 = 8;
|
||||
subframe_dl3 = 9;
|
||||
subframe_dl0 = 7;
|
||||
subframe_dl1 = 8;
|
||||
subframe_dl2 = 9;
|
||||
subframe_dl3 = 6;
|
||||
subframe_ul = 3;
|
||||
//printf("Subframe 3, TDD config 3: harq_ack[7] = %d,harq_ack[8] = %d\n",harq_ack[7].ack,harq_ack[8].ack);
|
||||
//printf("status %d : o_ACK (%d,%d)\n", status,o_ACK[0],o_ACK[1]);
|
||||
|
||||
@@ -633,7 +633,8 @@ PUCCH_FMT_t get_pucch_format(lte_frame_type_t frame_type,
|
||||
uint8_t SR_payload,
|
||||
uint8_t nb_cw,
|
||||
uint8_t cqi_status,
|
||||
uint8_t ri_status)
|
||||
uint8_t ri_status,
|
||||
uint8_t bundling_flag)
|
||||
{
|
||||
if((cqi_status == 0) && (ri_status==0))
|
||||
{
|
||||
@@ -641,10 +642,14 @@ PUCCH_FMT_t get_pucch_format(lte_frame_type_t frame_type,
|
||||
// 1- SR only ==> PUCCH format 1
|
||||
// 2- 1bit Ack/Nack with/without SR ==> PUCCH format 1a
|
||||
// 3- 2bits Ack/Nack with/without SR ==> PUCCH format 1b
|
||||
if(nb_cw == 1)
|
||||
if((nb_cw == 1)&&(bundling_flag==bundling))
|
||||
{
|
||||
return pucch_format1a;
|
||||
}
|
||||
if((nb_cw == 1)&&(bundling_flag==multiplexing))
|
||||
{
|
||||
return pucch_format1b;
|
||||
}
|
||||
if(nb_cw == 2)
|
||||
{
|
||||
return pucch_format1b;
|
||||
@@ -727,10 +732,10 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
|
||||
if (bundling_flag==bundling) {
|
||||
LOG_I(PHY,"[UE%d] Frame %d subframe %d : get_n1_pucch, bundling, SR %d/%d\n",ue->Mod_id,proc->frame_tx,subframe,SR,
|
||||
LOG_D(PHY,"[UE%d] Frame %d subframe %d : get_n1_pucch, bundling, SR %d/%d\n",ue->Mod_id,proc->frame_tx,subframe,SR,
|
||||
ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
|
||||
} else {
|
||||
LOG_I(PHY,"[UE%d] Frame %d subframe %d : get_n1_pucch, multiplexing, SR %d/%d\n",ue->Mod_id,proc->frame_tx,subframe,SR,
|
||||
LOG_D(PHY,"[UE%d] Frame %d subframe %d : get_n1_pucch, multiplexing, SR %d/%d\n",ue->Mod_id,proc->frame_tx,subframe,SR,
|
||||
ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
|
||||
}
|
||||
|
||||
@@ -909,14 +914,13 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
|
||||
//last_dl = (subframe-2)<<1;
|
||||
if (subframe == 2) {
|
||||
// i=0
|
||||
//nCCE0 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[2+subframe];
|
||||
nCCE0 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[(8+subframe)%10];
|
||||
n1_pucch0 = 2*get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0+ frame_parms->pucch_config_common.n1PUCCH_AN;
|
||||
// i=1
|
||||
nCCE1 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[2+subframe];
|
||||
nCCE1 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[3+subframe];
|
||||
n1_pucch1 = get_Np(frame_parms->N_RB_DL,nCCE1,0) + get_Np(frame_parms->N_RB_DL,nCCE1,1) + nCCE1 + frame_parms->pucch_config_common.n1PUCCH_AN;
|
||||
// i=2
|
||||
nCCE2 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[(8+subframe)%10];
|
||||
nCCE2 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[(2+subframe)%10];
|
||||
n1_pucch2 = 2*get_Np(frame_parms->N_RB_DL,nCCE2,1) + nCCE2+ frame_parms->pucch_config_common.n1PUCCH_AN;
|
||||
// i=3
|
||||
//nCCE3 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[(9+subframe)%10];
|
||||
@@ -926,11 +930,11 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
|
||||
if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(8+subframe)%10].send_harq_status>0) // n-6 // subframe 6 is to be ACK/NAKed
|
||||
harq_ack0 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(8+subframe)%10].ack;
|
||||
|
||||
if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[2+subframe].send_harq_status>0) // n-6 // subframe 5 is to be ACK/NAKed
|
||||
harq_ack1 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[2+subframe].ack;
|
||||
if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[3+subframe].send_harq_status>0) // n-6 // subframe 5 is to be ACK/NAKed
|
||||
harq_ack1 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[3+subframe].ack;
|
||||
|
||||
if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[3+subframe].send_harq_status>0) // n-6 // subframe 6 is to be ACK/NAKed
|
||||
harq_ack2 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[3+subframe].ack;
|
||||
if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(2+subframe)%10].send_harq_status>0) // n-6 // subframe 6 is to be ACK/NAKed
|
||||
harq_ack2 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(2+subframe)%10].ack;
|
||||
|
||||
//if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(9+subframe)%10].send_harq_status>0) // n-6 // subframe 5 is to be ACK/NAKed
|
||||
//harq_ack3 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(9+subframe)%10].ack;
|
||||
@@ -976,28 +980,38 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
|
||||
// nCCE3, n1_pucch3, harq_ack3, bundling_flag);
|
||||
|
||||
if ((bundling_flag==bundling)&&(SR == 0)) { // This is for bundling without SR,
|
||||
b[0] = 1;
|
||||
ack_counter = 0;
|
||||
|
||||
if ((harq_ack3!=2) ) {
|
||||
b[0] = b[0]&harq_ack3;
|
||||
n1_pucch_inter = n1_pucch3;
|
||||
ack_counter ++;
|
||||
}
|
||||
if ((harq_ack0!=2) ) {
|
||||
b[0] = harq_ack0;
|
||||
b[0] = b[0]&harq_ack0;
|
||||
n1_pucch_inter = n1_pucch0;
|
||||
ack_counter ++;
|
||||
}
|
||||
if ((harq_ack1!=2) ) {
|
||||
b[0] = b[0]&harq_ack1;
|
||||
n1_pucch_inter = n1_pucch1;
|
||||
ack_counter ++;
|
||||
}
|
||||
if ((harq_ack2!=2) ) {
|
||||
b[0] = b[0]&harq_ack2;
|
||||
n1_pucch_inter = n1_pucch2;
|
||||
}
|
||||
if ((harq_ack3!=2) ) {
|
||||
b[0] = b[0]&harq_ack3;
|
||||
n1_pucch_inter = n1_pucch3;
|
||||
ack_counter ++;
|
||||
}
|
||||
|
||||
if (subframe == 3) {
|
||||
if (ack_counter == 0)
|
||||
b[0] = 0;
|
||||
|
||||
/*if (subframe == 3) {
|
||||
n1_pucch_inter = n1_pucch2;
|
||||
} else if (subframe == 2) {
|
||||
n1_pucch_inter = n1_pucch2;
|
||||
}
|
||||
n1_pucch_inter = n1_pucch1;
|
||||
}*/
|
||||
|
||||
//LOG_I(PHY,"SFN/SF %d/%d calculating n1_pucch n1_pucch_inter=%d b[0]=%d b[1]=%d \n",
|
||||
// proc->frame_tx%1024,
|
||||
@@ -1008,37 +1022,39 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
|
||||
|
||||
} else if ((bundling_flag==multiplexing)&&(SR==0)) { // Table 10.1
|
||||
|
||||
if (subframe == 3) {
|
||||
LOG_I(PHY, "sbuframe=%d \n",subframe);
|
||||
if ((harq_ack0 == 1) && (harq_ack1 == 1) && (harq_ack2 == 1) && (harq_ack3 == 1)) {
|
||||
b[1] = 1;
|
||||
b[0] = 1;
|
||||
b[1] = 1;
|
||||
return(n1_pucch1);
|
||||
} else if ((harq_ack0 == 1) && (harq_ack1 == 1) && (harq_ack2 == 1) && ((harq_ack3 == 2) || (harq_ack3 == 0))) {
|
||||
b[0] = 1;
|
||||
b[1] = 0;
|
||||
return(n1_pucch1);
|
||||
} else if (((harq_ack0 == 0) || (harq_ack0 == 2)) && ((harq_ack1 == 2) || (harq_ack1 == 0)) && (harq_ack2 == 0) && (harq_ack3 == 2)) {
|
||||
b[1] = 1;
|
||||
b[0] = 1;
|
||||
b[1] = 1;
|
||||
return(n1_pucch2);
|
||||
} else if ((harq_ack0 == 1) && (harq_ack1 == 1) && ((harq_ack2 == 2) || (harq_ack2 == 0)) && (harq_ack3 == 1)) {
|
||||
b[1] = 1;
|
||||
b[0] = 0;
|
||||
b[0] = 1;
|
||||
b[1] = 0;
|
||||
return(n1_pucch1);
|
||||
} else if ((harq_ack0 == 0) && (harq_ack1 == 2) && (harq_ack2 == 2) && (harq_ack3 == 2)) {
|
||||
b[1] = 1;
|
||||
b[0] = 0;
|
||||
b[0] = 1;
|
||||
b[1] = 0;
|
||||
return(n1_pucch0);
|
||||
} else if ((harq_ack0 == 1) && (harq_ack1 == 1) && ((harq_ack2 == 2) || (harq_ack2 == 0)) && ((harq_ack3 == 2) || (harq_ack3 == 0))) {
|
||||
b[1] = 1;
|
||||
b[0] = 0;
|
||||
b[0] = 1;
|
||||
b[1] = 0;
|
||||
return(n1_pucch1);
|
||||
} else if ((harq_ack0 == 1) && ((harq_ack1 == 2) || (harq_ack1 == 0)) && (harq_ack2 == 1) && (harq_ack3 == 1)) {
|
||||
b[0] = 0;
|
||||
b[1] = 1;
|
||||
return(n1_pucch3);
|
||||
} else if (((harq_ack0 == 0) || (harq_ack0 == 2)) && ((harq_ack1 == 2) || (harq_ack1 == 0)) && ((harq_ack2 == 2) || (harq_ack2 == 0)) && (harq_ack3 == 0)) {
|
||||
b[1] = 1;
|
||||
b[0] = 1;
|
||||
b[1] = 1;
|
||||
return(n1_pucch3);
|
||||
} else if ((harq_ack0 == 1) && ((harq_ack1 == 2) || (harq_ack1 == 0)) && (harq_ack2 == 1) && ((harq_ack3 == 2) || (harq_ack3 == 0))) {
|
||||
b[0] = 0;
|
||||
@@ -1085,9 +1101,53 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
|
||||
b[1] = 0;
|
||||
return(n1_pucch3);
|
||||
}
|
||||
} else if (subframe == 2) {
|
||||
if ((harq_ack0 == 1) && (harq_ack1 == 1) && (harq_ack2 == 1)) {
|
||||
b[0] = 1;
|
||||
b[1] = 1;
|
||||
return(n1_pucch2);
|
||||
} else if ((harq_ack0 == 1) && (harq_ack1 == 1) && ((harq_ack2 == 2) || (harq_ack2 == 0))) {
|
||||
b[0] = 1;
|
||||
b[1] = 1;
|
||||
return(n1_pucch1);
|
||||
} else if ((harq_ack0 == 1) && ((harq_ack1 == 2) || (harq_ack1 == 0)) && (harq_ack2 == 1)) {
|
||||
b[0] = 1;
|
||||
b[1] = 1;
|
||||
return(n1_pucch0);
|
||||
} else if ((harq_ack0 == 1) && ((harq_ack1 == 2) || (harq_ack1 == 0)) && ((harq_ack2 == 2) || (harq_ack2 == 0))) {
|
||||
b[0] = 0;
|
||||
b[1] = 1;
|
||||
return(n1_pucch0);
|
||||
} else if (((harq_ack0 == 2) || (harq_ack0 == 0)) && (harq_ack1 == 1) && (harq_ack2 == 1)) {
|
||||
b[0] = 1;
|
||||
b[1] = 0;
|
||||
return(n1_pucch2);
|
||||
} else if (((harq_ack0 == 2) || (harq_ack0 == 0)) && (harq_ack1 == 1) && ((harq_ack2 == 2) || (harq_ack2 == 0))) {
|
||||
b[1] = 0;
|
||||
b[0] = 0;
|
||||
return(n1_pucch1);
|
||||
} else if (((harq_ack0 == 2) || (harq_ack0 == 0)) && ((harq_ack1 == 2) || (harq_ack1 == 0)) && (harq_ack2 == 1)) {
|
||||
b[0] = 0;
|
||||
b[1] = 0;
|
||||
return(n1_pucch2);
|
||||
} else if ((harq_ack0 == 2) && (harq_ack1 == 2) && (harq_ack2 == 0)) {
|
||||
b[0] = 0;
|
||||
b[1] = 1;
|
||||
return(n1_pucch2);
|
||||
} else if ((harq_ack0 == 2) && (harq_ack1 == 0) && ((harq_ack2 == 2) || (harq_ack2 == 0))) {
|
||||
b[0] = 1;
|
||||
b[1] = 0;
|
||||
return(n1_pucch1);
|
||||
} else if ((harq_ack0 == 0) && ((harq_ack1 == 2) || (harq_ack1 == 0)) && ((harq_ack2 == 2) || (harq_ack2 == 0))) {
|
||||
b[0] = 1;
|
||||
b[1] = 0;
|
||||
return(n1_pucch0);
|
||||
}
|
||||
|
||||
}
|
||||
} else if (SR==1) { // SR and 0,1,or 2 ACKS, (first 3 entries in Table 7.3-1 of 36.213)
|
||||
// this should be number of ACKs (including
|
||||
ack_counter = 0;
|
||||
if (harq_ack0==1)
|
||||
ack_counter ++;
|
||||
if (harq_ack1==1)
|
||||
@@ -1186,8 +1246,9 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
|
||||
#endif
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_COMMON,VCD_FUNCTION_IN);
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->ofdm_mod_stats);
|
||||
#endif
|
||||
nsymb = (frame_parms->Ncp == 0) ? 14 : 12;
|
||||
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)//this is the EXPRESS MIMO case
|
||||
@@ -1322,7 +1383,9 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
|
||||
|
||||
} //nb_antennas_tx
|
||||
|
||||
stop_meas(&ue->ofdm_mod_stats);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->ofdm_mod_stats);
|
||||
#endif
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_COMMON,VCD_FUNCTION_OUT);
|
||||
|
||||
@@ -1510,12 +1573,14 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
|
||||
} else {
|
||||
|
||||
if (harq_pid==255) {
|
||||
LOG_E(PHY,"[UE%d] Frame %d subframe %d ulsch_decoding.c: FATAL ERROR: illegal harq_pid, returning\n",
|
||||
Mod_id,frame_tx, subframe_tx);
|
||||
mac_xface->macphy_exit("Error in ulsch_decoding");
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
|
||||
stop_meas(&ue->phy_proc_tx);
|
||||
return;
|
||||
LOG_E(PHY,"[UE%d] Frame %d subframe %d ulsch_decoding.c: FATAL ERROR: illegal harq_pid, returning\n",
|
||||
Mod_id,frame_tx, subframe_tx);
|
||||
mac_xface->macphy_exit("Error in ulsch_decoding");
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->phy_proc_tx);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
Msg3_flag=0;
|
||||
@@ -1635,17 +1700,18 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
|
||||
T_INT(ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->current_harq_pid));
|
||||
}
|
||||
#endif
|
||||
|
||||
LOG_D(PHY,"[UE %d][PDSCH %x] AbsSubFrame %d.%d Generating ACK (%d,%d) for %d bits on PUSCH\n",
|
||||
#ifdef UE_DEBUG_TRACE
|
||||
LOG_I(PHY,"[UE %d][PDSCH %x] AbsSubFrame %d.%d Generating ACK (%d,%d) for %d bits on PUSCH\n",
|
||||
Mod_id,
|
||||
ue->ulsch[eNB_id]->rnti,
|
||||
frame_tx%1024,subframe_tx,
|
||||
ue->ulsch[eNB_id]->o_ACK[0],ue->ulsch[eNB_id]->o_ACK[1],
|
||||
ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
LOG_D(PHY,
|
||||
#ifdef UE_DEBUG_TRACE
|
||||
LOG_I(PHY,
|
||||
"[UE %d][PUSCH %d] AbsSubframe %d.%d Generating PUSCH : first_rb %d, nb_rb %d, round %d, mcs %d, rv %d, "
|
||||
"cyclic_shift %d (cyclic_shift_common %d,n_DMRS2 %d,n_PRS %d), ACK (%d,%d), O_ACK %d, ack_status_cw0 %d ack_status_cw1 %d bundling %d, Nbundled %d, CQI %d, RI %d\n",
|
||||
Mod_id,harq_pid,frame_tx%1024,subframe_tx,
|
||||
@@ -1674,37 +1740,40 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
|
||||
|
||||
if (Msg3_flag == 1) {
|
||||
LOG_I(PHY,"[UE %d][RAPROC] Frame %d, Subframe %d Generating (RRCConnectionRequest) Msg3 (nb_rb %d, first_rb %d, round %d, rvidx %d) Msg3: %x.%x.%x|%x.%x.%x.%x.%x.%x\n",Mod_id,frame_tx,
|
||||
subframe_tx,
|
||||
ue->ulsch[eNB_id]->harq_processes[harq_pid]->nb_rb,
|
||||
ue->ulsch[eNB_id]->harq_processes[harq_pid]->first_rb,
|
||||
ue->ulsch[eNB_id]->harq_processes[harq_pid]->round,
|
||||
ue->ulsch[eNB_id]->harq_processes[harq_pid]->rvidx,
|
||||
ue->prach_resources[eNB_id]->Msg3[0],
|
||||
ue->prach_resources[eNB_id]->Msg3[1],
|
||||
ue->prach_resources[eNB_id]->Msg3[2],
|
||||
ue->prach_resources[eNB_id]->Msg3[3],
|
||||
ue->prach_resources[eNB_id]->Msg3[4],
|
||||
ue->prach_resources[eNB_id]->Msg3[5],
|
||||
ue->prach_resources[eNB_id]->Msg3[6],
|
||||
ue->prach_resources[eNB_id]->Msg3[7],
|
||||
ue->prach_resources[eNB_id]->Msg3[8]);
|
||||
|
||||
subframe_tx,
|
||||
ue->ulsch[eNB_id]->harq_processes[harq_pid]->nb_rb,
|
||||
ue->ulsch[eNB_id]->harq_processes[harq_pid]->first_rb,
|
||||
ue->ulsch[eNB_id]->harq_processes[harq_pid]->round,
|
||||
ue->ulsch[eNB_id]->harq_processes[harq_pid]->rvidx,
|
||||
ue->prach_resources[eNB_id]->Msg3[0],
|
||||
ue->prach_resources[eNB_id]->Msg3[1],
|
||||
ue->prach_resources[eNB_id]->Msg3[2],
|
||||
ue->prach_resources[eNB_id]->Msg3[3],
|
||||
ue->prach_resources[eNB_id]->Msg3[4],
|
||||
ue->prach_resources[eNB_id]->Msg3[5],
|
||||
ue->prach_resources[eNB_id]->Msg3[6],
|
||||
ue->prach_resources[eNB_id]->Msg3[7],
|
||||
ue->prach_resources[eNB_id]->Msg3[8]);
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->ulsch_encoding_stats);
|
||||
#endif
|
||||
|
||||
if (abstraction_flag==0) {
|
||||
if (ulsch_encoding(ue->prach_resources[eNB_id]->Msg3,
|
||||
ue,
|
||||
harq_pid,
|
||||
eNB_id,
|
||||
proc->subframe_rx,
|
||||
ue->transmission_mode[eNB_id],0,0)!=0) {
|
||||
LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n");
|
||||
mac_xface->macphy_exit("Error in ulsch_coding");
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
|
||||
stop_meas(&ue->phy_proc_tx);
|
||||
//printf("------FULL TX PROC : %5.2f ------\n",ue->phy_proc_tx.p_time/(cpuf*1000.0));
|
||||
return;
|
||||
}
|
||||
if (ulsch_encoding(ue->prach_resources[eNB_id]->Msg3,
|
||||
ue,
|
||||
harq_pid,
|
||||
eNB_id,
|
||||
proc->subframe_rx,
|
||||
ue->transmission_mode[eNB_id],0,0)!=0) {
|
||||
LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n");
|
||||
mac_xface->macphy_exit("Error in ulsch_coding");
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->phy_proc_tx);
|
||||
printf("------FULL TX PROC : %5.2f ------\n",ue->phy_proc_tx.p_time/(cpuf*1000.0));
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef PHY_ABSTRACTION
|
||||
@@ -1714,8 +1783,9 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
|
||||
|
||||
#endif
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->ulsch_encoding_stats);
|
||||
|
||||
#endif
|
||||
if (ue->mac_enabled == 1) {
|
||||
// signal MAC that Msg3 was sent
|
||||
mac_xface->Msg3_transmitted(Mod_id,
|
||||
@@ -1761,21 +1831,25 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
|
||||
|
||||
}
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->ulsch_encoding_stats);
|
||||
|
||||
#endif
|
||||
if (abstraction_flag==0) {
|
||||
if (ulsch_encoding(ulsch_input_buffer,
|
||||
ue,
|
||||
harq_pid,
|
||||
eNB_id,
|
||||
proc->subframe_rx,
|
||||
ue->transmission_mode[eNB_id],0,
|
||||
Nbundled)!=0) {
|
||||
LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n");
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
|
||||
stop_meas(&ue->phy_proc_tx);
|
||||
return;
|
||||
}
|
||||
|
||||
if (ulsch_encoding(ulsch_input_buffer,
|
||||
ue,
|
||||
harq_pid,
|
||||
eNB_id,
|
||||
proc->subframe_rx,
|
||||
ue->transmission_mode[eNB_id],0,
|
||||
Nbundled)!=0) {
|
||||
LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n");
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->phy_proc_tx);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef PHY_ABSTRACTION
|
||||
@@ -1784,7 +1858,9 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
|
||||
}
|
||||
|
||||
#endif
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->ulsch_encoding_stats);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (abstraction_flag == 0) {
|
||||
@@ -1809,9 +1885,15 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
|
||||
T(T_UE_PHY_PUSCH_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->ulsch[eNB_id]->f_pusch),T_INT(get_PL(Mod_id,0,eNB_id)),T_INT(nb_rb));
|
||||
#endif
|
||||
LOG_D(PHY,"[UE %d][PUSCH %d] AbsSubFrame %d.%d, generating PUSCH, Po_PUSCH: %d dBm (max %d dBm), amp %d\n",
|
||||
Mod_id,harq_pid,frame_tx%1024,subframe_tx,ue->tx_power_dBm[subframe_tx],ue->tx_power_max_dBm, tx_amp);
|
||||
|
||||
#ifdef UE_DEBUG_TRACE
|
||||
LOG_I(PHY,"[UE %d][PUSCH %d] AbsSubFrame %d.%d, generating PUSCH, Po_PUSCH: %d dBm (max %d dBm), amp %d\n",
|
||||
Mod_id,harq_pid,frame_tx%1024,subframe_tx,ue->tx_power_dBm[subframe_tx],ue->tx_power_max_dBm, tx_amp);
|
||||
#endif
|
||||
#if UE_TIMING_TRACE
|
||||
|
||||
start_meas(&ue->ulsch_modulation_stats);
|
||||
#endif
|
||||
ulsch_modulation(ue->common_vars.txdataF,
|
||||
tx_amp,
|
||||
frame_tx,
|
||||
@@ -1819,16 +1901,17 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
|
||||
&ue->frame_parms,
|
||||
ue->ulsch[eNB_id]);
|
||||
for (aa=0; aa<1/*frame_parms->nb_antennas_tx*/; aa++)
|
||||
generate_drs_pusch(ue,
|
||||
proc,
|
||||
eNB_id,
|
||||
tx_amp,
|
||||
subframe_tx,
|
||||
first_rb,
|
||||
nb_rb,
|
||||
aa);
|
||||
|
||||
generate_drs_pusch(ue,
|
||||
proc,
|
||||
eNB_id,
|
||||
tx_amp,
|
||||
subframe_tx,
|
||||
first_rb,
|
||||
nb_rb,
|
||||
aa);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->ulsch_modulation_stats);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (abstraction_flag==1) {
|
||||
@@ -1994,7 +2077,6 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
|
||||
|
||||
uint8_t pucch_ack_payload[2];
|
||||
uint8_t n2_pucch = -1;
|
||||
uint16_t pucch_resource;
|
||||
ANFBmode_t bundling_flag;
|
||||
PUCCH_FMT_t format;
|
||||
@@ -2112,7 +2194,8 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
SR_payload,
|
||||
nb_cw,
|
||||
cqi_status,
|
||||
ri_status);
|
||||
ri_status,
|
||||
bundling_flag);
|
||||
// Determine PUCCH resources and payload: mandatory for pucch encoding
|
||||
get_pucch_param(ue,
|
||||
proc,
|
||||
@@ -2158,9 +2241,11 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
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[proc->subframe_rx&0x1][eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id)));
|
||||
#endif
|
||||
|
||||
#ifdef UE_DEBUG_TRACE
|
||||
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_I(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,
|
||||
ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti,
|
||||
frame_tx%1024, subframe_tx,
|
||||
@@ -2172,7 +2257,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
else
|
||||
{
|
||||
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_I(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,
|
||||
ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti,
|
||||
frame_tx % 1024, subframe_tx,
|
||||
@@ -2185,7 +2270,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
Po_PUCCH,
|
||||
tx_amp);
|
||||
} 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_I(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,
|
||||
ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti,
|
||||
frame_tx%1024, subframe_tx,ue->rx_offset_diff,
|
||||
@@ -2198,6 +2283,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
tx_amp);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if T_TRACER
|
||||
if(pucch_payload[0])
|
||||
@@ -2263,16 +2349,15 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
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[proc->subframe_rx&0x1][eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id)));
|
||||
#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",
|
||||
#ifdef UE_DEBUG_TRACE
|
||||
LOG_D(PHY,"[UE %d][RNTI %x] AbsSubFrame %d.%d Generating PUCCH 2 (RI or CQI), Po_PUCCH %d, isShortenPucch %d, amp %d\n",
|
||||
Mod_id,
|
||||
ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti,
|
||||
frame_tx%1024, subframe_tx,
|
||||
n2_pucch,
|
||||
Po_PUCCH,
|
||||
isShortenPucch,
|
||||
tx_amp);
|
||||
|
||||
#endif
|
||||
generate_pucch2x(ue->common_vars.txdataF,
|
||||
&ue->frame_parms,
|
||||
ue->ncs_cell,
|
||||
@@ -2326,8 +2411,9 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,ui
|
||||
#endif
|
||||
|
||||
ue->generate_ul_signal[eNB_id] = 0;
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->phy_proc_tx);
|
||||
#endif
|
||||
|
||||
#ifdef EMOS
|
||||
//phy_procedures_emos_UE_TX(next_slot);
|
||||
@@ -2470,7 +2556,9 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,ui
|
||||
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->phy_proc_tx);
|
||||
#endif
|
||||
}
|
||||
|
||||
void phy_procedures_UE_S_TX(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t abstraction_flag,relaying_type_t r_type)
|
||||
@@ -2954,7 +3042,9 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
|
||||
#endif
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_IN);
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->dlsch_rx_pdcch_stats);
|
||||
#endif
|
||||
|
||||
// if (subframe_rx != 5)
|
||||
// return 0;
|
||||
@@ -3036,6 +3126,9 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
|
||||
|
||||
#endif
|
||||
|
||||
uint8_t *nCCE_current = &ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->nCCE[subframe_rx];
|
||||
uint8_t *nCCE_dest = &ue->pdcch_vars[(subframe_rx+1) & 0x1][eNB_id]->nCCE[subframe_rx];
|
||||
memcpy(nCCE_dest, nCCE_current, sizeof(uint8_t));
|
||||
|
||||
LOG_D(PHY,"[UE %d] AbsSubFrame %d.%d, Mode %s: DCI found %i --> rnti %x / crnti %x : format %d\n",
|
||||
ue->Mod_id,frame_rx%1024,subframe_rx,mode_string[ue->UE_mode[eNB_id]],
|
||||
@@ -3302,8 +3395,9 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->dlsch_rx_pdcch_stats);
|
||||
#endif
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_OUT);
|
||||
return(0);
|
||||
}
|
||||
@@ -3547,22 +3641,25 @@ void ue_pdsch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, PDSC
|
||||
if ((m==s0) && (m<4))
|
||||
first_symbol_flag = 1;
|
||||
else
|
||||
first_symbol_flag = 0;
|
||||
|
||||
first_symbol_flag = 0;
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->dlsch_llr_stats);
|
||||
#endif
|
||||
// process DLSCH received in first slot
|
||||
rx_pdsch(ue,
|
||||
pdsch,
|
||||
eNB_id,
|
||||
eNB_id_i,
|
||||
proc->frame_rx,
|
||||
subframe_rx, // subframe,
|
||||
m,
|
||||
first_symbol_flag,
|
||||
dual_stream_UE,
|
||||
i_mod,
|
||||
dlsch0->current_harq_pid);
|
||||
pdsch,
|
||||
eNB_id,
|
||||
eNB_id_i,
|
||||
proc->frame_rx,
|
||||
subframe_rx, // subframe,
|
||||
m,
|
||||
first_symbol_flag,
|
||||
dual_stream_UE,
|
||||
i_mod,
|
||||
dlsch0->current_harq_pid);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->dlsch_llr_stats);
|
||||
#endif
|
||||
} // CRNTI active
|
||||
}
|
||||
}
|
||||
@@ -3738,23 +3835,27 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
|
||||
|
||||
// start turbo decode for CW 0
|
||||
dlsch0->harq_processes[harq_pid]->G = get_G(&ue->frame_parms,
|
||||
dlsch0->harq_processes[harq_pid]->nb_rb,
|
||||
dlsch0->harq_processes[harq_pid]->rb_alloc_even,
|
||||
dlsch0->harq_processes[harq_pid]->Qm,
|
||||
dlsch0->harq_processes[harq_pid]->Nl,
|
||||
ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->num_pdcch_symbols,
|
||||
frame_rx,
|
||||
subframe_rx,
|
||||
ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id]);
|
||||
dlsch0->harq_processes[harq_pid]->nb_rb,
|
||||
dlsch0->harq_processes[harq_pid]->rb_alloc_even,
|
||||
dlsch0->harq_processes[harq_pid]->Qm,
|
||||
dlsch0->harq_processes[harq_pid]->Nl,
|
||||
ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->num_pdcch_symbols,
|
||||
frame_rx,
|
||||
subframe_rx,
|
||||
ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id]);
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->dlsch_unscrambling_stats);
|
||||
#endif
|
||||
dlsch_unscrambling(&ue->frame_parms,
|
||||
0,
|
||||
dlsch0,
|
||||
dlsch0->harq_processes[harq_pid]->G,
|
||||
pdsch_vars->llr[0],
|
||||
0,
|
||||
subframe_rx<<1);
|
||||
0,
|
||||
dlsch0,
|
||||
dlsch0->harq_processes[harq_pid]->G,
|
||||
pdsch_vars->llr[0],
|
||||
0,
|
||||
subframe_rx<<1);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->dlsch_unscrambling_stats);
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
LOG_I(PHY," ------ start turbo decoder for AbsSubframe %d.%d / %d ------ \n", frame_rx, subframe_rx, harq_pid);
|
||||
@@ -3766,25 +3867,36 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
|
||||
LOG_I(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> Kmimo %d \n", frame_rx, subframe_rx, harq_pid, dlsch0->Kmimo);
|
||||
LOG_I(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> Pdcch Sym %d \n", frame_rx, subframe_rx, harq_pid, ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->num_pdcch_symbols);
|
||||
#endif
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->dlsch_decoding_stats[subframe_rx&0x1]);
|
||||
#endif
|
||||
|
||||
ret = dlsch_decoding(ue,
|
||||
pdsch_vars->llr[0],
|
||||
&ue->frame_parms,
|
||||
dlsch0,
|
||||
dlsch0->harq_processes[harq_pid],
|
||||
frame_rx,
|
||||
subframe_rx,
|
||||
harq_pid,
|
||||
pdsch==PDSCH?1:0,
|
||||
dlsch0->harq_processes[harq_pid]->TBS>256?1:0);
|
||||
pdsch_vars->llr[0],
|
||||
&ue->frame_parms,
|
||||
dlsch0,
|
||||
dlsch0->harq_processes[harq_pid],
|
||||
frame_rx,
|
||||
subframe_rx,
|
||||
harq_pid,
|
||||
pdsch==PDSCH?1:0,
|
||||
dlsch0->harq_processes[harq_pid]->TBS>256?1:0);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->dlsch_decoding_stats[subframe_rx&0x1]);
|
||||
|
||||
LOG_D(PHY," --> Unscrambling for CW0 %5.3f\n",
|
||||
#if DISABLE_LOG_X
|
||||
printf(" --> Unscrambling for CW0 %5.3f\n",
|
||||
(ue->dlsch_unscrambling_stats.p_time)/(cpuf*1000.0));
|
||||
LOG_D(PHY,"AbsSubframe %d.%d --> Turbo Decoding for CW0 %5.3f\n",
|
||||
printf("AbsSubframe %d.%d --> Turbo Decoding for CW0 %5.3f\n",
|
||||
frame_rx%1024, subframe_rx,(ue->dlsch_decoding_stats[subframe_rx&0x1].p_time)/(cpuf*1000.0));
|
||||
#else
|
||||
LOG_D(PHY, " --> Unscrambling for CW0 %5.3f\n",
|
||||
(ue->dlsch_unscrambling_stats.p_time)/(cpuf*1000.0));
|
||||
LOG_D(PHY, "AbsSubframe %d.%d --> Turbo Decoding for CW0 %5.3f\n",
|
||||
frame_rx%1024, subframe_rx,(ue->dlsch_decoding_stats[subframe_rx&0x1].p_time)/(cpuf*1000.0));
|
||||
#endif
|
||||
|
||||
#endif
|
||||
if(is_cw1_active)
|
||||
{
|
||||
// start turbo decode for CW 1
|
||||
@@ -3797,8 +3909,9 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
|
||||
frame_rx,
|
||||
subframe_rx,
|
||||
ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id]);
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->dlsch_unscrambling_stats);
|
||||
#endif
|
||||
dlsch_unscrambling(&ue->frame_parms,
|
||||
0,
|
||||
dlsch1,
|
||||
@@ -3806,7 +3919,9 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
|
||||
pdsch_vars->llr[1],
|
||||
1,
|
||||
subframe_rx<<1);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->dlsch_unscrambling_stats);
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
LOG_I(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> nb_rb %d \n", frame_rx, subframe_rx, harq_pid, dlsch1->harq_processes[harq_pid]->nb_rb);
|
||||
@@ -3818,8 +3933,9 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
|
||||
LOG_I(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> Pdcch Sym %d \n", frame_rx, subframe_rx, harq_pid, ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->num_pdcch_symbols);
|
||||
#endif
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->dlsch_decoding_stats[subframe_rx&0x1]);
|
||||
|
||||
#endif
|
||||
ret1 = dlsch_decoding(ue,
|
||||
pdsch_vars->llr[1],
|
||||
&ue->frame_parms,
|
||||
@@ -3830,13 +3946,23 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
|
||||
harq_pid,
|
||||
pdsch==PDSCH?1:0,
|
||||
dlsch1->harq_processes[harq_pid]->TBS>256?1:0);
|
||||
#if UE_TIMING_TRACE
|
||||
|
||||
stop_meas(&ue->dlsch_decoding_stats[subframe_rx&0x1]);
|
||||
|
||||
|
||||
LOG_D(PHY," --> Unscrambling for CW1 %5.3f\n",
|
||||
#if DISABLE_LOG_X
|
||||
printf(" --> Unscrambling for CW1 %5.3f\n",
|
||||
(ue->dlsch_unscrambling_stats.p_time)/(cpuf*1000.0));
|
||||
LOG_D(PHY,"AbsSubframe %d.%d --> Turbo Decoding for CW1 %5.3f\n",
|
||||
printf("AbsSubframe %d.%d --> Turbo Decoding for CW1 %5.3f\n",
|
||||
frame_rx%1024, subframe_rx,(ue->dlsch_decoding_stats[subframe_rx&0x1].p_time)/(cpuf*1000.0));
|
||||
#else
|
||||
LOG_D(PHY, " --> Unscrambling for CW1 %5.3f\n",
|
||||
(ue->dlsch_unscrambling_stats.p_time)/(cpuf*1000.0));
|
||||
LOG_D(PHY, "AbsSubframe %d.%d --> Turbo Decoding for CW1 %5.3f\n",
|
||||
frame_rx%1024, subframe_rx,(ue->dlsch_decoding_stats[subframe_rx&0x1].p_time)/(cpuf*1000.0));
|
||||
#endif
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
LOG_D(PHY," ------ end turbo decoder for AbsSubframe %d.%d ------ \n", frame_rx, subframe_rx);
|
||||
@@ -4021,17 +4147,21 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,
|
||||
|
||||
#if T_TRACER
|
||||
T(T_UE_PHY_DL_TICK, T_INT(ue->Mod_id), T_INT(frame_rx%1024), T_INT(subframe_rx));
|
||||
#endif
|
||||
|
||||
T(T_UE_PHY_INPUT_SIGNAL, T_INT(ue->Mod_id), T_INT(frame_rx%1024), T_INT(subframe_rx), T_INT(0),
|
||||
T_BUFFER(&ue->common_vars.rxdata[0][subframe_rx*ue->frame_parms.samples_per_tti],
|
||||
ue->frame_parms.samples_per_tti * 4));
|
||||
#endif
|
||||
|
||||
// start timers
|
||||
|
||||
#ifdef UE_DEBUG_TRACE
|
||||
LOG_D(PHY," ****** start RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx);
|
||||
#endif
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->phy_proc_rx[subframe_rx&0x1]);
|
||||
start_meas(&ue->generic_stat);
|
||||
#endif
|
||||
|
||||
pmch_flag = is_pmch_subframe(frame_rx,subframe_rx,&ue->frame_parms) ? 1 : 0;
|
||||
|
||||
@@ -4088,7 +4218,9 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,
|
||||
LOG_D(PHY," ------ --> FFT/ChannelEst/PDCCH slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
||||
for (; l<=l2; l++) {
|
||||
if (abstraction_flag == 0) {
|
||||
start_meas(&ue->ofdm_demod_stats);
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->ofdm_demod_stats);
|
||||
#endif
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
|
||||
slot_fep(ue,
|
||||
l,
|
||||
@@ -4097,7 +4229,9 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,
|
||||
0,
|
||||
0);
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->ofdm_demod_stats);
|
||||
#endif
|
||||
}
|
||||
|
||||
ue_measurement_procedures(l-1,ue,proc,eNB_id,(subframe_rx<<1),abstraction_flag,mode);
|
||||
@@ -4133,12 +4267,20 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,
|
||||
0);
|
||||
|
||||
// first slot has been processed (FFTs + Channel Estimation, PCFICH/PHICH/PDCCH)
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->generic_stat);
|
||||
LOG_D(PHY,"[SFN %d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
|
||||
#if DISABLE_LOG_X
|
||||
printf("[SFN %d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
|
||||
#else
|
||||
LOG_D(PHY, "[SFN %d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->generic_stat);
|
||||
|
||||
#endif
|
||||
// do procedures for C-RNTI
|
||||
if (ue->dlsch[subframe_rx&0x1][eNB_id][0]->active == 1) {
|
||||
LOG_D(PHY,"dlsch is active, doing ue_pdsch_procedures\n");
|
||||
@@ -4207,16 +4349,20 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,
|
||||
if (subframe_select(&ue->frame_parms,subframe_rx) != SF_S) { // do front-end processing for second slot, and first symbol of next subframe
|
||||
for (l=1; l<ue->frame_parms.symbols_per_tti>>1; l++) {
|
||||
if (abstraction_flag == 0) {
|
||||
start_meas(&ue->ofdm_demod_stats);
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
|
||||
slot_fep(ue,
|
||||
l,
|
||||
1+(subframe_rx<<1),
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
|
||||
stop_meas(&ue->ofdm_demod_stats);
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->ofdm_demod_stats);
|
||||
#endif
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
|
||||
slot_fep(ue,
|
||||
l,
|
||||
1+(subframe_rx<<1),
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->ofdm_demod_stats);
|
||||
#endif
|
||||
}
|
||||
|
||||
ue_measurement_procedures(l-1,ue,proc,eNB_id,1+(subframe_rx<<1),abstraction_flag,mode);
|
||||
@@ -4235,10 +4381,16 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,
|
||||
0);
|
||||
}
|
||||
} // not an S-subframe
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->generic_stat);
|
||||
#if DISABLE_LOG_X
|
||||
printf("[SFN %d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
|
||||
#else
|
||||
LOG_D(PHY, "[SFN %d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
LOG_D(PHY,"[SFN %d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
|
||||
LOG_D(PHY," ------ end FFT/ChannelEst/PDCCH slot 1: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
||||
|
||||
if ( (subframe_rx == 0) && (ue->decode_MIB == 1))
|
||||
@@ -4252,40 +4404,51 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,
|
||||
LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
||||
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);
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->pdsch_procedures_stat);
|
||||
#endif
|
||||
ue_pdsch_procedures(ue,
|
||||
proc,
|
||||
eNB_id,
|
||||
PDSCH,
|
||||
ue->dlsch[subframe_rx&0x1][eNB_id][0],
|
||||
NULL,
|
||||
1+(ue->frame_parms.symbols_per_tti>>1),
|
||||
ue->frame_parms.symbols_per_tti-1,
|
||||
abstraction_flag);
|
||||
stop_meas(&ue->pdsch_procedures_stat);
|
||||
|
||||
proc,
|
||||
eNB_id,
|
||||
PDSCH,
|
||||
ue->dlsch[subframe_rx&0x1][eNB_id][0],
|
||||
NULL,
|
||||
1+(ue->frame_parms.symbols_per_tti>>1),
|
||||
ue->frame_parms.symbols_per_tti-1,
|
||||
abstraction_flag);
|
||||
LOG_D(PHY," ------ end PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
||||
LOG_D(PHY," ------ --> PDSCH Turbo Decoder slot 0/1: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->pdsch_procedures_stat);
|
||||
start_meas(&ue->dlsch_procedures_stat);
|
||||
#endif
|
||||
ue_dlsch_procedures(ue,
|
||||
proc,
|
||||
eNB_id,
|
||||
PDSCH,
|
||||
ue->dlsch[subframe_rx&0x1][eNB_id][0],
|
||||
ue->dlsch[subframe_rx&0x1][eNB_id][1],
|
||||
&ue->dlsch_errors[eNB_id],
|
||||
mode,
|
||||
abstraction_flag);
|
||||
proc,
|
||||
eNB_id,
|
||||
PDSCH,
|
||||
ue->dlsch[subframe_rx&0x1][eNB_id][0],
|
||||
ue->dlsch[subframe_rx&0x1][eNB_id][1],
|
||||
&ue->dlsch_errors[eNB_id],
|
||||
mode,
|
||||
abstraction_flag);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->dlsch_procedures_stat);
|
||||
LOG_D(PHY,"[SFN %d] Slot1: Pdsch Proc %5.2f\n",subframe_rx,ue->pdsch_procedures_stat.p_time/(cpuf*1000.0));
|
||||
LOG_D(PHY,"[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f\n",subframe_rx,ue->dlsch_procedures_stat.p_time/(cpuf*1000.0));
|
||||
#if DISABLE_LOG_X
|
||||
printf("[SFN %d] Slot1: Pdsch Proc %5.2f\n",subframe_rx,ue->pdsch_procedures_stat.p_time/(cpuf*1000.0));
|
||||
printf("[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f\n",subframe_rx,ue->dlsch_procedures_stat.p_time/(cpuf*1000.0));
|
||||
#else
|
||||
LOG_D(PHY, "[SFN %d] Slot1: Pdsch Proc %5.2f\n",subframe_rx,ue->pdsch_procedures_stat.p_time/(cpuf*1000.0));
|
||||
LOG_D(PHY, "[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f\n",subframe_rx,ue->dlsch_procedures_stat.p_time/(cpuf*1000.0));
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_OUT);
|
||||
|
||||
}
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->generic_stat);
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
if(subframe_rx==5 && ue->dlsch[subframe_rx&0x1][eNB_id][0]->harq_processes[ue->dlsch[subframe_rx&0x1][eNB_id][0]->current_harq_pid]->nb_rb > 20){
|
||||
@@ -4413,8 +4576,10 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,
|
||||
|
||||
}
|
||||
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->generic_stat);
|
||||
//printf("after tubo until end of Rx %5.2f \n",ue->generic_stat.p_time/(cpuf*1000.0));
|
||||
printf("after tubo until end of Rx %5.2f \n",ue->generic_stat.p_time/(cpuf*1000.0));
|
||||
#endif
|
||||
|
||||
#ifdef EMOS
|
||||
phy_procedures_emos_UE_RX(ue,slot,eNB_id);
|
||||
@@ -4422,9 +4587,14 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,
|
||||
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->phy_proc_rx[subframe_rx&0x1]);
|
||||
|
||||
LOG_D(PHY,"------FULL RX PROC [SFN %d]: %5.2f ------\n",subframe_rx,ue->phy_proc_rx[subframe_rx&0x1].p_time/(cpuf*1000.0));
|
||||
#if DISABLE_LOG_X
|
||||
printf("------FULL RX PROC [SFN %d]: %5.2f ------\n",subframe_rx,ue->phy_proc_rx[subframe_rx&0x1].p_time/(cpuf*1000.0));
|
||||
#else
|
||||
LOG_D(PHY, "------FULL RX PROC [SFN %d]: %5.2f ------\n",subframe_rx,ue->phy_proc_rx[subframe_rx&0x1].p_time/(cpuf*1000.0));
|
||||
#endif
|
||||
#endif
|
||||
LOG_D(PHY," ****** end RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx);
|
||||
return (0);
|
||||
}
|
||||
@@ -4485,7 +4655,9 @@ void phy_procedures_UE_lte(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,u
|
||||
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_LTE,1);
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->phy_proc);
|
||||
#endif
|
||||
#if defined(ENABLE_ITTI)
|
||||
|
||||
do {
|
||||
@@ -4577,7 +4749,9 @@ void phy_procedures_UE_lte(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,u
|
||||
}
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_LTE,0);
|
||||
#if UE_TIMING_TRACE
|
||||
stop_meas(&ue->phy_proc);
|
||||
#endif
|
||||
} // slot
|
||||
}
|
||||
|
||||
|
||||
@@ -155,8 +155,8 @@ void pusch_power_cntl(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_
|
||||
|
||||
ue->ulsch[eNB_id]->Po_PUSCH += (mac_xface->get_Po_NOMINAL_PUSCH(ue->Mod_id,0) + PL);
|
||||
|
||||
LOG_I(PHY,"[UE %d][RAPROC] frame %d, subframe %d: Msg3 Po_PUSCH %d dBm (%d,%d,100*PL=%d,%d,%d)\n",
|
||||
ue->Mod_id,proc->frame_tx,proc->subframe_tx,ue->ulsch[eNB_id]->Po_PUSCH,
|
||||
LOG_I(PHY,"[UE %d][RAPROC] AbsSubframe %d.%d: Msg3 (%d PRBs) Po_PUSCH %d dBm (%d,%d,100*PL=%d,%d,%d)\n",
|
||||
ue->Mod_id,proc->frame_tx,proc->subframe_tx,nb_rb,ue->ulsch[eNB_id]->Po_PUSCH,
|
||||
100*mac_xface->get_Po_NOMINAL_PUSCH(ue->Mod_id,0),
|
||||
hundred_times_log10_NPRB[nb_rb-1],
|
||||
100*PL,
|
||||
|
||||
Reference in New Issue
Block a user