Commit d4a81046 authored by lfarizav's avatar lfarizav

Implementing SSE (float) in the channel model

parent 5a51235e
......@@ -326,7 +326,7 @@ int32_t signal_energy_nodc(int32_t *,uint32_t);
\brief Computes the signal energy per subcarrier
*/
double signal_energy_fp(double *s_re[2], double *s_im[2], uint32_t nb_antennas, uint32_t length,uint32_t offset);
float signal_energy_fp_SSE_float(float *s_re[2], float *s_im[2], uint32_t nb_antennas, uint32_t length,uint32_t offset);
/*!\fn double signal_energy_fp2(struct complex *, uint32_t);
\brief Computes the signal energy per subcarrier
*/
......
......@@ -331,6 +331,19 @@ double signal_energy_fp(double *s_re[2],double *s_im[2],uint32_t nb_antennas,uin
return(V/length/nb_antennas);
}
#endif
float signal_energy_fp_SSE_float(float *s_re[2],float *s_im[2],uint32_t nb_antennas,uint32_t length,uint32_t offset)
{
int32_t aa,i;
float V=0.0;
for (i=0; i<length; i++) {
for (aa=0; aa<nb_antennas; aa++) {
V= V + (s_re[aa][i+offset]*s_re[aa][i+offset]) + (s_im[aa][i+offset]*s_im[aa][i+offset]);
}
}
return(V/length/nb_antennas);
}
double signal_energy_fp2(struct complex *s,uint32_t length)
{
......
......@@ -36,19 +36,47 @@ void adc(double *r_re[2],
{
int i;
int aa;
__m128i r_re128, r_im128, output_re128, output_im128;
__m128d gain128
__m128d r_re128,r_im128,gain128;
double gain = (double)(1<<(B-1));
gain128=_mm_set1_pd(gain);
for (i=0; i<(length>>1); i++) {//SSE can process 8 shorts in parallel (length>>3)
for (i=0; i<(length>>1); i++) {
for (aa=0; aa<nb_rx_antennas; aa++) {
r_re128=_mm_loadu_pd(&r_re[aa][2*i+input_offset]]);
r_im128=_mm_loadu_pd(&r_im[aa][2*i+input_offset]]);
r_re128=_mm_loadu_pd(&r_re[aa][2*i+input_offset]);
r_im128=_mm_loadu_pd(&r_im[aa][2*i+input_offset]);
r_re128=_mm_mul_pd(r_re128,gain128);
r_im128=_mm_mul_pd(r_im128,gain128);
((short *)output[aa])[((2*i+output_offset)<<1)]=_mm_cvttsd_si32(r_re128);
((short *)output[aa])[1+((2*i+output_offset)<<1)]=_mm_cvtsd_si32(r_re128);
}
}
}
#else
void adc(double *r_re[2],
double *r_im[2],
unsigned int input_offset,
unsigned int output_offset,
unsigned int **output,
unsigned int nb_rx_antennas,
unsigned int length,
unsigned char B)
{
int i;
int aa;
//FILE *file1=NULL;
//FILE *file2=NULL;
//file1 = fopen("adc1","w+");
//file1 = fopen("adc2","w+");
double gain = (double)(1<<(B-1));
//double gain = 1.0;
//for (i=0;i<length;i++){
// fprintf(file1,"%d\t%d\t%d\t%d\t%d\n",i,(short)(r_re[0][i+input_offset]*gain),(short)(r_im[0][i+input_offset]*gain),output_offset/14336,i+output_offset);
// }
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);
//if (i>10 && i<20)
//printf("Adc outputs %d (%d,%d)-(%d,%d)\n",i+output_offset,((short *)output[aa])[((i+output_offset)<<1)],((short *)output[aa])[1+((i+output_offset)<<1)],(short)(r_re[aa][i+input_offset]*gain),(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) );
}
......@@ -56,9 +84,9 @@ void adc(double *r_re[2],
//printf("Adc outputs %d %e %d \n",i,((short *)output[0])[((i+output_offset)<<1)], ((i+output_offset)<<1) );
}
}
#else
void adc(double *r_re[2],
double *r_im[2],
#endif
void adc_SSE_float(float *r_re[2],
float *r_im[2],
unsigned int input_offset,
unsigned int output_offset,
unsigned int **output,
......@@ -72,7 +100,7 @@ void adc(double *r_re[2],
//FILE *file2=NULL;
//file1 = fopen("adc1","w+");
//file1 = fopen("adc2","w+");
double gain = (double)(1<<(B-1));
float gain = (float)(1<<(B-1));
//double gain = 1.0;
//for (i=0;i<length;i++){
// fprintf(file1,"%d\t%d\t%d\t%d\t%d\n",i,(short)(r_re[0][i+input_offset]*gain),(short)(r_im[0][i+input_offset]*gain),output_offset/14336,i+output_offset);
......@@ -90,7 +118,6 @@ void adc(double *r_re[2],
//printf("Adc outputs %d %e %d \n",i,((short *)output[0])[((i+output_offset)<<1)], ((i+output_offset)<<1) );
}
}
#endif
void adc_freq(double *r_re[2],
double *r_im[2],
unsigned int input_offset,
......@@ -210,3 +237,35 @@ void adc_prach(double *r_re[2],
//printf("Adc outputs %d %e %d \n",i,((short *)output[0])[((i+output_offset)<<1)], ((i+output_offset)<<1) );
}
}
void adc_prach_SSE_float(float *r_re[2],
float *r_im[2],
unsigned int input_offset,
unsigned int output_offset,
unsigned int **output,
unsigned int nb_rx_antennas,
unsigned int length,
unsigned char B)
{
int i;
int aa;
double gain = (double)(1<<(B-1));
//double gain = 1.0;
for (i=0; i<length; i++) {
for (aa=0; aa<nb_rx_antennas; aa++) {
((short *)output[aa])[((i+output_offset/2)<<1)] = (short)(r_re[aa][i+input_offset]*gain);
((short *)output[aa])[1+((i+output_offset/2)<<1)] = (short)(r_im[aa][i+input_offset]*gain);
#ifdef DEBUG_ADC
if (i<10)
printf("[adc_prach]i %d. input (%d,%d), output (%d,%d)\n",i,(short)(r_re[aa][i+input_offset]),(short)(r_im[aa][i+input_offset]),((short *)output[aa])[((i+output_offset/2)<<1)],((short *)output[aa])[1+((i+output_offset/2)<<1)]);
if (i>length-10&&i<length)
#endif
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) );
}
}
//printf("Adc outputs %d %e %d \n",i,((short *)output[0])[((i+output_offset)<<1)], ((i+output_offset)<<1) );
}
}
......@@ -75,7 +75,6 @@ void dac(double *s_re[2],
}
#define dac_SSE
#ifdef dac_SSE
//This implementation of dac_fixed_gain using SSE does not work
double dac_fixed_gain(double *s_re[2],
double *s_im[2],
uint32_t **input,
......@@ -113,13 +112,8 @@ double dac_fixed_gain(double *s_re[2],
input_im128=_mm_mul_pd(input_im128,_mm_set1_pd(div));
_mm_storeu_pd(&s_re[aa][2*i],input_re128);
_mm_storeu_pd(&s_im[aa][2*i],input_im128);
//s_re[aa][i] = amp*((double)(((short *)input[aa]))[((i+input_offset)<<1)])/amp1; ///(1<<(B-1));
//s_im[aa][i] = amp*((double)(((short *)input[aa]))[((i+input_offset)<<1)+1])/amp1; ///(1<<(B-1));
}
}
/*for (i=0;i<length;i++)
printf(" s_re_out[%d] %e, s_im_out[%d] %e, input_re[%d] %e, input_im[%d] %e\n",i,s_re[0][i],i,s_im[0][i],i,((double)(((short *)input[0]))[((i+input_offset)<<1)]),i,((double)(((short *)input[0]))[((i+input_offset)<<1)+1]));*/
// printf("ener %e\n",signal_energy_fp(s_re,s_im,nb_tx_antennas,length,0));
return(signal_energy_fp(s_re,s_im,nb_tx_antennas,length_meas,0)/NB_RE);
}
......@@ -180,6 +174,48 @@ double dac_fixed_gain(double *s_re[2],
return(signal_energy_fp(s_re,s_im,nb_tx_antennas,length_meas,0)/NB_RE);
}
#endif
double dac_fixed_gain_SSE_float(float *s_re[2],
float *s_im[2],
uint32_t **input,
uint32_t input_offset,
uint32_t nb_tx_antennas,
uint32_t length,
uint32_t input_offset_meas,
uint32_t length_meas,
uint8_t B,
float txpwr_dBm,
int NB_RE)
{
int i;
int aa;
float amp,amp1,div;
__m128 input_re128, input_im128;
amp = //sqrt(NB_RE)*pow(10.0,.05*txpwr_dBm)/sqrt(nb_tx_antennas); //this is amp per tx antenna
pow(10.0,.05*txpwr_dBm)/sqrt(nb_tx_antennas); //this is amp per tx antenna
amp1 = 0;
for (aa=0; aa<nb_tx_antennas; aa++) {
amp1 += sqrt((float)signal_energy((int32_t*)&input[aa][input_offset_meas],length_meas)/NB_RE);
}
amp1/=nb_tx_antennas;
div=amp/amp1;
for (i=0; i<(length>>2); i++) {
for (aa=0; aa<nb_tx_antennas; aa++) {
input_re128=_mm_set_ps(((float)(((short *)input[aa]))[(((4*i+3)+input_offset)<<1)]),((float)(((short *)input[aa]))[(((4*i+2)+input_offset)<<1)]),((float)(((short *)input[aa]))[(((4*i+1)+input_offset)<<1)]),((float)(((short *)input[aa]))[((4*i+input_offset)<<1)]));
input_im128=_mm_set_ps(((float)(((short *)input[aa]))[(((4*i+3)+input_offset)<<1)+1]),((float)(((short *)input[aa]))[(((4*i+2)+input_offset)<<1)+1]),((float)(((short *)input[aa]))[(((4*i+1)+input_offset)<<1)+1]),((float)(((short *)input[aa]))[((4*i+input_offset)<<1)+1]));
input_re128=_mm_mul_ps(input_re128,_mm_set1_ps(div));
input_im128=_mm_mul_ps(input_im128,_mm_set1_ps(div));
_mm_storeu_ps(&s_re[aa][4*i],input_re128);
_mm_storeu_ps(&s_im[aa][4*i],input_im128);
}
}
return(signal_energy_fp_SSE_float(s_re,s_im,nb_tx_antennas,length_meas,0)/NB_RE);
}
double dac_fixed_gain_prach(double *s_re[2],
double *s_im[2],
uint32_t *input,
......@@ -245,3 +281,68 @@ double dac_fixed_gain_prach(double *s_re[2],
return(signal_energy_fp(s_re,s_im,nb_tx_antennas,length_meas,0)/NB_RE);
}
float dac_fixed_gain_prach_SSE_float(float *s_re[2],
float *s_im[2],
uint32_t *input,
uint32_t input_offset,
uint32_t nb_tx_antennas,
uint32_t length,
uint32_t input_offset_meas,
uint32_t length_meas,
uint8_t B,
float txpwr_dBm,
int NB_RE,
int ofdm_symbol_size)
{
int i;
int aa;
float amp,amp1;
int k;
amp = //sqrt(NB_RE)*pow(10.0,.05*txpwr_dBm)/sqrt(nb_tx_antennas); //this is amp per tx antenna
pow(10.0,.05*txpwr_dBm)/sqrt(nb_tx_antennas); //this is amp per tx antenna
amp1 = 0;
for (aa=0; aa<nb_tx_antennas; aa++) {
amp1 += sqrt((float)signal_energy_prach((int32_t*)&input[input_offset_meas],length_meas)/NB_RE);
}
amp1/=nb_tx_antennas;
// printf("DAC: amp1 %f dB (%d,%d), tx_power %f\n",20*log10(amp1),input_offset,input_offset_meas,txpwr_dBm);
/*
if (nb_tx_antennas==2)
amp1 = AMP/2;
else if (nb_tx_antennas==4)
amp1 = ((AMP*ONE_OVER_SQRT2_Q15)>>16);
else //assume (nb_tx_antennas==1)
amp1 = ((AMP*ONE_OVER_SQRT2_Q15)>>15);
amp1 = amp1*sqrt(512.0/300.0); //account for loss due to null carriers
//printf("DL: amp1 %f dB (%d,%d), tx_power %f\n",20*log10(amp1),input_offset,input_offset_meas,txpwr_dBm);
*/
#ifdef DEBUG_DAC
printf("DAC: input_offset %d, amp %e, amp1 %e\n",input_offset,amp,amp1);
#endif
k=input_offset;
for (i=0; i<length*2; i+=2) {
for (aa=0; aa<nb_tx_antennas; aa++) {
s_re[aa][i/2] = amp*((float)(((short *)input))[((k))])/amp1; ///(1<<(B-1));
s_im[aa][i/2] = amp*((float)(((short *)input))[((k))+1])/amp1; ///(1<<(B-1));
#ifdef DEBUG_DAC
if(i<20)
printf("DAC[%d]: input (%d,%d). output (%e,%e)\n",i/2,(((short *)input))[((k))],(((short *)input))[((k))+1],s_re[aa][i/2],s_im[aa][i/2]);
if (i>length*2-20&&i<length*2)
printf("DAC[%d]: input (%d,%d). output (%e,%e)\n",i/2,(((short *)input))[((k))],(((short *)input))[((k))+1],s_re[aa][i/2],s_im[aa][i/2]);
#endif
k+=2;
if (k==12*2*ofdm_symbol_size)
k=0;
}
}
// printf("ener %e\n",signal_energy_fp(s_re,s_im,nb_tx_antennas,length,0));
return(signal_energy_fp(s_re,s_im,nb_tx_antennas,length_meas,0)/NB_RE);
}
......@@ -72,6 +72,16 @@ void rf_rx_simple_freq(double *r_re[2],
unsigned int symbols_per_tti,
unsigned int ofdm_symbol_size,
unsigned int n_samples);
void rf_rx_simple_freq_SSE_float(float *r_re[2],
float *r_im[2],
unsigned int nb_rx_antennas,
unsigned int length,
float s_time,
float rx_gain_dB,
unsigned int symbols_per_tti,
unsigned int ofdm_symbol_size,
unsigned int n_samples);
void adc(double *r_re[2],
double *r_im[2],
......@@ -81,7 +91,14 @@ void adc(double *r_re[2],
unsigned int nb_rx_antennas,
unsigned int length,
unsigned char B);
void adc_SSE_float(float *r_re[2],
float *r_im[2],
unsigned int input_offset,
unsigned int output_offset,
int **output,
unsigned int nb_rx_antennas,
unsigned int length,
unsigned char B);
void adc_freq(double *r_re[2],
double *r_im[2],
unsigned int input_offset,
......@@ -99,6 +116,14 @@ void adc_prach(double *r_re[2],
unsigned int nb_rx_antennas,
unsigned int length,
unsigned char B);
void adc_prach_SSE_float(float *r_re[2],
float *r_im[2],
unsigned int input_offset,
unsigned int output_offset,
int **output,
unsigned int nb_rx_antennas,
unsigned int length,
unsigned char B);
void dac(double *s_re[2],
double *s_im[2],
......@@ -134,6 +159,18 @@ double dac_fixed_gain(double *s_re[2],
double gain,
int NB_RE);
float dac_fixed_gain_SSE_float(float *s_re[2],
float *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,
float gain,
int NB_RE);
double dac_fixed_gain_prach(double *s_re[2],
double *s_im[2],
int *input,
......@@ -146,3 +183,15 @@ double dac_fixed_gain_prach(double *s_re[2],
double gain,
int NB_RE,
int ofdm_symbol_size);
float dac_fixed_gain_prach_SSE_float(float *s_re[2],
float *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,
float gain,
int NB_RE,
int ofdm_symbol_size);
......@@ -298,8 +298,10 @@ clock_t start=clock();*/
rx128_re = _mm_loadu_pd(&r_re[a][2*i]);//r_re[a][i],r_re[a][i+1]
rx128_im = _mm_loadu_pd(&r_im[a][2*i]);//r_im[a][i],r_im[a][i+1]
rx128_gain_lin = _mm_set1_pd(rx_gain_lin);
gauss_0_128_sqrt_NOW = _mm_set1_pd(sqrt_NOW*ziggurat(0.0,1.0));
gauss_1_128_sqrt_NOW = _mm_set1_pd(sqrt_NOW*ziggurat(0.0,1.0));
gauss_0_128_sqrt_NOW = _mm_set_pd(ziggurat(0.0,1.0),ziggurat(0.0,1.0));
gauss_1_128_sqrt_NOW = _mm_set_pd(ziggurat(0.0,1.0),ziggurat(0.0,1.0));
gauss_0_128_sqrt_NOW = _mm_mul_pd(gauss_0_128_sqrt_NOW,_mm_set1_pd(sqrt_NOW));
gauss_1_128_sqrt_NOW = _mm_mul_pd(gauss_1_128_sqrt_NOW,_mm_set1_pd(sqrt_NOW));
// Amplify by receiver gain and apply 3rd order non-linearity
//r_re[a][i] = rx_gain_lin*(r_re[a][i] + sqrt(.5*N0W)*gaussdouble(0.0,1.0));
//r_im[a][i] = rx_gain_lin*(r_im[a][i] + sqrt(.5*N0W)*gaussdouble(0.0,1.0));
......@@ -364,7 +366,79 @@ sum=(sum+stop-start);*/
}
#endif
void rf_rx_simple_freq_SSE_float(float *r_re[2],
float *r_im[2],
unsigned int nb_rx_antennas,
unsigned int length,
float s_time,
float rx_gain_dB,
unsigned int symbols_per_tti,
unsigned int ofdm_symbol_size,
unsigned int n_samples)
{
/* static int first_run=0;
static double sum;
static int count;
if (!first_run)
{
first_run=1;
sum=0;
count=0;
}
count++;*/
__m128 rx128_re,rx128_im,rx128_gain_lin,gauss_0_128_sqrt_NOW,gauss_1_128_sqrt_NOW;//double
int i,a;
float rx_gain_lin = pow(10.0,.05*rx_gain_dB);
//double rx_gain_lin = 1.0;
float N0W = pow(10.0,.1*(-174.0 - 10*log10(s_time*1e-9)));
float sqrt_NOW = sqrt(.5*N0W);
//double N0W = 0.0;
// printf("s_time=%f, N0W=%g\n",s_time,10*log10(N0W));
//Loop over input
#ifdef DEBUG_RF
printf("N0W = %f dBm\n",10*log10(N0W));
printf("rx_gain = %f dB(%f)\n",rx_gain_dB,rx_gain_lin);
#endif
//rx128_gain_lin=mm_loadu_pd(rx_gain_lin);
/*count++;
clock_t start=clock();*/
for (i=0; i<(length>>2); i++) {
for (a=0; a<nb_rx_antennas; a++) {
if (i%(ofdm_symbol_size>>2)>(n_samples>>2) && i%(ofdm_symbol_size>>2)<(ofdm_symbol_size>>2)-(n_samples>>2))
{
//printf("i = %d\n",i);
//_mm_storeu_pd(&r_re[a][2*i],_mm_setzero_pd());
//_mm_storeu_pd(&r_im[a][2*i],_mm_setzero_pd());
break;
}
else
{
//rx128_gain_lin=mm_mul_set1_ps(rx_gain_lin);
rx128_re = _mm_loadu_ps(&r_re[a][4*i]);//r_re[a][i],r_re[a][i+1]
rx128_im = _mm_loadu_ps(&r_im[a][4*i]);//r_im[a][i],r_im[a][i+1]
rx128_gain_lin = _mm_set1_ps(rx_gain_lin);
gauss_0_128_sqrt_NOW = _mm_set_ps(ziggurat(0.0,1.0),ziggurat(0.0,1.0),ziggurat(0.0,1.0),ziggurat(0.0,1.0));
gauss_1_128_sqrt_NOW = _mm_set_ps(ziggurat(0.0,1.0),ziggurat(0.0,1.0),ziggurat(0.0,1.0),ziggurat(0.0,1.0));
gauss_0_128_sqrt_NOW = _mm_mul_ps(gauss_0_128_sqrt_NOW,_mm_set1_ps(sqrt_NOW));
gauss_1_128_sqrt_NOW = _mm_mul_ps(gauss_1_128_sqrt_NOW,_mm_set1_ps(sqrt_NOW));
// Amplify by receiver gain and apply 3rd order non-linearity
//r_re[a][i] = rx_gain_lin*(r_re[a][i] + sqrt(.5*N0W)*gaussdouble(0.0,1.0));
//r_im[a][i] = rx_gain_lin*(r_im[a][i] + sqrt(.5*N0W)*gaussdouble(0.0,1.0));
rx128_re = _mm_add_ps(rx128_re,gauss_0_128_sqrt_NOW);
rx128_im = _mm_add_ps(rx128_im,gauss_1_128_sqrt_NOW);
rx128_re = _mm_mul_ps(rx128_re,rx128_gain_lin);
rx128_im = _mm_mul_ps(rx128_im,rx128_gain_lin);
_mm_storeu_ps(&r_re[a][4*i],rx128_re);
_mm_storeu_ps(&r_im[a][4*i],rx128_im);
}
}
}
/*clock_t stop=clock();
printf("do_DL_sig time is %f s, AVERAGE time is %f s, count %d, sum %e\n",(float) (stop-start)/CLOCKS_PER_SEC,(float) (sum+stop-start)/(count*CLOCKS_PER_SEC),count,sum+stop-start);
sum=(sum+stop-start);*/
}
#ifdef RF_MAIN
#define INPUT_dBm -70.0
......
......@@ -292,6 +292,18 @@ void multipath_channel_freq(channel_desc_t *desc,
uint8_t UE_id,
uint8_t CC_id,
uint8_t th_id);
void multipath_channel_freq_SSE_float(channel_desc_t *desc,
float *tx_sig_re[2],
float *tx_sig_im[2],
float *rx_sig_re[2],
float *rx_sig_im[2],
uint32_t length,
uint8_t keep_channel,
uint8_t eNB_id,
uint8_t UE_id,
uint8_t CC_id,
uint8_t th_id);
/**\fn void multipath_channel_prach(channel_desc_t *desc,
double tx_sig_re[2],
double tx_sig_im[2],
......@@ -328,6 +340,17 @@ void multipath_channel_prach(channel_desc_t *desc,
uint8_t eNB_id,
uint8_t prach_fmt,
uint8_t n_ra_prb);
void multipath_channel_prach_SSE_float(channel_desc_t *desc,
float *tx_sig_re[2],
float *tx_sig_im[2],
float *rx_sig_re[2],
float *rx_sig_im[2],
LTE_DL_FRAME_PARMS* const fp,
uint32_t length,
uint8_t keep_channel,
uint8_t eNB_id,
uint8_t prach_fmt,
uint8_t n_ra_prb);
/*
\fn double compute_pbch_sinr(channel_desc_t *desc,
channel_desc_t *desc_i1,
......
......@@ -158,8 +158,6 @@ double nfix(void)
{
const double r = 3.442620;
static double x, y;
long l;
double d;
for (;;)
{
x=hz * wn[iz];
......@@ -193,7 +191,7 @@ double nfix(void)
void table_nor(unsigned long seed)
{
jsr=seed;
printf("seed is %d\n",seed);
//printf("Seed for Ziggurat random number generator is %d\n",seed);
double dn = 3.442619855899;
int i;
const double m1 = 2147483648.0;
......
This diff is collapsed.
......@@ -228,6 +228,7 @@ help (void)
printf ("-b Set the number of local eNB\n");
printf ("-B Set the mobility model for eNB, options are: STATIC, RWP, RWALK, \n");
printf ("-c [1,2,3,4] Activate the config generator (OCG) to process the scenario descriptor, or give the scenario manually: -c template_1.xml \n");
printf ("-d Enable Frequency Domain Analysis (Time Domain Analysis is default)\n");
printf ("-C [0-6] Sets TDD configuration\n");
printf ("-e Activates extended prefix mode\n");
printf ("-E Random number generator seed\n");
......
......@@ -1176,7 +1176,6 @@ int UE_trx_read(openair0_device *device, openair0_timestamp *ptimestamp, void **
sum=0;
count=0;
}
count++;
int ret = nsamps;
int UE_id = device->Mod_id;
......@@ -1244,7 +1243,7 @@ int UE_trx_read(openair0_device *device, openair0_timestamp *ptimestamp, void **
if (do_ofdm_mod)
{
//start_meas(&dl_chan_stats_f);
//clock_t start=clock();
clock_t start=clock();
do_DL_sig_freq(eNB2UE,
enb_data,
ue_data,
......@@ -1253,14 +1252,16 @@ int UE_trx_read(openair0_device *device, openair0_timestamp *ptimestamp, void **
&PHY_vars_UE_g[UE_id][CC_id]->frame_parms,
UE_id,
CC_id);
/*lock_t stop=clock();
clock_t stop=clock();
printf("do_DL_sig time is %f s, AVERAGE time is %f s, count %d, sum %e\n",(float) (stop-start)/CLOCKS_PER_SEC,(float) (sum+stop-start)/(count*CLOCKS_PER_SEC),count,sum+stop-start);
sum=(sum+stop-start);*/
sum=(sum+stop-start);
count++;
//stop_meas(&dl_chan_stats_f);
//print_meas(&dl_chan_stats_f,"DL_Channel Stats Frequency Domain",&dl_chan_stats_f,&dl_chan_stats_f);
}
else
{
//clock_t start=clock();
do_DL_sig(eNB2UE,
enb_data,
ue_data,
......@@ -1269,6 +1270,10 @@ int UE_trx_read(openair0_device *device, openair0_timestamp *ptimestamp, void **
&PHY_vars_UE_g[UE_id][CC_id]->frame_parms,
UE_id,
CC_id);
/*clock_t stop=clock();
printf("do_DL_sig time is %f s, AVERAGE time is %f s, count %d, sum %e\n",(float) (stop-start)/CLOCKS_PER_SEC,(float) (sum+stop-start)/(count*CLOCKS_PER_SEC),count,sum+stop-start);
sum=(sum+stop-start);
count++;*/
}
last_UE_rx_timestamp[UE_id][CC_id] = last;
......
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