「gr_constellation_decoder_bc」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
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;
}
----
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;
}
----