コード例 #1
0
ファイル: convolution.c プロジェクト: HankW507/srsLTE
uint32_t srslte_conv_same_cf(cf_t *input, float *filter, cf_t *output, 
                      uint32_t input_len, uint32_t filter_len) {
  uint32_t i;
  uint32_t M = filter_len; 
  uint32_t N = input_len; 
  
  for (i=0;i<M/2;i++) {
    output[i]=srslte_vec_dot_prod_cfc(&input[i],&filter[M/2-i],M-M/2+i);
  }
  for (;i<N-M/2;i++) {
    output[i]=srslte_vec_dot_prod_cfc(&input[i-M/2],filter,M);
  }
  for (;i<N;i++) {
    output[i]=srslte_vec_dot_prod_cfc(&input[i-M/2],filter,N-i+M/2);    
  }
  return N;
}
コード例 #2
0
ファイル: find_sss.c プロジェクト: Intellifora/srsLTE
static void corr_all_zs(cf_t z[SRSLTE_SSS_N], float s[SRSLTE_SSS_N][SRSLTE_SSS_N-1], float output[SRSLTE_SSS_N]) {
  uint32_t m;
  cf_t tmp[SRSLTE_SSS_N]; 
  
  for (m = 0; m < SRSLTE_SSS_N; m++) {
    tmp[m] = srslte_vec_dot_prod_cfc(z, s[m], SRSLTE_SSS_N - 1);    
  }
  srslte_vec_abs_square_cf(tmp, output, SRSLTE_SSS_N);
}
コード例 #3
0
ファイル: filter.c プロジェクト: andrepuschmann/srsLTE
void srslte_filt_decim_cc_execute(srslte_filt_cc_t *q, cf_t *input, cf_t *downsampled_input, cf_t *output, int size)
{
    // we assume that "downsampled_input" made size (input/2 + order) so as to have prepended zeros //
    srslte_downsample_cc(input, downsampled_input + (q->num_taps - 1), q->factor, size);
    
    for(int i = 0;i < size/q->factor;i++)
    {
        output[i] = srslte_vec_dot_prod_cfc(&(downsampled_input[i]), q->taps, q->num_taps);
    }
    
    
}
コード例 #4
0
ファイル: convolution.c プロジェクト: HankW507/srsLTE
uint32_t srslte_conv_same_cf(cf_t *input, float *filter, cf_t *output, 
                      uint32_t input_len, uint32_t filter_len) {
  uint32_t i;
  uint32_t M = filter_len; 
  uint32_t N = input_len; 
  cf_t first[filter_len+filter_len/2]; 
  cf_t last[filter_len+filter_len/2]; 
  
  for (i=0;i<M+M/2;i++) {
    if (i<M/2) {
      first[i] = (2+M/2-i)*input[1]-(1+M/2-i)*input[0]; 
    } else {
      first[i] = input[i-M/2]; 
    }
  }

  for (i=0;i<M+M/2;i++) {
    if (i>=M-1) {
      last[i] = (2+i-M/2)*input[N-1]-(1+i-M/2)*input[N-2];
    } else {
      last[i] = input[N-M+i+1]; 
    }
  }

  for (i=0;i<M/2;i++) {
    output[i]=srslte_vec_dot_prod_cfc(&first[i],filter,M);
  }
  
  for (;i<N-M/2;i++) {
    output[i]=srslte_vec_dot_prod_cfc(&input[i-M/2],filter,M);
  }
  int j=0;
  for (;i<N;i++) {
    output[i]=srslte_vec_dot_prod_cfc(&last[j++],filter,M);
  }
  return N;
}
コード例 #5
0
ファイル: find_sss.c プロジェクト: Intellifora/srsLTE
static void corr_all_sz_partial(cf_t z[SRSLTE_SSS_N], float s[SRSLTE_SSS_N][SRSLTE_SSS_N], uint32_t M, float output[SRSLTE_SSS_N]) {
  uint32_t Nm = SRSLTE_SSS_N/M; 
  cf_t tmp[SRSLTE_SSS_N];
  float tmp_abs[MAX_M-1][SRSLTE_SSS_N];
  int j, m; 
  float *ptr; 
  
  for (j=0;j<M;j++) {
    for (m = 0; m < SRSLTE_SSS_N; m++) {      
      tmp[m] = srslte_vec_dot_prod_cfc(&z[j*Nm], &s[m][j*Nm], Nm);        
    }
    if (j == 0) {
      ptr = output; 
    } else {
      ptr = tmp_abs[j-1];
    }
    srslte_vec_abs_square_cf(tmp, ptr, SRSLTE_SSS_N);   
  }
  for (j=1;j<M;j++) {
    srslte_vec_sum_fff(tmp_abs[j-1], output, output, SRSLTE_SSS_N);
  }    
}