#define M_TWOPI (2*M_PI)
-gr_fll_band_edge_cc_sptr gr_make_fll_band_edge_cc (const std::vector<gr_complex> &taps)
+gr_fll_band_edge_cc_sptr gr_make_fll_band_edge_cc (float alpha, float beta,
+ const std::vector<gr_complex> &taps)
{
- return gr_fll_band_edge_cc_sptr (new gr_fll_band_edge_cc (taps));
+ return gr_fll_band_edge_cc_sptr (new gr_fll_band_edge_cc (alpha, beta,
+ taps));
}
-gr_fll_band_edge_cc::gr_fll_band_edge_cc (const std::vector<gr_complex> &taps)
+gr_fll_band_edge_cc::gr_fll_band_edge_cc (float alpha, float beta,
+ const std::vector<gr_complex> &taps)
: gr_sync_block ("fll_band_edge_cc",
gr_make_io_signature (1, 1, sizeof(gr_complex)),
gr_make_io_signature (1, 1, sizeof(gr_complex))),
- d_updated (false)
+ d_alpha(alpha), d_beta(beta), d_updated (false)
{
- d_alpha = 0.01;
- d_beta = 0.25*d_alpha*d_alpha;
+ // base this on the number of samples per symbol
d_max_freq = M_TWOPI * 0.25;
d_min_freq = M_TWOPI * -0.5;
out_upper = norm(d_filter_upper->filter(&out[i]));
out_lower = norm(d_filter_lower->filter(&out[i]));
- error = 0.1*(out_lower - out_upper);
- printf("error: %f\n", out_upper);
+ error = out_lower - out_upper;
d_freq = d_freq + d_beta * error;
d_phase = d_phase + d_freq + d_alpha * error;
class gr_fll_band_edge_cc;
typedef boost::shared_ptr<gr_fll_band_edge_cc> gr_fll_band_edge_cc_sptr;
-gr_fll_band_edge_cc_sptr gr_make_fll_band_edge_cc (const std::vector<gr_complex> &taps);
+gr_fll_band_edge_cc_sptr gr_make_fll_band_edge_cc (float alpha, float beta,
+ const std::vector<gr_complex> &taps);
class gr_fir_ccc;
class gri_fft_complex;
* Build the FLL
* \param taps (vector/list of gr_complex) The taps of the band-edge filter
*/
- friend gr_fll_band_edge_cc_sptr gr_make_fll_band_edge_cc (const std::vector<gr_complex> &taps);
+ friend gr_fll_band_edge_cc_sptr gr_make_fll_band_edge_cc (float alpha, float beta,
+ const std::vector<gr_complex> &taps);
float d_alpha;
float d_beta;
* Build the FLL
* \param taps (vector/list of gr_complex) The taps of the band-edge filter
*/
- gr_fll_band_edge_cc(const std::vector<gr_complex> &taps);
+ gr_fll_band_edge_cc(float alpha, float beta,
+ const std::vector<gr_complex> &taps);
public:
~gr_fll_band_edge_cc ();
GR_SWIG_BLOCK_MAGIC(gr,fll_band_edge_cc);
-gr_fll_band_edge_cc_sptr gr_make_fll_band_edge_cc (const std::vector<gr_complex> &taps);
+gr_fll_band_edge_cc_sptr gr_make_fll_band_edge_cc (float alpha, float beta,
+ const std::vector<gr_complex> &taps);
class gr_fll_band_edge_cc : public gr_sync_block
{
private:
- gr_fll_band_edge_cc (const std::vector<gr_complex> &taps);
+ gr_fll_band_edge_cc (float alpha, float beta,
+ const std::vector<gr_complex> &taps);
public:
~gr_fll_band_edge_cc ();
<name>FLL Band-Edge</name>
<key>gr_fll_band_edge_cc</key>
<import>from gnuradio import gr</import>
- <make>gr.fll_band_edge_cc($taps)</make>
+ <make>gr.fll_band_edge_cc($alpha, $beta, $taps)</make>
<callback>set_taps($taps)</callback>
<param>
</option>
</param>
+ <param>
+ <name>Alpha</name>
+ <key>alpha</key>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Beta</name>
+ <key>beta</key>
+ <type>real</type>
+ </param>
<param>
<name>Taps</name>
<key>taps</key>