Here's the rx streamer init. It is in the main function after initializing the usrp device. This happens with both sc8 and sc16 wire format with float32 cpu format.
uhd::stream_args_t rx_stream_args("fc32",wire); //complex floats rx_stream_args.args["spp"] = str( boost::format( "%u" ) % spb ); std::vector<size_t> rx_channel_nums ( rx_channels, rx_channels + sizeof(rx_channels) / sizeof(rx_channels[0])); rx_stream_args.channels = rx_channel_nums; uhd::rx_streamer::sptr rx_stream = usrp->get_rx_stream(rx_stream_args); thanks, - mitch On Sun, Oct 14, 2018 at 1:35 PM Marcus Müller <marcus.muel...@ettus.com> wrote: > Hi Mitch, > > where/how do you create the rx_streamer, and which otw / cpu format > does that use? > > Best regards, > > Marcus > On Thu, 2018-10-11 at 11:53 -0400, Mitch Grabner via USRP-users wrote: > > I'm doing a loopback to check which sample a certain signal level is > > found. I'm transmitting in the main thread and I create a receiver > > thread to look for the rise in the input signal. Here is my receiver > > worker > > > > void receive_worker( > > uhd::usrp::multi_usrp::sptr usrp, > > std::vector<std::complex<float> > rx_buff, > > uhd::rx_streamer::sptr rx_stream, > > size_t total_num_rx_samps, > > double time_to_receive, > > std::queue<size_t>* edge_queue, > > bool* stop_receive > > ){ > > io_mutex.lock(); > > std::cout << boost::format("Receive thread started!") << std::endl; > > io_mutex.unlock(); > > > > //set buffers same for all channels (if more than 1) > > std::vector<std::complex<float> *> rx_buffs(rx_stream- > > >get_num_channels(), &rx_buff.front()); > > > > //setup streaming > > uhd::stream_cmd_t stream_cmd((total_num_rx_samps == 0)? > > uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS: > > uhd::stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_DONE > > ); > > > > io_mutex.lock(); > > // if we are looking for a finite set of samples > > if (total_num_rx_samps > 0){ > > std::cout << boost::format( > > "Begin streaming in for %u samples starting at %0.9f device > > time" > > ) % total_num_rx_samps % time_to_receive << std::endl; > > } > > else{ > > std::cout << boost::format( > > "Begin streaming in continuous samples starting at %0.9f > > device time" > > ) % time_to_receive << std::endl; > > } > > io_mutex.unlock(); > > > > //set up the RX command > > stream_cmd.num_samps = total_num_rx_samps; > > stream_cmd.stream_now = false; > > stream_cmd.time_spec = uhd::time_spec_t(time_to_receive); > > rx_stream->issue_stream_cmd(stream_cmd); > > > > //meta-data will be filled in by recv() > > uhd::rx_metadata_t rx_md; > > > > double rx_timeout = time_to_receive + 0.1; > > size_t num_acc_samps = 0; > > /* ------------- Main While Loop --------------- */ > > while(not *stop_receive and (num_acc_samps < total_num_rx_samps or > > total_num_rx_samps == 0)){ > > //rece ive a single full otw packet > > size_t num_rx_samps = rx_stream->recv( > > rx_buffs, rx_buff.size(), rx_md, rx_timeout, true > > ); > > rx_timeout = 0.1f; //small timeout for subsequent recv > > > > //error handling > > if (rx_md.error_code != uhd::rx_metadata_t::ERROR_CODE_NONE){ > > io_mutex.lock(); > > std::cout << boost::format( > > "Receiver Error %s ... Shutting down!" > > ) % rx_md.strerror() << std::endl; > > io_mutex.unlock(); > > //set stop receive signal > > *stop_receive = true; > > } > > > > //look for a single rising edge > > edge_offset_calc(rx_buff, num_acc_samps, edge_queue); > > > > > > //keep track of absolute sample number > > num_acc_samps += num_rx_samps; > > > > //if we were streaming continuously, send a stop command > > if (*stop_receive and total_num_rx_samps == 0){ > > // Shut down receiver > > std::cout << boost::format("Sending stop command...") << > > std::endl; > > stream_cmd.stream_mode = > > uhd::stream_cmd_t::STREAM_MODE_STOP_CONTINUOUS; > > rx_stream->issue_stream_cmd(stream_cmd); > > } > > }//RX while > > > > boost::this_thread::sleep(boost::posix_time::seconds(0.2)); //wait > > > > io_mutex.lock(); > > std::cout << boost::format("Receive thread ended!") << std::endl; > > io_mutex.unlock(); > > } > > > > I create the rx thread with: > > > > //edge queue > > std::queue<size_t> edge_queue; > > bool stop_receive = false; > > > > //start the thread > > boost::thread_group transmit_thread; > > transmit_thread.create_thread( > > boost::bind( > > &receive_worker, usrp, rx_buff, rx_stream, total_num_rx_samps, > > time_to_receive, &edge_queue, &stop_receive > > ) > > ); > > > > the edge calc function simply iterates through the vector and pushes > > the sample location of the rise in signal level (2-norm of the > > complex float) to the queue. When debugging I sometimes get this kind > > of output after starting up the device > > > > Setting device timestamp to 0... > > Transmitting 50 samples at 0.200000000 device time > > Receive thread started! > > Begin streaming in for 400000 samples starting at 0.190000000 device > > time > > Transmit burst success! > > max is 0.358725 > > Edge found on sample 200164 packet offset of 164 > > max is 2.0942e+34 > > Edge found on sample 242000 packet offset of 2000 > > max is 2.0942e+34 > > Edge found on sample 244000 packet offset of 2000 > > max is 2.0943e+34 > > Edge found on sample 254000 packet offset of 2000 > > max is inf > > Edge found on sample 262000 packet offset of 2000 > > max is inf > > Edge found on sample 264000 packet offset of 2000 > > max is 2.09449e+34 > > Edge found on sample 272000 packet offset of 2000 > > max is 2.09449e+34 > > Edge found on sample 274000 packet offset of 2000 > > Receive thread ended! > > > > My spp is forced to 2000 using the stream args. and This is on UHD > > 3.010.03. > > > > thanks for the help. > > > > On Wed, Oct 10, 2018 at 5:07 PM Michael Dickens < > > michael.dick...@ettus.com> wrote: > > > Hi Mitch - Can you provide your code for us to review, to get an > > > idea of what you're doing that's causing this issue for you? > > > Without specific code, debugging is a little difficult ... And, no, > > > I haven't seen this issue to the best of my knowledge / > > > understanding of what it might be. Cheers! - MLD > > > > > > On Wed, Oct 10, 2018, at 4:03 PM, Mitch Grabner via USRP-users > > > wrote: > > > > Hello, > > > > > > > > I find that sometimes when I initialize a b200 and start > > > > streaming in samples I will get buffers with values of infinity > > > > (especially at the last sample in the buffer). Is this caused by > > > > a bad packet or overflow condition? It also seems to happen > > > > randomly. > > > > > > > > Thanks for your help, > > > > - mitch > > > > > > _______________________________________________ > > 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