Merge remote-tracking branch 'origin/develop' into enhancement-64-phy_test
Conflicts: openair1/SCHED/phy_procedures_lte_ue.c targets/SIMU/USER/oaisim_functions.c
This commit is contained in:
@@ -38,23 +38,16 @@ extern int card;
|
||||
#endif
|
||||
|
||||
void
|
||||
phy_adjust_gain (PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id)
|
||||
phy_adjust_gain (PHY_VARS_UE *phy_vars_ue, uint32_t rx_power_fil_dB, uint8_t eNB_id)
|
||||
{
|
||||
|
||||
uint16_t rx_power_fil_dB;
|
||||
#ifdef EXMIMO
|
||||
exmimo_config_t *p_exmimo_config = openair0_exmimo_pci[card].exmimo_config_ptr;
|
||||
uint16_t i;
|
||||
#endif
|
||||
int rssi;
|
||||
|
||||
rssi = dB_fixed(phy_vars_ue->PHY_measurements.rssi);
|
||||
|
||||
if (rssi>0) rx_power_fil_dB = rssi;
|
||||
else rx_power_fil_dB = phy_vars_ue->PHY_measurements.rx_power_avg_dB[eNB_id];
|
||||
|
||||
LOG_D(PHY,"Gain control: rssi %d (%d,%d)\n",
|
||||
rssi,
|
||||
rx_power_fil_dB,
|
||||
phy_vars_ue->PHY_measurements.rssi,
|
||||
phy_vars_ue->PHY_measurements.rx_power_avg_dB[eNB_id]
|
||||
);
|
||||
|
||||
@@ -213,6 +213,7 @@ int8_t set_RSRQ_filtered(module_id_t Mod_id,uint8_t CC_id,uint8_t eNB_index,floa
|
||||
|
||||
//! Automatic gain control
|
||||
void phy_adjust_gain (PHY_VARS_UE *phy_vars_ue,
|
||||
uint32_t rx_power_fil_dB,
|
||||
unsigned char eNB_id);
|
||||
|
||||
int lte_ul_channel_estimation(PHY_VARS_eNB *phy_vars_eNB,
|
||||
|
||||
@@ -483,13 +483,10 @@ int lte_sync_time(int **rxdata, ///rx data in time domain
|
||||
|
||||
*eNB_id = sync_source;
|
||||
|
||||
LOG_D(PHY,"[UE] lte_sync_time: Sync source = %d, Peak found at pos %d, val = %d (%d dB)\n",sync_source,peak_pos,peak_val,dB_fixed(peak_val)/2);
|
||||
|
||||
|
||||
#ifdef DEBUG_PHY
|
||||
msg("[PHY][UE] lte_sync_time: Sync source = %d, Peak found at pos %d, val = %d\n",
|
||||
sync_source,peak_pos,peak_val);
|
||||
|
||||
|
||||
|
||||
|
||||
if (debug_cnt == 0) {
|
||||
write_output("sync_corr0_ue.m","synccorr0",sync_corr_ue0,2*length,1,2);
|
||||
write_output("sync_corr1_ue.m","synccorr1",sync_corr_ue1,2*length,1,2);
|
||||
|
||||
@@ -280,7 +280,6 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
|
||||
uint8_t flip_fdd_ncp,flip_fdd_ecp,flip_tdd_ncp,flip_tdd_ecp;
|
||||
// uint16_t Nid_cell_fdd_ncp=0,Nid_cell_fdd_ecp=0,Nid_cell_tdd_ncp=0,Nid_cell_tdd_ecp=0;
|
||||
LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms;
|
||||
int i;
|
||||
int ret=-1;
|
||||
int aarx,rx_power=0;
|
||||
/*#ifdef OAI_USRP
|
||||
@@ -309,34 +308,6 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
|
||||
LOG_I(PHY,"[UE%d] Initial sync : Estimated PSS position %d, Nid2 %d\n",phy_vars_ue->Mod_id,sync_pos,phy_vars_ue->lte_ue_common_vars.eNb_id);
|
||||
#endif
|
||||
|
||||
|
||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++)
|
||||
rx_power += signal_energy(&phy_vars_ue->lte_ue_common_vars.rxdata[aarx][sync_pos2],
|
||||
frame_parms->ofdm_symbol_size+frame_parms->nb_prefix_samples);
|
||||
|
||||
phy_vars_ue->PHY_measurements.rx_power_avg_dB[0] = dB_fixed(rx_power/frame_parms->nb_antennas_rx);
|
||||
|
||||
#ifdef DEBUG_INITIAL_SYNCH
|
||||
LOG_I(PHY,"[UE%d] Initial sync : Estimated power: %d dB\n",phy_vars_ue->Mod_id,phy_vars_ue->PHY_measurements.rx_power_avg_dB[0] );
|
||||
#endif
|
||||
|
||||
#ifdef EXMIMO
|
||||
|
||||
if ((openair_daq_vars.rx_gain_mode == DAQ_AGC_ON) &&
|
||||
(mode != rx_calib_ue) && (mode != rx_calib_ue_med) && (mode != rx_calib_ue_byp) )
|
||||
//phy_adjust_gain(phy_vars_ue,0);
|
||||
gain_control_all(phy_vars_ue->PHY_measurements.rx_power_avg_dB[0],0);
|
||||
|
||||
#else
|
||||
#ifndef OAI_USRP
|
||||
#ifndef OAI_BLADERF
|
||||
#ifndef OAI_LMSSDR
|
||||
phy_adjust_gain(phy_vars_ue,0);
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// SSS detection
|
||||
|
||||
// PSS is hypothesized in last symbol of first slot in Frame
|
||||
@@ -592,6 +563,65 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
|
||||
|
||||
}
|
||||
|
||||
// gain control
|
||||
if (ret!=0) { //we are not synched, so we cannot use rssi measurement (which is based on channel estimates)
|
||||
rx_power = 0;
|
||||
|
||||
// do a measurement on the best guess of the PSS
|
||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++)
|
||||
rx_power += signal_energy(&phy_vars_ue->lte_ue_common_vars.rxdata[aarx][sync_pos2],
|
||||
frame_parms->ofdm_symbol_size+frame_parms->nb_prefix_samples);
|
||||
|
||||
/*
|
||||
// do a measurement on the full frame
|
||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++)
|
||||
rx_power += signal_energy(&phy_vars_ue->lte_ue_common_vars.rxdata[aarx][0],
|
||||
frame_parms->samples_per_tti*10);
|
||||
*/
|
||||
|
||||
// we might add a low-pass filter here later
|
||||
phy_vars_ue->PHY_measurements.rx_power_avg[0] = rx_power/frame_parms->nb_antennas_rx;
|
||||
|
||||
phy_vars_ue->PHY_measurements.rx_power_avg_dB[0] = dB_fixed(phy_vars_ue->PHY_measurements.rx_power_avg[0]);
|
||||
|
||||
#ifdef DEBUG_INITIAL_SYNCH
|
||||
LOG_I(PHY,"[UE%d] Initial sync : Estimated power: %d dB\n",phy_vars_ue->Mod_id,phy_vars_ue->PHY_measurements.rx_power_avg_dB[0] );
|
||||
#endif
|
||||
|
||||
#ifdef EXMIMO
|
||||
if ((openair_daq_vars.rx_gain_mode == DAQ_AGC_ON) &&
|
||||
(mode != rx_calib_ue) && (mode != rx_calib_ue_med) && (mode != rx_calib_ue_byp) )
|
||||
//phy_adjust_gain(phy_vars_ue,0);
|
||||
gain_control_all(phy_vars_ue->PHY_measurements.rx_power_avg_dB[0],0);
|
||||
|
||||
#else
|
||||
#ifndef OAI_USRP
|
||||
#ifndef OAI_BLADERF
|
||||
#ifndef OAI_LMSSDR
|
||||
phy_adjust_gain(phy_vars_ue,phy_vars_ue->PHY_measurements.rx_power_avg_dB[0],0);
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
#ifdef EXMIMO
|
||||
if ((openair_daq_vars.rx_gain_mode == DAQ_AGC_ON) &&
|
||||
(mode != rx_calib_ue) && (mode != rx_calib_ue_med) && (mode != rx_calib_ue_byp) )
|
||||
//phy_adjust_gain(phy_vars_ue,0);
|
||||
gain_control_all(dB_fixed(phy_vars_ue->PHY_measurements.rssi),0);
|
||||
|
||||
#else
|
||||
#ifndef OAI_USRP
|
||||
#ifndef OAI_BLADERF
|
||||
#ifndef OAI_LMSSDR
|
||||
phy_adjust_gain(phy_vars_ue,dB_fixed(phy_vars_ue->PHY_measurements.rssi),0);
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
// exit_fun("debug exit");
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1530,13 +1530,13 @@ void lte_ue_measurement_procedures(uint16_t l, PHY_VARS_UE *phy_vars_ue,uint8_t
|
||||
if ((openair_daq_vars.rx_gain_mode == DAQ_AGC_ON) &&
|
||||
(mode != rx_calib_ue) && (mode != rx_calib_ue_med) && (mode != rx_calib_ue_byp) )
|
||||
if (phy_vars_ue->frame_rx%100==0)
|
||||
gain_control_all(phy_vars_ue->PHY_measurements.rx_power_avg_dB[eNB_id],0);
|
||||
gain_control_all(dB_fixed(phy_vars_ue->PHY_measurements.rssi),0);
|
||||
|
||||
#else
|
||||
#ifndef OAI_USRP
|
||||
#ifndef OAI_BLADERF
|
||||
#ifndef OAI_LMSSDR
|
||||
phy_adjust_gain (phy_vars_ue,0);
|
||||
phy_adjust_gain (phy_vars_ue,dB_fixed(phy_vars_ue->PHY_measurements.rssi),0);
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -61,25 +61,7 @@
|
||||
extern unsigned int dlsch_tbs25[27][25],TBStable[27][110];
|
||||
extern unsigned char offset_mumimo_llr_drange_fix;
|
||||
|
||||
#ifdef XFORMS
|
||||
#include "PHY/TOOLS/lte_phy_scope.h"
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
//#define AWGN
|
||||
//#define NO_DCI
|
||||
|
||||
|
||||
|
||||
//#define ABSTRACTION
|
||||
|
||||
/*
|
||||
#define RBmask0 0x00fc00fc
|
||||
#define RBmask1 0x0
|
||||
#define RBmask2 0x0
|
||||
#define RBmask3 0x0
|
||||
*/
|
||||
|
||||
PHY_VARS_eNB *PHY_vars_eNB;
|
||||
PHY_VARS_UE *PHY_vars_UE;
|
||||
@@ -237,10 +219,9 @@ int main(int argc, char **argv)
|
||||
short *uncoded_ber_bit=NULL;
|
||||
uint8_t N_RB_DL=25,osf=1;
|
||||
frame_t frame_type = FDD;
|
||||
#ifdef XFORMS
|
||||
int xforms=0;
|
||||
FD_lte_phy_scope_ue *form_ue;
|
||||
char title[255];
|
||||
#endif
|
||||
uint32_t DLSCH_RB_ALLOC = 0x1fff;
|
||||
int numCCE=0;
|
||||
int dci_length_bytes=0,dci_length=0;
|
||||
@@ -305,7 +286,7 @@ int main(int argc, char **argv)
|
||||
// num_layers = 1;
|
||||
perfect_ce = 0;
|
||||
|
||||
while ((c = getopt (argc, argv, "ahdpZDe:Em:n:o:s:f:t:c:g:r:F:x:y:z:AM:N:I:i:O:R:S:C:T:b:u:v:w:B:PLl:Y")) != -1) {
|
||||
while ((c = getopt (argc, argv, "ahdpZDe:Em:n:o:s:f:t:c:g:r:F:x:y:z:AM:N:I:i:O:R:S:C:T:b:u:v:w:B:PLl:XY")) != -1) {
|
||||
switch (c) {
|
||||
case 'a':
|
||||
awgn_flag = 1;
|
||||
@@ -557,6 +538,10 @@ int main(int argc, char **argv)
|
||||
|
||||
break;
|
||||
|
||||
case 'X':
|
||||
xforms=1;
|
||||
break;
|
||||
|
||||
case 'Y':
|
||||
perfect_ce=1;
|
||||
break;
|
||||
@@ -636,21 +621,20 @@ int main(int argc, char **argv)
|
||||
if ((transmission_mode > 1) && (n_tx != 2))
|
||||
printf("n_tx must be >1 for transmission_mode %d\n",transmission_mode);
|
||||
|
||||
#ifdef XFORMS
|
||||
fl_initialize (&argc, argv, NULL, 0, 0);
|
||||
form_ue = create_lte_phy_scope_ue();
|
||||
sprintf (title, "LTE PHY SCOPE eNB");
|
||||
fl_show_form (form_ue->lte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
|
||||
|
||||
if (!dual_stream_UE==0) {
|
||||
openair_daq_vars.use_ia_receiver = 1;
|
||||
fl_set_button(form_ue->button_0,1);
|
||||
fl_set_object_label(form_ue->button_0, "IA Receiver ON");
|
||||
fl_set_object_color(form_ue->button_0, FL_GREEN, FL_GREEN);
|
||||
if (xforms==1) {
|
||||
fl_initialize (&argc, argv, NULL, 0, 0);
|
||||
form_ue = create_lte_phy_scope_ue();
|
||||
sprintf (title, "LTE PHY SCOPE eNB");
|
||||
fl_show_form (form_ue->lte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
|
||||
|
||||
if (!dual_stream_UE==0) {
|
||||
openair_daq_vars.use_ia_receiver = 1;
|
||||
fl_set_button(form_ue->button_0,1);
|
||||
fl_set_object_label(form_ue->button_0, "IA Receiver ON");
|
||||
fl_set_object_color(form_ue->button_0, FL_GREEN, FL_GREEN);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
if (transmission_mode==5) {
|
||||
n_users = 2;
|
||||
printf("dual_stream_UE=%d\n", dual_stream_UE);
|
||||
@@ -3496,13 +3480,13 @@ PMI_FEEDBACK:
|
||||
// PHY_vars_UE->dlsch_ue[0][0]->harq_processes[0]->round++;
|
||||
}
|
||||
|
||||
#ifdef XFORMS
|
||||
phy_scope_UE(form_ue,
|
||||
PHY_vars_UE,
|
||||
eNB_id,
|
||||
0,// UE_id
|
||||
subframe);
|
||||
#endif
|
||||
if (xforms==1) {
|
||||
phy_scope_UE(form_ue,
|
||||
PHY_vars_UE,
|
||||
eNB_id,
|
||||
0,// UE_id
|
||||
subframe);
|
||||
}
|
||||
|
||||
} //round
|
||||
|
||||
|
||||
@@ -52,9 +52,7 @@
|
||||
#include "LAYER2/MAC/vars.h"
|
||||
#include "OCG_vars.h"
|
||||
|
||||
#ifdef XFORMS
|
||||
#include "PHY/TOOLS/lte_phy_scope.h"
|
||||
#endif
|
||||
|
||||
extern unsigned short dftsizes[33];
|
||||
extern short *ul_ref_sigs[30][2][33];
|
||||
@@ -74,12 +72,9 @@ node_desc_t *ue_data[NUMBER_OF_UE_MAX];
|
||||
extern uint16_t beta_ack[16],beta_ri[16],beta_cqi[16];
|
||||
//extern char* namepointer_chMag ;
|
||||
|
||||
|
||||
|
||||
#ifdef XFORMS
|
||||
int xforms=0;
|
||||
FD_lte_phy_scope_enb *form_enb;
|
||||
char title[255];
|
||||
#endif
|
||||
|
||||
/*the following parameters are used to control the processing times*/
|
||||
double t_tx_max = -1000000000; /*!< \brief initial max process time for tx */
|
||||
@@ -204,7 +199,7 @@ int main(int argc, char **argv)
|
||||
|
||||
logInit();
|
||||
|
||||
while ((c = getopt (argc, argv, "hapZEbm:n:Y:X:x:s:w:e:q:d:D:O:c:r:i:f:y:c:oA:C:R:g:N:l:S:T:QB:PI:L")) != -1) {
|
||||
while ((c = getopt (argc, argv, "hapZEbm:n:Y:X:x:s:w:e:q:d:D:O:c:r:i:f:y:c:oA:C:R:g:N:l:S:T:QB:PI:LF")) != -1) {
|
||||
switch (c) {
|
||||
case 'a':
|
||||
channel_model = AWGN;
|
||||
@@ -454,6 +449,10 @@ int main(int argc, char **argv)
|
||||
max_turbo_iterations=atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'F':
|
||||
xforms=1;
|
||||
break;
|
||||
|
||||
case 'Z':
|
||||
dump_table = 1;
|
||||
break;
|
||||
@@ -594,12 +593,12 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
|
||||
#ifdef XFORMS
|
||||
fl_initialize (&argc, argv, NULL, 0, 0);
|
||||
form_enb = create_lte_phy_scope_enb();
|
||||
sprintf (title, "LTE PHY SCOPE eNB");
|
||||
fl_show_form (form_enb->lte_phy_scope_enb, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
|
||||
#endif
|
||||
if (xforms==1) {
|
||||
fl_initialize (&argc, argv, NULL, 0, 0);
|
||||
form_enb = create_lte_phy_scope_enb();
|
||||
sprintf (title, "LTE PHY SCOPE eNB");
|
||||
fl_show_form (form_enb->lte_phy_scope_enb, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
|
||||
}
|
||||
|
||||
PHY_vars_UE->lte_ue_pdcch_vars[0]->crnti = 14;
|
||||
|
||||
@@ -1354,9 +1353,9 @@ int main(int argc, char **argv)
|
||||
if ((errs[0]>=100) && (trials>(n_frames/2)))
|
||||
break;
|
||||
|
||||
#ifdef XFORMS
|
||||
phy_scope_eNB(form_enb,PHY_vars_eNB,0);
|
||||
#endif
|
||||
if (xforms==1)
|
||||
phy_scope_eNB(form_enb,PHY_vars_eNB,0);
|
||||
|
||||
/*calculate the total processing time for each packet, get the max, min, and number of packets that exceed t>3000us*/
|
||||
|
||||
double t_tx = (double)PHY_vars_UE->phy_proc_tx.p_time/cpu_freq_GHz/1000.0;
|
||||
|
||||
Reference in New Issue
Block a user