Hi,
maybe your recv runs frequently into timeout. It is the 4th parameter
which is optional and set to a default value of 0.1 seconds.
Best regards,
Fabian
Am 04.09.2018 um 16:56 schrieb Jeremy Foran via USRP-users:
Hello All,
I'm new to the community and excited to be a part of it.
I am looking to capture the full FM spectrum for a couple of seconds,
88Mhz to 108Mhz, using the examples supplied by Ettus. I seem to be
getting more zeros in the results then I would have expected. About
half of the complex numbers will have a zero in it. Is that normal? Am
I doing something wrong? Code below:
#include <uhd/types/tune_request.hpp>
#include <uhd/utils/thread.hpp>
#include <uhd/utils/safe_main.hpp>
#include <uhd/usrp/multi_usrp.hpp>
#include <uhd/transport/udp_simple.hpp>
#include <uhd/exception.hpp>
#include <boost/program_options.hpp>
#include <boost/format.hpp>
#include <iostream>
#include <complex>
#include <chrono>
#include <thread>
using namespace std::chrono;
static bool stop_signal_called = false;
void sig_int_handler(int){stop_signal_called = true;}
namespace po = boost::program_options;
using namespace std;
int UHD_SAFE_MAIN(int argc, char *argv[]){
uhd::set_thread_priority_safe();
//variables to be set by po
std::string args, file, ant, subdev, ref;
size_t total_num_samps;
double rate, freq, gain, bw, duration;
std::string addr, port;
uhd::usrp::multi_usrp::sptr usrp = uhd::usrp::multi_usrp::make(args);
//Lock mboard clocks
usrp->set_clock_source("internal");
freq = 98e6;
gain = 2;
rate = 1e6;
bw = 20e6;
duration= 8;
//set the rx sample rate
usrp->set_rx_rate(rate);
uhd::tune_request_t tune_request(freq);
usrp->set_rx_freq(tune_request);
//set the rx rf gain
usrp->set_rx_gain(gain);
//set the analog frontend filter bandwidth
usrp->set_rx_bandwidth(bw);
//create a receive streamer
uhd::stream_args_t stream_args("fc32");
uhd::rx_streamer::sptr rx_stream = usrp->get_rx_stream(stream_args);
uhd::stream_cmd_t
stream_cmd(uhd::stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_DONE);
const size_t samps_per_buff = rx_stream->get_max_num_samps();
total_num_samps = rate * duration;
stream_cmd.num_samps = total_num_samps;
stream_cmd.stream_now = true;
// int const buff_size = rx_stream->get_max_num_samps();
rx_stream->issue_stream_cmd(stream_cmd);
uhd::rx_metadata_t md;
std::vector<std::complex<float>> buff(total_num_samps);
std::vector<std::complex<float>> sizeor(samps_per_buff);
const size_t size_of_buff = sizeor.size();
cout<<"Number of samples to capture: "<<total_num_samps<<endl;
//allow for some setup time
std::this_thread::sleep_for(std::chrono::seconds(2));
////////////////////////////////////////////////////////////////////////
cout<<"Starting Capture....."<<endl<<"======================"<<endl;
milliseconds start_time_ms = duration_cast< milliseconds
>(system_clock::now().time_since_epoch());
int index=0;
while (!md.end_of_burst){
rx_stream->recv( &buff[index * samps_per_buff], size_of_buff, md);
index++;
}
milliseconds end_time_ms = duration_cast< milliseconds
>(system_clock::now().time_since_epoch());
cout<<"Ending Capture....."<<endl<<"======================"<<endl;
////////////////////////////////////////////////////////////////////////
// int x=1;
int zero = 0;
int zero_all = 0;
int real = 0;
int imag = 0;
for (std::complex<float> p: buff){
if(p.real() == 0){real++;}
if(p.imag() == 0){imag++;}
if( (p.real()) == 0 && (p.imag() == 0) ){zero_all++;}
if( (p.real()) == 0 || (p.imag() == 0) ){zero++;}
}
cout<<"Samps : "<<buff.size()<<endl;
cout<<"Start : "<<start_time_ms.count()<<endl;
cout<<"End : "<<end_time_ms.count()<<endl;
cout<<"Total time: "<<end_time_ms.count() -
start_time_ms.count()<<endl<<endl;
cout<<"real :"<<real<<endl;
cout<<"image :"<<imag<<endl;
cout<<"Zeros :"<<zero<<endl;
cout<<"Zeros_all :"<<zero_all<<endl<<endl;
cout<<"Performance :"<<double (double(zero) /
double(buff.size()))<<endl;
std::cout << std::endl << "Done!" << std::endl << std::endl;
return EXIT_SUCCESS;
}
_______________________________________________
USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
_______________________________________________
USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com