Re: [USRP-users] weird sample values when receiving on b200

2018-10-15 Thread Mitch Grabner via USRP-users
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 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 
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 > rx_buff,
> >   uhd::rx_streamer::sptr rx_stream,
> >   size_t total_num_rx_samps,
> >   double time_to_receive,
> >   std::queue* 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 *> 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 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.2 

Re: [USRP-users] weird sample values when receiving on b200

2018-10-14 Thread Marcus Müller via USRP-users
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 > rx_buff,
>   uhd::rx_streamer::sptr rx_stream,
>   size_t total_num_rx_samps,
>   double time_to_receive,
>   std::queue* 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 *> 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 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.2 device time
> Receive thread started!
> Begin streaming in for 40 samples starting at 0.19000 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.
> 

Re: [USRP-users] weird sample values when receiving on b200

2018-10-11 Thread Mitch Grabner via USRP-users
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 > rx_buff,
  uhd::rx_streamer::sptr rx_stream,
  size_t total_num_rx_samps,
  double time_to_receive,
  std::queue* 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 *>
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 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.2 device time
Receive thread started!
Begin streaming in for 40 samples starting at 0.19000 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 
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 ini

Re: [USRP-users] weird sample values when receiving on b200

2018-10-10 Thread Michael Dickens via USRP-users
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] weird sample values when receiving on b200

2018-10-10 Thread Mitch Grabner via USRP-users
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