Thanks Fabian, I have tried a few different values for timeout as per your recommendation and none seem to have an affect: 2.0 1.0 0.5 0.25 0.001
All have about the same result of ~50% of the samples contain a zero. Ive also tried setting the sample sizes from fc32 to sc16 with more or less the same result. What would be a normal amount of zeros to receive from a stream like this? %1? %10? On Sep 4, 2018, at 11:11 AM, Fabian Schwartau via USRP-users <usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com>> wrote: 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<mailto: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<mailto:USRP-users@lists.ettus.com> http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com [cid:clip_image001.jpg] Jeremy Foran ​Technology Specialist BAI COMMUNICATIONS 33 BLOOR ST EAST, TORONTO, ON, CANADA M4W 3H1 M: 416.500.4283 baicommunications.com<http://baicommunications.com> Stay connected - LinkedIn | Twitter | Google+ | YouTube
_______________________________________________ USRP-users mailing list USRP-users@lists.ettus.com http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com