diff options
author | Tom Rondeau <trondeau@vt.edu> | 2013-03-10 16:35:53 -0400 |
---|---|---|
committer | Tom Rondeau <trondeau@vt.edu> | 2013-03-10 16:35:53 -0400 |
commit | 1bc6349e4714c5c4856b3abb95dc5f6b15c44281 (patch) | |
tree | b8d2235a2ad78b4238f469efa4f660fb2b7b7233 /gnuradio-core/src/lib | |
parent | c6cd7e06279546629a7fd221324d50844f6fdc69 (diff) |
blocks: removing gri_control_loop; using gr::blocks::control_loop now.
Diffstat (limited to 'gnuradio-core/src/lib')
-rw-r--r-- | gnuradio-core/src/lib/general/CMakeLists.txt | 3 | ||||
-rw-r--r-- | gnuradio-core/src/lib/general/general.i | 2 | ||||
-rw-r--r-- | gnuradio-core/src/lib/general/gri_control_loop.cc | 210 | ||||
-rw-r--r-- | gnuradio-core/src/lib/general/gri_control_loop.h | 231 | ||||
-rw-r--r-- | gnuradio-core/src/lib/general/gri_control_loop.i | 57 |
5 files changed, 0 insertions, 503 deletions
diff --git a/gnuradio-core/src/lib/general/CMakeLists.txt b/gnuradio-core/src/lib/general/CMakeLists.txt index a8ad8573b5..0eaf551675 100644 --- a/gnuradio-core/src/lib/general/CMakeLists.txt +++ b/gnuradio-core/src/lib/general/CMakeLists.txt @@ -54,7 +54,6 @@ list(APPEND gnuradio_core_sources ${CMAKE_CURRENT_SOURCE_DIR}/gr_random.cc ${CMAKE_CURRENT_SOURCE_DIR}/gr_reverse.cc ${CMAKE_CURRENT_SOURCE_DIR}/gri_add_const_ss_generic.cc - ${CMAKE_CURRENT_SOURCE_DIR}/gri_control_loop.cc ${CMAKE_CURRENT_SOURCE_DIR}/gri_debugger_hook.cc ${CMAKE_CURRENT_SOURCE_DIR}/malloc16.c ) @@ -82,7 +81,6 @@ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/gr_reverse.h ${CMAKE_CURRENT_SOURCE_DIR}/gr_test_types.h ${CMAKE_CURRENT_SOURCE_DIR}/gri_add_const_ss.h - ${CMAKE_CURRENT_SOURCE_DIR}/gri_control_loop.h ${CMAKE_CURRENT_SOURCE_DIR}/gri_debugger_hook.h ${CMAKE_CURRENT_SOURCE_DIR}/gri_lfsr_15_1_0.h ${CMAKE_CURRENT_SOURCE_DIR}/gri_lfsr_32k.h @@ -99,7 +97,6 @@ if(ENABLE_PYTHON) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/general.i ${CMAKE_CURRENT_SOURCE_DIR}/gr_constants.i - ${CMAKE_CURRENT_SOURCE_DIR}/gri_control_loop.i DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig COMPONENT "core_swig" ) diff --git a/gnuradio-core/src/lib/general/general.i b/gnuradio-core/src/lib/general/general.i index dabdb1bddf..bcf4392bb4 100644 --- a/gnuradio-core/src/lib/general/general.i +++ b/gnuradio-core/src/lib/general/general.i @@ -22,7 +22,6 @@ %{ -#include <gri_control_loop.h> #include <gr_nop.h> #include <gr_null_sink.h> #include <gr_null_source.h> @@ -50,7 +49,6 @@ #include <gr_vector_map.h> %} -%include "gri_control_loop.i" %include "gr_nop.i" %include "gr_null_sink.i" %include "gr_null_source.i" diff --git a/gnuradio-core/src/lib/general/gri_control_loop.cc b/gnuradio-core/src/lib/general/gri_control_loop.cc deleted file mode 100644 index bb3c4a3263..0000000000 --- a/gnuradio-core/src/lib/general/gri_control_loop.cc +++ /dev/null @@ -1,210 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2011 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <gri_control_loop.h> -#include <gr_math.h> -#include <stdexcept> - -#define M_TWOPI (2.0f*M_PI) - -gri_control_loop::gri_control_loop(float loop_bw, - float max_freq, float min_freq) - : d_phase(0), d_freq(0), d_max_freq(max_freq), d_min_freq(min_freq) -{ - // Set the damping factor for a critically damped system - d_damping = sqrtf(2.0f)/2.0f; - - // Set the bandwidth, which will then call update_gains() - set_loop_bandwidth(loop_bw); -} - -gri_control_loop::~gri_control_loop() -{ -} - -void -gri_control_loop::update_gains() -{ - float denom = (1.0 + 2.0*d_damping*d_loop_bw + d_loop_bw*d_loop_bw); - d_alpha = (4*d_damping*d_loop_bw) / denom; - d_beta = (4*d_loop_bw*d_loop_bw) / denom; -} - -void -gri_control_loop::advance_loop(float error) -{ - d_freq = d_freq + d_beta * error; - d_phase = d_phase + d_freq + d_alpha * error; -} - - -void -gri_control_loop::phase_wrap() -{ - while(d_phase>M_TWOPI) - d_phase -= M_TWOPI; - while(d_phase<-M_TWOPI) - d_phase += M_TWOPI; -} - -void -gri_control_loop::frequency_limit() -{ - if (d_freq > d_max_freq) - d_freq = d_max_freq; - else if (d_freq < d_min_freq) - d_freq = d_min_freq; -} - -/******************************************************************* - SET FUNCTIONS -*******************************************************************/ - -void -gri_control_loop::set_loop_bandwidth(float bw) -{ - if(bw < 0) { - throw std::out_of_range ("gri_control_loop: invalid bandwidth. Must be >= 0."); - } - - d_loop_bw = bw; - update_gains(); -} - -void -gri_control_loop::set_damping_factor(float df) -{ - if(df < 0 || df > 1.0) { - throw std::out_of_range ("gri_control_loop: invalid damping factor. Must be in [0,1]."); - } - - d_damping = df; - update_gains(); -} - -void -gri_control_loop::set_alpha(float alpha) -{ - if(alpha < 0 || alpha > 1.0) { - throw std::out_of_range ("gri_control_loop: invalid alpha. Must be in [0,1]."); - } - d_alpha = alpha; -} - -void -gri_control_loop::set_beta(float beta) -{ - if(beta < 0 || beta > 1.0) { - throw std::out_of_range ("gri_control_loop: invalid beta. Must be in [0,1]."); - } - d_beta = beta; -} - -void -gri_control_loop::set_frequency(float freq) -{ - if(freq > d_max_freq) - d_freq = d_min_freq; - else if(freq < d_min_freq) - d_freq = d_max_freq; - else - d_freq = freq; -} - -void -gri_control_loop::set_phase(float phase) -{ - d_phase = phase; - while(d_phase>M_TWOPI) - d_phase -= M_TWOPI; - while(d_phase<-M_TWOPI) - d_phase += M_TWOPI; -} - -void -gri_control_loop::set_max_freq(float freq) -{ - d_max_freq = freq; -} - -void -gri_control_loop::set_min_freq(float freq) -{ - d_min_freq = freq; -} - -/******************************************************************* - GET FUNCTIONS -*******************************************************************/ - - -float -gri_control_loop::get_loop_bandwidth() const -{ - return d_loop_bw; -} - -float -gri_control_loop::get_damping_factor() const -{ - return d_damping; -} - -float -gri_control_loop::get_alpha() const -{ - return d_alpha; -} - -float -gri_control_loop::get_beta() const -{ - return d_beta; -} - -float -gri_control_loop::get_frequency() const -{ - return d_freq; -} - -float -gri_control_loop::get_phase() const -{ - return d_phase; -} - -float -gri_control_loop::get_max_freq() const -{ - return d_max_freq; -} - -float -gri_control_loop::get_min_freq() const -{ - return d_min_freq; -} diff --git a/gnuradio-core/src/lib/general/gri_control_loop.h b/gnuradio-core/src/lib/general/gri_control_loop.h deleted file mode 100644 index 46aa6ae243..0000000000 --- a/gnuradio-core/src/lib/general/gri_control_loop.h +++ /dev/null @@ -1,231 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2011 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef GRI_CONTROL_LOOP -#define GRI_CONTROL_LOOP - -#include <gr_core_api.h> - -class GR_CORE_API gri_control_loop -{ - protected: - float d_phase, d_freq; - float d_max_freq, d_min_freq; - float d_damping, d_loop_bw; - float d_alpha, d_beta; - - public: - gri_control_loop() {}; - gri_control_loop(float loop_bw, float max_freq, float min_freq); - virtual ~gri_control_loop(); - - /*! \brief update the system gains from the loop bandwidth and damping factor - * - * This function updates the system gains based on the loop - * bandwidth and damping factor of the system. - * These two factors can be set separately through their own - * set functions. - */ - void update_gains(); - - /*! \brief update the system gains from the loop bandwidth and damping factor - * - * This function updates the system gains based on the loop - * bandwidth and damping factor of the system. - * These two factors can be set separately through their own - * set functions. - */ - void advance_loop(float error); - - /*! \brief Keep the phase between -2pi and 2pi - * - * This function keeps the phase between -2pi and 2pi. If the phase - * is greater than 2pi by d, it wraps around to be -2pi+d; similarly if - * it is less than -2pi by d, it wraps around to 2pi-d. - * - * This function should be called after advance_loop to keep the phase - * in a good operating region. It is set as a separate method in case - * another way is desired as this is fairly heavy-handed. - */ - void phase_wrap(); - - /*! \brief Keep the frequency between d_min_freq and d_max_freq - * - * This function keeps the frequency between d_min_freq and d_max_freq. - * If the frequency is greater than d_max_freq, it is set to d_max_freq. - * If the frequency is less than d_min_freq, it is set to d_min_freq. - * - * This function should be called after advance_loop to keep the frequency - * in the specified region. It is set as a separate method in case - * another way is desired as this is fairly heavy-handed. - */ - void frequency_limit(); - - /******************************************************************* - SET FUNCTIONS - *******************************************************************/ - - /*! - * \brief Set the loop bandwidth - * - * Set the loop filter's bandwidth to \p bw. This should be between - * 2*pi/200 and 2*pi/100 (in rads/samp). It must also be a positive - * number. - * - * When a new damping factor is set, the gains, alpha and beta, of the loop - * are recalculated by a call to update_gains(). - * - * \param bw (float) new bandwidth - * - */ - void set_loop_bandwidth(float bw); - - /*! - * \brief Set the loop damping factor - * - * Set the loop filter's damping factor to \p df. The damping factor - * should be sqrt(2)/2.0 for critically damped systems. - * Set it to anything else only if you know what you are doing. It must - * be a number between 0 and 1. - * - * When a new damping factor is set, the gains, alpha and beta, of the loop - * are recalculated by a call to update_gains(). - * - * \param df (float) new damping factor - * - */ - void set_damping_factor(float df); - - /*! - * \brief Set the loop gain alpha - * - * Set's the loop filter's alpha gain parameter. - * - * This value should really only be set by adjusting the loop bandwidth - * and damping factor. - * - * \param alpha (float) new alpha gain - * - */ - void set_alpha(float alpha); - - /*! - * \brief Set the loop gain beta - * - * Set's the loop filter's beta gain parameter. - * - * This value should really only be set by adjusting the loop bandwidth - * and damping factor. - * - * \param beta (float) new beta gain - * - */ - void set_beta(float beta); - - /*! - * \brief Set the control loop's frequency. - * - * Set's the control loop's frequency. While this is normally updated by the - * inner loop of the algorithm, it could be useful to manually initialize, - * set, or reset this under certain circumstances. - * - * \param freq (float) new frequency - * - */ - void set_frequency(float freq); - - /*! - * \brief Set the control loop's phase. - * - * Set's the control loop's phase. While this is normally updated by the - * inner loop of the algorithm, it could be useful to manually initialize, - * set, or reset this under certain circumstances. - * - * \param phase (float) new phase - * - */ - void set_phase(float phase); - - /*! - * \brief Set the control loop's maximum frequency. - * - * Set the maximum frequency the control loop can track. - * - * \param freq (float) new max frequency - */ - void set_max_freq(float freq); - - /*! - * \brief Set the control loop's minimum frequency. - * - * Set the minimum frequency the control loop can track. - * - * \param freq (float) new min frequency - */ - void set_min_freq(float freq); - - /******************************************************************* - GET FUNCTIONS - *******************************************************************/ - - /*! - * \brief Returns the loop bandwidth - */ - float get_loop_bandwidth() const; - - /*! - * \brief Returns the loop damping factor - */ - float get_damping_factor() const; - - /*! - * \brief Returns the loop gain alpha - */ - float get_alpha() const; - - /*! - * \brief Returns the loop gain beta - */ - float get_beta() const; - - /*! - * \brief Get the control loop's frequency estimate - */ - float get_frequency() const; - - /*! - * \brief Get the control loop's phase estimate - */ - float get_phase() const; - - /*! - * \brief Get the control loop's maximum frequency. - */ - float get_max_freq() const; - - /*! - * \brief Get the control loop's minimum frequency. - */ - float get_min_freq() const; -}; - -#endif /* GRI_CONTROL_LOOP */ diff --git a/gnuradio-core/src/lib/general/gri_control_loop.i b/gnuradio-core/src/lib/general/gri_control_loop.i deleted file mode 100644 index 8a23207e50..0000000000 --- a/gnuradio-core/src/lib/general/gri_control_loop.i +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2011 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - - -class gri_control_loop -{ - public: - gri_control_loop(float loop_bw, float max_freq, float min_freq); - virtual ~gri_control_loop(); - - void update_gains(); - void advance_loop(float error); - void phase_wrap(); - void frequency_limit(); - - /******************************************************************* - SET FUNCTIONS - *******************************************************************/ - - void set_loop_bandwidth(float bw); - void set_damping_factor(float df); - void set_alpha(float alpha); - void set_beta(float beta); - void set_frequency(float freq); - void set_phase(float phase); - - - /******************************************************************* - GET FUNCTIONS - *******************************************************************/ - - float get_loop_bandwidth() const; - float get_damping_factor() const; - float get_alpha() const; - float get_beta() const; - float get_frequency() const; - float get_phase() const; -}; |