gr_constellation_decoder_bc

「gr_constellation_decoder_bc」の編集履歴(バックアップ)一覧に戻る

gr_constellation_decoder_bc - (2011/12/15 (木) 02:57:49) のソース

 int
 gr_constellation_decoder_cb::work(int noutput_items,
                                  gr_vector_const_void_star &input_items,
                                  gr_vector_void_star &output_items)
 {
  gr_complex const *in = (const gr_complex *) input_items[0];
  unsigned char *out = (unsigned char *) output_items[0];
  unsigned int table_size = d_sym_value_out.size();
  unsigned int min_index = 0;
  float min_euclid_dist = 0;
  float euclid_dist = 0;
  double total_error = 0;
 
  for(int i = 0; i < noutput_items; i++){
    min_euclid_dist = norm(in[i] - d_sym_position[0]);
    min_index = 0;
    for (unsigned int j = 1; j < table_size; j++){
      euclid_dist = norm(in[i] - d_sym_position[j]);
      if (euclid_dist < min_euclid_dist){
        min_euclid_dist = euclid_dist;
        min_index = j;
      }
    }
 
    out[i] = d_sym_value_out[min_index];
 
    if (compute_EVM)
      total_error += sqrtf(min_euclid_dist);
  }
 
  if (compute_EVM){
    double mean = total_error / noutput_items;
    double rms = sqrt(mean * mean);
    fprintf(stderr, "EVM = %8.4f\n", rms);
  }
 
  return noutput_items;
}
----