diff options
Diffstat (limited to 'gr-digital/lib/constellation.cc')
-rw-r--r-- | gr-digital/lib/constellation.cc | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/gr-digital/lib/constellation.cc b/gr-digital/lib/constellation.cc index cf7039b313..93fd95da8e 100644 --- a/gr-digital/lib/constellation.cc +++ b/gr-digital/lib/constellation.cc @@ -43,7 +43,8 @@ namespace gr { constellation::constellation(std::vector<gr_complex> constell, std::vector<int> pre_diff_code, unsigned int rotational_symmetry, - unsigned int dimensionality + unsigned int dimensionality, + bool normalize_points ) : d_constellation(constell), d_pre_diff_code(pre_diff_code), @@ -56,16 +57,18 @@ namespace gr { d_lut_precision(0), d_lut_scale(0) { - // Scale constellation points so that average magnitude is 1. - float summed_mag = 0; unsigned int constsize = d_constellation.size(); - for (unsigned int i=0; i<constsize; i++) { - gr_complex c = d_constellation[i]; - summed_mag += sqrt(c.real()*c.real() + c.imag()*c.imag()); - } - d_scalefactor = constsize/summed_mag; - for (unsigned int i=0; i<constsize; i++) { - d_constellation[i] = d_constellation[i]*d_scalefactor; + if (normalize_points) { + // Scale constellation points so that average magnitude is 1. + float summed_mag = 0; + for (unsigned int i=0; i<constsize; i++) { + gr_complex c = d_constellation[i]; + summed_mag += sqrt(c.real()*c.real() + c.imag()*c.imag()); + } + d_scalefactor = constsize/summed_mag; + for (unsigned int i=0; i<constsize; i++) { + d_constellation[i] = d_constellation[i]*d_scalefactor; + } } if(pre_diff_code.size() == 0) d_apply_pre_diff_code = false; @@ -406,19 +409,21 @@ namespace gr { constellation_calcdist::make(std::vector<gr_complex> constell, std::vector<int> pre_diff_code, unsigned int rotational_symmetry, - unsigned int dimensionality) + unsigned int dimensionality, + bool normalize_points) { return constellation_calcdist::sptr( new constellation_calcdist(constell, pre_diff_code, - rotational_symmetry, dimensionality)); + rotational_symmetry, dimensionality, normalize_points)); } constellation_calcdist::constellation_calcdist( std::vector<gr_complex> constell, std::vector<int> pre_diff_code, unsigned int rotational_symmetry, - unsigned int dimensionality) - : constellation(constell, pre_diff_code, rotational_symmetry, dimensionality) + unsigned int dimensionality, + bool normalize_points) + : constellation(constell, pre_diff_code, rotational_symmetry, dimensionality, normalize_points) {} // Chooses points base on shortest distance. |