summaryrefslogtreecommitdiff
path: root/gnuradio-core/src/lib/general/gr_constellation.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gnuradio-core/src/lib/general/gr_constellation.cc')
-rw-r--r--gnuradio-core/src/lib/general/gr_constellation.cc32
1 files changed, 22 insertions, 10 deletions
diff --git a/gnuradio-core/src/lib/general/gr_constellation.cc b/gnuradio-core/src/lib/general/gr_constellation.cc
index e3b4c14e7..27590bf82 100644
--- a/gnuradio-core/src/lib/general/gr_constellation.cc
+++ b/gnuradio-core/src/lib/general/gr_constellation.cc
@@ -35,16 +35,19 @@
#define SQRT_TWO 0.707107
gr_constellation_sptr
-gr_make_constellation(std::vector<gr_complex> constellation, std::vector<unsigned int> pre_diff_code)
+gr_make_constellation(std::vector<gr_complex> constellation, std::vector<unsigned int> pre_diff_code,
+ unsigned int rotational_symmetry)
{
- return gr_constellation_sptr(new gr_constellation (constellation, pre_diff_code));
+ return gr_constellation_sptr(new gr_constellation (constellation, pre_diff_code, rotational_symmetry));
}
// Base Constellation Class
-gr_constellation::gr_constellation (std::vector<gr_complex> constellation, std::vector<unsigned int> pre_diff_code) :
+gr_constellation::gr_constellation (std::vector<gr_complex> constellation, std::vector<unsigned int> pre_diff_code,
+ unsigned int rotational_symmetry) :
d_constellation(constellation),
- d_pre_diff_code(pre_diff_code)
+ d_pre_diff_code(pre_diff_code),
+ d_rotational_symmetry(rotational_symmetry)
{
if (pre_diff_code.size() == 0)
d_apply_pre_diff_code = false;
@@ -55,7 +58,8 @@ gr_constellation::gr_constellation (std::vector<gr_complex> constellation, std::
}
gr_constellation::gr_constellation () :
- d_apply_pre_diff_code(false)
+ d_apply_pre_diff_code(false),
+ d_rotational_symmetry(0)
{
}
@@ -128,8 +132,9 @@ void gr_constellation::calc_hard_symbol_metric(gr_complex sample, float *metric)
gr_constellation_sector::gr_constellation_sector (std::vector<gr_complex> constellation,
std::vector<unsigned int> pre_diff_code,
+ unsigned int rotational_symmetry,
unsigned int n_sectors) :
- gr_constellation(constellation, pre_diff_code),
+ gr_constellation(constellation, pre_diff_code, rotational_symmetry),
n_sectors(n_sectors)
{
}
@@ -151,17 +156,21 @@ void gr_constellation_sector::find_sector_values () {
gr_constellation_rect_sptr
gr_make_constellation_rect(std::vector<gr_complex> constellation,
std::vector<unsigned int> pre_diff_code,
+ unsigned int rotational_symmetry,
unsigned int real_sectors, unsigned int imag_sectors,
float width_real_sectors, float width_imag_sectors)
{
- return gr_constellation_rect_sptr(new gr_constellation_rect (constellation, pre_diff_code, real_sectors, imag_sectors, width_real_sectors, width_imag_sectors));
+ return gr_constellation_rect_sptr(new gr_constellation_rect (constellation, pre_diff_code, rotational_symmetry,
+ real_sectors, imag_sectors, width_real_sectors,
+ width_imag_sectors));
}
gr_constellation_rect::gr_constellation_rect (std::vector<gr_complex> constellation,
std::vector<unsigned int> pre_diff_code,
+ unsigned int rotational_symmetry,
unsigned int real_sectors, unsigned int imag_sectors,
float width_real_sectors, float width_imag_sectors) :
- gr_constellation_sector(constellation, pre_diff_code, real_sectors * imag_sectors),
+ gr_constellation_sector(constellation, pre_diff_code, rotational_symmetry, real_sectors * imag_sectors),
n_real_sectors(real_sectors), n_imag_sectors(imag_sectors),
d_width_real_sectors(width_real_sectors), d_width_imag_sectors(width_imag_sectors)
{
@@ -199,13 +208,14 @@ gr_make_constellation_psk(std::vector<gr_complex> constellation,
std::vector<unsigned int> pre_diff_code,
unsigned int n_sectors)
{
- return gr_constellation_psk_sptr(new gr_constellation_psk (constellation, pre_diff_code, n_sectors));
+ return gr_constellation_psk_sptr(new gr_constellation_psk (constellation, pre_diff_code,
+ n_sectors));
}
gr_constellation_psk::gr_constellation_psk (std::vector<gr_complex> constellation,
std::vector<unsigned int> pre_diff_code,
unsigned int n_sectors) :
- gr_constellation_sector(constellation, pre_diff_code, n_sectors)
+ gr_constellation_sector(constellation, pre_diff_code, constellation.size(), n_sectors)
{
find_sector_values();
}
@@ -241,6 +251,7 @@ gr_constellation_bpsk::gr_constellation_bpsk ()
d_constellation.resize(2);
d_constellation[0] = gr_complex(-1, 0);
d_constellation[1] = gr_complex(1, 0);
+ d_rotational_symmetry = 2;
}
unsigned int gr_constellation_bpsk::decision_maker(gr_complex sample)
@@ -263,6 +274,7 @@ gr_constellation_qpsk::gr_constellation_qpsk ()
d_constellation[1] = gr_complex(SQRT_TWO, -SQRT_TWO);
d_constellation[2] = gr_complex(-SQRT_TWO, SQRT_TWO);
d_constellation[3] = gr_complex(SQRT_TWO, SQRT_TWO);
+ d_rotational_symmetry = 4;
}
unsigned int gr_constellation_qpsk::decision_maker(gr_complex sample)