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();
124 float get_distance(
unsigned int index,
const gr_complex *sample);
125 unsigned int get_closest_point(
const gr_complex *sample);
156 std::vector<unsigned int> pre_diff_code,
157 unsigned int rotational_symmetry,
158 unsigned int dimensionality);
187 std::vector<unsigned int> pre_diff_code,
188 unsigned int rotational_symmetry,
189 unsigned int dimensionality,
190 unsigned int n_sectors);
196 virtual unsigned int get_sector (
const gr_complex *sample) = 0;
197 virtual unsigned int calc_sector_value (
unsigned int sector) = 0;
198 void find_sector_values ();
204 std::vector<unsigned int> sector_values;
235 unsigned int real_sectors,
236 unsigned int imag_sectors,
237 float width_real_sectors,
238 float width_imag_sectors);
245 std::vector<unsigned int> pre_diff_code,
246 unsigned int rotational_symmetry,
247 unsigned int real_sectors,
248 unsigned int imag_sectors,
249 float width_real_sectors,
250 float width_imag_sectors);
260 unsigned int n_real_sectors;
261 unsigned int n_imag_sectors;
262 float d_width_real_sectors;
263 float d_width_imag_sectors;
267 std::vector<unsigned int> pre_diff_code,
268 unsigned int rotational_symmetry,
269 unsigned int real_sectors,
270 unsigned int imag_sectors,
271 float width_real_sectors,
272 float width_imag_sectors);
307 std::vector<unsigned int> pre_diff_code,
308 unsigned int n_sectors);
320 std::vector<unsigned int> pre_diff_code,
321 unsigned int n_sectors);