some formatting changes in physcope for eNodeB. fixes for joint SR/ACK-NAK detection.
This commit is contained in:
@@ -160,7 +160,7 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
|
|||||||
int UE_id)
|
int UE_id)
|
||||||
{
|
{
|
||||||
int eNB_id = 0;
|
int eNB_id = 0;
|
||||||
int i,arx,atx,ind,k;
|
int i,i2,arx,atx,ind,k;
|
||||||
LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_enb->lte_frame_parms;
|
LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_enb->lte_frame_parms;
|
||||||
int nsymb_ce = 12*frame_parms->N_RB_UL*frame_parms->symbols_per_tti;
|
int nsymb_ce = 12*frame_parms->N_RB_UL*frame_parms->symbols_per_tti;
|
||||||
uint8_t nb_antennas_rx = frame_parms->nb_antennas_rx;
|
uint8_t nb_antennas_rx = frame_parms->nb_antennas_rx;
|
||||||
@@ -181,6 +181,7 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
|
|||||||
float chest_t_abs[nb_antennas_rx][frame_parms->ofdm_symbol_size];
|
float chest_t_abs[nb_antennas_rx][frame_parms->ofdm_symbol_size];
|
||||||
float *chest_f_abs;
|
float *chest_f_abs;
|
||||||
float time[FRAME_LENGTH_COMPLEX_SAMPLES];
|
float time[FRAME_LENGTH_COMPLEX_SAMPLES];
|
||||||
|
float time2[2048];
|
||||||
float freq[nsymb_ce*nb_antennas_rx*nb_antennas_tx];
|
float freq[nsymb_ce*nb_antennas_rx*nb_antennas_tx];
|
||||||
int frame = phy_vars_enb->proc[0].frame_tx;
|
int frame = phy_vars_enb->proc[0].frame_tx;
|
||||||
uint32_t total_dlsch_bitrate = phy_vars_enb->total_dlsch_bitrate;
|
uint32_t total_dlsch_bitrate = phy_vars_enb->total_dlsch_bitrate;
|
||||||
@@ -238,19 +239,21 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form,
|
|||||||
|
|
||||||
if (chest_t[0] !=NULL) {
|
if (chest_t[0] !=NULL) {
|
||||||
for (i=0; i<(frame_parms->ofdm_symbol_size); i++) {
|
for (i=0; i<(frame_parms->ofdm_symbol_size); i++) {
|
||||||
chest_t_abs[0][i] = 10*log10((float) (chest_t[0][2*i]*chest_t[0][2*i]+chest_t[0][2*i+1]*chest_t[0][2*i+1]));
|
i2 = (i+(frame_parms->ofdm_symbol_size>>1))%frame_parms->ofdm_symbol_size;
|
||||||
|
time2[i] = (float)(i-(frame_parms->ofdm_symbol_size>>1));
|
||||||
|
chest_t_abs[0][i] = 10*log10((float) (1+chest_t[0][2*i2]*chest_t[0][2*i2]+chest_t[0][2*i2+1]*chest_t[0][2*i2+1]));
|
||||||
|
|
||||||
if (chest_t_abs[0][i] > ymax)
|
if (chest_t_abs[0][i] > ymax)
|
||||||
ymax = chest_t_abs[0][i];
|
ymax = chest_t_abs[0][i];
|
||||||
}
|
}
|
||||||
|
|
||||||
fl_set_xyplot_data(form->chest_t,time,chest_t_abs[0],(frame_parms->ofdm_symbol_size),"","","");
|
fl_set_xyplot_data(form->chest_t,time2,chest_t_abs[0],(frame_parms->ofdm_symbol_size),"","","");
|
||||||
}
|
}
|
||||||
|
|
||||||
for (arx=1; arx<nb_antennas_rx; arx++) {
|
for (arx=1; arx<nb_antennas_rx; arx++) {
|
||||||
if (chest_t[arx] !=NULL) {
|
if (chest_t[arx] !=NULL) {
|
||||||
for (i=0; i<(frame_parms->ofdm_symbol_size>>3); i++) {
|
for (i=0; i<(frame_parms->ofdm_symbol_size>>3); i++) {
|
||||||
chest_t_abs[arx][i] = 10*log10((float) (chest_t[arx][2*i]*chest_t[arx][2*i]+chest_t[arx][2*i+1]*chest_t[arx][2*i+1]));
|
chest_t_abs[arx][i] = 10*log10((float) (1+chest_t[arx][2*i]*chest_t[arx][2*i]+chest_t[arx][2*i+1]*chest_t[arx][2*i+1]));
|
||||||
|
|
||||||
if (chest_t_abs[arx][i] > ymax)
|
if (chest_t_abs[arx][i] > ymax)
|
||||||
ymax = chest_t_abs[arx][i];
|
ymax = chest_t_abs[arx][i];
|
||||||
|
|||||||
@@ -3122,7 +3122,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
|
|||||||
int16_t n1_pucch0,n1_pucch1,n1_pucch2,n1_pucch3;
|
int16_t n1_pucch0,n1_pucch1,n1_pucch2,n1_pucch3;
|
||||||
uint8_t do_SR = 0;
|
uint8_t do_SR = 0;
|
||||||
uint8_t pucch_sel = 0;
|
uint8_t pucch_sel = 0;
|
||||||
int32_t metric0=0,metric1=0;
|
int32_t metric0=0,metric1=0,metric0_SR=0;
|
||||||
ANFBmode_t bundling_flag;
|
ANFBmode_t bundling_flag;
|
||||||
PUCCH_FMT_t format;
|
PUCCH_FMT_t format;
|
||||||
uint8_t nPRS;
|
uint8_t nPRS;
|
||||||
@@ -3664,7 +3664,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
|
|||||||
harq_pid,
|
harq_pid,
|
||||||
&phy_vars_eNB->ulsch_eNB[i]->Msg3_flag);
|
&phy_vars_eNB->ulsch_eNB[i]->Msg3_flag);
|
||||||
|
|
||||||
// false msg3 detection by MAC: empty PDU
|
// one-shot msg3 detection by MAC: empty PDU (e.g. CRNTI)
|
||||||
if (phy_vars_eNB->ulsch_eNB[i]->Msg3_flag == 0 ) {
|
if (phy_vars_eNB->ulsch_eNB[i]->Msg3_flag == 0 ) {
|
||||||
phy_vars_eNB->eNB_UE_stats[i].mode = PRACH;
|
phy_vars_eNB->eNB_UE_stats[i].mode = PRACH;
|
||||||
mac_xface->cancel_ra_proc(phy_vars_eNB->Mod_id,
|
mac_xface->cancel_ra_proc(phy_vars_eNB->Mod_id,
|
||||||
@@ -3868,24 +3868,24 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
|
|||||||
phy_vars_eNB->eNB_UE_stats[i].sr_total++;
|
phy_vars_eNB->eNB_UE_stats[i].sr_total++;
|
||||||
|
|
||||||
if (abstraction_flag == 0)
|
if (abstraction_flag == 0)
|
||||||
metric0 = rx_pucch(phy_vars_eNB,
|
metric0_SR = rx_pucch(phy_vars_eNB,
|
||||||
pucch_format1,
|
pucch_format1,
|
||||||
i,
|
i,
|
||||||
phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex,
|
phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex,
|
||||||
0, // n2_pucch
|
0, // n2_pucch
|
||||||
0, // shortened format, should be use_srs flag, later
|
0, // shortened format, should be use_srs flag, later
|
||||||
&SR_payload,
|
&SR_payload,
|
||||||
subframe,
|
subframe,
|
||||||
PUCCH1_THRES);
|
PUCCH1_THRES);
|
||||||
|
|
||||||
#ifdef PHY_ABSTRACTION
|
#ifdef PHY_ABSTRACTION
|
||||||
else {
|
else {
|
||||||
metric0 = rx_pucch_emul(phy_vars_eNB,
|
metric0_SR = rx_pucch_emul(phy_vars_eNB,
|
||||||
i,
|
i,
|
||||||
pucch_format1,
|
pucch_format1,
|
||||||
0,
|
0,
|
||||||
&SR_payload,
|
&SR_payload,
|
||||||
sched_subframe);
|
sched_subframe);
|
||||||
LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d Checking SR (UE SR %d/%d)\n",phy_vars_eNB->Mod_id,
|
LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d Checking SR (UE SR %d/%d)\n",phy_vars_eNB->Mod_id,
|
||||||
phy_vars_eNB->ulsch_eNB[i]->rnti,frame,subframe,SR_payload,phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex);
|
phy_vars_eNB->ulsch_eNB[i]->rnti,frame,subframe,SR_payload,phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex);
|
||||||
}
|
}
|
||||||
@@ -3921,20 +3921,35 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
|
|||||||
if ((n1_pucch0==-1) && (n1_pucch1==-1)) { // just check for SR
|
if ((n1_pucch0==-1) && (n1_pucch1==-1)) { // just check for SR
|
||||||
} else if (phy_vars_eNB->lte_frame_parms.frame_type==FDD) { // FDD
|
} else if (phy_vars_eNB->lte_frame_parms.frame_type==FDD) { // FDD
|
||||||
// if SR was detected, use the n1_pucch from SR, else use n1_pucch0
|
// if SR was detected, use the n1_pucch from SR, else use n1_pucch0
|
||||||
n1_pucch0 = (SR_payload==1) ? phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex:n1_pucch0;
|
// n1_pucch0 = (SR_payload==1) ? phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex:n1_pucch0;
|
||||||
|
|
||||||
LOG_D(PHY,"Demodulating PUCCH for ACK/NAK: n1_pucch0 %d (%d), SR_payload %d\n",n1_pucch0,phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex,SR_payload);
|
LOG_D(PHY,"Demodulating PUCCH for ACK/NAK: n1_pucch0 %d (%d), SR_payload %d\n",n1_pucch0,phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex,SR_payload);
|
||||||
|
|
||||||
if (abstraction_flag == 0)
|
if (abstraction_flag == 0) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
metric0 = rx_pucch(phy_vars_eNB,
|
metric0 = rx_pucch(phy_vars_eNB,
|
||||||
pucch_format1a,
|
pucch_format1a,
|
||||||
i,
|
i,
|
||||||
(uint16_t)n1_pucch0,
|
(uint16_t)n1_pucch0,
|
||||||
0, //n2_pucch
|
0, //n2_pucch
|
||||||
1, // shortened format
|
0, // shortened format
|
||||||
pucch_payload0,
|
pucch_payload0,
|
||||||
subframe,
|
subframe,
|
||||||
PUCCH1a_THRES);
|
PUCCH1a_THRES);
|
||||||
|
|
||||||
|
if (metric0 < metric0_SR)
|
||||||
|
metric0=rx_pucch(phy_vars_eNB,
|
||||||
|
pucch_format1a,
|
||||||
|
i,
|
||||||
|
phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex,
|
||||||
|
0, //n2_pucch
|
||||||
|
0, // shortened format
|
||||||
|
pucch_payload0,
|
||||||
|
subframe,
|
||||||
|
PUCCH1a_THRES);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
#ifdef PHY_ABSTRACTION
|
#ifdef PHY_ABSTRACTION
|
||||||
metric0 = rx_pucch_emul(phy_vars_eNB,i,
|
metric0 = rx_pucch_emul(phy_vars_eNB,i,
|
||||||
@@ -3986,15 +4001,15 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (abstraction_flag == 0)
|
if (abstraction_flag == 0)
|
||||||
metric0 = rx_pucch(phy_vars_eNB,
|
metric0_SR = rx_pucch(phy_vars_eNB,
|
||||||
format,
|
format,
|
||||||
i,
|
i,
|
||||||
phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex,
|
phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex,
|
||||||
0, //n2_pucch
|
0, //n2_pucch
|
||||||
1, // shortened format
|
0, // shortened format
|
||||||
pucch_payload0,
|
pucch_payload0,
|
||||||
subframe,
|
subframe,
|
||||||
PUCCH1a_THRES);
|
PUCCH1a_THRES);
|
||||||
else {
|
else {
|
||||||
#ifdef PHY_ABSTRACTION
|
#ifdef PHY_ABSTRACTION
|
||||||
metric0 = rx_pucch_emul(phy_vars_eNB,i,
|
metric0 = rx_pucch_emul(phy_vars_eNB,i,
|
||||||
@@ -4022,7 +4037,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
|
|||||||
i,
|
i,
|
||||||
(uint16_t)n1_pucch0,
|
(uint16_t)n1_pucch0,
|
||||||
0, // n2_pucch
|
0, // n2_pucch
|
||||||
1, // shortened format
|
0, // shortened format
|
||||||
pucch_payload0,
|
pucch_payload0,
|
||||||
subframe,
|
subframe,
|
||||||
PUCCH1a_THRES);
|
PUCCH1a_THRES);
|
||||||
@@ -4045,7 +4060,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
|
|||||||
i,
|
i,
|
||||||
(uint16_t)n1_pucch1,
|
(uint16_t)n1_pucch1,
|
||||||
0, //n2_pucch
|
0, //n2_pucch
|
||||||
1, // shortened format
|
0, // shortened format
|
||||||
pucch_payload1,
|
pucch_payload1,
|
||||||
subframe,
|
subframe,
|
||||||
PUCCH1a_THRES);
|
PUCCH1a_THRES);
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ void rx_sdu(
|
|||||||
int ii,j;
|
int ii,j;
|
||||||
eNB_MAC_INST *eNB = &eNB_mac_inst[enb_mod_idP];
|
eNB_MAC_INST *eNB = &eNB_mac_inst[enb_mod_idP];
|
||||||
UE_list_t *UE_list= &eNB->UE_list;
|
UE_list_t *UE_list= &eNB->UE_list;
|
||||||
|
int crnti_rx=0;
|
||||||
|
|
||||||
start_meas(&eNB->rx_ulsch_sdu);
|
start_meas(&eNB->rx_ulsch_sdu);
|
||||||
|
|
||||||
@@ -128,9 +129,9 @@ void rx_sdu(
|
|||||||
case CRNTI:
|
case CRNTI:
|
||||||
UE_id = find_UE_id(enb_mod_idP,(((uint16_t)payload_ptr[0])<<8) + payload_ptr[1]);
|
UE_id = find_UE_id(enb_mod_idP,(((uint16_t)payload_ptr[0])<<8) + payload_ptr[1]);
|
||||||
LOG_I(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d (ce %d/%d): CRNTI %x (UE_id %d) in Msg3\n",enb_mod_idP, CC_idP, rx_ces[i], i,num_ce,(((uint16_t)payload_ptr[0])<<8) + payload_ptr[1],UE_id);
|
LOG_I(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d (ce %d/%d): CRNTI %x (UE_id %d) in Msg3\n",enb_mod_idP, CC_idP, rx_ces[i], i,num_ce,(((uint16_t)payload_ptr[0])<<8) + payload_ptr[1],UE_id);
|
||||||
|
crnti_rx=1;
|
||||||
payload_ptr+=2;
|
payload_ptr+=2;
|
||||||
/* we don't process this CE yet */
|
|
||||||
if (msg3_flagP != NULL) {
|
if (msg3_flagP != NULL) {
|
||||||
*msg3_flagP = 0;
|
*msg3_flagP = 0;
|
||||||
}
|
}
|
||||||
@@ -144,6 +145,9 @@ void rx_sdu(
|
|||||||
LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d : Received short BSR LCGID = %u bsr = %d\n",
|
LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d : Received short BSR LCGID = %u bsr = %d\n",
|
||||||
enb_mod_idP, CC_idP, rx_ces[i], lcgid, payload_ptr[0] & 0x3f);
|
enb_mod_idP, CC_idP, rx_ces[i], lcgid, payload_ptr[0] & 0x3f);
|
||||||
|
|
||||||
|
if (crnti_rx==1)
|
||||||
|
LOG_I(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d : Received short BSR LCGID = %u bsr = %d\n",
|
||||||
|
enb_mod_idP, CC_idP, rx_ces[i], lcgid, payload_ptr[0] & 0x3f);
|
||||||
if (UE_id != -1) {
|
if (UE_id != -1) {
|
||||||
|
|
||||||
UE_list->UE_template[CC_idP][UE_id].bsr_info[lcgid] = (payload_ptr[0] & 0x3f);
|
UE_list->UE_template[CC_idP][UE_id].bsr_info[lcgid] = (payload_ptr[0] & 0x3f);
|
||||||
@@ -175,6 +179,15 @@ void rx_sdu(
|
|||||||
UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID1],
|
UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID1],
|
||||||
UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID2],
|
UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID2],
|
||||||
UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID3]);
|
UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID3]);
|
||||||
|
if (crnti_rx==1)
|
||||||
|
LOG_I(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d: Received long BSR LCGID0 = %u LCGID1 = "
|
||||||
|
"%u LCGID2 = %u LCGID3 = %u\n",
|
||||||
|
enb_mod_idP, CC_idP,
|
||||||
|
rx_ces[i],
|
||||||
|
UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID0],
|
||||||
|
UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID1],
|
||||||
|
UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID2],
|
||||||
|
UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID3]);
|
||||||
|
|
||||||
if (UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID0] == 0 ) {
|
if (UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID0] == 0 ) {
|
||||||
UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[LCGID0]=0;
|
UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[LCGID0]=0;
|
||||||
|
|||||||
Reference in New Issue
Block a user