Commit 77f395c3 authored by Haruki NAOI's avatar Haruki NAOI

Fix: smooth ULSCH AMC and TPC control.

# Conflicts:
#	openair1/SCHED/phy_procedures_lte_eNb.c
#	openair2/LAYER2/MAC/eNB_scheduler.c
#	openair2/LAYER2/MAC/eNB_scheduler_primitives.c
#	openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
#	openair2/LAYER2/MAC/mac.h

(cherry picked from commit 56720c68864f6b04409deb00676e59a41c8f050b)

# Conflicts:
#	openair1/SCHED/phy_procedures_lte_eNb.c
#	openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
#	openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
parent a981bd21
...@@ -1451,6 +1451,10 @@ void fill_rx_indication(PHY_VARS_eNB *eNB,int UE_id,int frame,int subframe) { ...@@ -1451,6 +1451,10 @@ void fill_rx_indication(PHY_VARS_eNB *eNB,int UE_id,int frame,int subframe) {
pdu->rx_indication_rel8.timing_advance = timing_advance_update; pdu->rx_indication_rel8.timing_advance = timing_advance_update;
// estimate UL_CQI for MAC (from antenna port 0 only) // estimate UL_CQI for MAC (from antenna port 0 only)
int SNRtimes10 = dB_fixed_times10(eNB->pusch_vars[UE_id]->ulsch_power[0]) - dB_fixed_times10(eNB->pusch_vars[UE_id]->ulsch_interference_power[0]); int SNRtimes10 = dB_fixed_times10(eNB->pusch_vars[UE_id]->ulsch_power[0]) - dB_fixed_times10(eNB->pusch_vars[UE_id]->ulsch_interference_power[0]);
if(dB_fixed_times10(eNB->pusch_vars[UE_id]->ulsch_power[0]) > 500) {
SNRtimes10 = 300;
}
if (SNRtimes10 < -640) if (SNRtimes10 < -640)
pdu->rx_indication_rel8.ul_cqi = 0; pdu->rx_indication_rel8.ul_cqi = 0;
......
...@@ -834,9 +834,9 @@ typedef struct { ...@@ -834,9 +834,9 @@ typedef struct {
uint8_t pucch2_snr[NFAPI_CC_MAX]; uint8_t pucch2_snr[NFAPI_CC_MAX];
uint8_t pucch3_cqi_update[NFAPI_CC_MAX]; uint8_t pucch3_cqi_update[NFAPI_CC_MAX];
uint8_t pucch3_snr[NFAPI_CC_MAX]; uint8_t pucch3_snr[NFAPI_CC_MAX];
uint8_t pusch_cqi[NFAPI_CC_MAX];
uint8_t pusch_snr[NFAPI_CC_MAX]; uint8_t pusch_snr[NFAPI_CC_MAX];
uint8_t pusch_snr_avg[NFAPI_CC_MAX]; uint8_t pusch_snr_avg[NFAPI_CC_MAX];
uint8_t pusch_snr_amc[NFAPI_CC_MAX];
uint64_t pusch_rx_num[NFAPI_CC_MAX]; uint64_t pusch_rx_num[NFAPI_CC_MAX];
uint64_t pusch_rx_num_old[NFAPI_CC_MAX]; uint64_t pusch_rx_num_old[NFAPI_CC_MAX];
uint64_t pusch_rx_error_num[NFAPI_CC_MAX]; uint64_t pusch_rx_error_num[NFAPI_CC_MAX];
......
...@@ -617,8 +617,8 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP, ...@@ -617,8 +617,8 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP,
UE_scheduling_control->ul_out_of_sync == 0 ? "in synch" : "out of sync", UE_scheduling_control->ul_out_of_sync == 0 ? "in synch" : "out of sync",
UE_list->UE_template[CC_id][UE_id].phr_info, UE_list->UE_template[CC_id][UE_id].phr_info,
UE_scheduling_control->dl_cqi[CC_id], UE_scheduling_control->dl_cqi[CC_id],
(5 * UE_scheduling_control->pusch_snr_avg[CC_id] - 640) / 10, UE_scheduling_control->pusch_snr_avg[CC_id],
(5 * UE_scheduling_control->pucch1_snr[CC_id] - 640) / 10); UE_scheduling_control->pucch1_snr[CC_id]);
} }
RC.eNB[module_idP][CC_id]->pusch_stats_bsr[UE_id][(frameP * 10) + subframeP] = -63; RC.eNB[module_idP][CC_id]->pusch_stats_bsr[UE_id][(frameP * 10) + subframeP] = -63;
......
...@@ -1501,7 +1501,7 @@ schedule_ue_spec(module_id_t module_idP, ...@@ -1501,7 +1501,7 @@ schedule_ue_spec(module_id_t module_idP,
// this is the snr // this is the snr
// unit is not dBm, it's special from nfapi // unit is not dBm, it's special from nfapi
// converting to dBm // converting to dBm
snr = (5 * ue_sched_ctrl->pucch1_snr[CC_id] - 640) / 10; snr = ue_sched_ctrl->pucch1_snr[CC_id];
target_snr = eNB->puCch10xSnr / 10; target_snr = eNB->puCch10xSnr / 10;
// this assumes accumulated tpc // this assumes accumulated tpc
// make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out // make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out
...@@ -2391,7 +2391,7 @@ schedule_ue_spec_br(module_id_t module_idP, ...@@ -2391,7 +2391,7 @@ schedule_ue_spec_br(module_id_t module_idP,
/* Do PUCCH power control */ /* Do PUCCH power control */
/* This is the snr */ /* This is the snr */
/* unit is not dBm, it's special from nfapi, convert to dBm */ /* unit is not dBm, it's special from nfapi, convert to dBm */
snr = (5 * ue_sched_ctl->pucch1_snr[CC_id] - 640) / 10; snr = ue_sched_ctl->pucch1_snr[CC_id];
target_snr = mac->puCch10xSnr / 10; target_snr = mac->puCch10xSnr / 10;
/* This assumes accumulated tpc */ /* This assumes accumulated tpc */
/* Make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out */ /* Make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out */
......
...@@ -2325,8 +2325,8 @@ schedule_ue_spec_fairRR(module_id_t module_idP, ...@@ -2325,8 +2325,8 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
// this is the snr // this is the snr
eNB_UE_stats = &UE_list->eNB_UE_stats[CC_id][UE_id]; eNB_UE_stats = &UE_list->eNB_UE_stats[CC_id][UE_id];
/* Unit is not dBm, it's special from nfapi */ /* Unit is not dBm, it's special from nfapi */
snr = (5 * ue_sched_ctl->pucch1_snr[CC_id] - 640) / 10; snr = ue_sched_ctl->pucch1_snr[CC_id];
target_snr = eNB->puCch10xSnr / 10; target_snr = eNB->puCch10xSnr/10;
// this assumes accumulated tpc // this assumes accumulated tpc
// make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out // make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out
int32_t framex10psubframe = UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_frame*10+UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_subframe; int32_t framex10psubframe = UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_frame*10+UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_subframe;
...@@ -3443,7 +3443,7 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP, ...@@ -3443,7 +3443,7 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP,
UE_template = &UE_list->UE_template[CC_id][UE_id]; UE_template = &UE_list->UE_template[CC_id][UE_id];
int32_t framex10psubframe = UE_template->pusch_bler_calc_frame*10+UE_template->pusch_bler_calc_subframe; int32_t framex10psubframe = UE_template->pusch_bler_calc_frame*10+UE_template->pusch_bler_calc_subframe;
int pusch_bler_interval=100; int pusch_bler_interval=50;
double total_bler; double total_bler;
if(UE_list->UE_sched_ctrl[UE_id].pusch_rx_num[CC_id] == 0 && UE_list->UE_sched_ctrl[UE_id].pusch_rx_error_num[CC_id] == 0) { if(UE_list->UE_sched_ctrl[UE_id].pusch_rx_num[CC_id] == 0 && UE_list->UE_sched_ctrl[UE_id].pusch_rx_error_num[CC_id] == 0) {
...@@ -3484,22 +3484,12 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP, ...@@ -3484,22 +3484,12 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP,
} }
} }
} }
if ( UE_list->UE_sched_ctrl[UE_id].phr_received == 1 ) { snr = UE_list->UE_sched_ctrl[UE_id].pusch_snr_avg[CC_id];
snr = (5 * UE_list->UE_sched_ctrl[UE_id].pusch_snr_amc[CC_id] - 640) / 10;
mcs = snr - snr2mcs_offset; mcs = 20 - UE_list->UE_sched_ctrl[UE_id].mcs_offset[CC_id];
if(mcs > 20) { if(mcs < 6) {
mcs = 20; mcs = 6;
}
if(mcs - UE_list->UE_sched_ctrl[UE_id].mcs_offset[CC_id] < 6) {
mcs = 6;
}
else {
mcs = mcs - UE_list->UE_sched_ctrl[UE_id].mcs_offset[CC_id];
}
} else {
mcs = 10;
} }
if ( ulsch_ue_select[CC_id].list[ulsch_ue_num].ue_priority == SCH_UL_FIRST ) { if ( ulsch_ue_select[CC_id].list[ulsch_ue_num].ue_priority == SCH_UL_FIRST ) {
...@@ -3547,9 +3537,9 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP, ...@@ -3547,9 +3537,9 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP,
UE_list->UE_template[CC_id][UE_id].pre_assigned_mcs_ul = mcs; UE_list->UE_template[CC_id][UE_id].pre_assigned_mcs_ul = mcs;
} }
LOG_D(MAC,"[eNB %d] frame %d subframe %d, UE %d/%x CC %d snr %d mcs %d mcs_offset %d bler %lf total_bler %lf ( %d %d ) rb_num %d phr_info %d tx_power %d bsr %d\n", LOG_D(MAC,"[eNB %d] frame %d subframe %d, UE %d/%x CC %d snr %d snr_inst %d mcs %d mcs_offset %d bler %lf total_bler %lf ( %d %d ) rb_num %d phr_info %d tx_power %d bsr %d estimated_ul_buffer %d scheduled_ul_bytes %d\n",
module_idP,frameP,subframeP,UE_id,UE_RNTI(CC_id,UE_id),CC_id, snr, mcs, UE_list->UE_sched_ctrl[UE_id].mcs_offset[CC_id], UE_list->UE_sched_ctrl[UE_id].pusch_bler[CC_id], module_idP,frameP,subframeP,UE_id,UE_RNTI(CC_id,UE_id),CC_id, snr, UE_list->UE_sched_ctrl[UE_id].pusch_snr[CC_id], mcs, UE_list->UE_sched_ctrl[UE_id].mcs_offset[CC_id], UE_list->UE_sched_ctrl[UE_id].pusch_bler[CC_id],
total_bler, UE_list->UE_sched_ctrl[UE_id].pusch_rx_num[CC_id], UE_list->UE_sched_ctrl[UE_id].pusch_rx_error_num[CC_id], rb_table[rb_table_index-1], UE_template->phr_info, tx_power, bytes_to_schedule); total_bler, UE_list->UE_sched_ctrl[UE_id].pusch_rx_num[CC_id], UE_list->UE_sched_ctrl[UE_id].pusch_rx_error_num[CC_id], rb_table[rb_table_index-1], UE_template->phr_info, tx_power, bytes_to_schedule, UE_template->estimated_ul_buffer, UE_template->scheduled_ul_bytes);
} else { } else {
if (mac_eNB_get_rrc_status(module_idP,UE_RNTI(module_idP, UE_id)) < RRC_CONNECTED){ if (mac_eNB_get_rrc_status(module_idP,UE_RNTI(module_idP, UE_id)) < RRC_CONNECTED){
...@@ -3917,7 +3907,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP, ...@@ -3917,7 +3907,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
//power control //power control
//compute the expected ULSCH RX power (for the stats) //compute the expected ULSCH RX power (for the stats)
// this is the normalized RX power and this should be constant (regardless of mcs // this is the normalized RX power and this should be constant (regardless of mcs
snr = (5 * UE_sched_ctrl->pusch_snr_avg[CC_id] - 640) / 10; snr = UE_sched_ctrl->pusch_snr_avg[CC_id];
target_snr = eNB->puSch10xSnr / 10; target_snr = eNB->puSch10xSnr / 10;
// this assumes accumulated tpc // this assumes accumulated tpc
// make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out // make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out
...@@ -4042,7 +4032,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP, ...@@ -4042,7 +4032,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
nfapi_hi_dci0_req->sfn_sf = frameP<<4|subframeP; // sfnsf_add_subframe(sched_frame, sched_subframeP, 0); // sunday! nfapi_hi_dci0_req->sfn_sf = frameP<<4|subframeP; // sfnsf_add_subframe(sched_frame, sched_subframeP, 0); // sunday!
nfapi_hi_dci0_req->header.message_id = NFAPI_HI_DCI0_REQUEST; nfapi_hi_dci0_req->header.message_id = NFAPI_HI_DCI0_REQUEST;
LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG.Request for UE %d/%x, ulsch_frame %d, ulsch_subframe %d mcs %d first_rb %d num_rb %d round %d mcs %d sinr %d bler %lf\n", LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG.Request for UE %d/%x, ulsch_frame %d, ulsch_subframe %d mcs %d first_rb %d num_rb %d round %d mcs %d sinr %d bler %lf\n",
harq_pid,frameP,subframeP,UE_id,rnti,sched_frame,sched_subframeP,UE_template->mcs_UL[harq_pid],first_rb[CC_id],rb_table[rb_table_index],0,UE_template->mcs_UL[harq_pid],(5 * UE_sched_ctrl->pusch_snr_amc[CC_id] - 640) / 10,UE_sched_ctrl->pusch_bler[CC_id]); harq_pid,frameP,subframeP,UE_id,rnti,sched_frame,sched_subframeP,UE_template->mcs_UL[harq_pid],first_rb[CC_id],rb_table[rb_table_index],0,UE_template->mcs_UL[harq_pid],UE_sched_ctrl->pusch_snr_avg[CC_id],UE_sched_ctrl->pusch_bler[CC_id]);
ul_req_index = 0; ul_req_index = 0;
dlsch_flag = 0; dlsch_flag = 0;
...@@ -4196,7 +4186,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP, ...@@ -4196,7 +4186,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
hi_dci0_req->number_of_dci++; hi_dci0_req->number_of_dci++;
// Add UL_config PDUs // Add UL_config PDUs
LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG.Request for UE %d/%x, ulsch_frame %d, ulsch_subframe %d mcs %d first_rb %d num_rb %d round %d mcs %d sinr %d bler %lf\n", LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG.Request for UE %d/%x, ulsch_frame %d, ulsch_subframe %d mcs %d first_rb %d num_rb %d round %d mcs %d sinr %d bler %lf\n",
harq_pid,frameP,subframeP,UE_id,rnti,sched_frame,sched_subframeP,mcs_rv,ulsch_ue_select[CC_id].list[ulsch_ue_num].start_rb,ulsch_ue_select[CC_id].list[ulsch_ue_num].nb_rb,UE_sched_ctrl->round_UL[CC_id][harq_pid],UE_template->mcs_UL[harq_pid],(5 * UE_sched_ctrl->pusch_snr_amc[CC_id] - 640) / 10,UE_sched_ctrl->pusch_bler[CC_id]); harq_pid,frameP,subframeP,UE_id,rnti,sched_frame,sched_subframeP,mcs_rv,ulsch_ue_select[CC_id].list[ulsch_ue_num].start_rb,ulsch_ue_select[CC_id].list[ulsch_ue_num].nb_rb,UE_sched_ctrl->round_UL[CC_id][harq_pid],UE_template->mcs_UL[harq_pid],UE_sched_ctrl->pusch_snr_avg[CC_id],UE_sched_ctrl->pusch_bler[CC_id]);
ul_req_index = 0; ul_req_index = 0;
dlsch_flag = 0; dlsch_flag = 0;
......
...@@ -259,7 +259,7 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s ...@@ -259,7 +259,7 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s
//compute the expected ULSCH RX power (for the stats) //compute the expected ULSCH RX power (for the stats)
// this is the snr and this should be constant (regardless of mcs) // this is the snr and this should be constant (regardless of mcs)
snr = (5 * UE_sched_ctrl->pusch_snr[CC_id] - 640) / 10; snr = UE_sched_ctrl->pusch_snr[CC_id];
// new transmission // new transmission
......
...@@ -2448,8 +2448,8 @@ add_new_ue(module_id_t mod_idP, ...@@ -2448,8 +2448,8 @@ add_new_ue(module_id_t mod_idP,
UE_list->assoc_dl_slice_idx[UE_id] = 0; UE_list->assoc_dl_slice_idx[UE_id] = 0;
UE_list->assoc_ul_slice_idx[UE_id] = 0; UE_list->assoc_ul_slice_idx[UE_id] = 0;
UE_list->UE_sched_ctrl[UE_id].ta_update = 31; UE_list->UE_sched_ctrl[UE_id].ta_update = 31;
UE_list->UE_sched_ctrl[UE_id].pusch_snr_avg[cc_idP] = 0; UE_list->UE_sched_ctrl[UE_id].pusch_cqi[cc_idP] = (eNB->puSch10xSnr+640)/5;
UE_list->UE_sched_ctrl[UE_id].pusch_snr_amc[cc_idP] = 0; UE_list->UE_sched_ctrl[UE_id].pusch_snr_avg[cc_idP] = eNB->puSch10xSnr/10;
UE_list->UE_sched_ctrl[UE_id].pusch_rx_num[cc_idP] = 0; UE_list->UE_sched_ctrl[UE_id].pusch_rx_num[cc_idP] = 0;
UE_list->UE_sched_ctrl[UE_id].pusch_rx_num_old[cc_idP] = 0; UE_list->UE_sched_ctrl[UE_id].pusch_rx_num_old[cc_idP] = 0;
UE_list->UE_sched_ctrl[UE_id].pusch_rx_error_num[cc_idP] = 0; UE_list->UE_sched_ctrl[UE_id].pusch_rx_error_num[cc_idP] = 0;
...@@ -5716,7 +5716,7 @@ harq_indication(module_id_t mod_idP, ...@@ -5716,7 +5716,7 @@ harq_indication(module_id_t mod_idP,
/* don't care about cqi reporting if NACK/DTX is there */ /* don't care about cqi reporting if NACK/DTX is there */
if (channel == 0 && !nack_or_dtx_reported(cc, if (channel == 0 && !nack_or_dtx_reported(cc,
harq_pdu)) { harq_pdu)) {
sched_ctl->pucch1_snr[CC_idP] = ul_cqi; sched_ctl->pucch1_snr[CC_idP] = (5 * ul_cqi - 640) / 10;
sched_ctl->pucch1_cqi_update[CC_idP] = 1; sched_ctl->pucch1_cqi_update[CC_idP] = 1;
} }
......
...@@ -174,22 +174,16 @@ rx_sdu(const module_id_t enb_mod_idP, ...@@ -174,22 +174,16 @@ rx_sdu(const module_id_t enb_mod_idP,
* maybe it's even not correct at all? * maybe it's even not correct at all?
*/ */
UE_scheduling_control->ta_update = (UE_scheduling_control->ta_update * 3 + timing_advance) / 4; UE_scheduling_control->ta_update = (UE_scheduling_control->ta_update * 3 + timing_advance) / 4;
UE_scheduling_control->pusch_snr[CC_idP] = ul_cqi; UE_scheduling_control->pusch_snr[CC_idP] = (5 * ul_cqi - 640) / 10;
double snr_filter_tpc=0.75; if(UE_scheduling_control->pusch_snr[CC_idP] > 0 || UE_scheduling_control->pusch_snr[CC_idP] < 63) {
if(UE_scheduling_control->pusch_snr_avg[CC_idP] == 0) { double snr_filter_tpc=0.9;
UE_scheduling_control->pusch_snr_avg[CC_idP] = ul_cqi; int snr_thres_tpc=30;
} int diff = UE_scheduling_control->pusch_snr_avg[CC_idP] - UE_scheduling_control->pusch_snr[CC_idP];
else { if(abs(diff) < snr_thres_tpc) {
UE_scheduling_control->pusch_snr_avg[CC_idP] = (int)((double)UE_scheduling_control->pusch_snr_avg[CC_idP] * snr_filter_tpc + (double)ul_cqi * (1-snr_filter_tpc)); UE_scheduling_control->pusch_cqi[CC_idP] = (int)((double)UE_scheduling_control->pusch_cqi[CC_idP] * snr_filter_tpc + (double)ul_cqi * (1-snr_filter_tpc));
} UE_scheduling_control->pusch_snr_avg[CC_idP] = (5 * UE_scheduling_control->pusch_cqi[CC_idP] - 640) / 10;
}
double snr_filter_amc=0.5;
if(UE_scheduling_control->pusch_snr_amc[CC_idP] == 0) {
UE_scheduling_control->pusch_snr_amc[CC_idP] = ul_cqi;
}
else {
UE_scheduling_control->pusch_snr_amc[CC_idP] = (int)((double)UE_scheduling_control->pusch_snr_amc[CC_idP] * snr_filter_amc + (double)ul_cqi * (1-snr_filter_amc));
} }
UE_scheduling_control->ul_consecutive_errors = 0; UE_scheduling_control->ul_consecutive_errors = 0;
...@@ -2092,7 +2086,7 @@ void schedule_ulsch_rnti_emtc(module_id_t module_idP, ...@@ -2092,7 +2086,7 @@ void schedule_ulsch_rnti_emtc(module_id_t module_idP,
cqi_req = 0; cqi_req = 0;
/* Power control: compute the expected ULSCH RX snr (for the stats) */ /* Power control: compute the expected ULSCH RX snr (for the stats) */
/* This is the normalized snr and this should be constant (regardless of mcs) */ /* This is the normalized snr and this should be constant (regardless of mcs) */
snr = (5 * UE_sched_ctrl->pusch_snr_avg[CC_id] - 640) / 10; snr = UE_sched_ctrl->pusch_snr_avg[CC_id];
target_snr = eNB->puSch10xSnr / 10; /* TODO: target_rx_power was 178, what to put? */ target_snr = eNB->puSch10xSnr / 10; /* TODO: target_rx_power was 178, what to put? */
/* This assumes accumulated tpc */ /* This assumes accumulated tpc */
/* Make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out */ /* Make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out */
......
...@@ -1003,9 +1003,9 @@ typedef struct { ...@@ -1003,9 +1003,9 @@ typedef struct {
uint8_t pucch2_snr[NFAPI_CC_MAX]; uint8_t pucch2_snr[NFAPI_CC_MAX];
uint8_t pucch3_cqi_update[NFAPI_CC_MAX]; uint8_t pucch3_cqi_update[NFAPI_CC_MAX];
uint8_t pucch3_snr[NFAPI_CC_MAX]; uint8_t pucch3_snr[NFAPI_CC_MAX];
uint8_t pusch_cqi[NFAPI_CC_MAX];
uint8_t pusch_snr[NFAPI_CC_MAX]; uint8_t pusch_snr[NFAPI_CC_MAX];
uint8_t pusch_snr_avg[NFAPI_CC_MAX]; uint8_t pusch_snr_avg[NFAPI_CC_MAX];
uint8_t pusch_snr_amc[NFAPI_CC_MAX];
uint64_t pusch_rx_num[NFAPI_CC_MAX]; uint64_t pusch_rx_num[NFAPI_CC_MAX];
uint64_t pusch_rx_num_old[NFAPI_CC_MAX]; uint64_t pusch_rx_num_old[NFAPI_CC_MAX];
uint64_t pusch_rx_error_num[NFAPI_CC_MAX]; uint64_t pusch_rx_error_num[NFAPI_CC_MAX];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment