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 <
> [email protected]> 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
> [email protected]
> http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com


_______________________________________________
USRP-users mailing list
[email protected]
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com

Reply via email to