diff options
author | Tim O'Shea <tim.oshea753@gmail.com> | 2013-11-08 18:50:08 -0500 |
---|---|---|
committer | Tim O'Shea <tim.oshea753@gmail.com> | 2013-11-08 18:50:08 -0500 |
commit | 23e834450ad9e052662d4a3fd8ea87acd775c5ec (patch) | |
tree | 7a26e109d058fd4f71bcb4c169701beb8bffdce2 | |
parent | 917fb98fdd6f706a58dae515fc0e28fa5ac3b906 (diff) |
channels: setting up callbacks for most dynamic channel model parameters in GRC
-rw-r--r-- | gr-channels/grc/channels_cfo_model.xml | 3 | ||||
-rw-r--r-- | gr-channels/grc/channels_dynamic_channel_model.xml | 9 | ||||
-rw-r--r-- | gr-channels/grc/channels_sro_model.xml | 3 | ||||
-rw-r--r-- | gr-channels/include/gnuradio/channels/cfo_model.h | 8 | ||||
-rw-r--r-- | gr-channels/include/gnuradio/channels/dynamic_channel_model.h | 18 | ||||
-rw-r--r-- | gr-channels/include/gnuradio/channels/sro_model.h | 8 | ||||
-rw-r--r-- | gr-channels/lib/cfo_model_impl.cc | 5 | ||||
-rw-r--r-- | gr-channels/lib/cfo_model_impl.h | 10 | ||||
-rw-r--r-- | gr-channels/lib/dynamic_channel_model_impl.h | 21 | ||||
-rw-r--r-- | gr-channels/lib/sro_model_impl.cc | 5 | ||||
-rw-r--r-- | gr-channels/lib/sro_model_impl.h | 10 |
11 files changed, 95 insertions, 5 deletions
diff --git a/gr-channels/grc/channels_cfo_model.xml b/gr-channels/grc/channels_cfo_model.xml index 188d89c52d..7d44f7fe87 100644 --- a/gr-channels/grc/channels_cfo_model.xml +++ b/gr-channels/grc/channels_cfo_model.xml @@ -14,6 +14,9 @@ $maxdev, $seed )</make> + <callback>set_std_dev($stdev)</callback> + <callback>set_max_dev($maxdev)</callback> + <callback>set_samp_rate($srate)</callback> <param> <name>Sample Rate Hz</name> <key>srate</key> diff --git a/gr-channels/grc/channels_dynamic_channel_model.xml b/gr-channels/grc/channels_dynamic_channel_model.xml index b54256c864..5735232537 100644 --- a/gr-channels/grc/channels_dynamic_channel_model.xml +++ b/gr-channels/grc/channels_dynamic_channel_model.xml @@ -9,7 +9,14 @@ <key>channels_dynamic_channel_model</key> <import>from gnuradio import channels</import> <make>channels.dynamic_channel_model( $samp_rate, $sro_stdev, $sro_maxdev, $cfo_stdev, $cfo_maxdev, $N, $fD, $LOS, $K, $delays, $mags, $ntaps, $noise_amp, $seed )</make> - <callback>set_fDTs($fDTs)</callback> + + <callback>set_samp_rate($samp_rate)</callback> + <callback>set_sro_dev_std($sro_stdev)</callback> + <callback>set_sro_dev_max($sro_maxdev)</callback> + <callback>set_cfo_dev_std($cfo_stdev)</callback> + <callback>set_cfo_dev_max($cfo_maxdev)</callback> + <callback>set_noise_amp($noise_amp)</callback> + <callback>set_doppler_freq($fD)</callback> <callback>set_K($K)</callback> <param> diff --git a/gr-channels/grc/channels_sro_model.xml b/gr-channels/grc/channels_sro_model.xml index 64d06899e6..63752aaefd 100644 --- a/gr-channels/grc/channels_sro_model.xml +++ b/gr-channels/grc/channels_sro_model.xml @@ -14,6 +14,9 @@ $maxdev, $seed )</make> + <callback>set_std_dev($stdev)</callback> + <callback>set_max_dev($maxdev)</callback> + <callback>set_samp_rate($srate)</callback> <param> <name>Sample Rate Hz</name> <key>srate</key> diff --git a/gr-channels/include/gnuradio/channels/cfo_model.h b/gr-channels/include/gnuradio/channels/cfo_model.h index bb23a8e9f2..ef889f0cee 100644 --- a/gr-channels/include/gnuradio/channels/cfo_model.h +++ b/gr-channels/include/gnuradio/channels/cfo_model.h @@ -61,6 +61,14 @@ namespace gr { double max_dev_hz, double noise_seed=0); + virtual void set_std_dev(double _dev) = 0; + virtual void set_max_dev(double _dev) = 0; + virtual void set_samp_rate(double _rate) = 0; + + virtual double std_dev() const = 0; + virtual double max_dev() const = 0; + virtual double samp_rate() const = 0; + }; } /* namespace channels */ diff --git a/gr-channels/include/gnuradio/channels/dynamic_channel_model.h b/gr-channels/include/gnuradio/channels/dynamic_channel_model.h index 7b23a4144d..0ac45fd0d4 100644 --- a/gr-channels/include/gnuradio/channels/dynamic_channel_model.h +++ b/gr-channels/include/gnuradio/channels/dynamic_channel_model.h @@ -88,6 +88,24 @@ namespace gr { double noise_amp, double noise_seed ); + virtual double samp_rate() const = 0; + virtual double sro_dev_std() const = 0; + virtual double sro_dev_max() const = 0; + virtual double cfo_dev_std() const = 0; + virtual double cfo_dev_max() const = 0; + virtual double noise_amp() const = 0; + virtual double doppler_freq() const = 0; + virtual double K() const = 0; + + virtual void set_samp_rate(double) = 0; + virtual void set_sro_dev_std(double) = 0; + virtual void set_sro_dev_max(double) = 0; + virtual void set_cfo_dev_std(double) = 0; + virtual void set_cfo_dev_max(double) = 0; + virtual void set_noise_amp(double) = 0; + virtual void set_doppler_freq(double) = 0; + virtual void set_K(double) = 0; + }; } /* namespace channels */ diff --git a/gr-channels/include/gnuradio/channels/sro_model.h b/gr-channels/include/gnuradio/channels/sro_model.h index 7eadc5a796..f747da0c36 100644 --- a/gr-channels/include/gnuradio/channels/sro_model.h +++ b/gr-channels/include/gnuradio/channels/sro_model.h @@ -59,6 +59,14 @@ namespace gr { double max_dev_hz, double noise_seed=0); + virtual void set_std_dev(double _dev) = 0; + virtual void set_max_dev(double _dev) = 0; + virtual void set_samp_rate(double _rate) = 0; + + virtual double std_dev() const = 0; + virtual double max_dev() const = 0; + virtual double samp_rate() const = 0; + }; } /* namespace channels */ diff --git a/gr-channels/lib/cfo_model_impl.cc b/gr-channels/lib/cfo_model_impl.cc index dc4f829dc0..09a4d9fb99 100644 --- a/gr-channels/lib/cfo_model_impl.cc +++ b/gr-channels/lib/cfo_model_impl.cc @@ -54,7 +54,8 @@ namespace gr { d_table(8*1024), d_noise(gr::analog::fastnoise_source_f::make(analog::GR_GAUSSIAN, std_dev_hz, noise_seed)), d_cfo(0), - d_angle(0) + d_angle(0), + d_noise_seed(noise_seed) { } @@ -68,7 +69,7 @@ namespace gr { const gr_complex* in = (const gr_complex*) input_items[0]; gr_complex* out = (gr_complex*) output_items[0]; - for(size_t i=0; i<noutput_items; i++){ + for(int i=0; i<noutput_items; i++){ // update and bound cfo // we multiply by a random {1,-1} to remove any sign // bias that may exist in our random sample pool diff --git a/gr-channels/lib/cfo_model_impl.h b/gr-channels/lib/cfo_model_impl.h index 672de6308f..ae51c340d9 100644 --- a/gr-channels/lib/cfo_model_impl.h +++ b/gr-channels/lib/cfo_model_impl.h @@ -44,6 +44,7 @@ namespace gr { gr::analog::fastnoise_source_f::sptr d_noise; double d_cfo; float d_angle; + double d_noise_seed; public: cfo_model_impl( @@ -55,6 +56,15 @@ namespace gr { ~cfo_model_impl(); void setup_rpc(); int work(int, gr_vector_const_void_star&, gr_vector_void_star&); + + void set_std_dev(double _dev){ d_std_dev_hz = _dev; d_noise = gr::analog::fastnoise_source_f::make(analog::GR_GAUSSIAN, d_std_dev_hz, d_noise_seed); } + void set_max_dev(double _dev){ d_max_dev_hz = _dev; } + void set_samp_rate(double _rate){ d_samp_rate = _rate; } + + double std_dev() const { return d_std_dev_hz; } + double max_dev() const { return d_max_dev_hz; } + double samp_rate() const { return d_samp_rate; } + }; } /* namespace channels */ diff --git a/gr-channels/lib/dynamic_channel_model_impl.h b/gr-channels/lib/dynamic_channel_model_impl.h index b2651d28eb..2eabac0be0 100644 --- a/gr-channels/lib/dynamic_channel_model_impl.h +++ b/gr-channels/lib/dynamic_channel_model_impl.h @@ -68,6 +68,27 @@ namespace gr { void setup_rpc(); + double samp_rate() const { return d_sro_model->samp_rate(); } + double sro_dev_std() const { return d_sro_model->std_dev(); } + double sro_dev_max() const { return d_sro_model->max_dev(); } + double cfo_dev_std() const { return d_cfo_model->std_dev(); } + double cfo_dev_max() const { return d_cfo_model->max_dev(); } + double noise_amp() const { return d_noise->amplitude(); } + double doppler_freq() const { return d_fader->fDTs()*samp_rate(); } + double K() const { return d_fader->K(); } + + void set_samp_rate(double sr) { + d_fader->set_fDTs( doppler_freq()/samp_rate() ); + d_sro_model->set_samp_rate(sr); + d_cfo_model->set_samp_rate(sr); } + void set_sro_dev_std(double dev) { d_sro_model->set_max_dev(dev); } + void set_sro_dev_max(double dev) { d_sro_model->set_max_dev(dev); } + void set_cfo_dev_std(double dev) { d_cfo_model->set_std_dev(dev); } + void set_cfo_dev_max(double dev) { d_cfo_model->set_max_dev(dev); } + void set_noise_amp(double amp) { d_noise->set_amplitude(amp); } + void set_doppler_freq(double f){ d_fader->set_fDTs(f/samp_rate()); } + void set_K(double K){ d_fader->set_K(K); } + }; } /* namespace channels */ diff --git a/gr-channels/lib/sro_model_impl.cc b/gr-channels/lib/sro_model_impl.cc index 508fa4e2a8..9ae2b945a7 100644 --- a/gr-channels/lib/sro_model_impl.cc +++ b/gr-channels/lib/sro_model_impl.cc @@ -51,9 +51,10 @@ namespace gr { io_signature::make(1, 1, sizeof(gr_complex)), io_signature::make(1, 1, sizeof(gr_complex))), d_mu (0.0), d_mu_inc (1.0), d_sro(0.0), d_samp_rate(sample_rate_hz), - d_max_dev_hz(max_dev_hz), + d_max_dev_hz(max_dev_hz), d_std_dev_hz(std_dev_hz), d_interp(new gr::filter::mmse_fir_interpolator_cc()), - d_noise(gr::analog::fastnoise_source_f::make(analog::GR_GAUSSIAN, std_dev_hz, noise_seed)) + d_noise(gr::analog::fastnoise_source_f::make(analog::GR_GAUSSIAN, std_dev_hz, noise_seed)), + d_noise_seed(noise_seed) { //set_relative_rate(1.0 / interp_ratio); set_relative_rate(1.0); diff --git a/gr-channels/lib/sro_model_impl.h b/gr-channels/lib/sro_model_impl.h index 7c72dac6a6..dda6df5cd7 100644 --- a/gr-channels/lib/sro_model_impl.h +++ b/gr-channels/lib/sro_model_impl.h @@ -40,8 +40,10 @@ namespace gr { float d_sro; float d_samp_rate; float d_max_dev_hz; + float d_std_dev_hz; gr::filter::mmse_fir_interpolator_cc *d_interp; gr::analog::fastnoise_source_f::sptr d_noise; + double d_noise_seed; public: sro_model_impl( @@ -64,6 +66,14 @@ namespace gr { void set_interp_ratio(float interp_ratio); void setup_rpc(); + void set_std_dev(double _dev){ d_std_dev_hz = _dev; d_noise = gr::analog::fastnoise_source_f::make(analog::GR_GAUSSIAN, _dev, d_noise_seed); } + void set_max_dev(double _dev){ d_max_dev_hz = _dev; } + void set_samp_rate(double _rate){ d_samp_rate = _rate; } + + double std_dev() const { return d_std_dev_hz; } + double max_dev() const { return d_max_dev_hz; } + double samp_rate() const { return d_samp_rate; } + }; } /* namespace filter */ |