commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r7368 - gnuradio/branches/developers/trondeau/receiver


From: trondeau
Subject: [Commit-gnuradio] r7368 - gnuradio/branches/developers/trondeau/receiver/gnuradio-core/src/lib/general
Date: Sun, 6 Jan 2008 16:22:21 -0700 (MST)

Author: trondeau
Date: 2008-01-06 16:22:20 -0700 (Sun, 06 Jan 2008)
New Revision: 7368

Modified:
   
gnuradio/branches/developers/trondeau/receiver/gnuradio-core/src/lib/general/gr_math.h
Log:
Adding branchless and branching clip, binary slicer, and quadrature slicer. I 
haven't yet figured out a branchless 0deg quadrature slicer.

Modified: 
gnuradio/branches/developers/trondeau/receiver/gnuradio-core/src/lib/general/gr_math.h
===================================================================
--- 
gnuradio/branches/developers/trondeau/receiver/gnuradio-core/src/lib/general/gr_math.h
      2008-01-06 20:00:40 UTC (rev 7367)
+++ 
gnuradio/branches/developers/trondeau/receiver/gnuradio-core/src/lib/general/gr_math.h
      2008-01-06 23:22:20 UTC (rev 7368)
@@ -64,6 +64,16 @@
   return gr_fast_atan2f(z.imag(), z.real()); 
 }
 
+static inline float gr_clip(float x, float clip)
+{
+  double y;
+  if(x > clip)
+    y = clip;
+  else if(x < clip)
+    y = -clip;
+  return y;
+}
+
 static inline float gr_branchless_clip(float x, float clip)
 {
   float x1 = fabs(x+clip);
@@ -73,4 +83,74 @@
 }
 
 
+// Slicer Functions
+static inline unsigned int gr_binary_slicer(float x)
+{
+  if(x >= 0)
+    return 1;
+  else
+    return 0;
+}
+
+static inline unsigned int gr_quad_45deg_slicer(float r, float i)
+{
+  unsigned int ret = 0;
+  if((r >= 0) && (i >= 0))
+    ret = 0;
+  else if((r < 0) && (i >= 0))
+    ret = 1;
+  else if((r < 0) && (i < 0))
+    ret = 2;
+  else 
+    ret = 3;
+  return ret;
+}
+
+static inline unsigned int gr_quad_0deg_slicer(float r, float i)
+{
+  unsigned int ret = 0;
+  if(fabs(r) > fabs(i)) {
+    if(r > 0)
+      ret = 0;
+    else
+      ret = 3;
+  }
+  else {
+    if(i > 0)
+      ret = 1;
+    else
+      ret = 2;
+  }
+
+  return ret;
+}
+
+static inline unsigned int gr_quad_45deg_slicer(gr_complex x)
+{
+  return gr_quad_45deg_slicer(x.real(), x.imag());
+}
+
+static inline unsigned int gr_quad_0deg_slicer(gr_complex x)
+{
+  return gr_quad_0deg_slicer(x.real(), x.imag());
+}
+
+// Branchless Slicer Functions
+static inline unsigned int gr_branchless_binary_slicer(float x)
+{
+  return (x >= 0);
+}
+
+static inline unsigned int gr_branchless_quad_45deg_slicer(float r, float i)
+{
+  char ret = (r <= 0);
+  ret |= ((i <= 0) << 1);
+  return ret;
+}
+
+static inline unsigned int gr_branchless_quad_45deg_slicer(gr_complex x)
+{
+  return gr_branchless_quad_45deg_slicer(x.real(), x.imag());
+}
+
 #endif /* _GR_MATH_H_ */





reply via email to

[Prev in Thread] Current Thread [Next in Thread]