From a6fa43a9075e5123c741090622c80598a7e84c3a Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Sat, 30 Jul 2011 15:59:44 -0400 Subject: digital: updated Costas loop again. The damping factor is now set by default and is no longer part of the constructor. All variables are exposed in gets and sets, though, for any purposes. --- gr-digital/lib/digital_costas_loop_cc.h | 148 ++++++++++++++++++++++++++++---- 1 file changed, 130 insertions(+), 18 deletions(-) (limited to 'gr-digital/lib/digital_costas_loop_cc.h') diff --git a/gr-digital/lib/digital_costas_loop_cc.h b/gr-digital/lib/digital_costas_loop_cc.h index 9c112d328..530a2e2a3 100644 --- a/gr-digital/lib/digital_costas_loop_cc.h +++ b/gr-digital/lib/digital_costas_loop_cc.h @@ -58,8 +58,7 @@ typedef boost::shared_ptr digital_costas_loop_cc_sptr; digital_costas_loop_cc_sptr -digital_make_costas_loop_cc (float damping, float nat_freq, - int order +digital_make_costas_loop_cc (float loop_bw, int order ) throw (std::invalid_argument); @@ -76,19 +75,24 @@ digital_make_costas_loop_cc (float damping, float nat_freq, class digital_costas_loop_cc : public gr_sync_block { friend digital_costas_loop_cc_sptr - digital_make_costas_loop_cc (float damping, float nat_freq, - int order + digital_make_costas_loop_cc (float loop_bw, int order ) throw (std::invalid_argument); - float d_alpha, d_beta, d_max_freq, d_min_freq, d_phase, d_freq; - float d_nat_freq, d_damping; + float d_max_freq; + float d_min_freq; int d_order; - digital_costas_loop_cc (float damping, float nat_freq, - int order + float d_loop_bw; + float d_damping; + float d_alpha; + float d_beta; + + float d_phase; + float d_freq; + + digital_costas_loop_cc (float loop_bw, int order ) throw (std::invalid_argument); - /*! \brief update the system gains from omega and eta * * This function updates the system gains based on the natural @@ -124,18 +128,126 @@ class digital_costas_loop_cc : public gr_sync_block public: - void set_natural_freq(float w); - void set_damping_factor(float eta); + /******************************************************************* + 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 get the first order gain - * + /*! + * \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 + * */ - float alpha() const { return d_alpha; } - - /*! \brief get the second order gain - * + 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 + * */ - float beta() const { return d_beta; } + void set_beta(float beta); + + /*! + * \brief Set the Costas loop's frequency. + * + * Set's the Costas 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 Costas loop's phase. + * + * Set's the Costas 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); + + + /******************************************************************* + 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 Costas loop's frequency estimate + */ + float get_frequency() const; + + /*! + * \brief Get the Costas loop's phase estimate + */ + float get_phase() const; + int work (int noutput_items, gr_vector_const_void_star &input_items, -- cgit From 42c894fbd0a43f216975275d25e2cb02d38c0961 Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Sat, 30 Jul 2011 17:04:28 -0400 Subject: digital: update documentation. --- gr-digital/lib/digital_costas_loop_cc.h | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'gr-digital/lib/digital_costas_loop_cc.h') diff --git a/gr-digital/lib/digital_costas_loop_cc.h b/gr-digital/lib/digital_costas_loop_cc.h index 530a2e2a3..faf5e4263 100644 --- a/gr-digital/lib/digital_costas_loop_cc.h +++ b/gr-digital/lib/digital_costas_loop_cc.h @@ -95,13 +95,10 @@ class digital_costas_loop_cc : public gr_sync_block /*! \brief update the system gains from omega and eta * - * This function updates the system gains based on the natural - * frequency (omega) and damping factor (eta) of the system. + * 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. - * - * These equations are summarized nicely in this paper from Berkeley: - * http://www.complextoreal.com/chapters/pll.pdf */ void update_gains(); -- cgit From 612be3956603941f6cf530c090eba02d26d33bcd Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Wed, 10 Aug 2011 22:35:17 -0400 Subject: digital: updated constellation receiver to use loop bandwidth and damping factor instead of setting alpha and beta independently. Also cleaning up Costas loop a bit more. --- gr-digital/lib/digital_costas_loop_cc.h | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'gr-digital/lib/digital_costas_loop_cc.h') diff --git a/gr-digital/lib/digital_costas_loop_cc.h b/gr-digital/lib/digital_costas_loop_cc.h index faf5e4263..83edded19 100644 --- a/gr-digital/lib/digital_costas_loop_cc.h +++ b/gr-digital/lib/digital_costas_loop_cc.h @@ -93,7 +93,7 @@ class digital_costas_loop_cc : public gr_sync_block digital_costas_loop_cc (float loop_bw, int order ) throw (std::invalid_argument); - /*! \brief update the system gains from omega and eta + /*! \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. @@ -249,11 +249,6 @@ public: int work (int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); - - /*! \brief returns the current NCO frequency in radians/sample - * - */ - float freq() const { return d_freq; } }; #endif -- cgit From ed564be6c78a3e22b3c98862834192f8b20bc551 Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Sun, 14 Aug 2011 22:32:01 -0400 Subject: digital: cleaned up Costas loop code by switching over to the gri_control_loop class to handle the inner loop. Had to add it to digital_swig.i to properly wrap the parent functions into Python. --- gr-digital/lib/digital_costas_loop_cc.h | 143 +------------------------------- 1 file changed, 2 insertions(+), 141 deletions(-) (limited to 'gr-digital/lib/digital_costas_loop_cc.h') diff --git a/gr-digital/lib/digital_costas_loop_cc.h b/gr-digital/lib/digital_costas_loop_cc.h index 83edded19..7b2cd6dad 100644 --- a/gr-digital/lib/digital_costas_loop_cc.h +++ b/gr-digital/lib/digital_costas_loop_cc.h @@ -25,6 +25,7 @@ #define INCLUDED_DIGITAL_COSTAS_LOOP_CC_H #include +#include #include #include @@ -72,36 +73,17 @@ digital_make_costas_loop_cc (float loop_bw, int order * * \p order must be 2 or 4. */ -class digital_costas_loop_cc : public gr_sync_block +class digital_costas_loop_cc : public gr_sync_block, public gri_control_loop { friend digital_costas_loop_cc_sptr digital_make_costas_loop_cc (float loop_bw, int order ) throw (std::invalid_argument); - float d_max_freq; - float d_min_freq; int d_order; - float d_loop_bw; - float d_damping; - float d_alpha; - float d_beta; - - float d_phase; - float d_freq; - digital_costas_loop_cc (float loop_bw, int order ) throw (std::invalid_argument); - /*! \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 the phase detector circuit for 8th-order PSK loops * \param sample complex sample * \return the phase error @@ -125,127 +107,6 @@ class digital_costas_loop_cc : public gr_sync_block public: - /******************************************************************* - 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 Costas loop's frequency. - * - * Set's the Costas 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 Costas loop's phase. - * - * Set's the Costas 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); - - - /******************************************************************* - 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 Costas loop's frequency estimate - */ - float get_frequency() const; - - /*! - * \brief Get the Costas loop's phase estimate - */ - float get_phase() const; - - int work (int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); -- cgit