Commit 9ff4dabc authored by lfarizav's avatar lfarizav

Enable the frequency analysis for dlsim

parent 7d2d816f
......@@ -297,6 +297,7 @@ void bit8_rxdemux(int32_t length,int32_t offset);
@param format data format (0 = real 16-bit, 1 = complex 16-bit,2 real 32-bit, 3 complex 32-bit,4 = real 8-bit, 5 = complex 8-bit)
*/
int32_t write_output(const char *fname, const char *vname, void *data, int length, int dec, char format);
int32_t write_output_chFf(const char *fname, const char *vname, float *data1, float *data2, int length, int dec, char format);
#endif
void Zero_Buffer(void *,uint32_t);
......
......@@ -190,4 +190,24 @@ int write_output(const char *fname,const char *vname,void *data,int length,int d
return 0;
}
int write_output_chFf(const char *fname,const char *vname,float *data1,float *data2,int length,int dec)
{
FILE *fp=NULL;
int i;
printf("Writing %d to %s\n",length,fname);
if (fp== NULL) {
printf("[OPENAIR][FILE OUTPUT] Cannot open file %s\n",fname);
return(-1);
}
for (i=0; i<length; i++) {
fprintf(fp,"%g + j*(%g)\n",data1[i],data2[i]);
}
return 0;
}
#endif // USER_MODE
......@@ -251,6 +251,135 @@ void DL_channel(PHY_VARS_eNB *eNB,PHY_VARS_UE *UE,int subframe,int awgn_flag,dou
}
}
void DL_channel_freq(PHY_VARS_eNB *eNB,PHY_VARS_UE *UE,int subframe,int awgn_flag,double SNR, int tx_lev,int hold_channel,int abstx, int num_rounds, int trials, int round, channel_desc_t *eNB2UE[4],
float *s_re_f[2],float *s_im_f[2],float *r_re_f[2],float *r_im_f[2],FILE *csv_fd) {
int i,u;
int aa,aarx,aatx;
double channelx,channely;
double sigma2_dB,sigma2;
double iqim=0.0;
// printf("Copying tx ..., nsymb %d (n_tx %d), awgn %d\n",nsymb,eNB->frame_parms.nb_antennas_tx,awgn_flag);
for (i=0; i<2*UE->frame_parms.samples_per_tti; i++) {
for (aa=0; aa<eNB->frame_parms.nb_antennas_tx; aa++) {
if (awgn_flag == 0) {
s_re_f[aa][i] = ((double)(((short *)eNB->common_vars.txdataF[0][aa]))[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti)) + (i<<1)]);
s_im_f[aa][i] = ((double)(((short *)eNB->common_vars.txdataF[0][aa]))[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti)) +(i<<1)+1]);
} else {
for (aarx=0; aarx<UE->frame_parms.nb_antennas_rx; aarx++) {
if (aa==0) {
r_re_f[aarx][i] = ((double)(((short *)eNB->common_vars.txdataF[0][aa]))[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti)) +(i<<1)]);
r_im_f[aarx][i] = ((double)(((short *)eNB->common_vars.txdataF[0][aa]))[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti)) +(i<<1)+1]);
} else {
r_re_f[aarx][i] += ((double)(((short *)eNB->common_vars.txdataF[0][aa]))[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti)) +(i<<1)]);
r_im_f[aarx][i] += ((double)(((short *)eNB->common_vars.txdataF[0][aa]))[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti)) +(i<<1)+1]);
}
}
}
}
}
// Multipath channel
if (awgn_flag == 0) {
/*multipath_channel(eNB2UE[round],s_re,s_im,r_re,r_im,
2*UE->frame_parms.samples_per_tti,hold_channel);*/
multipath_channel_freq_AVX_float(eNB2UE[round],s_re_f,s_im_f,r_re_f,r_im_f,
2*UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti,hold_channel,0,0,0,subframe&0x1);
// printf("amc: ****************** eNB2UE[%d]->n_rx = %d,dd %d\n",round,eNB2UE[round]->nb_rx,eNB2UE[round]->channel_offset);
if(abstx==1 && num_rounds>1)
if(round==0 && hold_channel==0) {
random_channel_freq(eNB2UE[1],0);
random_channel_freq(eNB2UE[2],0);
random_channel_freq(eNB2UE[3],0);
}
if (UE->perfect_ce==1) {
// fill in perfect channel estimates
freq_channel_AVX_float(eNB2UE[round],UE->frame_parms.N_RB_DL,12*UE->frame_parms.N_RB_DL + 1);
/*
write_output("channel.m","ch",eNB2UE[round]->ch[0],eNB2UE[round]->channel_length,1,8);
write_output("channelF.m","chF",eNB2UE[round]->chF[0],12*UE->frame_parms.N_RB_DL + 1,1,8);
*/
}
}
if(abstx) {
if (trials==0 && round==0) {
// calculate freq domain representation to compute SINR
freq_channel(eNB2UE[0], eNB->frame_parms.N_RB_DL,2*eNB->frame_parms.N_RB_DL + 1);
// snr=pow(10.0,.1*SNR);
fprintf(csv_fd,"%f,",SNR);
for (u=0; u<2*eNB->frame_parms.N_RB_DL; u++) {
for (aarx=0; aarx<eNB2UE[0]->nb_rx; aarx++) {
for (aatx=0; aatx<eNB2UE[0]->nb_tx; aatx++) {
channelx = eNB2UE[0]->chF[aarx+(aatx*eNB2UE[0]->nb_rx)][u].x;
channely = eNB2UE[0]->chF[aarx+(aatx*eNB2UE[0]->nb_rx)][u].y;
fprintf(csv_fd,"%e+i*(%e),",channelx,channely);
}
}
}
if(num_rounds>1) {
freq_channel(eNB2UE[1], eNB->frame_parms.N_RB_DL,2*eNB->frame_parms.N_RB_DL + 1);
for (u=0; u<2*eNB->frame_parms.N_RB_DL; u++) {
for (aarx=0; aarx<eNB2UE[1]->nb_rx; aarx++) {
for (aatx=0; aatx<eNB2UE[1]->nb_tx; aatx++) {
channelx = eNB2UE[1]->chF[aarx+(aatx*eNB2UE[1]->nb_rx)][u].x;
channely = eNB2UE[1]->chF[aarx+(aatx*eNB2UE[1]->nb_rx)][u].y;
fprintf(csv_fd,"%e+i*(%e),",channelx,channely);
}
}
}
freq_channel(eNB2UE[2], eNB->frame_parms.N_RB_DL,2*eNB->frame_parms.N_RB_DL + 1);
for (u=0; u<2*eNB->frame_parms.N_RB_DL; u++) {
for (aarx=0; aarx<eNB2UE[2]->nb_rx; aarx++) {
for (aatx=0; aatx<eNB2UE[2]->nb_tx; aatx++) {
channelx = eNB2UE[2]->chF[aarx+(aatx*eNB2UE[2]->nb_rx)][u].x;
channely = eNB2UE[2]->chF[aarx+(aatx*eNB2UE[2]->nb_rx)][u].y;
fprintf(csv_fd,"%e+i*(%e),",channelx,channely);
}
}
}
freq_channel(eNB2UE[3], eNB->frame_parms.N_RB_DL,2*eNB->frame_parms.N_RB_DL + 1);
for (u=0; u<2*eNB->frame_parms.N_RB_DL; u++) {
for (aarx=0; aarx<eNB2UE[3]->nb_rx; aarx++) {
for (aatx=0; aatx<eNB2UE[3]->nb_tx; aatx++) {
channelx = eNB2UE[3]->chF[aarx+(aatx*eNB2UE[3]->nb_rx)][u].x;
channely = eNB2UE[3]->chF[aarx+(aatx*eNB2UE[3]->nb_rx)][u].y;
fprintf(csv_fd,"%e+i*(%e),",channelx,channely);
}
}
}
}
}
}
//AWGN
// tx_lev is the average energy over the whole subframe
// but SNR should be better defined wrt the energy in the reference symbols
sigma2_dB = 10*log10((double)tx_lev) +10*log10((double)eNB->frame_parms.ofdm_symbol_size/(double)(eNB->frame_parms.N_RB_DL*12)) - SNR;
sigma2 = pow(10,sigma2_dB/10);
for (i=0; i<2*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti); i++) {
for (aa=0; aa<eNB->frame_parms.nb_antennas_rx; aa++) {
//printf("s_re[0][%d]=> %f , r_re[0][%d]=> %f\n",i,s_re[aa][i],i,r_re[aa][i]);
((short*) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[aa])[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti))+2*i] =
(short) (r_re_f[aa][i] + sqrt(sigma2/2)*ziggurat(0.0,1.0));
((short*) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[aa])[(2*subframe*(UE->frame_parms.ofdm_symbol_size*UE->frame_parms.symbols_per_tti))+2*i+1] =
(short) (r_im_f[aa][i] + (iqim*r_re_f[aa][i]) + sqrt(sigma2/2)*ziggurat(0.0,1.0));
}
}
}
void fill_DCI(PHY_VARS_eNB *eNB,
DCI_ALLOC_t *dci_alloc,
......@@ -1280,12 +1409,12 @@ int main(int argc, char **argv)
LTE_DL_FRAME_PARMS *frame_parms;
//frequency domain
double s_re0_f[2048*14],s_im0_f[2048*14],r_re0_f[2048*14],r_im0_f[2048*14];
double s_re1_f[2048*14],s_im1_f[2048*14],r_re1_f[2048*14],r_im1_f[2048*14];
double *s_re_f[2]={s_re0_f,s_re1_f};
double *s_im_f[2]={s_im0_f,s_im1_f};
double *r_re_f[2]={r_re0_f,r_re1_f};
double *r_im_f[2]={r_im0_f,r_im1_f};
float s_re0_f[2048*14],s_im0_f[2048*14],r_re0_f[2048*14],r_im0_f[2048*14];
float s_re1_f[2048*14],s_im1_f[2048*14],r_re1_f[2048*14],r_im1_f[2048*14];
float *s_re_f[2]={s_re0_f,s_re1_f};
float *s_im_f[2]={s_im0_f,s_im1_f};
float *r_re_f[2]={r_re0_f,r_re1_f};
float *r_im_f[2]={r_im0_f,r_im1_f};
//time domain
double s_re0[30720*2],s_im0[30720*2],r_re0[30720*2],r_im0[30720*2];
......@@ -2469,18 +2598,20 @@ int main(int argc, char **argv)
(subframe*2)+1,
&eNB->frame_parms);
*/
do_OFDM_mod_symbol(&eNB->common_vars,
eNB_id,
(subframe*2),
&eNB->frame_parms,
eNB->do_precoding);
do_OFDM_mod_symbol(&eNB->common_vars,
eNB_id,
(subframe*2)+1,
&eNB->frame_parms,
eNB->do_precoding);
if (!UE->do_ofdm_mod)
{
do_OFDM_mod_symbol(&eNB->common_vars,
eNB_id,
(subframe*2),
&eNB->frame_parms,
eNB->do_precoding);
do_OFDM_mod_symbol(&eNB->common_vars,
eNB_id,
(subframe*2)+1,
&eNB->frame_parms,
eNB->do_precoding);
}
stop_meas(&eNB->ofdm_mod_stats);
......@@ -2491,7 +2622,8 @@ int main(int argc, char **argv)
phy_procedures_eNB_TX(eNB,proc_eNB,no_relay,NULL,0,dci_flag);
do_OFDM_mod_l(eNB->common_vars.txdataF[eNB_id],
if (!UE->do_ofdm_mod)
do_OFDM_mod_l(eNB->common_vars.txdataF[eNB_id],
eNB->common_vars.txdata[eNB_id],
(subframe*2)+2,
&eNB->frame_parms);
......@@ -2502,9 +2634,14 @@ int main(int argc, char **argv)
tx_lev = 0;
for (aa=0; aa<eNB->frame_parms.nb_antennas_tx; aa++) {
tx_lev += signal_energy(&eNB->common_vars.txdata[eNB_id][aa]
[subframe*eNB->frame_parms.samples_per_tti],
eNB->frame_parms.samples_per_tti);
if (UE->do_ofdm_mod)
tx_lev += signal_energy(&eNB->common_vars.txdataF[eNB_id][aa]
[subframe*(eNB->frame_parms.ofdm_symbol_size*eNB->frame_parms.symbols_per_tti)],
(eNB->frame_parms.ofdm_symbol_size*eNB->frame_parms.symbols_per_tti));
else
tx_lev += signal_energy(&eNB->common_vars.txdataF[eNB_id][aa]
[subframe*(eNB->frame_parms.samples_per_tti)],
(eNB->frame_parms.samples_per_tti));
}
tx_lev_dB = (unsigned int) dB_fixed(tx_lev);
......@@ -2512,8 +2649,8 @@ int main(int argc, char **argv)
if (n_frames==1) {
printf("tx_lev = %d (%d dB)\n",tx_lev,tx_lev_dB);
write_output("txsig0.m","txs0", &eNB->common_vars.txdata[eNB_id][0][subframe* eNB->frame_parms.samples_per_tti], eNB->frame_parms.samples_per_tti,1,1);
if (!UE->do_ofdm_mod)
write_output("txsig0.m","txs0", &eNB->common_vars.txdataF[eNB_id][0][subframe*(eNB->frame_parms.ofdm_symbol_size*eNB->frame_parms.symbols_per_tti)], (eNB->frame_parms.ofdm_symbol_size*eNB->frame_parms.symbols_per_tti),1,1);
if (transmission_mode<7) {
write_output("txsigF0.m","txsF0", &eNB->common_vars.txdataF[eNB_id][0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1);
......@@ -2523,8 +2660,10 @@ int main(int argc, char **argv)
}
}
}
DL_channel(eNB,UE,subframe,awgn_flag,SNR,tx_lev,hold_channel,abstx,num_rounds,trials,round,eNB2UE,s_re,s_im,r_re,r_im,csv_fd);
if (UE->do_ofdm_mod)
DL_channel_freq(eNB,UE,subframe,awgn_flag,SNR,tx_lev,hold_channel,abstx,num_rounds,trials,round,eNB2UE,s_re_f,s_im_f,r_re_f,r_im_f,csv_fd);
else
DL_channel(eNB,UE,subframe,awgn_flag,SNR,tx_lev,hold_channel,abstx,num_rounds,trials,round,eNB2UE,s_re,s_im,r_re,r_im,csv_fd);
UE_rxtx_proc_t *proc = &UE->proc.proc_rxtx[UE->current_thread_id[subframe]];
......@@ -2532,6 +2671,14 @@ int main(int argc, char **argv)
UE->UE_mode[0] = PUSCH;
// first symbol has to be done separately in one-shot mode
if (UE->do_ofdm_mod)
slot_fep_freq(UE,
0,
(proc->subframe_rx<<1),
UE->rx_offset,
0,
0);
else
slot_fep(UE,
0,
(proc->subframe_rx<<1),
......@@ -2600,21 +2747,31 @@ int main(int argc, char **argv)
}
if ((test_perf ==0 ) && (n_frames==1)) {
if (UE->do_ofdm_mod)
{
write_output_chFf("ch0_f.m","ch0_f",eNB2UE[0]->chFf[0].x,eNB2UE[0]->chFf[0].y,eNB2UE[0]->channel_length,1,8);
if (eNB->frame_parms.nb_antennas_tx>1)
write_output_chFf("ch1_f.m","ch1_f",eNB2UE[0]->chFf[eNB->frame_parms.nb_antennas_rx].x,eNB2UE[0]->chFf[eNB->frame_parms.nb_antennas_rx].y,eNB2UE[0]->channel_length,1,8);
}
else
{
write_output("ch0.m","ch0",eNB2UE[0]->ch[0],eNB2UE[0]->channel_length,1,8);
if (eNB->frame_parms.nb_antennas_tx>1)
write_output("ch1.m","ch1",eNB2UE[0]->ch[eNB->frame_parms.nb_antennas_rx],eNB2UE[0]->channel_length,1,8);
//common vars
write_output("rxsig0.m","rxs0", &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1);
}
write_output("rxsigF0.m","rxsF0", &UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[0][0],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
if (UE->frame_parms.nb_antennas_rx>1) {
if (!UE->do_ofdm_mod)
write_output("rxsig1.m","rxs1", UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1);
write_output("rxsigF1.m","rxsF1", UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[1],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
}
write_output("dlsch00_r0.m","dl00_r0",
&(UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].dl_ch_estimates[eNB_id][0][0]),
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
......@@ -2688,19 +2845,24 @@ int main(int argc, char **argv)
for (i=0; i<Kr_bytes; i++)
printf("%d : %x (%x)\n",i,UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->c[s][i],UE->dlsch[UE->current_thread_id[subframe]][0][0]->harq_processes[0]->c[s][i]^eNB->dlsch[0][0]->harq_processes[0]->c[s][i]);
}
sprintf(fname,"rxsig0_r%d.m",round);
sprintf(vname,"rxs0_r%d",round);
write_output(fname,vname, &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1);
sprintf(fname,"rxsigF0_r%d.m",round);
sprintf(vname,"rxs0F_r%d",round);
if (!UE->do_ofdm_mod)
{
sprintf(fname,"rxsig0_r%d.m",round);
sprintf(vname,"rxs0_r%d",round);
write_output(fname,vname, &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1);
}
sprintf(fname,"rxsigF0_r%d.m",round);
sprintf(vname,"rxs0F_r%d",round);
write_output(fname,vname, &UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[0][0],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
if (UE->frame_parms.nb_antennas_rx>1) {
if (!UE->do_ofdm_mod)
{
sprintf(fname,"rxsig1_r%d.m",round);
sprintf(vname,"rxs1_r%d.m",round);
write_output(fname,vname, UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1);
}
sprintf(fname,"rxsigF1_r%d.m",round);
sprintf(vname,"rxs1F_r%d.m",round);
write_output(fname,vname, UE->common_vars.common_vars_rx_data_per_thread[UE->current_thread_id[subframe]].rxdataF[1],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
......
......@@ -72,8 +72,7 @@
int number_rb_ul;
int first_rbUL ;
#define SSE_float
#ifdef SSE_float
#ifdef __AVX2__
float r_re_DL[NUMBER_OF_UE_MAX][2][30720];
float r_im_DL[NUMBER_OF_UE_MAX][2][30720];
float r_re_UL[NUMBER_OF_eNB_MAX][2][30720];
......@@ -412,7 +411,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
int32_t **txdataF,**rxdataF;
uint8_t eNB_id=0;
#ifdef SSE_float
#ifdef __AVX2__
float tx_pwr;
#else
double tx_pwr;
......@@ -426,7 +425,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
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
#ifdef SSE_float
#ifdef __AVX2__
float s_re0_f[2048*14];//ofdm_symbol_size*symbols_per_tti;
float s_re1_f[2048*14];//ofdm_symbol_size*symbols_per_tti;
float *s_re_f[2];
......@@ -498,7 +497,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 DL raw subframe %d: txdataF[%d] = (%d,%d)\n", subframe, idx, ((short*)&txdataF[0][sf_offset+idx])[0], ((short*)&txdataF[0][sf_offset+idx])[1]);
#ifdef SSE_float
#ifdef __AVX2__
start_meas(&eNB2UE[eNB_id][UE_id][CC_id]->DL_dac_fixed_gain);
tx_pwr = dac_fixed_gain_AVX_float(s_re_f,
s_im_f,
......@@ -545,7 +544,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
//eNB2UE[eNB_id][UE_id]->path_loss_dB = 0;
//clock_t start=clock();
#ifdef SSE_float
#ifdef __AVX2__
start_meas(&eNB2UE[eNB_id][UE_id][CC_id]->DL_multipath_channel_freq);
multipath_channel_freq_AVX_float(eNB2UE[eNB_id][UE_id][CC_id],s_re_f,s_im_f,r_re0_f,r_im0_f,
frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti,hold_channel,eNB_id,UE_id,CC_id,subframe&0x1);
......@@ -590,7 +589,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB);
#ifdef DEBUG_SIM
#ifdef SSE_float
#ifdef __AVX2__
rx_pwr = signal_energy_fp_AVX_float(r_re0_f,r_im0_f,nb_antennas_rx,
frame_parms->ofdm_symbol_size,
sf_offset)/(12.0*frame_parms->N_RB_DL);
......@@ -621,7 +620,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
/*count++;
clock_t start=clock();*/
#ifdef SSE_float
#ifdef __AVX2__
start_meas(&eNB2UE[eNB_id][UE_id][CC_id]->DL_rf_rx_simple_freq);
rf_rx_simple_freq_AVX_float(r_re0_f,
r_im0_f,
......@@ -657,7 +656,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
fprintf(file1,"%d\t%e\t%e\n",x,r_re0_f[0][x],r_im0_f[0][x]);
}*/
#ifdef DEBUG_SIM
#ifdef SSE_float
#ifdef __AVX2__
rx_pwr = signal_energy_fp_AVX_float((r_re0_f,r_im0_f,
nb_antennas_rx,
frame_parms->ofdm_symbol_size,//?
......@@ -685,7 +684,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
eNB_output_mask[UE_id] |= (1<<eNB_id);
if (eNB_output_mask[UE_id] == (1<<NB_eNB_INST)-1) {
eNB_output_mask[UE_id]=0;
#ifdef SSE_float
#ifdef __AVX2__
float *r_re_p_f[2] = {r_re_DL_f[UE_id][0],r_re_DL_f[UE_id][1]};
float *r_im_p_f[2] = {r_im_DL_f[UE_id][0],r_im_DL_f[UE_id][1]};
#else
......@@ -705,7 +704,7 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
//printf("[ch_sim] sf_offset %d\n",sf_offset);
#ifdef SSE_float
#ifdef __AVX2__
start_meas(&eNB2UE[eNB_id][UE_id][CC_id]->DL_adc);
adc_AVX_float(r_re_p_f,
r_im_p_f,
......@@ -973,7 +972,7 @@ void do_UL_sig_freq(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][
uint8_t nb_antennas_rx = UE2eNB[0][0][CC_id]->nb_rx; // number of rx antennas at eNB
uint8_t nb_antennas_tx = UE2eNB[0][0][CC_id]->nb_tx; // number of tx antennas at UE
#ifdef SSE_float
#ifdef __AVX2__
float tx_pwr, rx_pwr;
#else
double tx_pwr, rx_pwr;
......@@ -994,7 +993,7 @@ void do_UL_sig_freq(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][
int ulfrrb2 ;
uint8_t harq_pid;
#endif
#ifdef SSE_float
#ifdef __AVX2__
float s_re0_f[2048*14];//ofdm_symbol_size*symbols_per_tti;
float s_re1_f[2048*14];//ofdm_symbol_size*symbols_per_tti;
float *s_re_f[2];
......@@ -1106,7 +1105,7 @@ void do_UL_sig_freq(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][
// UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB));
} else {
#ifdef SSE_float
#ifdef __AVX2__
start_meas(&UE2eNB[UE_id][eNB_id][CC_id]->UL_dac_fixed_gain);
tx_pwr = dac_fixed_gain_AVX_float((float**)s_re_f,
(float**)s_im_f,
......@@ -1149,7 +1148,7 @@ void do_UL_sig_freq(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][
subframe,sf_offset);
//write_output("chsim_s_re_f_UL.m","chsm_sref_UL", s_re_f,10*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti,1,16);
#ifdef SSE_float
#ifdef __AVX2__
start_meas(&UE2eNB[UE_id][eNB_id][CC_id]->UL_multipath_channel_freq);
multipath_channel_freq_AVX_float(UE2eNB[UE_id][eNB_id][CC_id],s_re_f,s_im_f,r_re0_f,r_im0_f,
frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti,hold_channel,eNB_id,UE_id,CC_id,subframe&0x1);//ue timer subframe&0x1
......@@ -1184,7 +1183,7 @@ void do_UL_sig_freq(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][
LOG_D(OCM,"[SIM][UL] subframe %d Channel UE %d => eNB %d : %f dB (hold %d,length %d, PL %f)\n",subframe,UE_id,eNB_id,10*log10(rx_pwr),
hold_channel,12*frame_parms->N_RB_DL+1,
UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB);
#ifdef SSE_float
#ifdef __AVX2__
rx_pwr = signal_energy_fp_SSE_float(r_re0_f,r_im0_f,nb_antennas_rx,frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti,0);
#else
rx_pwr = signal_energy_fp(r_re0_f,r_im0_f,nb_antennas_rx,frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti,0);
......@@ -1207,7 +1206,7 @@ void do_UL_sig_freq(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][
pthread_mutex_unlock(&UE_output_mutex[eNB_id]);
}
} //UE_id
#ifdef SSE_float
#ifdef __AVX2__
float *r_re_p_f[2] = {r_re_UL_f[eNB_id][0],r_re_UL_f[eNB_id][1]};
float *r_im_p_f[2] = {r_im_UL_f[eNB_id][0],r_im_UL_f[eNB_id][1]};
#else
......@@ -1215,7 +1214,7 @@ void do_UL_sig_freq(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][
double *r_im_p_f[2] = {r_im_UL_f[eNB_id][0],r_im_UL_f[eNB_id][1]};
#endif
#ifdef SSE_float
#ifdef __AVX2__
start_meas(&UE2eNB[0][eNB_id][CC_id]->UL_rf_rx_simple_freq);
rf_rx_simple_freq_AVX_float(r_re_p_f,
r_im_p_f,
......@@ -1254,7 +1253,7 @@ void do_UL_sig_freq(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][
rxdataF = PHY_vars_eNB_g[eNB_id][CC_id]->common_vars.rxdataF[0];
sf_offset = 0;//subframe*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti;
#ifdef SSE_float
#ifdef __AVX2__
start_meas(&UE2eNB[0][eNB_id][CC_id]->UL_adc);
adc_AVX_float(r_re_p_f,
r_im_p_f,
......@@ -1324,7 +1323,7 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB
int16_t *tx_prachF;
uint8_t nb_antennas_rx = UE2eNB[0][0][CC_id]->nb_rx; // number of rx antennas at eNB
uint8_t nb_antennas_tx = UE2eNB[0][0][CC_id]->nb_tx; // number of tx antennas at UE
#ifdef SSE_float
#ifdef __AVX2__
float tx_pwr, rx_pwr;
#else
double tx_pwr, rx_pwr;
......@@ -1344,7 +1343,7 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB
int ulfrrb2 ;
uint8_t harq_pid;
#endif
#ifdef SSE_float
#ifdef __AVX2__
float s_re0_f_prach[2048*14*12];//ofdm_symbol_size*symbols_per_tti;
float s_re1_f_prach[2048*14*12];//ofdm_symbol_size*symbols_per_tti;
float *s_re_f_prach[2];
......@@ -1437,7 +1436,7 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB
//UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB));
} else {
#ifdef SSE_float
#ifdef __AVX2__
start_meas(&UE2eNB[0][eNB_id][CC_id]->dac_fixed_gain_PRACH);
tx_pwr = dac_fixed_gain_prach_AVX_float((float**)s_re_f_prach,
(float**)s_im_f_prach,
......@@ -1482,7 +1481,7 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB
// write_output("s_re_f_prach.m","s_re_f_prach_txF", s_re_f_prach,frame_parms->ofdm_symbol_size*12,1,1);
#ifdef SSE_float
#ifdef __AVX2__
start_meas(&UE2eNB[UE_id][eNB_id][CC_id]->multipath_channel_freq_PRACH);
multipath_channel_prach_AVX_float(UE2eNB[UE_id][eNB_id][CC_id],s_re_f_prach,s_im_f_prach,r_re0_f_prach,r_im0_f_prach,&PHY_vars_UE_g[UE_id][CC_id]->frame_parms,
(prach_fmt<4)?13+839+12:3+139+2,hold_channel,eNB_id,prach_fmt,n_ra_prb);
......@@ -1501,7 +1500,7 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB
/*LOG_D(OCM,"[SIM][UL] subframe %d Channel UE %d => eNB %d : %f dB (hold %d,length %d, PL %f)\n",subframe,UE_id,eNB_id,10*log10(rx_pwr),
hold_channel,12*frame_parms->N_RB_DL+1,
UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB);*/
#ifdef SSE_float
#ifdef __AVX2__
rx_pwr = signal_energy_fp_AVX_float(r_re0_f_prach,r_im0_f_prach,nb_antennas_rx,frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*12,0);
#else
rx_pwr = signal_energy_fp(r_re0_f_prach,r_im0_f_prach,nb_antennas_rx,frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*12,0);
......@@ -1522,7 +1521,7 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB
__m256 r_re0_f_prach_256,r_im0_f_prach_256,r_re_UL_f_prach_256,r_im_UL_f_prach_256;
pthread_mutex_lock(&UE_output_mutex[eNB_id]);
#ifdef SSE_float
#ifdef __AVX2__
for (aa=0; aa<nb_antennas_rx; aa++) {
for (i=0; i<(frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti)>>3; i++) {
//r_re_UL_f_prach[eNB_id][aa][i]+=r_re0_f_prach[aa][i];
......@@ -1551,7 +1550,7 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB
pthread_mutex_unlock(&UE_output_mutex[eNB_id]);
}
} //UE_id
#ifdef SSE_float
#ifdef __AVX2__
float *r_re_p_f_prach[2] = {r_re_UL_f_prach[eNB_id][0],r_re_UL_f_prach[eNB_id][1]};
float *r_im_p_f_prach[2] = {r_im_UL_f_prach[eNB_id][0],r_im_UL_f_prach[eNB_id][1]};
#else
......@@ -1561,7 +1560,7 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB
/*for (int idx=0;idx<10;idx++) printf("dumping raw PRACH UL tx subframe (output) %d: r_re_im_p_f_prach[%d] = (%d,%d)\n", subframe, idx, (short)(r_re_p_f_prach[0][idx]),(short)(r_im_p_f_prach[0][idx]));
for (int idx=829;idx<839;idx++) printf("dumping raw PRACH UL tx subframe (output) %d: r_re_im_p_f_prach[%d] = (%d,%d)\n", subframe, idx, (short)(r_re_p_f_prach[0][idx]),(short)(r_im_p_f_prach[0][idx]));*/
//clock_t start=clock();
#ifdef SSE_float
#ifdef __AVX2__
start_meas(&UE2eNB[0][eNB_id][CC_id]->rf_rx_simple_freq_PRACH);
rf_rx_simple_freq_AVX_float(r_re_p_f_prach,
r_im_p_f_prach,
......@@ -1600,7 +1599,7 @@ void do_UL_sig_freq_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB
rx_prachF = PHY_vars_eNB_g[eNB_id][CC_id]->prach_vars.rxsigF;
sf_offset = pointer_firstvalue_PRACH;
#ifdef SSE_float
#ifdef __AVX2__
start_meas(&UE2eNB[0][eNB_id][CC_id]->adc_PRACH);
adc_prach_AVX_float(r_re_p_f_prach,
r_im_p_f_prach,
......
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