From 2e7d6f638181231bad0a8fd2fa6fb72cf6ad1f7c Mon Sep 17 00:00:00 2001
From: Ben Reynwar <ben@reynwar.net>
Date: Mon, 31 Jan 2011 23:25:36 -0700
Subject: Added QPSK constellation object.

---
 gnuradio-core/src/lib/general/gr_constellation.cc | 25 +++++++++++++++++++++++
 1 file changed, 25 insertions(+)

(limited to 'gnuradio-core/src/lib/general/gr_constellation.cc')

diff --git a/gnuradio-core/src/lib/general/gr_constellation.cc b/gnuradio-core/src/lib/general/gr_constellation.cc
index 477532e5c9..403394eaac 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);
+}
-- 
cgit v1.2.3