11 #ifndef INCLUDED_DIGITAL_CONSTELLATION_H
12 #define INCLUDED_DIGITAL_CONSTELLATION_H
18 #include <boost/any.hpp>
31 typedef std::shared_ptr<constellation> constellation_sptr;
59 std::vector<int> pre_diff_code,
60 unsigned int rotational_symmetry,
61 unsigned int dimensionality,
62 normalization_t normalization = AMPLITUDE_NORMALIZATION,
68 void normalize(normalization_t normalization);
71 void map_to_points(
unsigned int value,
gr_complex* points);
72 std::vector<gr_complex> map_to_points_v(
unsigned int value);
75 virtual unsigned int decision_maker(
const gr_complex* sample) = 0;
77 unsigned int decision_maker_v(std::vector<gr_complex> sample);
79 unsigned int decision_maker_pe(
const gr_complex* sample,
float* phase_error);
88 virtual void calc_euclidean_metric(
const gr_complex* sample,
float* metric);
89 virtual void calc_hard_symbol_metric(
const gr_complex* sample,
float* metric);
92 std::vector<gr_complex>
points() {
return d_constellation; }
95 std::vector<gr_complex> s_points();
97 std::vector<std::vector<gr_complex>> v_points();
113 return floor(log(
double(d_constellation.size())) / d_dimensionality / log(2.0));
116 unsigned int arity() {
return d_arity; }
118 constellation_sptr
base() {
return shared_from_this(); }
135 void gen_soft_dec_lut(
int precision,
float npwr = -1);
157 virtual std::vector<float> calc_soft_dec(
gr_complex sample,
float npwr = -1);
177 void set_soft_dec_lut(
const std::vector<std::vector<float>>& soft_dec_lut,
190 void set_npwr(
float npwr);
193 bool has_soft_dec_lut();
196 std::vector<std::vector<float>> soft_dec_lut();
208 std::vector<float> soft_decision_maker(
gr_complex sample);
230 float get_distance(
unsigned int index,
const gr_complex* sample);
231 unsigned int get_closest_point(
const gr_complex* sample);
253 typedef std::shared_ptr<constellation_calcdist>
sptr;
269 static sptr make(std::vector<gr_complex> constell,
270 std::vector<int> pre_diff_code,
271 unsigned int rotational_symmetry,
272 unsigned int dimensionality,
275 unsigned int decision_maker(
const gr_complex* sample)
override;
282 std::vector<int> pre_diff_code,
283 unsigned int rotational_symmetry,
284 unsigned int dimensionality,
318 std::vector<int> pre_diff_code,
319 unsigned int rotational_symmetry,
320 unsigned int dimensionality,
321 unsigned int n_sectors,
326 unsigned int decision_maker(
const gr_complex* sample)
override;
329 virtual unsigned int get_sector(
const gr_complex* sample) = 0;
330 virtual unsigned int calc_sector_value(
unsigned int sector) = 0;
331 void find_sector_values();
336 std::vector<int> sector_values;
360 typedef std::shared_ptr<constellation_rect>
sptr;
378 make(std::vector<gr_complex> constell,
379 std::vector<int> pre_diff_code,
380 unsigned int rotational_symmetry,
381 unsigned int real_sectors,
382 unsigned int imag_sectors,
383 float width_real_sectors,
384 float width_imag_sectors,
390 std::vector<int> pre_diff_code,
391 unsigned int rotational_symmetry,
392 unsigned int real_sectors,
393 unsigned int imag_sectors,
394 float width_real_sectors,
395 float width_imag_sectors,
398 unsigned int get_sector(
const gr_complex* sample)
override;
399 gr_complex calc_sector_center(
unsigned int sector);
400 unsigned int calc_sector_value(
unsigned int sector)
override;
403 unsigned int n_real_sectors;
404 unsigned int n_imag_sectors;
405 float d_width_real_sectors;
406 float d_width_imag_sectors;
434 typedef std::shared_ptr<constellation_expl_rect>
sptr;
437 std::vector<int> pre_diff_code,
438 unsigned int rotational_symmetry,
439 unsigned int real_sectors,
440 unsigned int imag_sectors,
441 float width_real_sectors,
442 float width_imag_sectors,
443 std::vector<unsigned int> sector_values);
448 std::vector<int> pre_diff_code,
449 unsigned int rotational_symmetry,
450 unsigned int real_sectors,
451 unsigned int imag_sectors,
452 float width_real_sectors,
453 float width_imag_sectors,
454 std::vector<unsigned int> sector_values);
458 return d_sector_values[sector];
462 std::vector<unsigned int> d_sector_values;
484 typedef std::shared_ptr<constellation_psk>
sptr;
487 static sptr make(std::vector<gr_complex> constell,
488 std::vector<int> pre_diff_code,
489 unsigned int n_sectors);
494 unsigned int get_sector(
const gr_complex* sample)
override;
496 unsigned int calc_sector_value(
unsigned int sector)
override;
499 std::vector<int> pre_diff_code,
500 unsigned int n_sectors);
523 typedef std::shared_ptr<constellation_bpsk>
sptr;
530 unsigned int decision_maker(
const gr_complex* sample)
override;
559 typedef std::shared_ptr<constellation_qpsk>
sptr;
566 unsigned int decision_maker(
const gr_complex* sample)
override;
594 typedef std::shared_ptr<constellation_dqpsk>
sptr;
601 unsigned int decision_maker(
const gr_complex* sample)
override;
631 typedef std::shared_ptr<constellation_8psk>
sptr;
638 unsigned int decision_maker(
const gr_complex* sample)
override;
667 typedef std::shared_ptr<constellation_8psk_natural>
sptr;
674 unsigned int decision_maker(
const gr_complex* sample)
override;
705 typedef std::shared_ptr<constellation_16qam>
sptr;
712 unsigned int decision_maker(
const gr_complex* sample)
override;
int d_lut_precision
Definition: constellation.h:224
std::shared_ptr< constellation_16qam > sptr
Definition: constellation.h:705
Digital constellation for 16qam.
Definition: constellation.h:702
float d_scalefactor
The factor by which the user given constellation points were scaled by to achieve an average amplitud...
Definition: constellation.h:220
unsigned int bits_per_symbol()
Definition: constellation.h:111
constellation_pskConstellation space is divided into pie slices sectors.
Definition: constellation.h:481
std::shared_ptr< constellation_expl_rect > sptr
Definition: constellation.h:434
Digital constellation for DQPSK.
Definition: constellation.h:591
std::shared_ptr< constellation_psk > sptr
Definition: constellation.h:484
constellation_sptr base()
Definition: constellation.h:118
trellis_metric_type_t
Definition: metric_type.h:17
An abstracted constellation object.
Definition: constellation.h:49
#define DIGITAL_API
Definition: gr-digital/include/gnuradio/digital/api.h:18
Definition: constellation.h:54
std::vector< std::vector< float > > d_soft_dec_lut
Definition: constellation.h:223
std::vector< gr_complex > points()
Returns the set of points in this constellation.
Definition: constellation.h:92
Rectangular digital constellation.
Definition: constellation.h:431
Digital constellation for BPSK .
Definition: constellation.h:520
float d_padding
Definition: constellation.h:227
Digital constellation for natually mapped 8PSK.
Definition: constellation.h:664
unsigned int calc_sector_value(unsigned int sector) override
Definition: constellation.h:456
unsigned int dimensionality()
Returns the number of complex numbers in a single symbol.
Definition: constellation.h:109
std::shared_ptr< constellation_rect > sptr
Definition: constellation.h:360
std::complex< float > gr_complex
Definition: gr_complex.h:15
std::vector< gr_complex > d_constellation
Definition: constellation.h:212
normalization_t
Definition: constellation.h:52
void calc_metric(int O, int D, const std::vector< T > &TABLE, const T *input, float *metric, digital::trellis_metric_type_t type)
Sectorized digital constellation.
Definition: constellation.h:301
GNU Radio logging wrapper.
Definition: basic_block.h:29
std::vector< int > d_pre_diff_code
Definition: constellation.h:213
void set_pre_diff_code(bool a)
Whether to apply an encoding before doing differential encoding. (e.g. gray coding) ...
Definition: constellation.h:103
float d_lut_scale
Definition: constellation.h:225
Digital constellation for QPSK.
Definition: constellation.h:556
unsigned int d_arity
Definition: constellation.h:217
std::shared_ptr< constellation_8psk > sptr
Definition: constellation.h:631
float d_re_min
Definition: constellation.h:221
unsigned int arity()
Definition: constellation.h:116
Calculate Euclidean distance for any constellation.
Definition: constellation.h:250
std::vector< int > pre_diff_code()
Returns the encoding to apply before differential encoding.
Definition: constellation.h:105
pmt::pmt_t as_pmt()
Definition: constellation.h:120
PMT_API pmt_t make_any(const boost::any &any)
make an any
bool apply_pre_diff_code()
Whether to apply an encoding before doing differential encoding. (e.g. gray coding) ...
Definition: constellation.h:100
std::shared_ptr< constellation_bpsk > sptr
Definition: constellation.h:523
Definition: constellation.h:53
Definition: constellation.h:55
bool d_use_external_lut
Definition: constellation.h:228
unsigned int n_sectors
Definition: constellation.h:333
std::shared_ptr< constellation_8psk_natural > sptr
Definition: constellation.h:667
float d_npwr
Definition: constellation.h:226
std::shared_ptr< constellation_dqpsk > sptr
Definition: constellation.h:594
Rectangular digital constellationOnly implemented for 1-(complex)dimensional constellation.
Definition: constellation.h:357
std::shared_ptr< constellation_calcdist > sptr
Definition: constellation.h:253
bool d_apply_pre_diff_code
Definition: constellation.h:214
Digital constellation for 8PSK.
Definition: constellation.h:628
unsigned int d_dimensionality
Definition: constellation.h:216
unsigned int d_rotational_symmetry
Definition: constellation.h:215
unsigned int rotational_symmetry()
Returns the order of rotational symmetry.
Definition: constellation.h:107
std::shared_ptr< pmt_base > pmt_t
typedef for shared pointer (transparent reference counting).
Definition: pmt.h:83
std::shared_ptr< constellation_qpsk > sptr
Definition: constellation.h:559