commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r6840 - gnuradio/trunk/gnuradio-core/src/lib/general


From: n4hy
Subject: [Commit-gnuradio] r6840 - gnuradio/trunk/gnuradio-core/src/lib/general
Date: Thu, 8 Nov 2007 15:43:29 -0700 (MST)

Author: n4hy
Date: 2007-11-08 15:43:26 -0700 (Thu, 08 Nov 2007)
New Revision: 6840

Modified:
   gnuradio/trunk/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.cc
   gnuradio/trunk/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.h
   gnuradio/trunk/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.cc
   gnuradio/trunk/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.h
   gnuradio/trunk/gnuradio-core/src/lib/general/gr_math.h
Log:
attempting to use branchless clipping to prevent pipeline dumping, fabs needs 
to be intrinsic for speed

Modified: 
gnuradio/trunk/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.cc
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.cc     
2007-11-08 20:50:47 UTC (rev 6839)
+++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.cc     
2007-11-08 22:43:26 UTC (rev 6840)
@@ -151,17 +151,22 @@
       out[oo++] = d_p_0T;
       
       // limit mm_val
+#if 0
       if (mm_val > 1.0)
        mm_val = 1.0;
       else if (mm_val < -1.0)
        mm_val = -1.0;
-      
+#endif
+      gr_branchless_clip(mm_val,1.0);
       d_omega = d_omega + d_gain_omega * mm_val;
+
+#if 0
       if (d_omega > d_max_omega)
        d_omega = d_max_omega;
       else if (d_omega < d_min_omega)
        d_omega = d_min_omega;
-      
+#endif
+      d_omega = 1.0+gr_branchless_clip(d_omega,d_omega_relative_limit);
       d_mu = d_mu + d_omega + d_gain_mu * mm_val;
       ii += (int)floor(d_mu);
       d_mu -= floor(d_mu);

Modified: gnuradio/trunk/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.h
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.h      
2007-11-08 20:50:47 UTC (rev 6839)
+++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.h      
2007-11-08 22:43:26 UTC (rev 6840)
@@ -25,6 +25,7 @@
 
 #include <gr_block.h>
 #include <gr_complex.h>
+#include <gr_math.h>
 
 class gri_mmse_fir_interpolator_cc;
 

Modified: 
gnuradio/trunk/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.cc
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.cc     
2007-11-08 20:50:47 UTC (rev 6839)
+++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.cc     
2007-11-08 22:43:26 UTC (rev 6840)
@@ -118,11 +118,13 @@
     d_last_sample = out[oo];
 
     d_omega = d_omega + d_gain_omega * mm_val;
+#if 0
     if (d_omega > d_max_omega)
       d_omega = d_max_omega;
     else if (d_omega < d_min_omega)
       d_omega = d_min_omega;
-
+#endif
+    d_omega = gr_branchless_clip(d_omega-d_omega_mid,d_omega_relative_limit);
     d_mu = d_mu + d_omega + d_gain_mu * mm_val;
 
     ii += (int) floor(d_mu);

Modified: gnuradio/trunk/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.h
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.h      
2007-11-08 20:50:47 UTC (rev 6839)
+++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.h      
2007-11-08 22:43:26 UTC (rev 6840)
@@ -24,6 +24,7 @@
 #define        INCLUDED_GR_CLOCK_RECOVERY_MM_FF_H
 
 #include <gr_block.h>
+#include <gr_math.h>
 #include <stdio.h>
 
 class gri_mmse_fir_interpolator;
@@ -67,6 +68,7 @@
     d_omega = omega;
     d_min_omega = omega*(1.0 - d_omega_relative_limit);
     d_max_omega = omega*(1.0 + d_omega_relative_limit);
+    d_omega_mid = 0.5*(d_min_omega+d_max_omega);
   }
 
 protected:
@@ -76,7 +78,8 @@
  private:
   float                        d_mu;           // fractional sample position 
[0.0, 1.0]
   float                        d_omega;        // nominal frequency
-  float                                d_min_omega;    // minimum allowed omega
+  float                                d_min_omega;    // minimum allowed 
omega 
+  float                         d_omega_mid;   // average omega
   float                                d_max_omega;    // maximum allowed omega
   float                         d_gain_omega;  // gain for adjusting omega
   float                         d_gain_mu;     // gain for adjusting mu

Modified: gnuradio/trunk/gnuradio-core/src/lib/general/gr_math.h
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_math.h      2007-11-08 
20:50:47 UTC (rev 6839)
+++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_math.h      2007-11-08 
22:43:26 UTC (rev 6840)
@@ -64,4 +64,13 @@
   return gr_fast_atan2f(z.imag(), z.real()); 
 }
 
+static inline float gr_branchless_clip(float x, float clip)
+{
+  float x1 = fabs(x+clip);
+  float x2 = fabs(x-clip);
+  x1 -= x2;
+  return 0.5*x1;
+}
+
+
 #endif /* _GR_MATH_H_ */





reply via email to

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