23 #ifndef INCLUDED_DIGITAL_CONSTELLATION_H
24 #define INCLUDED_DIGITAL_CONSTELLATION_H
30 #include <boost/enable_shared_from_this.hpp>
61 std::vector<unsigned int> pre_diff_code,
62 unsigned int rotational_symmetry,
63 unsigned int dimensionality);
67 void map_to_points(
unsigned int value,
gr_complex *points);
68 std::vector<gr_complex> map_to_points_v(
unsigned int value);
71 virtual unsigned int decision_maker (
const gr_complex *sample) = 0;
73 unsigned int decision_maker_v (std::vector<gr_complex> sample);
75 unsigned int decision_maker_pe (
const gr_complex *sample,
float *phase_error);
77 unsigned int decision_maker_e (
const gr_complex *sample,
float *error);
82 virtual void calc_euclidean_metric(
const gr_complex *sample,
float *metric);
83 virtual void calc_hard_symbol_metric(
const gr_complex *sample,
float *metric);
86 std::vector<gr_complex>
points() {
return d_constellation;}
89 std::vector<gr_complex> s_points();
91 std::vector<std::vector<gr_complex> > v_points();
104 return floor(log(
double(d_constellation.size()))/d_dimensionality/log(2.0));
112 return shared_from_this();
127 float get_distance(
unsigned int index,
const gr_complex *sample);
128 unsigned int get_closest_point(
const gr_complex *sample);
159 std::vector<unsigned int> pre_diff_code,
160 unsigned int rotational_symmetry,
161 unsigned int dimensionality);
190 std::vector<unsigned int> pre_diff_code,
191 unsigned int rotational_symmetry,
192 unsigned int dimensionality,
193 unsigned int n_sectors);
199 virtual unsigned int get_sector (
const gr_complex *sample) = 0;
200 virtual unsigned int calc_sector_value (
unsigned int sector) = 0;
201 void find_sector_values ();
207 std::vector<unsigned int> sector_values;
238 unsigned int real_sectors,
239 unsigned int imag_sectors,
240 float width_real_sectors,
241 float width_imag_sectors);
248 std::vector<unsigned int> pre_diff_code,
249 unsigned int rotational_symmetry,
250 unsigned int real_sectors,
251 unsigned int imag_sectors,
252 float width_real_sectors,
253 float width_imag_sectors);
263 unsigned int n_real_sectors;
264 unsigned int n_imag_sectors;
265 float d_width_real_sectors;
266 float d_width_imag_sectors;
270 std::vector<unsigned int> pre_diff_code,
271 unsigned int rotational_symmetry,
272 unsigned int real_sectors,
273 unsigned int imag_sectors,
274 float width_real_sectors,
275 float width_imag_sectors);
310 std::vector<unsigned int> pre_diff_code,
311 unsigned int n_sectors);
323 std::vector<unsigned int> pre_diff_code,
324 unsigned int n_sectors);