Tuning while acquiring data


#1

Hi all-

I’m trying to re-tune a daughterboard, while acquiring samples, and I
seem to get an overrun every time. (This is in C++.)

Before I start investigating really hackish ways to make this work,
has anyone had any success getting this to work?

I don’t actually care about the data I get while tuning, but I don’t
want to lose track of the exact time, so I’d be happy with a way to
ask the USRP to pause for a specified number of samples, as well, or
even just to know how many samples I lost due to the overrun.

Thanks,
Andy


#2

On Fri, May 8, 2009 at 9:28 PM, Eric B. removed_email_address@domain.invalid wrote:

On Fri, May 08, 2009 at 03:43:34PM -0400, Andrew L. wrote:

Hi all-

I’m trying to re-tune a daughterboard, while acquiring samples, and I
seem to get an overrun every time. (This is in C++.)

Before I start investigating really hackish ways to make this work,
has anyone had any success getting this to work?

I’m assuming this is on a USRP2.

Whoops, should’ve mentioned. This is a USRP1.

I don’t actually care about the data I get while tuning, but I don’t
want to lose track of the exact time, so I’d be happy with a way to
ask the USRP to pause for a specified number of samples, as well, or
even just to know how many samples I lost due to the overrun.

My current thought is to add a new FPGA register FR_SKIP_SAMPLES.
Writing a number N to that register would cause the next N samples
that would otherwise be written to USB to be skipped. The sequence
would be:

  1. Write 1000000 to FR_SKIP_SAMPLES. (I suspect that just a few ms
    worth of samples would be plenty.)
  2. Tune the USRP.
  3. Hope that tuning finishes before the full batch of samples have been
    skipped.

Alternatively, I could try to modify the firmware to do i2c
asynchronously, but that sounds a lot more painful.

–Andy


#3

On Fri, May 08, 2009 at 03:43:34PM -0400, Andrew L. wrote:

Hi all-

I’m trying to re-tune a daughterboard, while acquiring samples, and I
seem to get an overrun every time. (This is in C++.)

Before I start investigating really hackish ways to make this work,
has anyone had any success getting this to work?

I’m assuming this is on a USRP2.

The current firmware stops the streaming, does the tune, and restarts
streaming. This produces a discontinuity of varying length, but
doesn’t underrun.

Latest versions of the FPGA and firmware:

http://gnuradio.org/releases/usrp2-bin/trunk/txrx_edk10.1_r10925.bin
http://gnuradio.org/releases/usrp2-bin/trunk/u2_rev3_ise10.1sp3_r10766.bin

I don’t actually care about the data I get while tuning, but I don’t
want to lose track of the exact time, so I’d be happy with a way to
ask the USRP to pause for a specified number of samples, as well, or
even just to know how many samples I lost due to the overrun.

If you’re using the libusrp2 interface, you can check the timestamp in
the metadata passed to your rx_sample_handler.

If you’re using the usrp2_source_* interface there’s currently no way to
know. This will be possible when we implement the “stream annotation”
feature.

Eric


#4

On Sat, May 9, 2009 at 1:38 AM, Eric B. removed_email_address@domain.invalid wrote:

I’m assuming this is on a USRP2.

Whoops, should’ve mentioned. This is a USRP1.

No problem.

Which daugtherboard?

2 TVRX boards. I don’t have any TX boards.

–Andy


#5

On Sat, May 09, 2009 at 12:53:04AM -0400, Andrew L. wrote:

I’m assuming this is on a USRP2.

Whoops, should’ve mentioned. This is a USRP1.

No problem.

Which daugtherboard?

Eric