diff options
-rw-r--r-- | gr-channels/grc/channels_channel_model.xml | 18 | ||||
-rw-r--r-- | gr-channels/grc/channels_channel_model2.xml | 18 | ||||
-rw-r--r-- | gr-channels/include/gnuradio/channels/channel_model.h | 9 | ||||
-rw-r--r-- | gr-channels/include/gnuradio/channels/channel_model2.h | 4 | ||||
-rw-r--r-- | gr-channels/lib/channel_model2_impl.cc | 13 | ||||
-rw-r--r-- | gr-channels/lib/channel_model2_impl.h | 3 | ||||
-rw-r--r-- | gr-channels/lib/channel_model_impl.cc | 14 | ||||
-rw-r--r-- | gr-channels/lib/channel_model_impl.h | 3 |
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(); |