summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim O'Shea <tim.oshea753@gmail.com>2013-11-08 18:50:08 -0500
committerTim O'Shea <tim.oshea753@gmail.com>2013-11-08 18:50:08 -0500
commit23e834450ad9e052662d4a3fd8ea87acd775c5ec (patch)
tree7a26e109d058fd4f71bcb4c169701beb8bffdce2
parent917fb98fdd6f706a58dae515fc0e28fa5ac3b906 (diff)
channels: setting up callbacks for most dynamic channel model parameters in GRC
-rw-r--r--gr-channels/grc/channels_cfo_model.xml3
-rw-r--r--gr-channels/grc/channels_dynamic_channel_model.xml9
-rw-r--r--gr-channels/grc/channels_sro_model.xml3
-rw-r--r--gr-channels/include/gnuradio/channels/cfo_model.h8
-rw-r--r--gr-channels/include/gnuradio/channels/dynamic_channel_model.h18
-rw-r--r--gr-channels/include/gnuradio/channels/sro_model.h8
-rw-r--r--gr-channels/lib/cfo_model_impl.cc5
-rw-r--r--gr-channels/lib/cfo_model_impl.h10
-rw-r--r--gr-channels/lib/dynamic_channel_model_impl.h21
-rw-r--r--gr-channels/lib/sro_model_impl.cc5
-rw-r--r--gr-channels/lib/sro_model_impl.h10
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 */