11 #ifndef GR_BLOCKS_CONTROL_LOOP
12 #define GR_BLOCKS_CONTROL_LOOP
78 d_freq = d_freq + d_beta * error;
79 d_phase = d_phase + d_freq + d_alpha * error;
99 while (d_phase < (-2 *
GR_M_PI))
118 if (d_freq > d_max_freq)
120 else if (d_freq < d_min_freq)
279 -0.96402758, -0.96290241, -0.96174273, -0.96054753, -0.95931576, -0.95804636,
280 -0.95673822, -0.95539023, -0.95400122, -0.95257001, -0.95109539, -0.9495761,
281 -0.94801087, -0.94639839, -0.94473732, -0.94302627, -0.94126385, -0.93944862,
282 -0.93757908, -0.93565374, -0.93367104, -0.93162941, -0.92952723, -0.92736284,
283 -0.92513456, -0.92284066, -0.92047938, -0.91804891, -0.91554743, -0.91297305,
284 -0.91032388, -0.90759795, -0.9047933, -0.90190789, -0.89893968, -0.89588656,
285 -0.89274642, -0.88951709, -0.88619637, -0.88278203, -0.87927182, -0.87566342,
286 -0.87195453, -0.86814278, -0.86422579, -0.86020115, -0.85606642, -0.85181914,
287 -0.84745683, -0.84297699, -0.83837709, -0.83365461, -0.82880699, -0.82383167,
288 -0.81872609, -0.81348767, -0.80811385, -0.80260204, -0.7969497, -0.79115425,
289 -0.78521317, -0.77912392, -0.772884, -0.76649093, -0.75994227, -0.75323562,
290 -0.74636859, -0.73933889, -0.73214422, -0.7247824, -0.71725127, -0.70954876,
291 -0.70167287, -0.6936217, -0.68539341, -0.67698629, -0.66839871, -0.65962916,
292 -0.65067625, -0.64153871, -0.6322154, -0.62270534, -0.61300768, -0.60312171,
293 -0.59304692, -0.58278295, -0.57232959, -0.56168685, -0.55085493, -0.53983419,
294 -0.52862523, -0.51722883, -0.50564601, -0.49387799, -0.48192623, -0.46979241,
295 -0.45747844, -0.44498647, -0.4323189, -0.41947836, -0.40646773, -0.39329014,
296 -0.37994896, -0.36644782, -0.35279057, -0.33898135, -0.32502449, -0.31092459,
297 -0.2966865, -0.28231527, -0.26781621, -0.25319481, -0.23845682, -0.22360817,
298 -0.208655, -0.19360362, -0.17846056, -0.16323249, -0.14792623, -0.13254879,
299 -0.11710727, -0.10160892, -0.08606109, -0.07047123, -0.05484686, -0.0391956,
300 -0.02352507, -0.00784298, 0.00784298, 0.02352507, 0.0391956, 0.05484686,
301 0.07047123, 0.08606109, 0.10160892, 0.11710727, 0.13254879, 0.14792623,
302 0.16323249, 0.17846056, 0.19360362, 0.208655, 0.22360817, 0.23845682,
303 0.25319481, 0.26781621, 0.28231527, 0.2966865, 0.31092459, 0.32502449,
304 0.33898135, 0.35279057, 0.36644782, 0.37994896, 0.39329014, 0.40646773,
305 0.41947836, 0.4323189, 0.44498647, 0.45747844, 0.46979241, 0.48192623,
306 0.49387799, 0.50564601, 0.51722883, 0.52862523, 0.53983419, 0.55085493,
307 0.56168685, 0.57232959, 0.58278295, 0.59304692, 0.60312171, 0.61300768,
308 0.62270534, 0.6322154, 0.64153871, 0.65067625, 0.65962916, 0.66839871,
309 0.67698629, 0.68539341, 0.6936217, 0.70167287, 0.70954876, 0.71725127,
310 0.7247824, 0.73214422, 0.73933889, 0.74636859, 0.75323562, 0.75994227,
311 0.76649093, 0.772884, 0.77912392, 0.78521317, 0.79115425, 0.7969497,
312 0.80260204, 0.80811385, 0.81348767, 0.81872609, 0.82383167, 0.82880699,
313 0.83365461, 0.83837709, 0.84297699, 0.84745683, 0.85181914, 0.85606642,
314 0.86020115, 0.86422579, 0.86814278, 0.87195453, 0.87566342, 0.87927182,
315 0.88278203, 0.88619637, 0.88951709, 0.89274642, 0.89588656, 0.89893968,
316 0.90190789, 0.9047933, 0.90759795, 0.91032388, 0.91297305, 0.91554743,
317 0.91804891, 0.92047938, 0.92284066, 0.92513456, 0.92736284, 0.92952723,
318 0.93162941, 0.93367104, 0.93565374, 0.93757908, 0.93944862, 0.94126385,
319 0.94302627, 0.94473732, 0.94639839, 0.94801087, 0.9495761, 0.95109539,
320 0.95257001, 0.95400122, 0.95539023, 0.95673822, 0.95804636, 0.95931576,
321 0.96054753, 0.96174273, 0.96290241, 0.96402758
344 int index = 128 + 64 * x;
A second-order control loop implementation class.
Definition: control_loop.h:51
float get_damping_factor() const
Returns the loop damping factor.
void set_beta(float beta)
Set the loop gain beta.
void set_min_freq(float freq)
Set the control loop's minimum frequency.
float get_min_freq() const
Get the control loop's minimum frequency.
float get_phase() const
Get the control loop's phase estimate.
void frequency_limit()
Keep the frequency between d_min_freq and d_max_freq.
Definition: control_loop.h:116
float d_damping
Definition: control_loop.h:55
float get_loop_bandwidth() const
Returns the loop bandwidth.
control_loop(float loop_bw, float max_freq, float min_freq)
void phase_wrap()
Keep the phase between -2pi and 2pi.
Definition: control_loop.h:95
float d_freq
Definition: control_loop.h:53
float get_frequency() const
Get the control loop's frequency estimate.
control_loop(void)
Definition: control_loop.h:59
float get_alpha() const
Returns the loop gain alpha.
float d_alpha
Definition: control_loop.h:56
void set_frequency(float freq)
Set the control loop's frequency.
float get_beta() const
Returns the loop gain beta.
void set_alpha(float alpha)
Set the loop gain alpha.
void advance_loop(float error)
Advance the control loop based on the current gain settings and the inputted error signal.
Definition: control_loop.h:76
float d_max_freq
Definition: control_loop.h:54
void set_damping_factor(float df)
Set the loop damping factor.
void update_gains()
Update the system gains from the loop bandwidth and damping factor.
virtual void set_loop_bandwidth(float bw)
Set the loop bandwidth.
void set_phase(float phase)
Set the control loop's phase.
float get_max_freq() const
Get the control loop's maximum frequency.
void set_max_freq(float freq)
Set the control loop's maximum frequency.
#define BLOCKS_API
Definition: gr-blocks/include/gnuradio/blocks/api.h:18
#define GR_M_PI
Definition: math.h:32
static float tanh_lut_table[256]
Definition: control_loop.h:278
static float tanhf_lut(float x)
Definition: control_loop.h:337
GNU Radio logging wrapper.
Definition: basic_block.h:29