diff options
author | Ben Reynwar | 2011-01-31 23:25:36 -0700 |
---|---|---|
committer | Ben Reynwar | 2011-01-31 23:25:36 -0700 |
commit | 2e7d6f638181231bad0a8fd2fa6fb72cf6ad1f7c (patch) | |
tree | 991973ef18d1898b3b6a1b4ef23b5c4560aaa895 /gnuradio-core/src/lib/general | |
parent | c72e8c84f565cf3be61780515fa6f7f3dfd73218 (diff) | |
download | gnuradio-2e7d6f638181231bad0a8fd2fa6fb72cf6ad1f7c.tar.gz gnuradio-2e7d6f638181231bad0a8fd2fa6fb72cf6ad1f7c.tar.bz2 gnuradio-2e7d6f638181231bad0a8fd2fa6fb72cf6ad1f7c.zip |
Added QPSK constellation object.
Diffstat (limited to 'gnuradio-core/src/lib/general')
-rw-r--r-- | gnuradio-core/src/lib/general/gr_constellation.cc | 25 | ||||
-rw-r--r-- | gnuradio-core/src/lib/general/gr_constellation.h | 26 | ||||
-rw-r--r-- | gnuradio-core/src/lib/general/gr_constellation.i | 17 |
3 files changed, 68 insertions, 0 deletions
diff --git a/gnuradio-core/src/lib/general/gr_constellation.cc b/gnuradio-core/src/lib/general/gr_constellation.cc index 477532e5c..403394eaa 100644 --- a/gnuradio-core/src/lib/general/gr_constellation.cc +++ b/gnuradio-core/src/lib/general/gr_constellation.cc @@ -29,6 +29,7 @@ #include <stdlib.h> #define M_TWOPI (2*M_PI) +#define SQRT_TWO 0.707107 gr_constellation_sptr gr_make_constellation(std::vector<gr_complex> constellation) @@ -190,3 +191,27 @@ unsigned int gr_constellation_bpsk::decision_maker(gr_complex sample) { return (real(sample) > 0); } + + +gr_constellation_qpsk_sptr +gr_make_constellation_qpsk() +{ + return gr_constellation_qpsk_sptr(new gr_constellation_qpsk ()); +} + +gr_constellation_qpsk::gr_constellation_qpsk () +{ + d_constellation.resize(4); + // Gray-coded + d_constellation[0] = gr_complex(-SQRT_TWO, -SQRT_TWO); + d_constellation[1] = gr_complex(SQRT_TWO, -SQRT_TWO); + d_constellation[2] = gr_complex(-SQRT_TWO, SQRT_TWO); + d_constellation[3] = gr_complex(SQRT_TWO, SQRT_TWO); +} + +unsigned int gr_constellation_qpsk::decision_maker(gr_complex sample) +{ + // Real component determines small bit. + // Imag component determines big bit. + return 2*(imag(sample)>0) + (real(sample)>0); +} diff --git a/gnuradio-core/src/lib/general/gr_constellation.h b/gnuradio-core/src/lib/general/gr_constellation.h index fcc947ca6..8ba22d59a 100644 --- a/gnuradio-core/src/lib/general/gr_constellation.h +++ b/gnuradio-core/src/lib/general/gr_constellation.h @@ -213,4 +213,30 @@ class gr_constellation_bpsk : public gr_constellation }; +/************************************************************/ +/* gr_constellation_qpsk */ +/* */ +/* Only works for QPSK. */ +/* */ +/************************************************************/ + +class gr_constellation_qpsk; +typedef boost::shared_ptr<gr_constellation_qpsk> gr_constellation_qpsk_sptr; + +// public constructor +gr_constellation_qpsk_sptr +gr_make_constellation_qpsk (); + +class gr_constellation_qpsk : public gr_constellation +{ + public: + + gr_constellation_qpsk (); + unsigned int decision_maker (gr_complex sample); + + friend gr_constellation_qpsk_sptr + gr_make_constellation_qpsk (); + +}; + #endif diff --git a/gnuradio-core/src/lib/general/gr_constellation.i b/gnuradio-core/src/lib/general/gr_constellation.i index a34aade9f..6620721ea 100644 --- a/gnuradio-core/src/lib/general/gr_constellation.i +++ b/gnuradio-core/src/lib/general/gr_constellation.i @@ -97,3 +97,20 @@ public: gr_constellation_sptr base (); }; +class gr_constellation_qpsk; +typedef boost::shared_ptr<gr_constellation_qpsk> gr_constellation_qpsk_sptr; +%template(gr_constellation_qpsk_sptr) boost::shared_ptr<gr_constellation_qpsk>; +%rename(constellation_qpsk) gr_make_constellation_qpsk; +gr_constellation_qpsk_sptr gr_make_constellation_qpsk(); +%ignore gr_constellation_qpsk; + +class gr_constellation_qpsk : public gr_constellation +{ +public: + gr_constellation_qpsk (); + std::vector<gr_complex> points(); + unsigned int decision_maker (gr_complex sample); + unsigned int bits_per_symbol (); + gr_constellation_sptr base (); +}; + |