diff options
author | Jon Szymaniak <jon.szymaniak@gmail.com> | 2015-02-03 15:04:10 -0500 |
---|---|---|
committer | Jon Szymaniak <jon.szymaniak@gmail.com> | 2015-02-25 19:48:30 -0500 |
commit | 0b8122391963e423ca4b291a49431ffc401cafd1 (patch) | |
tree | 492d59547165014a28a676db1d27e87b97a245dc | |
parent | 47320cf0dfdd6a4294d60ec3b704dd3a0f33023b (diff) |
analog: Added frequency accessor and modifier to CTCSS squelch
-rw-r--r-- | gr-analog/grc/analog_ctcss_squelch_ff.xml | 1 | ||||
-rw-r--r-- | gr-analog/include/gnuradio/analog/ctcss_squelch_ff.h | 2 | ||||
-rw-r--r-- | gr-analog/lib/ctcss_squelch_ff_impl.cc | 22 | ||||
-rw-r--r-- | gr-analog/lib/ctcss_squelch_ff_impl.h | 10 |
4 files changed, 30 insertions, 5 deletions
diff --git a/gr-analog/grc/analog_ctcss_squelch_ff.xml b/gr-analog/grc/analog_ctcss_squelch_ff.xml index 9585835e21..7a2248aa7e 100644 --- a/gr-analog/grc/analog_ctcss_squelch_ff.xml +++ b/gr-analog/grc/analog_ctcss_squelch_ff.xml @@ -32,6 +32,7 @@ <import>from gnuradio import analog</import> <make>analog.ctcss_squelch_ff($rate, $freq, $level, $len, $ramp, $gate)</make> <callback>set_level($level)</callback> + <callback>set_frequency($freq)</callback> <param> <name>Sampling Rate (Hz)</name> <key>rate</key> diff --git a/gr-analog/include/gnuradio/analog/ctcss_squelch_ff.h b/gr-analog/include/gnuradio/analog/ctcss_squelch_ff.h index 6d1b5291d0..2655c845bb 100644 --- a/gr-analog/include/gnuradio/analog/ctcss_squelch_ff.h +++ b/gr-analog/include/gnuradio/analog/ctcss_squelch_ff.h @@ -63,6 +63,8 @@ namespace gr { virtual float level() const = 0; virtual void set_level(float level) = 0; virtual int len() const = 0; + virtual float frequency() const = 0; + virtual void set_frequency(float frequency) = 0; virtual int ramp() const = 0; virtual void set_ramp(int ramp) = 0; diff --git a/gr-analog/lib/ctcss_squelch_ff_impl.cc b/gr-analog/lib/ctcss_squelch_ff_impl.cc index a82ca4646e..fb34485178 100644 --- a/gr-analog/lib/ctcss_squelch_ff_impl.cc +++ b/gr-analog/lib/ctcss_squelch_ff_impl.cc @@ -74,6 +74,17 @@ namespace gr { f_r = ctcss_tones[i+1]; } + void + ctcss_squelch_ff_impl::update_fft_params() + { + float f_l, f_r; + compute_freqs(d_freq, f_l, f_r); + + d_goertzel_l->set_params(d_rate, d_len, f_l); + d_goertzel_c->set_params(d_rate, d_len, d_freq); + d_goertzel_r->set_params(d_rate, d_len, f_r); + } + ctcss_squelch_ff_impl::ctcss_squelch_ff_impl(int rate, float freq, float level, int len, int ramp, bool gate) : block("ctcss_squelch_ff", @@ -83,19 +94,20 @@ namespace gr { { d_freq = freq; d_level = level; + d_rate = rate; // Default is 100 ms detection time if(len == 0) - d_len = (int)(rate/10.0); + d_len = (int)(d_rate/10.0); else - d_len = len; + d_len = len; float f_l, f_r; compute_freqs(d_freq, f_l, f_r); - d_goertzel_l = new fft::goertzel(rate, d_len, f_l); - d_goertzel_c = new fft::goertzel(rate, d_len, freq); - d_goertzel_r = new fft::goertzel(rate, d_len, f_r); + d_goertzel_l = new fft::goertzel(d_rate, d_len, f_l); + d_goertzel_c = new fft::goertzel(d_rate, d_len, freq); + d_goertzel_r = new fft::goertzel(d_rate, d_len, f_r); d_mute = true; } diff --git a/gr-analog/lib/ctcss_squelch_ff_impl.h b/gr-analog/lib/ctcss_squelch_ff_impl.h index 6a137e0595..67ce66c4ba 100644 --- a/gr-analog/lib/ctcss_squelch_ff_impl.h +++ b/gr-analog/lib/ctcss_squelch_ff_impl.h @@ -36,6 +36,7 @@ namespace gr { float d_freq; float d_level; int d_len; + int d_rate; bool d_mute; fft::goertzel *d_goertzel_l; @@ -45,6 +46,8 @@ namespace gr { static int find_tone(float freq); static void compute_freqs(const float &freq, float &f_l, float &f_r); + void update_fft_params(); + protected: virtual void update_state(const float &in); virtual bool mute() const { return d_mute; } @@ -58,6 +61,13 @@ namespace gr { float level() const { return d_level; } void set_level(float level) { d_level = level; } int len() const { return d_len; } + float frequency() const { return d_freq; } + + void set_frequency(float frequency) + { + d_freq = frequency; + update_fft_params(); + } int ramp() const { return squelch_base_ff_impl::ramp(); } void set_ramp(int ramp) { squelch_base_ff_impl::set_ramp(ramp); } |