Fix QPSK phase error detector. Applied patch from Ben Green, modified by Tom Rondeau.
authorjcorgan <jcorgan@221aa14e-8319-0410-a670-987f0aec2ac5>
Sun, 21 Jun 2009 16:06:01 +0000 (16:06 +0000)
committerjcorgan <jcorgan@221aa14e-8319-0410-a670-987f0aec2ac5>
Sun, 21 Jun 2009 16:06:01 +0000 (16:06 +0000)
git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@11254 221aa14e-8319-0410-a670-987f0aec2ac5

gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.cc

index cdb5bdc0ea49801f157a2226b80b23830e1ecf15..49bbb8d36048338d687339da480e0d116689fef1 100644 (file)
@@ -123,9 +123,21 @@ gr_mpsk_receiver_cc::forecast(int noutput_items, gr_vector_int &ninput_items_req
 float
 gr_mpsk_receiver_cc::phase_error_detector_qpsk(gr_complex sample) const
 {
-  float phase_error = -((sample.real()>0 ? 1.0 : -1.0) * sample.imag() -
-                       (sample.imag()>0 ? 1.0 : -1.0) * sample.real());
-  return -phase_error;
+  float phase_error = 0;
+  if(fabsf(sample.real()) > fabsf(sample.imag())) {
+    if(sample.real() > 0)
+      phase_error = -sample.imag();
+    else
+      phase_error = sample.imag();
+  }
+  else {
+    if(sample.imag() > 0)
+      phase_error = sample.real();
+    else
+      phase_error = -sample.real();
+  }
+  
+  return phase_error;
 }
 
 float