more fixes for oaisim, TM2.
This commit is contained in:
@@ -296,10 +296,10 @@ int32_t subcarrier_energy(int32_t *,uint32_t, int32_t* subcarrier_energy, uint16
|
|||||||
*/
|
*/
|
||||||
int32_t signal_energy_nodc(int32_t *,uint32_t);
|
int32_t signal_energy_nodc(int32_t *,uint32_t);
|
||||||
|
|
||||||
/*!\fn double signal_energy_fp(double s_re[2][30720], double s_im[2][30720],uint32_t, uint32_t,uint32_t);
|
/*!\fn double signal_energy_fp(double *s_re[2], double *s_im[2],uint32_t, uint32_t,uint32_t);
|
||||||
\brief Computes the signal energy per subcarrier
|
\brief Computes the signal energy per subcarrier
|
||||||
*/
|
*/
|
||||||
double signal_energy_fp(double s_re[2][30720], double s_im[2][30720], uint32_t nb_antennas, uint32_t length,uint32_t offset);
|
double signal_energy_fp(double *s_re[2], double *s_im[2], uint32_t nb_antennas, uint32_t length,uint32_t offset);
|
||||||
|
|
||||||
/*!\fn double signal_energy_fp2(struct complex *, uint32_t);
|
/*!\fn double signal_energy_fp2(struct complex *, uint32_t);
|
||||||
\brief Computes the signal energy per subcarrier
|
\brief Computes the signal energy per subcarrier
|
||||||
|
|||||||
@@ -255,7 +255,7 @@ int32_t signal_energy_nodc(int32_t *input,uint32_t length)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
double signal_energy_fp(double s_re[2][30720],double s_im[2][30720],uint32_t nb_antennas,uint32_t length,uint32_t offset)
|
double signal_energy_fp(double *s_re[2],double *s_im[2],uint32_t nb_antennas,uint32_t length,uint32_t offset)
|
||||||
{
|
{
|
||||||
|
|
||||||
int32_t aa,i;
|
int32_t aa,i;
|
||||||
|
|||||||
@@ -26,8 +26,8 @@
|
|||||||
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
|
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
|
||||||
|
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
void adc(double r_re[2][30720],
|
void adc(double *r_re[2],
|
||||||
double r_im[2][30720],
|
double *r_im[2],
|
||||||
unsigned int input_offset,
|
unsigned int input_offset,
|
||||||
unsigned int output_offset,
|
unsigned int output_offset,
|
||||||
unsigned int **output,
|
unsigned int **output,
|
||||||
|
|||||||
@@ -31,8 +31,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "PHY/TOOLS/defs.h"
|
#include "PHY/TOOLS/defs.h"
|
||||||
|
|
||||||
void dac(double s_re[2][30720],
|
void dac(double *s_re[2],
|
||||||
double s_im[2][30720],
|
double *s_im[2],
|
||||||
uint32_t **input,
|
uint32_t **input,
|
||||||
uint32_t input_offset,
|
uint32_t input_offset,
|
||||||
uint32_t nb_tx_antennas,
|
uint32_t nb_tx_antennas,
|
||||||
@@ -81,8 +81,8 @@ void dac(double s_re[2][30720],
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
double dac_fixed_gain(double s_re[2][30720],
|
double dac_fixed_gain(double *s_re[2],
|
||||||
double s_im[2][30720],
|
double *s_im[2],
|
||||||
uint32_t **input,
|
uint32_t **input,
|
||||||
uint32_t input_offset,
|
uint32_t input_offset,
|
||||||
uint32_t nb_tx_antennas,
|
uint32_t nb_tx_antennas,
|
||||||
|
|||||||
@@ -64,16 +64,16 @@ void rf_rx(double **r_re,
|
|||||||
double IQ_imb_dB,
|
double IQ_imb_dB,
|
||||||
double IQ_phase);
|
double IQ_phase);
|
||||||
|
|
||||||
void rf_rx_simple(double r_re[2][30720],
|
void rf_rx_simple(double *r_re[2],
|
||||||
double r_im[2][30720],
|
double *r_im[2],
|
||||||
unsigned int nb_rx_antennas,
|
unsigned int nb_rx_antennas,
|
||||||
unsigned int length,
|
unsigned int length,
|
||||||
double s_time,
|
double s_time,
|
||||||
double rx_gain_dB);
|
double rx_gain_dB);
|
||||||
|
|
||||||
|
|
||||||
void adc(double r_re[2][30720],
|
void adc(double *r_re[2],
|
||||||
double r_im[2][30720],
|
double *r_im[2],
|
||||||
unsigned int input_offset,
|
unsigned int input_offset,
|
||||||
unsigned int output_offset,
|
unsigned int output_offset,
|
||||||
int **output,
|
int **output,
|
||||||
@@ -81,8 +81,8 @@ void adc(double r_re[2][30720],
|
|||||||
unsigned int length,
|
unsigned int length,
|
||||||
unsigned char B);
|
unsigned char B);
|
||||||
|
|
||||||
void dac(double s_re[2][30720],
|
void dac(double *s_re[2],
|
||||||
double s_im[2][30720],
|
double *s_im[2],
|
||||||
int **input,
|
int **input,
|
||||||
unsigned int input_offset,
|
unsigned int input_offset,
|
||||||
unsigned int nb_tx_antennas,
|
unsigned int nb_tx_antennas,
|
||||||
@@ -92,8 +92,8 @@ void dac(double s_re[2][30720],
|
|||||||
unsigned int meas_length,
|
unsigned int meas_length,
|
||||||
unsigned int meas_offset);
|
unsigned int meas_offset);
|
||||||
|
|
||||||
double dac_fixed_gain(double s_re[2][30720],
|
double dac_fixed_gain(double *s_re[2],
|
||||||
double s_im[2][30720],
|
double *s_im[2],
|
||||||
int **input,
|
int **input,
|
||||||
unsigned int input_offset,
|
unsigned int input_offset,
|
||||||
unsigned int nb_tx_antennas,
|
unsigned int nb_tx_antennas,
|
||||||
|
|||||||
@@ -206,8 +206,8 @@ void rf_rx(double **r_re,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void rf_rx_simple(double r_re[2][30720],
|
void rf_rx_simple(double *r_re[2],
|
||||||
double r_im[2][30720],
|
double *r_im[2],
|
||||||
unsigned int nb_rx_antennas,
|
unsigned int nb_rx_antennas,
|
||||||
unsigned int length,
|
unsigned int length,
|
||||||
double s_time,
|
double s_time,
|
||||||
|
|||||||
@@ -219,10 +219,10 @@ channel_desc_t *new_channel_desc_scm(uint8_t nb_tx,
|
|||||||
int random_channel(channel_desc_t *desc, uint8_t abstraction_flag);
|
int random_channel(channel_desc_t *desc, uint8_t abstraction_flag);
|
||||||
|
|
||||||
/**\fn void multipath_channel(channel_desc_t *desc,
|
/**\fn void multipath_channel(channel_desc_t *desc,
|
||||||
double tx_sig_re[2][30720*2],
|
double tx_sig_re[2],
|
||||||
double tx_sig_im[2][30720*2],
|
double tx_sig_im[2],
|
||||||
double rx_sig_re[2][30720*2],
|
double rx_sig_re[2],
|
||||||
double rx_sig_im[2][30720*2],
|
double rx_sig_im[2],
|
||||||
uint32_t length,
|
uint32_t length,
|
||||||
uint8_t keep_channel)
|
uint8_t keep_channel)
|
||||||
|
|
||||||
@@ -237,10 +237,10 @@ int random_channel(channel_desc_t *desc, uint8_t abstraction_flag);
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
void multipath_channel(channel_desc_t *desc,
|
void multipath_channel(channel_desc_t *desc,
|
||||||
double tx_sig_re[2][30720*2],
|
double *tx_sig_re[2],
|
||||||
double tx_sig_im[2][30720*2],
|
double *tx_sig_im[2],
|
||||||
double rx_sig_re[2][30720*2],
|
double *rx_sig_re[2],
|
||||||
double rx_sig_im[2][30720*2],
|
double *rx_sig_im[2],
|
||||||
uint32_t length,
|
uint32_t length,
|
||||||
uint8_t keep_channel);
|
uint8_t keep_channel);
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -150,10 +150,10 @@ void multipath_channel(channel_desc_t *desc,
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
void multipath_channel(channel_desc_t *desc,
|
void multipath_channel(channel_desc_t *desc,
|
||||||
double tx_sig_re[2][30720*2],
|
double *tx_sig_re[2],
|
||||||
double tx_sig_im[2][30720*2],
|
double *tx_sig_im[2],
|
||||||
double rx_sig_re[2][30720*2],
|
double *rx_sig_re[2],
|
||||||
double rx_sig_im[2][30720*2],
|
double *rx_sig_im[2],
|
||||||
uint32_t length,
|
uint32_t length,
|
||||||
uint8_t keep_channel)
|
uint8_t keep_channel)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ eNBs =
|
|||||||
|
|
||||||
component_carriers = (
|
component_carriers = (
|
||||||
{
|
{
|
||||||
|
node_function = "eNodeB_3GPP";
|
||||||
|
node_timing = "synch_to_ext_device";
|
||||||
|
node_synch_ref = 0;
|
||||||
frame_type = "FDD";
|
frame_type = "FDD";
|
||||||
tdd_config = 3;
|
tdd_config = 3;
|
||||||
tdd_config_s = 0;
|
tdd_config_s = 0;
|
||||||
|
|||||||
@@ -108,12 +108,28 @@ void do_DL_sig(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_N
|
|||||||
uint8_t nb_antennas_rx = eNB2UE[0][0][CC_id]->nb_rx; // number of rx antennas at UE
|
uint8_t nb_antennas_rx = eNB2UE[0][0][CC_id]->nb_rx; // number of rx antennas at UE
|
||||||
uint8_t nb_antennas_tx = eNB2UE[0][0][CC_id]->nb_tx; // number of tx antennas at eNB
|
uint8_t nb_antennas_tx = eNB2UE[0][0][CC_id]->nb_tx; // number of tx antennas at eNB
|
||||||
|
|
||||||
double s_re[2][30720];//PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.samples_per_tti];
|
double s_re0[30720];//PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti];
|
||||||
double s_im[2][30720];//PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.samples_per_tti];
|
double s_re1[30720];//PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti];
|
||||||
double r_re0[2][30720];//PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.samples_per_tti];
|
double *s_re[2];
|
||||||
double r_im0[2][30720];//PHY_vars_eNB_g[eNB_id][CC_id]->frame_parms.samples_per_tti];
|
double s_im0[30720];//PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti];
|
||||||
|
double s_im1[30720];//PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti];
|
||||||
|
double *s_im[2];
|
||||||
|
double r_re00[30720];//PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti];
|
||||||
|
double r_re01[30720];//PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti];
|
||||||
|
double *r_re0[2];
|
||||||
|
double r_im00[30720];//PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti];
|
||||||
|
double r_im01[30720];//PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti];
|
||||||
|
double *r_im0[2];
|
||||||
|
|
||||||
|
s_re[0] = s_re0;
|
||||||
|
s_im[0] = s_im0;
|
||||||
|
s_re[1] = s_re1;
|
||||||
|
s_im[1] = s_im1;
|
||||||
|
|
||||||
|
r_re0[0] = r_re00;
|
||||||
|
r_im0[0] = r_im00;
|
||||||
|
r_re0[1] = r_re01;
|
||||||
|
r_im0[1] = r_im01;
|
||||||
|
|
||||||
if (subframe==0)
|
if (subframe==0)
|
||||||
hold_channel = 0;
|
hold_channel = 0;
|
||||||
@@ -318,17 +334,21 @@ void do_DL_sig(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_N
|
|||||||
if (eNB_output_mask[UE_id] == (1<<NB_eNB_INST)-1) {
|
if (eNB_output_mask[UE_id] == (1<<NB_eNB_INST)-1) {
|
||||||
eNB_output_mask[UE_id]=0;
|
eNB_output_mask[UE_id]=0;
|
||||||
|
|
||||||
|
|
||||||
|
double *r_re_p[2] = {r_re_DL[eNB_id][0],r_re_DL[eNB_id][1]};
|
||||||
|
double *r_im_p[2] = {r_im_DL[eNB_id][0],r_im_DL[eNB_id][1]};
|
||||||
|
|
||||||
#ifdef DEBUG_SIM
|
#ifdef DEBUG_SIM
|
||||||
rx_pwr = signal_energy_fp((double**)r_re_DL[UE_id],(double**)r_im_DL[UE_id],nb_antennas_rx,frame_parms->ofdm_symbol_size,sf_offset)/(12.0*frame_parms->N_RB_DL);
|
rx_pwr = signal_energy_fp(r_re_p,r_im_p,nb_antennas_rx,frame_parms->ofdm_symbol_size,sf_offset)/(12.0*frame_parms->N_RB_DL);
|
||||||
LOG_D(OCM,"[SIM][DL] UE %d : ADC in %f dBm for subframe %d\n",UE_id,10*log10(rx_pwr),subframe);
|
LOG_D(OCM,"[SIM][DL] UE %d : ADC in %f dBm for subframe %d\n",UE_id,10*log10(rx_pwr),subframe);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
rxdata = PHY_vars_UE_g[UE_id][CC_id]->common_vars.rxdata;
|
rxdata = PHY_vars_UE_g[UE_id][CC_id]->common_vars.rxdata;
|
||||||
sf_offset = subframe*frame_parms->samples_per_tti;
|
sf_offset = subframe*frame_parms->samples_per_tti;
|
||||||
|
|
||||||
adc(r_re_DL[UE_id],
|
|
||||||
r_im_DL[UE_id],
|
adc(r_re_p,
|
||||||
|
r_im_p,
|
||||||
0,
|
0,
|
||||||
sf_offset,
|
sf_offset,
|
||||||
rxdata,
|
rxdata,
|
||||||
@@ -384,10 +404,28 @@ void do_UL_sig(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX_N
|
|||||||
int ulfrrb2 ;
|
int ulfrrb2 ;
|
||||||
uint8_t harq_pid;
|
uint8_t harq_pid;
|
||||||
#endif
|
#endif
|
||||||
double s_re[2][30720];//PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti];
|
double s_re0[30720];//PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti];
|
||||||
double s_im[2][30720];//PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti];
|
double s_re1[30720];//PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti];
|
||||||
double r_re0[2][30720];//PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti];
|
double *s_re[2];
|
||||||
double r_im0[2][30720];//PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti];
|
double s_im0[30720];//PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti];
|
||||||
|
double s_im1[30720];//PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti];
|
||||||
|
double *s_im[2];
|
||||||
|
double r_re00[30720];//PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti];
|
||||||
|
double r_re01[30720];//PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti];
|
||||||
|
double *r_re0[2];
|
||||||
|
double r_im00[30720];//PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti];
|
||||||
|
double r_im01[30720];//PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti];
|
||||||
|
double *r_im0[2];
|
||||||
|
|
||||||
|
s_re[0] = s_re0;
|
||||||
|
s_im[0] = s_im0;
|
||||||
|
s_re[1] = s_re1;
|
||||||
|
s_im[1] = s_im1;
|
||||||
|
|
||||||
|
r_re0[0] = r_re00;
|
||||||
|
r_im0[0] = r_im00;
|
||||||
|
r_re0[1] = r_re01;
|
||||||
|
r_im0[1] = r_im01;
|
||||||
|
|
||||||
if (abstraction_flag!=0) {
|
if (abstraction_flag!=0) {
|
||||||
#ifdef PHY_ABSTRACTION_UL
|
#ifdef PHY_ABSTRACTION_UL
|
||||||
@@ -447,7 +485,6 @@ void do_UL_sig(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX_N
|
|||||||
PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE[subframe],
|
PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE[subframe],
|
||||||
subframe,sf_offset);
|
subframe,sf_offset);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
tx_pwr = dac_fixed_gain((double**)s_re,
|
tx_pwr = dac_fixed_gain((double**)s_re,
|
||||||
(double**)s_im,
|
(double**)s_im,
|
||||||
txdata,
|
txdata,
|
||||||
@@ -466,8 +503,8 @@ void do_UL_sig(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX_N
|
|||||||
PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE[subframe],
|
PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE[subframe],
|
||||||
subframe,sf_offset);
|
subframe,sf_offset);
|
||||||
|
|
||||||
|
|
||||||
multipath_channel(UE2eNB[UE_id][eNB_id][CC_id],(double**)s_re,(double**)s_im,(double**)r_re0,(double**)r_im0,
|
multipath_channel(UE2eNB[UE_id][eNB_id][CC_id],s_re,s_im,r_re0,r_im0,
|
||||||
frame_parms->samples_per_tti,hold_channel);
|
frame_parms->samples_per_tti,hold_channel);
|
||||||
|
|
||||||
|
|
||||||
@@ -498,23 +535,27 @@ void do_UL_sig(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX_N
|
|||||||
}
|
}
|
||||||
} //UE_id
|
} //UE_id
|
||||||
|
|
||||||
rf_rx_simple(r_re_UL[eNB_id],
|
double *r_re_p[2] = {r_re_UL[eNB_id][0],r_re_UL[eNB_id][1]};
|
||||||
r_im_UL[eNB_id],
|
double *r_im_p[2] = {r_im_UL[eNB_id][0],r_im_UL[eNB_id][1]};
|
||||||
|
|
||||||
|
rf_rx_simple(r_re_p,
|
||||||
|
r_im_p,
|
||||||
nb_antennas_rx,
|
nb_antennas_rx,
|
||||||
frame_parms->samples_per_tti,
|
frame_parms->samples_per_tti,
|
||||||
1e3/UE2eNB[0][eNB_id][CC_id]->sampling_rate, // sampling time (ns)
|
1e3/UE2eNB[0][eNB_id][CC_id]->sampling_rate, // sampling time (ns)
|
||||||
(double)PHY_vars_eNB_g[eNB_id][CC_id]->rx_total_gain_dB - 66.227); // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later)
|
(double)PHY_vars_eNB_g[eNB_id][CC_id]->rx_total_gain_dB - 66.227); // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later)
|
||||||
|
|
||||||
#ifdef DEBUG_SIM
|
#ifdef DEBUG_SIM
|
||||||
rx_pwr = signal_energy_fp(r_re_UL[eNB_id],r_im_UL[eNB_id],nb_antennas_rx,frame_parms->samples_per_tti,0)*(double)frame_parms->ofdm_symbol_size/(12.0*frame_parms->N_RB_DL);
|
rx_pwr = signal_energy_fp(r_re_p,r_im_p,nb_antennas_rx,frame_parms->samples_per_tti,0)*(double)frame_parms->ofdm_symbol_size/(12.0*frame_parms->N_RB_DL);
|
||||||
LOG_D(OCM,"[SIM][UL] rx_pwr (ADC in) %f dB for subframe %d\n",10*log10(rx_pwr),subframe);
|
LOG_D(OCM,"[SIM][UL] rx_pwr (ADC in) %f dB for subframe %d\n",10*log10(rx_pwr),subframe);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
rxdata = PHY_vars_eNB_g[eNB_id][CC_id]->common_vars.rxdata[0];
|
rxdata = PHY_vars_eNB_g[eNB_id][CC_id]->common_vars.rxdata[0];
|
||||||
sf_offset = subframe*frame_parms->samples_per_tti;
|
sf_offset = subframe*frame_parms->samples_per_tti;
|
||||||
|
|
||||||
|
|
||||||
adc(r_re_UL[eNB_id],
|
adc(r_re_p,
|
||||||
r_im_UL[eNB_id],
|
r_im_p,
|
||||||
0,
|
0,
|
||||||
sf_offset,
|
sf_offset,
|
||||||
rxdata,
|
rxdata,
|
||||||
|
|||||||
@@ -1120,7 +1120,6 @@ int UE_trx_read(openair0_device *device, openair0_timestamp *ptimestamp, void **
|
|||||||
UE_id,
|
UE_id,
|
||||||
CC_id);
|
CC_id);
|
||||||
|
|
||||||
printf("Signaling main thread: UE subframe mask %x\n",subframe_UE_mask);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user