[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] [gnuradio] 01/04: blocks: adding a tanh lut for contro
From: |
git |
Subject: |
[Commit-gnuradio] [gnuradio] 01/04: blocks: adding a tanh lut for control_loop blocks to use. |
Date: |
Tue, 21 Oct 2014 21:04:45 +0000 (UTC) |
This is an automated email from the git hooks/post-receive script.
trondeau pushed a commit to branch master
in repository gnuradio.
commit 5f4e68a60e96609fffe5478fb356798831201d87
Author: Tom Rondeau <address@hidden>
Date: Tue Oct 21 16:06:45 2014 -0400
blocks: adding a tanh lut for control_loop blocks to use.
---
gr-blocks/include/gnuradio/blocks/control_loop.h | 81 ++++++++++++++++++++++++
1 file changed, 81 insertions(+)
diff --git a/gr-blocks/include/gnuradio/blocks/control_loop.h
b/gr-blocks/include/gnuradio/blocks/control_loop.h
index f7ff977..821c382 100644
--- a/gr-blocks/include/gnuradio/blocks/control_loop.h
+++ b/gr-blocks/include/gnuradio/blocks/control_loop.h
@@ -268,6 +268,87 @@ namespace gr {
float get_min_freq() const;
};
+ // This is a table of tanh(x) for x in [-2, 2] used in tanh_lut.
+ static float
+ tanh_lut_table[256] = { -0.96402758, -0.96290241, -0.96174273,
-0.96054753, -0.95931576,
+ -0.95804636, -0.95673822, -0.95539023,
-0.95400122, -0.95257001,
+ -0.95109539, -0.9495761 , -0.94801087,
-0.94639839, -0.94473732,
+ -0.94302627, -0.94126385, -0.93944862,
-0.93757908, -0.93565374,
+ -0.93367104, -0.93162941, -0.92952723,
-0.92736284, -0.92513456,
+ -0.92284066, -0.92047938, -0.91804891,
-0.91554743, -0.91297305,
+ -0.91032388, -0.90759795, -0.9047933 ,
-0.90190789, -0.89893968,
+ -0.89588656, -0.89274642, -0.88951709,
-0.88619637, -0.88278203,
+ -0.87927182, -0.87566342, -0.87195453,
-0.86814278, -0.86422579,
+ -0.86020115, -0.85606642, -0.85181914,
-0.84745683, -0.84297699,
+ -0.83837709, -0.83365461, -0.82880699,
-0.82383167, -0.81872609,
+ -0.81348767, -0.80811385, -0.80260204, -0.7969497
, -0.79115425,
+ -0.78521317, -0.77912392, -0.772884 ,
-0.76649093, -0.75994227,
+ -0.75323562, -0.74636859, -0.73933889,
-0.73214422, -0.7247824 ,
+ -0.71725127, -0.70954876, -0.70167287, -0.6936217
, -0.68539341,
+ -0.67698629, -0.66839871, -0.65962916,
-0.65067625, -0.64153871,
+ -0.6322154 , -0.62270534, -0.61300768,
-0.60312171, -0.59304692,
+ -0.58278295, -0.57232959, -0.56168685,
-0.55085493, -0.53983419,
+ -0.52862523, -0.51722883, -0.50564601,
-0.49387799, -0.48192623,
+ -0.46979241, -0.45747844, -0.44498647, -0.4323189
, -0.41947836,
+ -0.40646773, -0.39329014, -0.37994896,
-0.36644782, -0.35279057,
+ -0.33898135, -0.32502449, -0.31092459, -0.2966865
, -0.28231527,
+ -0.26781621, -0.25319481, -0.23845682,
-0.22360817, -0.208655 ,
+ -0.19360362, -0.17846056, -0.16323249,
-0.14792623, -0.13254879,
+ -0.11710727, -0.10160892, -0.08606109,
-0.07047123, -0.05484686,
+ -0.0391956 , -0.02352507, -0.00784298,
0.00784298, 0.02352507,
+ 0.0391956 , 0.05484686, 0.07047123,
0.08606109, 0.10160892,
+ 0.11710727, 0.13254879, 0.14792623,
0.16323249, 0.17846056,
+ 0.19360362, 0.208655 , 0.22360817,
0.23845682, 0.25319481,
+ 0.26781621, 0.28231527, 0.2966865 ,
0.31092459, 0.32502449,
+ 0.33898135, 0.35279057, 0.36644782,
0.37994896, 0.39329014,
+ 0.40646773, 0.41947836, 0.4323189 ,
0.44498647, 0.45747844,
+ 0.46979241, 0.48192623, 0.49387799,
0.50564601, 0.51722883,
+ 0.52862523, 0.53983419, 0.55085493,
0.56168685, 0.57232959,
+ 0.58278295, 0.59304692, 0.60312171,
0.61300768, 0.62270534,
+ 0.6322154 , 0.64153871, 0.65067625,
0.65962916, 0.66839871,
+ 0.67698629, 0.68539341, 0.6936217 ,
0.70167287, 0.70954876,
+ 0.71725127, 0.7247824 , 0.73214422,
0.73933889, 0.74636859,
+ 0.75323562, 0.75994227, 0.76649093, 0.772884
, 0.77912392,
+ 0.78521317, 0.79115425, 0.7969497 ,
0.80260204, 0.80811385,
+ 0.81348767, 0.81872609, 0.82383167,
0.82880699, 0.83365461,
+ 0.83837709, 0.84297699, 0.84745683,
0.85181914, 0.85606642,
+ 0.86020115, 0.86422579, 0.86814278,
0.87195453, 0.87566342,
+ 0.87927182, 0.88278203, 0.88619637,
0.88951709, 0.89274642,
+ 0.89588656, 0.89893968, 0.90190789, 0.9047933
, 0.90759795,
+ 0.91032388, 0.91297305, 0.91554743,
0.91804891, 0.92047938,
+ 0.92284066, 0.92513456, 0.92736284,
0.92952723, 0.93162941,
+ 0.93367104, 0.93565374, 0.93757908,
0.93944862, 0.94126385,
+ 0.94302627, 0.94473732, 0.94639839,
0.94801087, 0.9495761 ,
+ 0.95109539, 0.95257001, 0.95400122,
0.95539023, 0.95673822,
+ 0.95804636, 0.95931576, 0.96054753,
0.96174273, 0.96290241,
+ 0.96402758 };
+
+ /*!
+ * A look-up table (LUT) tanh calcuation. This function returns an
+ * estimate to tanh(x) based on a 256-point LUT between -2 and
+ * 2. If x < -2, it returns -1; if > 2, it retursn 1.
+ *
+ * This LUT form of the tanh is "hidden" in this code because it
+ * is likely too coarse an estimate for any real uses of a
+ * tanh. It is useful, however, in certain control loop
+ * applications where the input is expected to be within these
+ * bounds and the noise will be greater than the quanitzation of
+ * this small LUT. For more accurate forms of tanh, see
+ * volk_32f_tanh_32f.
+ */
+ static inline float
+ tanhf_lut(float x)
+ {
+ if(x > 2)
+ return 1;
+ else if(x <= -2)
+ return -1;
+ else {
+ int index = 128 + 64*x;
+ return tanh_lut_table[index];
+ }
+ }
+
} /* namespace blocks */
} /* namespace gr */