From 41cf2b306a210c3600c1c35a8e952679a94c00a6 Mon Sep 17 00:00:00 2001
From: Tom Rondeau <trondeau@vt.edu>
Date: Mon, 29 Aug 2011 17:37:38 -0400
Subject: digital: created a separate DQPSK constellation that does not gray
 code inside the block. This forces a slower decision making routine but
 allows differential encoding. Gray coding is done using pre_diff_code.

---
 gr-digital/lib/digital_constellation.cc | 80 +++++++++++++++++++++++++++++++++
 1 file changed, 80 insertions(+)

(limited to 'gr-digital/lib/digital_constellation.cc')

diff --git a/gr-digital/lib/digital_constellation.cc b/gr-digital/lib/digital_constellation.cc
index 2263bba0bc..ed6d32bcb0 100644
--- a/gr-digital/lib/digital_constellation.cc
+++ b/gr-digital/lib/digital_constellation.cc
@@ -407,6 +407,20 @@ digital_constellation_qpsk::digital_constellation_qpsk ()
   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);
+  
+  /*
+  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);
+  */
+
+  d_pre_diff_code.resize(4);
+  d_pre_diff_code[0] = 0x0;
+  d_pre_diff_code[1] = 0x2;
+  d_pre_diff_code[2] = 0x3;
+  d_pre_diff_code[3] = 0x1;
+
   d_rotational_symmetry = 4;
   d_dimensionality = 1;
   calc_arity();
@@ -418,8 +432,74 @@ digital_constellation_qpsk::decision_maker(const gr_complex *sample)
   // Real component determines small bit.
   // Imag component determines big bit.
   return 2*(imag(*sample)>0) + (real(*sample)>0);
+
+  /*
+  bool a = real(*sample) > 0;
+  bool b = imag(*sample) > 0;
+  if(a) {
+    if(b)
+      return 0x0;
+    else
+      return 0x1;
+  }
+  else {
+    if(b)
+      return 0x2;
+    else
+      return 0x3;
+  }
+  */
+}
+
+
+/********************************************************************/
+
+
+digital_constellation_dqpsk_sptr 
+digital_make_constellation_dqpsk()
+{
+  return digital_constellation_dqpsk_sptr(new digital_constellation_dqpsk ());
 }
 
+digital_constellation_dqpsk::digital_constellation_dqpsk ()
+{
+  d_constellation.resize(4);
+  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);
+
+  d_pre_diff_code.resize(4);
+  d_pre_diff_code[0] = 0x0;
+  d_pre_diff_code[1] = 0x1;
+  d_pre_diff_code[2] = 0x3;
+  d_pre_diff_code[3] = 0x2;
+  d_apply_pre_diff_code = true;
+
+  d_rotational_symmetry = 4;
+  d_dimensionality = 1;
+  calc_arity();
+}
+
+#include <cstdio>
+unsigned int
+digital_constellation_dqpsk::decision_maker(const gr_complex *sample)
+{
+  bool a = real(*sample) > 0;
+  bool b = imag(*sample) > 0;
+  if(a) {
+    if(b)
+      return 0x0;
+    else
+      return 0x3;
+  }
+  else {
+    if(b)
+      return 0x1;
+    else
+      return 0x2;
+  }
+}
 
 digital_constellation_8psk_sptr 
 digital_make_constellation_8psk()
-- 
cgit v1.2.3