aboutsummaryrefslogtreecommitdiffstats
path: root/lib/file
diff options
context:
space:
mode:
authorDimitri Stolnikov <horiz0n@gmx.net>2013-10-20 18:39:17 +0200
committerDimitri Stolnikov <horiz0n@gmx.net>2013-10-20 18:39:17 +0200
commit60120746aa72a416317a14902323b1e40e567cb3 (patch)
tree1623ce63364c41f28692d9fa6d7ea51df944e0ce /lib/file
parentc904d26eb441386cd4a8978b650fdddc075ea6a8 (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.cc29
-rw-r--r--lib/file/file_source_c.h3
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;
};