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);
69 void map_to_points(
unsigned int value,
gr_complex *points);
70 std::vector<gr_complex> map_to_points_v(
unsigned int value);
73 virtual unsigned int decision_maker (
const gr_complex *sample) = 0;
75 unsigned int decision_maker_v (std::vector<gr_complex> sample);
77 unsigned int decision_maker_pe (
const gr_complex *sample,
float *phase_error);
79 unsigned int decision_maker_e (
const gr_complex *sample,
float *error);
84 virtual void calc_euclidean_metric(
const gr_complex *sample,
float *metric);
85 virtual void calc_hard_symbol_metric(
const gr_complex *sample,
float *metric);
88 std::vector<gr_complex>
points() {
return d_constellation;}
91 std::vector<gr_complex> s_points();
93 std::vector<std::vector<gr_complex> > v_points();
106 return floor(log(
double(d_constellation.size()))/d_dimensionality/log(2.0));
114 return shared_from_this();
129 float get_distance(
unsigned int index,
const gr_complex *sample);
130 unsigned int get_closest_point(
const gr_complex *sample);
161 std::vector<unsigned int> pre_diff_code,
162 unsigned int rotational_symmetry,
163 unsigned int dimensionality);
192 std::vector<unsigned int> pre_diff_code,
193 unsigned int rotational_symmetry,
194 unsigned int dimensionality,
195 unsigned int n_sectors);
201 virtual unsigned int get_sector (
const gr_complex *sample) = 0;
202 virtual unsigned int calc_sector_value (
unsigned int sector) = 0;
203 void find_sector_values ();
209 std::vector<unsigned int> sector_values;
240 unsigned int real_sectors,
241 unsigned int imag_sectors,
242 float width_real_sectors,
243 float width_imag_sectors);
250 std::vector<unsigned int> pre_diff_code,
251 unsigned int rotational_symmetry,
252 unsigned int real_sectors,
253 unsigned int imag_sectors,
254 float width_real_sectors,
255 float width_imag_sectors);
265 unsigned int n_real_sectors;
266 unsigned int n_imag_sectors;
267 float d_width_real_sectors;
268 float d_width_imag_sectors;
272 std::vector<unsigned int> pre_diff_code,
273 unsigned int rotational_symmetry,
274 unsigned int real_sectors,
275 unsigned int imag_sectors,
276 float width_real_sectors,
277 float width_imag_sectors);
308 std::vector<gr_complex> constellation,
311 unsigned int real_sectors,
312 unsigned int imag_sectors,
313 float width_real_sectors,
314 float width_imag_sectors,
315 std::vector<unsigned int> sector_values
323 std::vector<gr_complex> constellation,
324 std::vector<unsigned int> pre_diff_code,
325 unsigned int rotational_symmetry,
326 unsigned int real_sectors,
327 unsigned int imag_sectors,
328 float width_real_sectors,
329 float width_imag_sectors,
330 std::vector<unsigned int> sector_values
335 return d_sector_values[sector];
339 std::vector<unsigned int> d_sector_values;
343 std::vector<gr_complex> constellation,
344 std::vector<unsigned int> pre_diff_code,
345 unsigned int rotational_symmetry,
346 unsigned int real_sectors,
347 unsigned int imag_sectors,
348 float width_real_sectors,
349 float width_imag_sectors,
350 std::vector<unsigned int> sector_values
386 std::vector<unsigned int> pre_diff_code,
387 unsigned int n_sectors);
399 std::vector<unsigned int> pre_diff_code,
400 unsigned int n_sectors);