19 #include <uhd/utils/thread.hpp> 20 #include <boost/program_options.hpp> 21 #include <boost/format.hpp> 22 #include <boost/thread.hpp> 31 rf::rf(
double sample_rate,
double center_frequency,
double gain,
double bandwidth,
32 const string &subdev,
const string &antenna_mode,
const string &ref,
const string &device_args) {
46 uhd::set_thread_priority_safe();
48 this->sample_rate = sample_rate;
49 this->center_frequency = center_frequency;
51 this->bandwidth = bandwidth;
52 this->device_args = device_args;
53 this->subdev = subdev;
54 this->antenna_mode = antenna_mode;
57 uhd::usrp::multi_usrp::sptr usrp = uhd::usrp::multi_usrp::make(device_args);
59 this->usrp->set_clock_source(this->ref);
60 this->usrp->set_rx_subdev_spec(this->subdev );
61 this->usrp->set_rx_rate(this->sample_rate);
62 uhd::tune_request_t tune_request(this->center_frequency);
63 this->usrp->set_rx_freq(tune_request);
64 this->usrp->set_rx_gain(this->gain);
65 this->usrp->set_rx_bandwidth(this->bandwidth);
66 this->usrp->set_rx_antenna(this->antenna_mode);
74 return usrp->get_rx_rate();
91 size_t num_samples = buff->size();
92 uhd::set_thread_priority_safe();
93 uhd::stream_args_t stream_args(
"fc32",
"sc16");
94 uhd::rx_streamer::sptr rx_stream = usrp->get_rx_stream(stream_args);
95 uhd::stream_cmd_t stream_cmd(uhd::stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_DONE);
96 stream_cmd.num_samps = size_t(num_samples);
97 stream_cmd.stream_now =
true;
98 rx_stream->issue_stream_cmd(stream_cmd);
100 uhd::rx_metadata_t md;
102 size_t total_rcvd_samples = 0;
104 while (total_rcvd_samples<num_samples){
105 size_t num_rx_samps = rx_stream->recv(&buff->front(), buff->size() - total_rcvd_samples, md, 10.0,
false);
106 if (md.error_code == uhd::rx_metadata_t::ERROR_CODE_TIMEOUT) {
107 cout << boost::format(
"Timeout while streaming") << endl;
110 if (md.error_code == uhd::rx_metadata_t::ERROR_CODE_OVERFLOW) {
111 cout << boost::format(
"Overflow\n") << endl;
115 if (md.error_code != uhd::rx_metadata_t::ERROR_CODE_NONE) {
116 string error = str(boost::format(
"Receiver error: %s") % md.strerror());
118 total_rcvd_samples += num_rx_samps;
120 uhd::time_spec_t time_spec = md.time_spec;
121 time_first_sample = time_spec.get_full_secs();
122 time_first_sample += time_spec.get_frac_secs();
132 this->usrp->set_rx_rate(rate);
133 this->sample_rate = rate;
134 usrp->set_rx_bandwidth(rate);
138 return this->center_frequency;
147 uhd::tune_request_t tune_request(freq);
148 this->usrp->set_rx_freq(tune_request);
149 this->center_frequency = freq;
160 this->usrp->set_rx_gain(this->gain);
double getSampleRate() const
void setSampleRate(double rate)
void get_samples(vector< complex< float >> *buff, double &time_first_sample)
void setCenterFrequency(double freq)
rf(double sample_rate, double center_frequency, double gain, double bandwidth, const string &subdev, const string &antenna_mode, const string &ref, const string &device_args)
void setGain(double gain)
double getCenterFrequency()