[Top][All Lists]
[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_ */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r7368 - gnuradio/branches/developers/trondeau/receiver/gnuradio-core/src/lib/general,
trondeau <=