diff options
author | Dimitri Stolnikov <horiz0n@gmx.net> | 2013-10-20 18:39:17 +0200 |
---|---|---|
committer | Dimitri Stolnikov <horiz0n@gmx.net> | 2013-10-20 18:39:17 +0200 |
commit | 60120746aa72a416317a14902323b1e40e567cb3 (patch) | |
tree | 1623ce63364c41f28692d9fa6d7ea51df944e0ce /lib/file | |
parent | c904d26eb441386cd4a8978b650fdddc075ea6a8 (diff) |
file: allow changing the sample rate when throttle=true
this is dangerous from signal processing perspective and should be used
with caution.
Diffstat (limited to 'lib/file')
-rw-r--r-- | lib/file/file_source_c.cc | 29 | ||||
-rw-r--r-- | lib/file/file_source_c.h | 3 |
2 files changed, 24 insertions, 8 deletions
diff --git a/lib/file/file_source_c.cc b/lib/file/file_source_c.cc index 2db1727..32c6b9f 100644 --- a/lib/file/file_source_c.cc +++ b/lib/file/file_source_c.cc @@ -26,7 +26,6 @@ #include <gnuradio/io_signature.h> #include <gnuradio/blocks/file_source.h> -#include <gnuradio/blocks/throttle.h> #include "file_source_c.h" @@ -73,19 +72,21 @@ file_source_c::file_source_c(const std::string &args) : if (_freq < 0) throw std::runtime_error("Parameter 'freq' may not be negative."); - if (0 == _rate) + if (0 == _rate && throttle) throw std::runtime_error("Parameter 'rate' is missing in arguments."); + _file_rate = _rate; + gr::blocks::file_source::sptr src = \ gr::blocks::file_source::make( sizeof(gr_complex), filename.c_str(), repeat ); - if (throttle) { - gr::blocks::throttle::sptr throttle = gr::blocks::throttle::make( sizeof(gr_complex), _rate ); + _throttle = gr::blocks::throttle::make( sizeof(gr_complex), _file_rate ); - connect( src, 0, throttle, 0 ); - connect( throttle, 0, self(), 0 ); + if (throttle) { + connect( src, 0, _throttle, 0 ); + connect( _throttle, 0, self(), 0 ); } else { connect( src, 0, self(), 0 ); } @@ -104,7 +105,8 @@ std::vector<std::string> file_source_c::get_devices() { std::vector<std::string> devices; - std::string args = "file='/path/to/your/file',rate=1e6,freq=100e6,repeat=true,throttle=true"; + std::string args = "file='/path/to/your/file'"; + args += ",rate=1e6,freq=100e6,repeat=true,throttle=true"; args += ",label='Complex Sampled (IQ) File'"; devices.push_back( args ); @@ -120,13 +122,24 @@ osmosdr::meta_range_t file_source_c::get_sample_rates( void ) { osmosdr::meta_range_t range; - range += osmosdr::range_t( get_sample_rate() ); + range += osmosdr::range_t( _file_rate ); /* always return file's original rate */ return range; } double file_source_c::set_sample_rate( double rate ) { + if ( _file_rate != rate ) + { + std::cerr << boost::format("WARNING: Overriding original sample rate of %g with %g") + % _file_rate % rate + << std::endl; + } + + _throttle->set_sample_rate( rate ); + + _rate = rate; + return get_sample_rate(); } diff --git a/lib/file/file_source_c.h b/lib/file/file_source_c.h index 22e1650..298ecdc 100644 --- a/lib/file/file_source_c.h +++ b/lib/file/file_source_c.h @@ -21,6 +21,7 @@ #define FILE_SOURCE_C_H #include <gnuradio/hier_block2.h> +#include <gnuradio/blocks/throttle.h> #include "source_iface.h" @@ -71,6 +72,8 @@ public: std::string get_antenna( size_t chan = 0 ); private: + gr::blocks::throttle::sptr _throttle; + double _file_rate; double _freq, _rate; }; |