GNU Radio 3.5.1 C++ API
|
An abstracted constellation objectThe constellation objects hold the necessary information to pass around constellation information for modulators and demodulators. These objects contain the mapping between the bits and the constellation points used to represent them as well as methods for slicing the symbol space. Various implementations are possible for efficiency and ease of use. More...
#include <digital_constellation.h>
Public Member Functions | |
digital_constellation (std::vector< gr_complex > constellation, std::vector< unsigned int > pre_diff_code, unsigned int rotational_symmetry, unsigned int dimensionality) | |
digital_constellation () | |
void | map_to_points (unsigned int value, gr_complex *points) |
Returns the constellation points for a symbol value. | |
std::vector< gr_complex > | map_to_points_v (unsigned int value) |
virtual unsigned int | decision_maker (const gr_complex *sample)=0 |
Returns the constellation point that matches best. | |
unsigned int | decision_maker_v (std::vector< gr_complex > sample) |
Takes a vector rather than a pointer. Better for SWIG wrapping. | |
unsigned int | decision_maker_pe (const gr_complex *sample, float *phase_error) |
Also calculates the phase error. | |
unsigned int | decision_maker_e (const gr_complex *sample, float *error) |
Calculates distance. | |
virtual void | calc_metric (const gr_complex *sample, float *metric, trellis_metric_type_t type) |
Calculates metrics for all points in the constellation. For use with the viterbi algorithm. | |
virtual void | calc_euclidean_metric (const gr_complex *sample, float *metric) |
virtual void | calc_hard_symbol_metric (const gr_complex *sample, float *metric) |
std::vector< gr_complex > | points () |
Returns the set of points in this constellation. | |
std::vector< gr_complex > | s_points () |
Returns the vector of points in this constellation. Raise error if dimensionality is not one. | |
std::vector< std::vector < gr_complex > > | v_points () |
Returns a vector of vectors of points. | |
bool | apply_pre_diff_code () |
Whether to apply an encoding before doing differential encoding. (e.g. gray coding) | |
void | set_pre_diff_code (bool a) |
Whether to apply an encoding before doing differential encoding. (e.g. gray coding) | |
std::vector< unsigned int > | pre_diff_code () |
Returns the encoding to apply before differential encoding. | |
unsigned int | rotational_symmetry () |
Returns the order of rotational symmetry. | |
unsigned int | dimensionality () |
Returns the number of complex numbers in a single symbol. | |
unsigned int | bits_per_symbol () |
unsigned int | arity () |
digital_constellation_sptr | base () |
Protected Member Functions | |
float | get_distance (unsigned int index, const gr_complex *sample) |
unsigned int | get_closest_point (const gr_complex *sample) |
void | calc_arity () |
Protected Attributes | |
std::vector< gr_complex > | d_constellation |
std::vector< unsigned int > | d_pre_diff_code |
bool | d_apply_pre_diff_code |
unsigned int | d_rotational_symmetry |
unsigned int | d_dimensionality |
unsigned int | d_arity |
An abstracted constellation object
The constellation objects hold the necessary information to pass around constellation information for modulators and demodulators. These objects contain the mapping between the bits and the constellation points used to represent them as well as methods for slicing the symbol space. Various implementations are possible for efficiency and ease of use.
Standard constellations (BPSK, QPSK, QAM, etc) can be inherited from this class and overloaded to perform optimized slicing and constellation mappings.
digital_constellation::digital_constellation | ( | std::vector< gr_complex > | constellation, |
std::vector< unsigned int > | pre_diff_code, | ||
unsigned int | rotational_symmetry, | ||
unsigned int | dimensionality | ||
) |
digital_constellation::digital_constellation | ( | ) |
bool digital_constellation::apply_pre_diff_code | ( | ) | [inline] |
Whether to apply an encoding before doing differential encoding. (e.g. gray coding)
unsigned int digital_constellation::arity | ( | ) | [inline] |
digital_constellation_sptr digital_constellation::base | ( | ) | [inline] |
unsigned int digital_constellation::bits_per_symbol | ( | ) | [inline] |
void digital_constellation::calc_arity | ( | ) | [protected] |
virtual void digital_constellation::calc_euclidean_metric | ( | const gr_complex * | sample, |
float * | metric | ||
) | [virtual] |
virtual void digital_constellation::calc_hard_symbol_metric | ( | const gr_complex * | sample, |
float * | metric | ||
) | [virtual] |
virtual void digital_constellation::calc_metric | ( | const gr_complex * | sample, |
float * | metric, | ||
trellis_metric_type_t | type | ||
) | [virtual] |
Calculates metrics for all points in the constellation. For use with the viterbi algorithm.
virtual unsigned int digital_constellation::decision_maker | ( | const gr_complex * | sample | ) | [pure virtual] |
Returns the constellation point that matches best.
Implemented in digital_constellation_calcdist, digital_constellation_sector, digital_constellation_bpsk, digital_constellation_qpsk, digital_constellation_dqpsk, and digital_constellation_8psk.
unsigned int digital_constellation::decision_maker_e | ( | const gr_complex * | sample, |
float * | error | ||
) |
Calculates distance.
unsigned int digital_constellation::decision_maker_pe | ( | const gr_complex * | sample, |
float * | phase_error | ||
) |
Also calculates the phase error.
unsigned int digital_constellation::decision_maker_v | ( | std::vector< gr_complex > | sample | ) |
Takes a vector rather than a pointer. Better for SWIG wrapping.
unsigned int digital_constellation::dimensionality | ( | ) | [inline] |
Returns the number of complex numbers in a single symbol.
unsigned int digital_constellation::get_closest_point | ( | const gr_complex * | sample | ) | [protected] |
float digital_constellation::get_distance | ( | unsigned int | index, |
const gr_complex * | sample | ||
) | [protected] |
void digital_constellation::map_to_points | ( | unsigned int | value, |
gr_complex * | points | ||
) |
Returns the constellation points for a symbol value.
std::vector<gr_complex> digital_constellation::map_to_points_v | ( | unsigned int | value | ) |
std::vector<gr_complex> digital_constellation::points | ( | ) | [inline] |
Returns the set of points in this constellation.
std::vector<unsigned int> digital_constellation::pre_diff_code | ( | ) | [inline] |
Returns the encoding to apply before differential encoding.
unsigned int digital_constellation::rotational_symmetry | ( | ) | [inline] |
Returns the order of rotational symmetry.
std::vector<gr_complex> digital_constellation::s_points | ( | ) |
Returns the vector of points in this constellation. Raise error if dimensionality is not one.
void digital_constellation::set_pre_diff_code | ( | bool | a | ) | [inline] |
Whether to apply an encoding before doing differential encoding. (e.g. gray coding)
std::vector<std::vector<gr_complex> > digital_constellation::v_points | ( | ) |
Returns a vector of vectors of points.
bool digital_constellation::d_apply_pre_diff_code [protected] |
unsigned int digital_constellation::d_arity [protected] |
std::vector<gr_complex> digital_constellation::d_constellation [protected] |
unsigned int digital_constellation::d_dimensionality [protected] |
std::vector<unsigned int> digital_constellation::d_pre_diff_code [protected] |
unsigned int digital_constellation::d_rotational_symmetry [protected] |