summaryrefslogtreecommitdiff
path: root/gnuradio-core/src/lib/general
diff options
context:
space:
mode:
authorBen Reynwar2011-01-31 23:25:36 -0700
committerBen Reynwar2011-01-31 23:25:36 -0700
commit2e7d6f638181231bad0a8fd2fa6fb72cf6ad1f7c (patch)
tree991973ef18d1898b3b6a1b4ef23b5c4560aaa895 /gnuradio-core/src/lib/general
parentc72e8c84f565cf3be61780515fa6f7f3dfd73218 (diff)
downloadgnuradio-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.cc25
-rw-r--r--gnuradio-core/src/lib/general/gr_constellation.h26
-rw-r--r--gnuradio-core/src/lib/general/gr_constellation.i17
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 ();
+};
+