summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gr-channels/grc/channels_channel_model.xml18
-rw-r--r--gr-channels/grc/channels_channel_model2.xml18
-rw-r--r--gr-channels/include/gnuradio/channels/channel_model.h9
-rw-r--r--gr-channels/include/gnuradio/channels/channel_model2.h4
-rw-r--r--gr-channels/lib/channel_model2_impl.cc13
-rw-r--r--gr-channels/lib/channel_model2_impl.h3
-rw-r--r--gr-channels/lib/channel_model_impl.cc14
-rw-r--r--gr-channels/lib/channel_model_impl.h3
8 files changed, 71 insertions, 11 deletions
diff --git a/gr-channels/grc/channels_channel_model.xml b/gr-channels/grc/channels_channel_model.xml
index fa881a10b5..909301de94 100644
--- a/gr-channels/grc/channels_channel_model.xml
+++ b/gr-channels/grc/channels_channel_model.xml
@@ -15,6 +15,7 @@
epsilon=$epsilon,
taps=$taps,
noise_seed=$seed,
+ block_tags=$block_tags
)</make>
<callback>set_noise_voltage($noise_voltage)</callback>
<callback>set_frequency_offset($freq_offset)</callback>
@@ -50,6 +51,23 @@
<value>0</value>
<type>int</type>
</param>
+ <param>
+ <name>Block Tag Propagation</name>
+ <key>block_tags</key>
+ <value>False</value>
+ <type>enum</type>
+ <hide>$block_tags.hide_block</hide>
+ <option>
+ <name>Yes</name>
+ <key>True</key>
+ <opt>hide_block:</opt>
+ </option>
+ <option>
+ <name>No</name>
+ <key>False</key>
+ <opt>hide_block:part</opt>
+ </option>
+ </param>
<sink>
<name>in</name>
<type>complex</type>
diff --git a/gr-channels/grc/channels_channel_model2.xml b/gr-channels/grc/channels_channel_model2.xml
index e8162f53d4..85355a1029 100644
--- a/gr-channels/grc/channels_channel_model2.xml
+++ b/gr-channels/grc/channels_channel_model2.xml
@@ -14,6 +14,7 @@
epsilon=$epsilon,
taps=$taps,
noise_seed=$seed,
+ block_tags=$block_tags
)</make>
<callback>set_noise_voltage($noise_voltage)</callback>
<callback>set_taps($taps)</callback>
@@ -42,6 +43,23 @@
<value>0</value>
<type>int</type>
</param>
+ <param>
+ <name>Block Tag Propagation</name>
+ <key>block_tags</key>
+ <value>False</value>
+ <type>enum</type>
+ <hide>$block_tags.hide_block</hide>
+ <option>
+ <name>Yes</name>
+ <key>True</key>
+ <opt>hide_block:</opt>
+ </option>
+ <option>
+ <name>No</name>
+ <key>False</key>
+ <opt>hide_block:part</opt>
+ </option>
+ </param>
<sink>
<name>in</name>
<type>complex</type>
diff --git a/gr-channels/include/gnuradio/channels/channel_model.h b/gr-channels/include/gnuradio/channels/channel_model.h
index 8b533ac7da..6a1e4a08cb 100644
--- a/gr-channels/include/gnuradio/channels/channel_model.h
+++ b/gr-channels/include/gnuradio/channels/channel_model.h
@@ -43,7 +43,10 @@ namespace gr {
* the AWGN noise source.
*
* Multipath can be approximated in this model by using a FIR
- * filter representation of a multipath delay profile..
+ * filter representation of a multipath delay profile.
+ *
+ * To simulate a channel with time-variant channel, use a
+ * gr::channels::channel_model2.
*/
class CHANNELS_API channel_model : virtual public hier_block2
{
@@ -64,12 +67,14 @@ namespace gr {
* the transmitter and receiver. 1.0 is no difference.
* \param taps Taps of a FIR filter to emulate a multipath delay profile.
* \param noise_seed A random number generator seed for the noise source.
+ * \param block_tags If true, tags will not be able to propagate through this block.
*/
static sptr make(double noise_voltage=0.0,
double frequency_offset=0.0,
double epsilon=1.0,
const std::vector<gr_complex> &taps=std::vector<gr_complex>(1,1),
- double noise_seed=0);
+ double noise_seed=0,
+ bool block_tags=false);
virtual void set_noise_voltage(double noise_voltage) = 0;
virtual void set_frequency_offset(double frequency_offset) = 0;
diff --git a/gr-channels/include/gnuradio/channels/channel_model2.h b/gr-channels/include/gnuradio/channels/channel_model2.h
index 05084931ee..6c52f34d81 100644
--- a/gr-channels/include/gnuradio/channels/channel_model2.h
+++ b/gr-channels/include/gnuradio/channels/channel_model2.h
@@ -81,11 +81,13 @@ namespace gr {
* the transmitter and receiver. 1.0 is no difference.
* \param taps Taps of a FIR filter to emulate a multipath delay profile.
* \param noise_seed A random number generator seed for the noise source.
+ * \param block_tags If true, tags will not be able to propagate through this block.
*/
static sptr make(double noise_voltage=0.0,
double epsilon=1.0,
const std::vector<gr_complex> &taps=std::vector<gr_complex>(1,1),
- double noise_seed=0);
+ double noise_seed=0,
+ bool block_tags=false);
virtual void set_noise_voltage(double noise_voltage) = 0;
virtual void set_taps(const std::vector<gr_complex> &taps) = 0;
diff --git a/gr-channels/lib/channel_model2_impl.cc b/gr-channels/lib/channel_model2_impl.cc
index 13eb033def..7533871de2 100644
--- a/gr-channels/lib/channel_model2_impl.cc
+++ b/gr-channels/lib/channel_model2_impl.cc
@@ -33,20 +33,23 @@ namespace gr {
channel_model2::make(double noise_voltage,
double epsilon,
const std::vector<gr_complex> &taps,
- double noise_seed)
+ double noise_seed,
+ bool block_tags)
{
return gnuradio::get_initial_sptr
(new channel_model2_impl(noise_voltage,
epsilon,
taps,
- noise_seed));
+ noise_seed,
+ block_tags));
}
// Hierarchical block constructor
channel_model2_impl::channel_model2_impl(double noise_voltage,
double epsilon,
const std::vector<gr_complex> &taps,
- double noise_seed)
+ double noise_seed,
+ bool block_tags)
: hier_block2("channel_model2",
io_signature::make2(3, 3, sizeof(gr_complex), sizeof(float)),
io_signature::make(1, 1, sizeof(gr_complex)))
@@ -78,6 +81,10 @@ namespace gr {
connect(d_mixer_offset, 0, d_noise_adder, 1);
connect(d_noise, 0, d_noise_adder, 0);
connect(d_noise_adder, 0, self(), 0);
+
+ if (block_tags) {
+ d_timing_offset->set_tag_propagation_policy(gr::block::TPP_DONT);
+ }
}
channel_model2_impl::~channel_model2_impl()
diff --git a/gr-channels/lib/channel_model2_impl.h b/gr-channels/lib/channel_model2_impl.h
index db2a667f9c..3bf1adb44e 100644
--- a/gr-channels/lib/channel_model2_impl.h
+++ b/gr-channels/lib/channel_model2_impl.h
@@ -55,7 +55,8 @@ namespace gr {
channel_model2_impl(double noise_voltage,
double epsilon,
const std::vector<gr_complex> &taps,
- double noise_seed);
+ double noise_seed,
+ bool block_tags);
~channel_model2_impl();
diff --git a/gr-channels/lib/channel_model_impl.cc b/gr-channels/lib/channel_model_impl.cc
index b232f9b235..7db4e6aa5c 100644
--- a/gr-channels/lib/channel_model_impl.cc
+++ b/gr-channels/lib/channel_model_impl.cc
@@ -32,14 +32,16 @@ namespace gr {
double frequency_offset,
double epsilon,
const std::vector<gr_complex> &taps,
- double noise_seed)
+ double noise_seed,
+ bool block_tags)
{
return gnuradio::get_initial_sptr
(new channel_model_impl(noise_voltage,
frequency_offset,
epsilon,
taps,
- noise_seed));
+ noise_seed,
+ block_tags));
}
// Hierarchical block constructor
@@ -47,7 +49,9 @@ namespace gr {
double frequency_offset,
double epsilon,
const std::vector<gr_complex> &taps,
- double noise_seed)
+ double noise_seed,
+ bool block_tags
+ )
: hier_block2("channel_model",
io_signature::make(1, 1, sizeof(gr_complex)),
io_signature::make(1, 1, sizeof(gr_complex)))
@@ -75,6 +79,10 @@ namespace gr {
connect(d_mixer_offset, 0, d_noise_adder, 1);
connect(d_noise, 0, d_noise_adder, 0);
connect(d_noise_adder, 0, self(), 0);
+
+ if (block_tags) {
+ d_timing_offset->set_tag_propagation_policy(gr::block::TPP_DONT);
+ }
}
channel_model_impl::~channel_model_impl()
diff --git a/gr-channels/lib/channel_model_impl.h b/gr-channels/lib/channel_model_impl.h
index da00e98da2..3faf6c3bbe 100644
--- a/gr-channels/lib/channel_model_impl.h
+++ b/gr-channels/lib/channel_model_impl.h
@@ -54,7 +54,8 @@ namespace gr {
double frequency_offset,
double epsilon,
const std::vector<gr_complex> &taps,
- double noise_seed);
+ double noise_seed,
+ bool block_tags);
~channel_model_impl();