Commit 60115531 authored by Florian Kaltenberger's avatar Florian Kaltenberger

fixing issue 71 (bug in freq_channel)

parent 244699fc
...@@ -45,7 +45,7 @@ double **cos_lut=NULL,**sin_lut=NULL; ...@@ -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) ...@@ -54,12 +54,14 @@ void init_freq_channel(channel_desc_t *desc,uint16_t nb_rb,int16_t n_samples)
int16_t f; int16_t f;
uint8_t l; 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*)); cos_lut = (double **)malloc(n_samples*sizeof(double*));
sin_lut = (double **)malloc(n_samples*sizeof(double*)); sin_lut = (double **)malloc(n_samples*sizeof(double*));
delta_f = nb_rb*180000/(n_samples-1); delta_f = nb_rb*180000/(n_samples-1);
for (f=-(n_samples>>1); f<(n_samples>>1); f++) { 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) ...@@ -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) ...@@ -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 freq_channel_init=0;
static int n_samples_max=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); // printf("no of taps:%d,",(int)desc->nb_taps);
if (freq_channel_init == 0) { if (freq_channel_init == 0) {
// we are initializing the lut for the largets possible n_samples=12*nb_rb+1 // 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 // if called with n_samples<12*nb_rb+1, we decimate the lut
n_samples_max=12*nb_rb+1; n_samples_max=12*nb_rb+1;
init_freq_channel(desc,nb_rb,n_samples_max); if (init_freq_channel(desc,nb_rb,n_samples_max)==0)
freq_channel_init=1; 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); start_meas(&desc->interp_freq);
...@@ -129,6 +143,8 @@ void freq_channel(channel_desc_t *desc,uint16_t nb_rb,int16_t n_samples) ...@@ -129,6 +143,8 @@ void freq_channel(channel_desc_t *desc,uint16_t nb_rb,int16_t n_samples)
} }
stop_meas(&desc->interp_freq); stop_meas(&desc->interp_freq);
return(0);
} }
double compute_pbch_sinr(channel_desc_t *desc, double compute_pbch_sinr(channel_desc_t *desc,
......
...@@ -354,8 +354,8 @@ int gauss(unsigned int *gauss_LUT,unsigned char Nbits); ...@@ -354,8 +354,8 @@ int gauss(unsigned int *gauss_LUT,unsigned char Nbits);
double gaussdouble(double,double); double gaussdouble(double,double);
void randominit(unsigned int seed_init); void randominit(unsigned int seed_init);
double uniformrandom(void); double uniformrandom(void);
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);
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);
uint8_t multipath_channel_nosigconv(channel_desc_t *desc); uint8_t multipath_channel_nosigconv(channel_desc_t *desc);
void multipath_tv_channel(channel_desc_t *desc, void multipath_tv_channel(channel_desc_t *desc,
double **tx_sig_re, double **tx_sig_re,
......
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