Commit 450b970c authored by lfarizav's avatar lfarizav

solving memory allocation problems for rxdataF

parent 0ed5a4b5
......@@ -1101,6 +1101,7 @@ int phy_init_lte_ue(PHY_VARS_UE *ue,
int i,j,k,l;
int eNB_id;
int th_id;
int **rxdataF_temp;
printf("Initializing UE vars (abstraction %"PRIu8") for eNB TXant %"PRIu8", UE RXant %"PRIu8"\n",abstraction_flag,fp->nb_antennas_tx,fp->nb_antennas_rx);
LOG_D(PHY,"[MSC_NEW][FRAME 00000][PHY_UE][MOD %02u][]\n", ue->Mod_id+NB_eNB_INST);
......@@ -1151,20 +1152,47 @@ int phy_init_lte_ue(PHY_VARS_UE *ue,
}
// init RX buffers
if (do_ofdm_mod)
{
common_vars->rxdata = (int32_t**)malloc16( fp->nb_antennas_rx*sizeof(int32_t*) );
for (th_id=0; th_id<RX_NB_TH_MAX; th_id++) {
common_vars->common_vars_rx_data_per_thread[th_id].rxdataF = (int32_t**)malloc16( fp->nb_antennas_rx*sizeof(int32_t*) );
for (i=0; i<fp->nb_antennas_rx; i++) {
common_vars->rxdata[i] = (int32_t*) malloc16_clear( (fp->samples_per_tti*10+2048)*sizeof(int32_t) );
}
common_vars->common_vars_rx_data_per_thread[0].rxdataF = (int32_t**)malloc16( fp->nb_antennas_rx*sizeof(int32_t*));
printf("[lte_init_f] address of rxdataF in memory: %p, thread %d\n",&common_vars->common_vars_rx_data_per_thread[0].rxdataF,0);
for (i=0; i<fp->nb_antennas_rx; i++) {
common_vars->rxdata[i] = (int32_t*) malloc16_clear( (fp->samples_per_tti*10+2048)*sizeof(int32_t) );
for (th_id=0; th_id<RX_NB_TH_MAX; th_id++) {
common_vars->common_vars_rx_data_per_thread[th_id].rxdataF[i] = (int32_t*)malloc16_clear((fp->ofdm_symbol_size*14)*sizeof(int32_t));
common_vars->common_vars_rx_data_per_thread[0].rxdataF[i] = (int32_t*)calloc(sizeof(int32_t),fp->ofdm_symbol_size*fp->symbols_per_tti);
printf("[lte_init_f] address of rxdataF[i] in memory: %p, thread %d, antenna %d\n",&common_vars->common_vars_rx_data_per_thread[0].rxdataF[i],0,i);
}
//rxdata_temp
rxdataF_temp = (int32_t**)malloc16( fp->nb_antennas_rx*sizeof(int32_t*) );
for (i=0; i<fp->nb_antennas_rx; i++) {
rxdataF_temp[i] = (int32_t*)malloc16_clear((14313)*sizeof(int32_t));
}
common_vars->common_vars_rx_data_per_thread[1].rxdataF = (int32_t**)malloc16( fp->nb_antennas_rx*sizeof(int32_t*) );
printf("[lte_init_f] address of rxdataF in memory: %p, thread %d\n",&common_vars->common_vars_rx_data_per_thread[1].rxdataF,1);
for (i=0; i<fp->nb_antennas_rx; i++) {
common_vars->common_vars_rx_data_per_thread[1].rxdataF[i] = (int32_t*)malloc16_clear((fp->ofdm_symbol_size*fp->symbols_per_tti)*sizeof(int32_t));
printf("[lte_init_f address of rxdataF[i] in memory: %p, thread %d, antenna %d\n",&common_vars->common_vars_rx_data_per_thread[1].rxdataF[i],1,i);
}
}
else
{
for (th_id=0; th_id<RX_NB_TH_MAX; th_id++){
common_vars->common_vars_rx_data_per_thread[th_id].rxdataF = (int32_t**)malloc16( fp->nb_antennas_rx*sizeof(int32_t*) );
printf("[lte_init_t] address of rxdataF in memory: %p, thread %d\n",&common_vars->common_vars_rx_data_per_thread[th_id].rxdataF,th_id);
}
for (i=0; i<fp->nb_antennas_rx; i++) {
for (th_id=0; th_id<RX_NB_TH_MAX; th_id++){
common_vars->common_vars_rx_data_per_thread[th_id].rxdataF[i] = (int32_t*)malloc16_clear((fp->ofdm_symbol_size*fp->symbols_per_tti)*sizeof(int32_t));
printf("[lte_init_t] address of rxdataF[%d] in memory: %p, thread %d, antenna %d\n",th_id,&common_vars->common_vars_rx_data_per_thread[th_id].rxdataF[i],th_id,i);
}
}
}
// Channel estimates
for (eNB_id=0; eNB_id<7; eNB_id++) {
for (th_id=0; th_id<RX_NB_TH_MAX; th_id++) {
......@@ -1180,6 +1208,20 @@ int phy_init_lte_ue(PHY_VARS_UE *ue,
common_vars->common_vars_rx_data_per_thread[th_id].dl_ch_estimates_time[eNB_id][idx] = (int32_t*)malloc16_clear( sizeof(int32_t)*fp->ofdm_symbol_size*2 );
}
}
}
/*for (i=0; i<fp->ofdm_symbol_size*fp->symbols_per_tti; i++) {
for (int aa=0; aa<fp->nb_antennas_rx; aa++) {
((short *)common_vars->common_vars_rx_data_per_thread[1].rxdataF[aa])[((i+fp->ofdm_symbol_size*fp->symbols_per_tti)<<1)] = (short)(i);
((short *)common_vars->common_vars_rx_data_per_thread[1].rxdataF[aa])[1+((i+fp->ofdm_symbol_size*fp->symbols_per_tti)<<1)] = (short)(1);
if (i < 300) {
printf("[lte-init] rxdataF (thread[%d]) %d: (%d,%d), memory addr %p\n",1,i,((short *)common_vars->common_vars_rx_data_per_thread[1].rxdataF[aa])[((i+fp->ofdm_symbol_size*fp->symbols_per_tti)<<1)],((short *)common_vars->common_vars_rx_data_per_thread[1].rxdataF[aa])[1+((i+fp->ofdm_symbol_size*fp->symbols_per_tti)<<1)],&common_vars->common_vars_rx_data_per_thread[1].rxdataF[aa][1+((i+fp->ofdm_symbol_size*fp->symbols_per_tti)<<1)]);
printf("[lte-init] rxdataF (thread[%d]) %d: (%d,%d), memory addr %p\n",0,i,((short *)common_vars->common_vars_rx_data_per_thread[0].rxdataF[aa])[((i+4+2*fp->ofdm_symbol_size*fp->symbols_per_tti)<<1)],((short *)common_vars->common_vars_rx_data_per_thread[0].rxdataF[aa])[1+((i+4+2*fp->ofdm_symbol_size*fp->symbols_per_tti)<<1)],&common_vars->common_vars_rx_data_per_thread[0].rxdataF[aa][1+((i+4+2*fp->ofdm_symbol_size*fp->symbols_per_tti)<<1)]);
}
}
}*/
}
// DLSCH
......
......@@ -46,7 +46,6 @@ void lte_param_init(unsigned char N_tx_port_eNB,
uint8_t osf,
uint32_t perfect_ce)
{
LTE_DL_FRAME_PARMS *frame_parms;
int i;
......@@ -108,6 +107,7 @@ void lte_param_init(unsigned char N_tx_port_eNB,
lte_gold(frame_parms,UE->lte_gold_table[i],Nid_cell+i);
phy_init_lte_ue(UE,1,0);
phy_init_lte_eNB(eNB,0,0);
generate_pcfich_reg_mapping(&UE->frame_parms);
......
......@@ -1846,7 +1846,7 @@ void generate_RIV_tables(void);
@param phy_vars_ue Pointer to UE variables
*/
int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode);
int initial_sync_freq(PHY_VARS_UE *phy_vars_ue, runmode_t mode);
void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB,
eNB_rxtx_proc_t *proc,
uint8_t eNB_id, // this is the effective sector id
......
......@@ -51,29 +51,54 @@ void adc_freq(double *r_re[2],
double *r_im[2],
unsigned int input_offset,
unsigned int output_offset,
unsigned int **output,
unsigned int **output1,
unsigned int **output2,//thread 0
unsigned int **output3,//thread 1
unsigned int nb_rx_antennas,
unsigned int length,
unsigned char B)
unsigned char B,
int thread)
{
int i;
//int th_id;
int aa;
double gain = (double)(1<<(B-1));
/*int dummy_rx[nb_rx_antennas][length] __attribute__((aligned(32)));
for (aa=0; aa<nb_rx_antennas; aa++) {
memset (&output1[aa][output_offset],0,length*sizeof(int));
}*/
//double gain = 1.0;
for (i=0; i<length; i++) {
for (aa=0; aa<nb_rx_antennas; aa++) {
((short *)output[aa])[((i+output_offset)<<1)] = (short)(r_re[aa][i+input_offset]*gain);
((short *)output[aa])[1+((i+output_offset)<<1)] = (short)(r_im[aa][i+input_offset]*gain);
((short *)output1[aa])[((i+output_offset)<<1)] = (short)(r_re[aa][i+input_offset]*gain);
((short *)output1[aa])[1+((i+output_offset)<<1)] = (short)(r_im[aa][i+input_offset]*gain);
if ((r_re[aa][i+input_offset]*gain) > 30000) {
//("Adc outputs %d %e %d \n",i,((short *)output[0])[((i+output_offset)<<1)], ((i+output_offset)<<1) );
}
}
if (i < 300) {
printf("rxdataF (thread[%d]) %d: (%d,%d)\n",thread,i,((short *)output1[aa])[((i+output_offset)<<1)],((short *)output1[aa])[1+((i+output_offset)<<1)]);
if (thread==0 && output_offset>length)
printf("rxdataF (thread[1]) %d: (%d,%d) \n",i,((short *)output3[aa])[((i+output_offset-length-4)<<1)],((short *)output3[aa])[1+((i+output_offset-length-4)<<1)]);
else if (thread==1)
printf("rxdataF (thread[0]) %d: (%d,%d) \n",i,((short *)output2[aa])[((i+output_offset+length+4)<<1)],((short *)output2[aa])[1+((i+output_offset+length+4)<<1)]);
//printf("Adc outputs %d %e %d \n",i,((short *)output[0])[((i+output_offset)<<1)], ((i+output_offset)<<1) );
}
}
/*for (aa=0; aa<nb_rx_antennas; aa++) {
for (th_id=1; th_id<2; th_id++)
{
memcpy((void *)output[aa][output_offset],
(void *)output[aa][output_offset],
length*sizeof(int));
}
}*/
}
printf("thread %d\n",(unsigned int)thread);
//write_output("adc_rxsigF_frame0.m","adc_rxsF0", output1[0],10*length,1,16);
//write_output("adc_rxsigF_frame1.m","adc_rxsF1", output2[0],10*length,1,16);
}
void adc_prach(double *r_re[2],
double *r_im[2],
......
......@@ -78,10 +78,13 @@ void adc_freq(double *r_re[2],
double *r_im[2],
unsigned int input_offset,
unsigned int output_offset,
int **output,
unsigned int **output1,//ue->current_thread_id[subframe]
unsigned int **output2,//thread 0
unsigned int **output3,//thread 1
unsigned int nb_rx_antennas,
unsigned int length,
unsigned char B);
unsigned char B,
int thread);
void adc_prach(double *r_re[2],
double *r_im[2],
......@@ -125,3 +128,15 @@ double dac_fixed_gain(double *s_re[2],
unsigned char B,
double gain,
int NB_RE);
double dac_fixed_gain_prach(double *s_re[2],
double *s_im[2],
int **input,
unsigned int input_offset,
unsigned int nb_tx_antennas,
unsigned int length,
unsigned int input_offset_meas,
unsigned int length_meas,
unsigned char B,
double gain,
int NB_RE);
......@@ -295,6 +295,14 @@ void multipath_channel_freq_test(channel_desc_t *desc,
double *rx_sig_im[2],
uint32_t length,
uint8_t keep_channel);
void multipath_channel_prach(channel_desc_t *desc,
double *tx_sig_re[2],
double *tx_sig_im[2],
double *rx_sig_re[2],
double *rx_sig_im[2],
uint32_t length,
uint8_t keep_channel);
/*
\fn double compute_pbch_sinr(channel_desc_t *desc,
channel_desc_t *desc_i1,
......@@ -407,7 +415,9 @@ double gaussdouble(double,double);
void randominit(unsigned int seed_init);
double uniformrandom(void);
int freq_channel(channel_desc_t *desc,uint16_t nb_rb, int16_t n_samples);
int freq_channel_prach(channel_desc_t *desc,uint16_t nb_rb,int16_t n_samples,int16_t prach_fmt,int16_t prach_prb_offset);
int init_freq_channel(channel_desc_t *desc,uint16_t nb_rb,int16_t n_samples);
int init_freq_channel_prach(channel_desc_t *desc,uint16_t nb_rb,int16_t n_samples,int16_t prach_fmt,int16_t prach_prb_offset);
uint8_t multipath_channel_nosigconv(channel_desc_t *desc);
void multipath_tv_channel(channel_desc_t *desc,
double **tx_sig_re,
......
......@@ -234,8 +234,8 @@ void multipath_channel_freq(channel_desc_t *desc,
ofdm_symbol_size=length/PHY_vars_UE_g[0][0]->frame_parms.symbols_per_tti;
symbols_per_tti=length/PHY_vars_UE_g[0][0]->frame_parms.ofdm_symbol_size;
FILE *file;
file = fopen("multipath.txt","w");
//FILE *file;
//file = fopen("multipath.txt","w");
#ifdef DEBUG_CH
printf("[CHANNEL_FREQ] keep = %d : path_loss = %g (%f), nb_rx %d, nb_tx %d, dd %d, len %d \n",keep_channel,path_loss,desc->path_loss_dB,desc->nb_rx,desc->nb_tx,dd,desc->channel_length);
......@@ -313,11 +313,11 @@ void multipath_channel_freq_test(channel_desc_t *desc,
int dd;
dd = abs(desc->channel_offset);
int nb_rb, n_samples, ofdm_symbol_size, symbols_per_tti;
nb_rb=PHY_vars_UE_g[0][0]->frame_parms.N_RB_DL;
n_samples=PHY_vars_UE_g[0][0]->frame_parms.N_RB_DL*12+1;
ofdm_symbol_size=length/PHY_vars_UE_g[0][0]->frame_parms.symbols_per_tti;
symbols_per_tti=length/PHY_vars_UE_g[0][0]->frame_parms.ofdm_symbol_size;
//int nb_rb, n_samples, ofdm_symbol_size, symbols_per_tti;
//nb_rb=PHY_vars_UE_g[0][0]->frame_parms.N_RB_DL;
//n_samples=PHY_vars_UE_g[0][0]->frame_parms.N_RB_DL*12+1;
int ofdm_symbol_size=length/PHY_vars_UE_g[0][0]->frame_parms.symbols_per_tti;
int symbols_per_tti=length/PHY_vars_UE_g[0][0]->frame_parms.ofdm_symbol_size;
printf("[CHANNEL_FREQ] keep = %d : path_loss = %g (%f), nb_rx %d, nb_tx %d, dd %d, len %d , symbols tti %d\n",keep_channel,path_loss,desc->path_loss_dB,desc->nb_rx,desc->nb_tx,dd,desc->channel_length,symbols_per_tti);
......@@ -353,8 +353,8 @@ void multipath_channel_prach(channel_desc_t *desc,
int ii,j,k,f,l;
struct complex rx_tmp;
double delta_f;
FILE *file_prach;
file_prach = fopen("multipath_prach.txt","w");
//FILE *file_prach;
//file_prach = fopen("multipath_prach.txt","w");
prach_samples = (prach_fmt<4)?13+839+12:3+139+2;
double path_loss = pow(10,desc->path_loss_dB/20);
int nb_rb, n_samples, ofdm_symbol_size, symbols_per_tti;
......
......@@ -73,7 +73,7 @@ void *UE_thread(void *arg);
void *UE_thread_freq(void *arg);
void init_UE(int nb_inst);
int32_t **rxdata,**thread0_rxdataF, **thread1_rxdataF;
int32_t **rxdata;
int32_t **txdata, **txdataF;
#define KHz (1000UL)
......@@ -1037,7 +1037,7 @@ void *UE_thread(void *arg) {
{
write_output("lteue_rxsigF_frame0.m","lteue_rxsF0", UE->common_vars.common_vars_rx_data_per_thread[0].rxdataF[0],10*UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti,1,16);
write_output("lteue_rxsigF_frame1.m","lteue_rxsF1", UE->common_vars.common_vars_rx_data_per_thread[1].rxdataF[0],10*UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti,1,16);
exit(-1);
//exit(-1);
}
thread_idx++;
......@@ -1319,12 +1319,12 @@ void *UE_thread_freq(void *arg) {
UE->current_thread_id[sub_frame] = thread_idx;
LOG_D(PHY,"Process Subframe %d thread Idx %d , frame %d \n", sub_frame, UE->current_thread_id[sub_frame],proc->frame_rx);
if (sub_frame==5 && ((proc->frame_rx&0x1)==0))
{
//if (sub_frame==5 && ((proc->frame_rx&0x1)==0))
//{
write_output("lteue_rxsigF_frame0.m","lteue_rxsF0", UE->common_vars.common_vars_rx_data_per_thread[0].rxdataF[0],10*UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti,1,16);
write_output("lteue_rxsigF_frame1.m","lteue_rxsF1", UE->common_vars.common_vars_rx_data_per_thread[1].rxdataF[0],10*UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti,1,16);
//exit(-1);
}
//}
thread_idx++;
if(thread_idx>=RX_NB_TH)
......@@ -1332,7 +1332,7 @@ void *UE_thread_freq(void *arg) {
if (UE->mode != loop_through_memory) {
for (i=0; i<UE->frame_parms.nb_antennas_rx; i++){
rxp_freq[i] = (void*)&UE->common_vars.common_vars_rx_data_per_thread[sub_frame&0x1].rxdataF[i][UE->frame_parms.ofdm_symbol_size+sub_frame*UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti];//14*1024->50RB
rxp_freq[i] = (void*)&UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[sub_frame]].rxdataF[i][UE->frame_parms.ofdm_symbol_size+sub_frame*UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti];//14*1024->50RB
}
for (i=0; i<UE->frame_parms.nb_antennas_tx; i++)
txp_freq[i] = (void*)&UE->common_vars.txdataF[i][
......@@ -1379,7 +1379,7 @@ void *UE_thread_freq(void *arg) {
AssertFatal(writeBlockSize-readBlockSize ==
UE->rfdevice.trx_read_func(&UE->rfdevice,
&timestamp1,
(void**)UE->common_vars.common_vars_rx_data_per_thread[sub_frame&0x1].rxdataF,
(void**)UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[sub_frame]].rxdataF,
writeBlockSize-readBlockSize,
UE->frame_parms.nb_antennas_rx),"");
if ( writeBlockSize-readBlockSize <0 )
......@@ -1447,6 +1447,24 @@ void *UE_thread_freq(void *arg) {
* and the locking between them.
*/
void init_UE_threads(PHY_VARS_UE *UE) {
// init RX buffers
/*int UE_id, CC_id, th_id,i;
for (UE_id=0;UE_id<NB_UE_INST;UE_id++){
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++){
for (th_id=0; th_id<RX_NB_TH_MAX; th_id++) {
PHY_vars_UE_g[UE_id][CC_id]->common_vars.common_vars_rx_data_per_thread[th_id].rxdataF = (int32_t**)malloc16( UE->frame_parms.nb_antennas_rx*sizeof(int32_t*) );
printf("[lte_init] address of rxdataF in memory: %p, thread %d\n",&PHY_vars_UE_g[UE_id][CC_id]->common_vars.common_vars_rx_data_per_thread[th_id].rxdataF,th_id);
}
for (i=0; i<UE->frame_parms.nb_antennas_rx; i++) {
for (th_id=0; th_id<RX_NB_TH_MAX; th_id++) {
PHY_vars_UE_g[UE_id][CC_id]->common_vars.common_vars_rx_data_per_thread[th_id].rxdataF[i] = (int32_t*)malloc16_clear((UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti)*sizeof(int32_t));
printf("[lte_init] address of rxdataF in memory: %p, thread %d, antenna %d\n",&PHY_vars_UE_g[UE_id][CC_id]->common_vars.common_vars_rx_data_per_thread[th_id].rxdataF[i],th_id,i);
}
}
}
}*/
struct rx_tx_thread_data *rtd;
pthread_attr_init (&UE->proc.attr_ue);
......@@ -1521,6 +1539,7 @@ int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, openair0_config_t *openair0_cfg)
LTE_DL_FRAME_PARMS *frame_parms;
openair0_rf_map *rf_map;
int do_ofdm_mod = phy_vars_ue[0]->do_ofdm_mod;
int th_id;
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
rf_map = &phy_vars_ue[CC_id]->rf_map;
......@@ -1530,8 +1549,8 @@ int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, openair0_config_t *openair0_cfg)
// replace RX signal buffers with mmaped HW versions
if (do_ofdm_mod){//if do_ofdm_mod, frequency analysis
thread0_rxdataF = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
thread1_rxdataF = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
for (th_id=0; th_id<RX_NB_TH_MAX; th_id++)
phy_vars_ue[CC_id]->common_vars.common_vars_rx_data_per_thread[th_id].rxdataF = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
txdataF = (int32_t**)malloc16( frame_parms->nb_antennas_tx*sizeof(int32_t*) );
}
else{//time analysis
......@@ -1542,12 +1561,11 @@ int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, openair0_config_t *openair0_cfg)
for (i=0; i<frame_parms->nb_antennas_rx; i++) {
LOG_I(PHY, "Mapping UE CC_id %d, rx_ant %d, freq %u on card %d, chain %d\n",
CC_id, i, downlink_frequency[CC_id][i], rf_map->card, rf_map->chain+i );
free( phy_vars_ue[CC_id]->common_vars.common_vars_rx_data_per_thread[0].rxdataF[i] );
free( phy_vars_ue[CC_id]->common_vars.common_vars_rx_data_per_thread[1].rxdataF[i] );
thread0_rxdataF[i] = (int32_t*)malloc16_clear( frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*sizeof(int32_t) );
thread1_rxdataF[i] = (int32_t*)malloc16_clear( frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*sizeof(int32_t) );
phy_vars_ue[CC_id]->common_vars.common_vars_rx_data_per_thread[0].rxdataF[i] = thread0_rxdataF[i]; // what about the "-N_TA_offset" ? // N_TA offset for TDD
phy_vars_ue[CC_id]->common_vars.common_vars_rx_data_per_thread[1].rxdataF[i] = thread1_rxdataF[i]; // what about the "-N_TA_offset" ? // N_TA offset for TDD
for (th_id=0; th_id < RX_NB_TH; th_id++)
{
free( phy_vars_ue[CC_id]->common_vars.common_vars_rx_data_per_thread[th_id].rxdataF[i] );
phy_vars_ue[CC_id]->common_vars.common_vars_rx_data_per_thread[th_id].rxdataF[i] = (int32_t*)malloc16_clear( frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*sizeof(int32_t) ); // what about the "-N_TA_offset" ? // N_TA offset for TDD
}
}
for (i=0; i<frame_parms->nb_antennas_tx; i++) {
......
......@@ -380,16 +380,16 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
int CC_id)
{
int32_t att_eNB_id=-1;
int32_t **txdata,**txdataF,**rxdata,**rxdataF;
int32_t **txdataF,**rxdataF;
uint8_t eNB_id=0;
double tx_pwr;
double rx_pwr;
int32_t rx_pwr0,rx_pwr1,rx_pwr2, rx_pwr3;
//int32_t rx_pwr0,rx_pwr1,rx_pwr2, rx_pwr3;
uint32_t i,aa;
uint32_t sf_offset;
double min_path_loss=-200;
//double min_path_loss=-200;
uint8_t hold_channel=0;
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
......@@ -407,7 +407,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
double r_im01_f[2048*14];//ofdm_symbol_size*symbols_per_tti;
double *r_im0_f[2];
int x,y;
//int x,y;
s_re_f[0] = s_re0_f;
s_im_f[0] = s_im0_f;
......@@ -419,10 +419,10 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
r_re0_f[1] = r_re01_f;
r_im0_f[1] = r_im01_f;
FILE *file1;
file1 = fopen("sre_sim.txt","w");
//FILE *file1;
//file1 = fopen("sre_sim.txt","w");
int j;
//int j;
if (subframe==0)
hold_channel = 0;
else
......@@ -523,6 +523,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
for (aa=0; aa<nb_antennas_rx; aa++) {
memset((void*)r_re_DL_f[UE_id][aa],0,(frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti)*sizeof(double));
memset((void*)r_im_DL_f[UE_id][aa],0,(frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti)*sizeof(double));
//memset(&PHY_vars_UE_g[UE_id][CC_id]->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[aa][subframe*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti],0,(frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti)*sizeof(int));
}
}
pthread_mutex_unlock(&eNB_output_mutex[UE_id]);
......@@ -653,6 +654,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
for (int idx=0;idx<10;idx++) printf("dumping raw rx subframe (input) %d: rxdataF[%d] = (%f,%f)\n", subframe, idx, r_re_p_f[0][idx],r_im_p_f[0][idx]);
rxdataF = PHY_vars_UE_g[UE_id][CC_id]->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF;
sf_offset = subframe*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti;
printf("[ch_sim] sf_offset %d\n",sf_offset);
adc(r_re_p_f,
......@@ -663,7 +665,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
nb_antennas_rx,
frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti,
12);
for (int idx=0;idx<10;idx++) printf("dumping raw rx subframe %d: rxdataF[%d] = (%d,%d)\n", subframe, idx, ((short*)&rxdataF[0][sf_offset+idx])[0], ((short*)&rxdataF[0][sf_offset+idx])[1]);
for (int idx=0;idx<10;idx++) printf("dumping raw rx subframe %d: rxdataF[%d] = (%d,%d)=====>%s\n", subframe, idx, ((short*)&rxdataF[0][sf_offset+idx])[0], ((short*)&rxdataF[0][sf_offset+idx])[1],(((((r_re_p_f[0][idx]<0)&&(((short*)&rxdataF[0][sf_offset+idx])[0]<0))||((r_re_p_f[0][idx]>=0)&&(((short*)&rxdataF[0][sf_offset+idx])[0]>=0))))&&(((r_im_p_f[0][idx]<0)&&(((short*)&rxdataF[0][sf_offset+idx])[1]<0))||((r_im_p_f[0][idx]>=0)&&(((short*)&rxdataF[0][sf_offset+idx])[1]>=0))))?"OK":"ERROR");
write_output("chsim_rxsigF_frame0.m","chsm_rxsF0", PHY_vars_UE_g[UE_id][CC_id]->common_vars.common_vars_rx_data_per_thread[0].rxdataF[0],10*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti,1,16);
write_output("chsim_rxsigF_frame1.m","chsm_rxsF1", PHY_vars_UE_g[UE_id][CC_id]->common_vars.common_vars_rx_data_per_thread[1].rxdataF[0],10*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti,1,16);
......@@ -672,9 +674,9 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
rx_pwr2 = signal_energy((rxdataF[0])+sf_offset,frame_parms->ofdm_symbol_size)/(12.0*frame_parms->N_RB_DL);
LOG_D(OCM,"[SIM][DL] UE %d : rx_pwr(rxdafaF) (ADC out) %f dB/RE (%d) for subframe %d, writing to %p\n",UE_id, 10*log10((double)rx_pwr2),rx_pwr2,subframe,rxdataF);
#else
UNUSED_VARIABLE(rx_pwr2);
UNUSED_VARIABLE(tx_pwr);
UNUSED_VARIABLE(rx_pwr);
//UNUSED_VARIABLE(rx_pwr2);
//UNUSED_VARIABLE(tx_pwr);
//UNUSED_VARIABLE(rx_pwr);
#endif
} // eNB_output_mask
......@@ -893,7 +895,7 @@ void do_UL_sig_freq(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][
uint32_t frame,int eNB_id,uint8_t CC_id)
{
printf("do_UL_sig\n");
int32_t **txdata,**txdataF,**rxdata,**rxdataF;
int32_t **txdataF,**rxdataF;
#ifdef PHY_ABSTRACTION_UL
int32_t att_eNB_id=-1;
#endif
......@@ -941,7 +943,7 @@ void do_UL_sig_freq(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][
r_re0_f[1] = r_re01_f;
r_im0_f[1] = r_im01_f;
uint8_t do_ofdm_mod = PHY_vars_UE_g[0][0]->do_ofdm_mod;
//uint8_t do_ofdm_mod = PHY_vars_UE_g[0][0]->do_ofdm_mod;
if (abstraction_flag!=0) {
#ifdef PHY_ABSTRACTION_UL
......@@ -1325,11 +1327,20 @@ void init_channel_vars_freq(LTE_DL_FRAME_PARMS *frame_parms, double ***s_re_f,do
PHY_vars_UE_g[UE_id][CC_id]->common_vars.common_vars_rx_data_per_thread[th_id].dl_ch_estimates[eNB_id][idx] = (int32_t*)malloc16_clear( sizeof(int32_t)*frame_parms->symbols_per_tti*(frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH) );
}
}
}
/* //init RX buffers
for (th_id=0; th_id<RX_NB_TH_MAX; th_id++) {
PHY_vars_UE_g[UE_id][CC_id]->common_vars.common_vars_rx_data_per_thread[th_id].rxdataF = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
}
for (i=0; i<frame_parms->nb_antennas_rx; i++) {
for (th_id=0; th_id<RX_NB_TH_MAX; th_id++) {
PHY_vars_UE_g[UE_id][CC_id]->common_vars.common_vars_rx_data_per_thread[th_id].rxdataF[i] = (int32_t*)malloc16_clear((frame_parms->ofdm_symbol_size*14)*sizeof(int32_t));
}
}*/
}
}
}
}
}
......@@ -41,14 +41,26 @@
eNB_MAC_INST* get_eNB_mac_inst(module_id_t module_idP);
OAI_Emulation* get_OAI_emulation(void);
void init_channel_vars(LTE_DL_FRAME_PARMS *frame_parms, double ***s_re,double ***s_im,double ***r_re,double ***r_im,double ***r_re0,double ***r_im0);
void init_channel_vars_freq(LTE_DL_FRAME_PARMS *frame_parms, double ***s_re_f,double ***s_im_f,double ***r_re_f,double ***r_im_f,double ***r_re0_f,double ***r_im0_f);
void do_UL_sig(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX_NUM_CCs],
node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],
uint16_t subframe,uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,
uint32_t frame,int eNB_id,uint8_t CC_id);
void do_UL_sig_freq(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX_NUM_CCs],
node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],
uint16_t subframe,uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,
uint32_t frame,int eNB_id,uint8_t CC_id);
void do_UL_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX_NUM_CCs],
node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],
uint16_t subframe,uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,
uint32_t frame,int eNB_id,uint8_t CC_id);
void do_DL_sig(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_NUM_CCs],
node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint16_t subframe,uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,uint8_t UE_id,int CC_id);
void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_NUM_CCs],
node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint16_t subframe,uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,uint8_t UE_id,int CC_id);
void init_ue(node_desc_t *ue_data, UE_Antenna ue_ant);//Abstraction changes
void init_enb(node_desc_t *enb_data, eNB_Antenna enb_ant);//Abstraction changes
......
......@@ -1098,6 +1098,8 @@ int eNB_trx_read(openair0_device *device, openair0_timestamp *ptimestamp, void *
LOG_D(PHY,"eNB_trx_read generating UL subframe %d (Ts %llu, current TS %llu)\n",
subframe,(unsigned long long)*ptimestamp,
(unsigned long long)current_eNB_rx_timestamp[eNB_id][CC_id]);
printf("is Prach generated? %d, is prach_subframe? %d, frame %d, subframe %d, mode %d, n_ra_prb %d\n",PHY_vars_UE_g[0][CC_id]->generate_prach,is_prach_subframe(frame_parms,frame,subframe),frame,subframe,PHY_vars_UE_g[0][CC_id]->UE_mode[eNB_id], 11111);
if (do_ofdm_mod)
{
write_output("txprachF.m","prach_txF", PHY_vars_UE_g[0][0]->prach_vars[0]->prachF,frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti,1,1);
......@@ -1615,12 +1617,13 @@ void init_ocm(void)
oai_emulation.topology_config.area.y_m);
}
if (abstraction_flag == 0)
if (abstraction_flag == 0){
if (do_ofdm_mod)
init_channel_vars_freq (frame_parms[0], &s_re_f, &s_im_f, &r_re_f, &r_im_f, &r_re0_f, &r_im0_f);
else
init_channel_vars (frame_parms[0], &s_re, &s_im, &r_re, &r_im, &r_re0, &r_im0);
}
// initialize channel descriptors
for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) {
......
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