git-svn-id: http://svn.eurecom.fr/openair4G/trunk@6522 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -230,7 +230,7 @@ void ue_rrc_measurements(PHY_VARS_UE *phy_vars_ue,
|
||||
}
|
||||
}
|
||||
|
||||
LOG_D(PHY,"eNB: %d, RSRP_tmp: %d \n",eNB_offset,phy_vars_ue->PHY_measurements.rsrp[eNB_offset]);
|
||||
// LOG_D(PHY,"eNB: %d, RSRP_tmp: %d \n",eNB_offset,phy_vars_ue->PHY_measurements.rsrp[eNB_offset]);
|
||||
// 2 RE per PRB
|
||||
phy_vars_ue->PHY_measurements.rsrp[eNB_offset]/=(24*phy_vars_ue->lte_frame_parms.N_RB_DL);
|
||||
|
||||
@@ -256,7 +256,7 @@ void ue_rrc_measurements(PHY_VARS_UE *phy_vars_ue,
|
||||
|
||||
}
|
||||
if (((phy_vars_ue->frame_rx %10) == 0) && (slot == 0)) {
|
||||
#ifdef DEBUG_MEAS
|
||||
//#ifdef DEBUG_MEAS
|
||||
if (eNB_offset == 0)
|
||||
LOG_D(PHY,"[UE %d] Frame %d, slot %d RRC Measurements => rssi %3.1f dBm (digital: %3.1f dB, gain %d)\n",phy_vars_ue->Mod_id,
|
||||
phy_vars_ue->frame_rx,slot,10*log10(phy_vars_ue->PHY_measurements.rssi)-phy_vars_ue->rx_total_gain_dB,
|
||||
@@ -274,7 +274,7 @@ void ue_rrc_measurements(PHY_VARS_UE *phy_vars_ue,
|
||||
//LOG_D(PHY,"RSRP_dB: %3.2f \n",(dB_fixed_times10(phy_vars_ue->PHY_measurements.rsrp[eNB_offset])/10.0));
|
||||
//LOG_D(PHY,"gain_loss_dB: %d \n",phy_vars_ue->rx_total_gain_dB);
|
||||
//LOG_D(PHY,"gain_fixed_dB: %d \n",dB_fixed(phy_vars_ue->lte_frame_parms.N_RB_DL*12));
|
||||
#endif
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -414,7 +414,7 @@ FD_lte_phy_scope_ue *create_lte_phy_scope_ue( void ) {
|
||||
|
||||
return fdui;
|
||||
}
|
||||
|
||||
|
||||
void phy_scope_UE(FD_lte_phy_scope_ue *form,
|
||||
PHY_VARS_UE *phy_vars_ue,
|
||||
int eNB_id,
|
||||
|
||||
+33
-13
@@ -399,46 +399,66 @@ typedef enum {
|
||||
/// Top-level PHY Data Structure for UE
|
||||
typedef struct
|
||||
{
|
||||
/// Module ID indicator for this instance
|
||||
/// \brief Module ID indicator for this instance
|
||||
uint8_t Mod_id;
|
||||
/// \brief Component carrier ID for this PHY instance
|
||||
uint8_t CC_id;
|
||||
uint8_t local_flag;
|
||||
//uint8_t local_flag;
|
||||
/// \brief Indicator of current run mode of UE (normal_txrx, rx_calib_ue, no_L2_connect, debug_prach)
|
||||
runmode_t mode;
|
||||
/// \brief Indicator that UE should perform band scanning
|
||||
int UE_scan;
|
||||
/// \brief Indicator that UE is synchronized to an eNB
|
||||
int is_synchronized;
|
||||
/// \brief Instance count of TX processing thread (-1 means ready, 0 means busy)
|
||||
int instance_cnt_tx;
|
||||
/// \brief Instance count of RX processing thread (-1 means ready, 0 means busy)
|
||||
int instance_cnt_rx;
|
||||
/// \brief Instance cound of initial synchronization thread (-1 means ready, 0 means busy)
|
||||
int instance_cnt_synch;
|
||||
/// \brief Condition variable for TX processing thread
|
||||
pthread_cond_t cond_tx;
|
||||
/// \brief Condition variable for RX processing thread
|
||||
pthread_cond_t cond_rx;
|
||||
/// \brief Condition variable for initial synchronization thread
|
||||
pthread_cond_t cond_synch;
|
||||
/// \brief Mutex for TX processing thread
|
||||
pthread_mutex_t mutex_tx;
|
||||
/// \brief Mutex for RX processing thread
|
||||
pthread_mutex_t mutex_rx;
|
||||
/// \brief Mutex for initial synchronization thread
|
||||
pthread_mutex_t mutex_synch;
|
||||
/// \brief Pthread structure for RX processing thread
|
||||
pthread_t thread_rx;
|
||||
/// \brief Pthread structure for TX processing thread
|
||||
pthread_t thread_tx;
|
||||
/// \brief Pthread structure to RX processing thread
|
||||
pthread_t thread_synch;
|
||||
/// \brief Total gain of the TX chain (16-bit baseband I/Q to antenna)
|
||||
uint32_t tx_total_gain_dB;
|
||||
/// \brief This is a function of rx_gain_mode (and the corresponding gain) and the rx_gain of the card.
|
||||
/// \brief Total gain of the RX chain (antenna to baseband I/Q) This is a function of rx_gain_mode (and the corresponding gain) and the rx_gain of the card.
|
||||
uint32_t rx_total_gain_dB;
|
||||
/// \brief ?.
|
||||
/// - first index: ? [0..3] (hard coded)
|
||||
/// \brief Total gains with maximum RF gain stage (ExpressMIMO2/Lime)
|
||||
uint32_t rx_gain_max[4];
|
||||
/*
|
||||
rx_gain_t rx_gain_mode[4];*/
|
||||
/// \brief ?.
|
||||
/// - first index: ? [0..3] (hard coded)
|
||||
/// \brief Total gains with medium RF gain stage (ExpressMIMO2/Lime)
|
||||
uint32_t rx_gain_med[4];
|
||||
/// \brief ?.
|
||||
/// - first index: ? [0..3] (hard coded)
|
||||
/// \brief Total gains with bypassed RF gain stage (ExpressMIMO2/Lime)
|
||||
uint32_t rx_gain_byp[4];
|
||||
/// \brief ?.
|
||||
/// \brief Current transmit power
|
||||
int8_t tx_power_dBm;
|
||||
/// \brief Total number of REs in current transmission
|
||||
int tx_total_RE;
|
||||
/// \brief Maximum transmit power
|
||||
int8_t tx_power_max_dBm;
|
||||
// uint32_t frame;
|
||||
/// \brief Frame counters for TX and RX processing
|
||||
uint32_t frame_rx,frame_tx;
|
||||
/// \brief Slot counters for TX and RX processing
|
||||
uint32_t slot_tx,slot_rx;
|
||||
/// \brief Number of eNB seen by UE
|
||||
uint8_t n_connected_eNB;
|
||||
/// \brief indicator that Handover procedure has been initiated
|
||||
uint8_t ho_initiated;
|
||||
/// \brief indicator that Handover procedure has been triggered
|
||||
uint8_t ho_triggered;
|
||||
/// \brief Measurement variables.
|
||||
PHY_MEASUREMENTS PHY_measurements;
|
||||
|
||||
@@ -237,6 +237,7 @@
|
||||
#define AMP 128
|
||||
#else
|
||||
#define AMP 512//1024 //4096
|
||||
#define AMP_BPSK 724
|
||||
#endif
|
||||
|
||||
#define AMP_OVER_SQRT2 ((AMP*ONE_OVER_SQRT2_Q15)>>15)
|
||||
|
||||
@@ -523,32 +523,127 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e
|
||||
else
|
||||
rand = (rand%4)+5;
|
||||
*/
|
||||
uint32_t bcch_pdu;
|
||||
|
||||
DCI_pdu->Num_common_dci = 0;
|
||||
DCI_pdu->Num_ue_spec_dci=0;
|
||||
|
||||
|
||||
|
||||
switch (subframe) {
|
||||
case 5:
|
||||
DCI_pdu->Num_common_dci = 1;
|
||||
if (phy_vars_eNB->lte_frame_parms.frame_type == FDD)
|
||||
DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_5MHz_FDD_t;
|
||||
else
|
||||
DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_5MHz_TDD_1_6_t;
|
||||
DCI_pdu->dci_alloc[0].L = 2;
|
||||
DCI_pdu->dci_alloc[0].rnti = SI_RNTI;
|
||||
DCI_pdu->dci_alloc[0].format = format1A;
|
||||
DCI_pdu->dci_alloc[0].ra_flag = 0;
|
||||
|
||||
BCCH_alloc_pdu.type = 1;
|
||||
BCCH_alloc_pdu.vrb_type = 0;
|
||||
BCCH_alloc_pdu.rballoc = computeRIV(25,10,3);
|
||||
BCCH_alloc_pdu.ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
|
||||
BCCH_alloc_pdu.rv = 1;
|
||||
BCCH_alloc_pdu.mcs = 1;
|
||||
BCCH_alloc_pdu.harq_pid = 0;
|
||||
BCCH_alloc_pdu.TPC = 1; // set to 3 PRB
|
||||
memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&BCCH_alloc_pdu,sizeof(DCI1A_5MHz_TDD_1_6_t));
|
||||
switch (phy_vars_eNB->lte_frame_parms.N_RB_DL) {
|
||||
case 6:
|
||||
if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
|
||||
DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_5MHz_FDD_t;
|
||||
((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->type = 1;
|
||||
((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->vrb_type = 0;
|
||||
((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
|
||||
((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
|
||||
((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->rv = 1;
|
||||
((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->mcs = 1;
|
||||
((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->harq_pid = 0;
|
||||
((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
|
||||
memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_1_5MHz_TDD_1_6_t));
|
||||
}
|
||||
else {
|
||||
DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_1_5MHz_TDD_1_6_t;
|
||||
((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->type = 1;
|
||||
((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type = 0;
|
||||
((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
|
||||
((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
|
||||
((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->rv = 1;
|
||||
((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->mcs = 1;
|
||||
((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid = 0;
|
||||
((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
|
||||
memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_1_5MHz_TDD_1_6_t));
|
||||
}
|
||||
break;
|
||||
case 25:
|
||||
default:
|
||||
if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
|
||||
DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_5MHz_FDD_t;
|
||||
((DCI1A_5MHz_FDD_t*)&bcch_pdu)->type = 1;
|
||||
((DCI1A_5MHz_FDD_t*)&bcch_pdu)->vrb_type = 0;
|
||||
((DCI1A_5MHz_FDD_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
|
||||
((DCI1A_5MHz_FDD_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
|
||||
((DCI1A_5MHz_FDD_t*)&bcch_pdu)->rv = 1;
|
||||
((DCI1A_5MHz_FDD_t*)&bcch_pdu)->mcs = 1;
|
||||
((DCI1A_5MHz_FDD_t*)&bcch_pdu)->harq_pid = 0;
|
||||
((DCI1A_5MHz_FDD_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
|
||||
memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_5MHz_TDD_1_6_t));
|
||||
}
|
||||
else {
|
||||
DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_5MHz_TDD_1_6_t;
|
||||
((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->type = 1;
|
||||
((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type = 0;
|
||||
((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
|
||||
((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
|
||||
((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->rv = 1;
|
||||
((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->mcs = 1;
|
||||
((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid = 0;
|
||||
((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
|
||||
memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_5MHz_TDD_1_6_t));
|
||||
}
|
||||
break;
|
||||
case 50:
|
||||
if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
|
||||
DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_10MHz_FDD_t;
|
||||
((DCI1A_10MHz_FDD_t*)&bcch_pdu)->type = 1;
|
||||
((DCI1A_10MHz_FDD_t*)&bcch_pdu)->vrb_type = 0;
|
||||
((DCI1A_10MHz_FDD_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
|
||||
((DCI1A_10MHz_FDD_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
|
||||
((DCI1A_10MHz_FDD_t*)&bcch_pdu)->rv = 1;
|
||||
((DCI1A_10MHz_FDD_t*)&bcch_pdu)->mcs = 1;
|
||||
((DCI1A_10MHz_FDD_t*)&bcch_pdu)->harq_pid = 0;
|
||||
((DCI1A_10MHz_FDD_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
|
||||
memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_10MHz_TDD_1_6_t));
|
||||
}
|
||||
else {
|
||||
DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_10MHz_TDD_1_6_t;
|
||||
((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->type = 1;
|
||||
((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type = 0;
|
||||
((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
|
||||
((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
|
||||
((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->rv = 1;
|
||||
((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->mcs = 1;
|
||||
((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid = 0;
|
||||
((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
|
||||
memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_10MHz_TDD_1_6_t));
|
||||
}
|
||||
break;
|
||||
case 100:
|
||||
if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
|
||||
DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_10MHz_FDD_t;
|
||||
((DCI1A_20MHz_FDD_t*)&bcch_pdu)->type = 1;
|
||||
((DCI1A_20MHz_FDD_t*)&bcch_pdu)->vrb_type = 0;
|
||||
((DCI1A_20MHz_FDD_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
|
||||
((DCI1A_20MHz_FDD_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
|
||||
((DCI1A_20MHz_FDD_t*)&bcch_pdu)->rv = 1;
|
||||
((DCI1A_20MHz_FDD_t*)&bcch_pdu)->mcs = 1;
|
||||
((DCI1A_20MHz_FDD_t*)&bcch_pdu)->harq_pid = 0;
|
||||
((DCI1A_20MHz_FDD_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
|
||||
memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_20MHz_TDD_1_6_t));
|
||||
}
|
||||
else {
|
||||
DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_20MHz_TDD_1_6_t;
|
||||
((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->type = 1;
|
||||
((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type = 0;
|
||||
((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
|
||||
((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
|
||||
((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->rv = 1;
|
||||
((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->mcs = 1;
|
||||
((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid = 0;
|
||||
((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
|
||||
memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_20MHz_TDD_1_6_t));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 6:
|
||||
/*
|
||||
DCI_pdu->Num_ue_spec_dci = 1;
|
||||
@@ -1169,12 +1264,12 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
if (subframe == 0) {
|
||||
if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
|
||||
generate_pss(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
|
||||
AMP,
|
||||
AMP_BPSK,
|
||||
&phy_vars_eNB->lte_frame_parms,
|
||||
(phy_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 6 : 5,
|
||||
0);
|
||||
generate_sss(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
|
||||
AMP,
|
||||
AMP_BPSK,
|
||||
&phy_vars_eNB->lte_frame_parms,
|
||||
(phy_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 5 : 4,
|
||||
0);
|
||||
@@ -1293,7 +1388,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
if (phy_vars_eNB->lte_frame_parms.frame_type == TDD) {
|
||||
// printf("Generating PSS (frame %d, subframe %d)\n",phy_vars_eNB->proc[sched_subframe].frame_tx,next_slot>>1);
|
||||
generate_pss(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
|
||||
AMP,
|
||||
AMP_BPSK,
|
||||
&phy_vars_eNB->lte_frame_parms,
|
||||
2,
|
||||
2);
|
||||
@@ -1308,12 +1403,12 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
|
||||
if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
|
||||
generate_pss(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
|
||||
AMP,
|
||||
AMP_BPSK,
|
||||
&phy_vars_eNB->lte_frame_parms,
|
||||
(phy_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 6 : 5,
|
||||
10);
|
||||
generate_sss(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
|
||||
AMP,
|
||||
AMP_BPSK,
|
||||
&phy_vars_eNB->lte_frame_parms,
|
||||
(phy_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 5 : 4,
|
||||
10);
|
||||
@@ -1342,7 +1437,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
if (phy_vars_eNB->lte_frame_parms.frame_type == TDD) {
|
||||
// printf("Generating PSS (frame %d, subframe %d)\n",phy_vars_eNB->proc[sched_subframe].frame_tx,next_slot>>1);
|
||||
generate_pss(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
|
||||
AMP,
|
||||
AMP_BPSK,
|
||||
&phy_vars_eNB->lte_frame_parms,
|
||||
2,
|
||||
12);
|
||||
|
||||
Reference in New Issue
Block a user