summaryrefslogtreecommitdiff
path: root/gr-digital
diff options
context:
space:
mode:
Diffstat (limited to 'gr-digital')
-rw-r--r--gr-digital/lib/digital_fll_band_edge_cc.h115
1 files changed, 65 insertions, 50 deletions
diff --git a/gr-digital/lib/digital_fll_band_edge_cc.h b/gr-digital/lib/digital_fll_band_edge_cc.h
index 496289d90..fbd59881b 100644
--- a/gr-digital/lib/digital_fll_band_edge_cc.h
+++ b/gr-digital/lib/digital_fll_band_edge_cc.h
@@ -39,35 +39,47 @@ digital_fll_band_edge_cc_sptr digital_make_fll_band_edge_cc (float samps_per_sym
*
* \ingroup general
*
- * The frequency lock loop derives a band-edge filter that covers the upper and lower bandwidths
- * of a digitally-modulated signal. The bandwidth range is determined by the excess bandwidth
- * (e.g., rolloff factor) of the modulated signal. The placement in frequency of the band-edges
- * is determined by the oversampling ratio (number of samples per symbol) and the excess bandwidth.
- * The size of the filters should be fairly large so as to average over a number of symbols.
+ * The frequency lock loop derives a band-edge filter that covers the
+ * upper and lower bandwidths of a digitally-modulated signal. The
+ * bandwidth range is determined by the excess bandwidth (e.g.,
+ * rolloff factor) of the modulated signal. The placement in frequency
+ * of the band-edges is determined by the oversampling ratio (number
+ * of samples per symbol) and the excess bandwidth. The size of the
+ * filters should be fairly large so as to average over a number of
+ * symbols.
*
- * The FLL works by filtering the upper and lower band edges into x_u(t) and x_l(t), respectively.
- * These are combined to form cc(t) = x_u(t) + x_l(t) and ss(t) = x_u(t) - x_l(t). Combining
- * these to form the signal e(t) = Re{cc(t) \\times ss(t)^*} (where ^* is the complex conjugate)
- * provides an error signal at the DC term that is directly proportional to the carrier frequency.
- * We then make a second-order loop using the error signal that is the running average of e(t).
+ * The FLL works by filtering the upper and lower band edges into
+ * x_u(t) and x_l(t), respectively. These are combined to form cc(t)
+ * = x_u(t) + x_l(t) and ss(t) = x_u(t) - x_l(t). Combining these to
+ * form the signal e(t) = Re{cc(t) \\times ss(t)^*} (where ^* is the
+ * complex conjugate) provides an error signal at the DC term that is
+ * directly proportional to the carrier frequency. We then make a
+ * second-order loop using the error signal that is the running
+ * average of e(t).
*
- * In practice, the above equation can be simplified by just comparing the absolute value squared
- * of the output of both filters: abs(x_l(t))^2 - abs(x_u(t))^2 = norm(x_l(t)) - norm(x_u(t)).
+ * In practice, the above equation can be simplified by just comparing
+ * the absolute value squared of the output of both filters:
+ * abs(x_l(t))^2 - abs(x_u(t))^2 = norm(x_l(t)) - norm(x_u(t)).
*
- * In theory, the band-edge filter is the derivative of the matched filter in frequency,
- * (H_be(f) = \\frac{H(f)}{df}. In practice, this comes down to a quarter sine wave at the point
- * of the matched filter's rolloff (if it's a raised-cosine, the derivative of a cosine is a sine).
- * Extend this sine by another quarter wave to make a half wave around the band-edges is equivalent
- * in time to the sum of two sinc functions. The baseband filter fot the band edges is therefore
- * derived from this sum of sincs. The band edge filters are then just the baseband signal
- * modulated to the correct place in frequency. All of these calculations are done in the
+ * In theory, the band-edge filter is the derivative of the matched
+ * filter in frequency, (H_be(f) = \\frac{H(f)}{df}. In practice, this
+ * comes down to a quarter sine wave at the point of the matched
+ * filter's rolloff (if it's a raised-cosine, the derivative of a
+ * cosine is a sine). Extend this sine by another quarter wave to
+ * make a half wave around the band-edges is equivalent in time to the
+ * sum of two sinc functions. The baseband filter fot the band edges
+ * is therefore derived from this sum of sincs. The band edge filters
+ * are then just the baseband signal modulated to the correct place in
+ * frequency. All of these calculations are done in the
* 'design_filter' function.
*
- * Note: We use FIR filters here because the filters have to have a flat phase response over the
- * entire frequency range to allow their comparisons to be valid.
+ * Note: We use FIR filters here because the filters have to have a
+ * flat phase response over the entire frequency range to allow their
+ * comparisons to be valid.
*
- * It is very important that the band edge filters be the derivatives of the pulse shaping filter,
- * and that they be linear phase. Otherwise, the variance of the error will be very large.
+ * It is very important that the band edge filters be the derivatives
+ * of the pulse shaping filter, and that they be linear
+ * phase. Otherwise, the variance of the error will be very large.
*
*/
@@ -155,12 +167,12 @@ public:
* \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.
+ * 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().
+ * 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
*
@@ -172,8 +184,8 @@ public:
*
* Set's the loop filter's alpha gain parameter.
*
- * This value should really only be set by adjusting the loop bandwidth
- * and damping factor.
+ * This value should really only be set by adjusting the loop
+ * bandwidth and damping factor.
*
* \param alpha (float) new alpha gain
*
@@ -185,8 +197,8 @@ public:
*
* Set's the loop filter's beta gain parameter.
*
- * This value should really only be set by adjusting the loop bandwidth
- * and damping factor.
+ * This value should really only be set by adjusting the loop
+ * bandwidth and damping factor.
*
* \param beta (float) new beta gain
*
@@ -196,8 +208,9 @@ public:
/*!
* \brief Set the number of samples per symbol
*
- * Set's the number of samples per symbol the system should use. This value
- * is uesd to calculate the filter taps and will force a recalculation.
+ * Set's the number of samples per symbol the system should
+ * use. This value is uesd to calculate the filter taps and will
+ * force a recalculation.
*
* \param sps (float) new samples per symbol
*
@@ -207,13 +220,14 @@ public:
/*!
* \brief Set the rolloff factor of the shaping filter
*
- * This sets the rolloff factor that is used in the pulse shaping filter
- * and is used to calculate the filter taps. Changing this will force a
- * recalculation of the filter taps.
+ * This sets the rolloff factor that is used in the pulse shaping
+ * filter and is used to calculate the filter taps. Changing this
+ * will force a recalculation of the filter taps.
*
- * This should be the same value that is used in the transmitter's pulse
- * shaping filter. It must be between 0 and 1 and is usually between
- * 0.2 and 0.5 (where 0.22 and 0.35 are commonly used values).
+ * This should be the same value that is used in the transmitter's
+ * pulse shaping filter. It must be between 0 and 1 and is usually
+ * between 0.2 and 0.5 (where 0.22 and 0.35 are commonly used
+ * values).
*
* \param rolloff (float) new shaping filter rolloff factor [0,1]
*
@@ -223,13 +237,14 @@ public:
/*!
* \brief Set the number of taps in the filter
*
- * This sets the number of taps in the band-edge filters. Setting this will
- * force a recalculation of the filter taps.
+ * This sets the number of taps in the band-edge filters. Setting
+ * this will force a recalculation of the filter taps.
*
- * This should be about the same number of taps used in the transmitter's
- * shaping filter and also not very large. A large number of taps will
- * result in a large delay between input and frequency estimation, and
- * so will not be as accurate. Between 30 and 70 taps is usual.
+ * This should be about the same number of taps used in the
+ * transmitter's shaping filter and also not very large. A large
+ * number of taps will result in a large delay between input and
+ * frequency estimation, and so will not be as accurate. Between 30
+ * and 70 taps is usual.
*
* \param filter_size (float) number of taps in the filters
*
@@ -240,8 +255,8 @@ public:
* \brief Set the FLL's frequency.
*
* Set's the FLL'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.
+ * inner loop of the algorithm, it could be useful to manually
+ * initialize, set, or reset this under certain circumstances.
*
* \param freq (float) new frequency
*
@@ -252,8 +267,8 @@ public:
* \brief Set the FLL's phase.
*
* Set's the FLL'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.
+ * inner loop of the algorithm, it could be useful to manually
+ * initialize, set, or reset this under certain circumstances.
*
* \param phase (float) new phase
*