diff --git a/openair1/SIMULATION/TOOLS/abstraction.c b/openair1/SIMULATION/TOOLS/abstraction.c index 3720d9f99895becb2388bac4830cbb56ead1809a..fdaa73fa1070da105d7ec69644258ae4d8835e49 100644 --- a/openair1/SIMULATION/TOOLS/abstraction.c +++ b/openair1/SIMULATION/TOOLS/abstraction.c @@ -45,7 +45,7 @@ double **cos_lut=NULL,**sin_lut=NULL; -void init_freq_channel(channel_desc_t *desc,uint16_t nb_rb,int16_t n_samples) +int init_freq_channel(channel_desc_t *desc,uint16_t nb_rb,int16_t n_samples) { @@ -54,12 +54,14 @@ void init_freq_channel(channel_desc_t *desc,uint16_t nb_rb,int16_t n_samples) int16_t f; uint8_t l; + if ((n_samples&1)==0) { + fprintf(stderr, "freq_channel_init: n_samples has to be odd\n"); + return(-1); + } cos_lut = (double **)malloc(n_samples*sizeof(double*)); sin_lut = (double **)malloc(n_samples*sizeof(double*)); - - delta_f = nb_rb*180000/(n_samples-1); for (f=-(n_samples>>1); f<(n_samples>>1); f++) { @@ -81,9 +83,11 @@ void init_freq_channel(channel_desc_t *desc,uint16_t nb_rb,int16_t n_samples) } } + + return(0); } -void freq_channel(channel_desc_t *desc,uint16_t nb_rb,int16_t n_samples) +int freq_channel(channel_desc_t *desc,uint16_t nb_rb,int16_t n_samples) { @@ -93,18 +97,28 @@ void freq_channel(channel_desc_t *desc,uint16_t nb_rb,int16_t n_samples) static int freq_channel_init=0; static int n_samples_max=0; - // printf("no of samples:%d,",n_samples); + // do some error checking + // n_samples has to be a odd number because we assume the spectrum is symmetric around the DC and includes the DC + if ((n_samples&1)==0) { + fprintf(stderr, "freq_channel: n_samples has to be odd\n"); + return(-1); + } + // printf("no of taps:%d,",(int)desc->nb_taps); if (freq_channel_init == 0) { // we are initializing the lut for the largets possible n_samples=12*nb_rb+1 // if called with n_samples<12*nb_rb+1, we decimate the lut n_samples_max=12*nb_rb+1; - init_freq_channel(desc,nb_rb,n_samples_max); - freq_channel_init=1; + if (init_freq_channel(desc,nb_rb,n_samples_max)==0) + freq_channel_init=1; + else + return(-1); } - d=n_samples_max/n_samples; + d=(n_samples_max-1)/(n_samples-1); + + //printf("no_samples=%d, n_samples_max=%d, d=%d\n",n_samples,n_samples_max,d); start_meas(&desc->interp_freq); @@ -129,6 +143,8 @@ void freq_channel(channel_desc_t *desc,uint16_t nb_rb,int16_t n_samples) } stop_meas(&desc->interp_freq); + + return(0); } double compute_pbch_sinr(channel_desc_t *desc, diff --git a/openair1/SIMULATION/TOOLS/defs.h b/openair1/SIMULATION/TOOLS/defs.h index 0dfea70b890febf0a422674fb05dc33d2c13f95d..c72ea743b1e7a7cfadf39a525c8fd35a9862a090 100644 --- a/openair1/SIMULATION/TOOLS/defs.h +++ b/openair1/SIMULATION/TOOLS/defs.h @@ -354,8 +354,8 @@ int gauss(unsigned int *gauss_LUT,unsigned char Nbits); double gaussdouble(double,double); void randominit(unsigned int seed_init); double uniformrandom(void); -void freq_channel(channel_desc_t *desc,uint16_t nb_rb, int16_t n_samples); -void init_freq_channel(channel_desc_t *desc,uint16_t nb_rb,int16_t n_samples); +int freq_channel(channel_desc_t *desc,uint16_t nb_rb, int16_t n_samples); +int init_freq_channel(channel_desc_t *desc,uint16_t nb_rb,int16_t n_samples); uint8_t multipath_channel_nosigconv(channel_desc_t *desc); void multipath_tv_channel(channel_desc_t *desc, double **tx_sig_re,