Hi All,
summary: If I try and receive and transmit data from and to the USRP
simultaneously at the same data rate (no matter what it is, even as low
as 2MB/s each way) I always get usrp underruns.
Background
I have a simple cross band repeater type example running under Gnuradio
3.1.1. Basically I have configured an RFX400 to receive an FM type
modulated signal on one frequency (452.75MHz) and retransmit that same
signal either as complex baseband to an LFTX daughterboard, or an RF
signal at another frequency (440MHz) by the RFX400. Currently this
involves simultaneous reception and transmission of data across the
USB2.0 interface. I’ve typically been using usrp_decim values of 128
(i.e500Ks/s, complex = 2MB/s), and usrp_inter of 256, again giving a
nominal data rate to the usrp of 2MB/s.
I have verified the USB2.0 simplex performance of my PC (Pentium D
2.8GHz, 1GB RAM) by running standard gnuradio scripts such as
usrp_fft.py for testing the data throughput to the PC. I was able to set
the decimation rate of the fft scope to 8 (giving 8MS/s, complex, I
assume => 32MB/s) without any usrp over runs reported.Decimation value
below 8 start giving usrp over runs, as expected.
On the PC to USRP side: I’ve used usrp_siggen.py to generate a sine wave
on the PC and output it from the LFTX daughterboard. I kep reducing the
usrp interpolation rate until I started to see under runs reported. This
happened at an a value of 12, at 14 it was OK. I was expecting 16 would
be my lower limit (128MS/s / 16 = 8MS/s = 32MB/s over usb2.0) but it
would appear my PC USB controller is slightly better at sending data
than receiving.
Anyway, to get to the point. If I try and receive and transmit data
simultaneously at the same data rate (no matter what it is, even 2MB/s)
I always get usrp underruns.
Questions
- Do others see the same thing?
- Is this because any buffering that’s going at the PC end is
insufficient to smooth out any slight differences in actual receive and
transmit data rates, leading to the occasional starving of the USRP’s
usb receive buffers? - If I configure my application to receive samples from the usrp at a
lower rate than I retransmit them (using the rational resampler to
interpolate) this significantly reduces any under run’s reported. Is
this the generally used method to get around this particular issue? - Is it possible to configure the USRP to directly pass samples from
the receive to the transmit, bypassing the PC altogether? Could be
useful to me as a basic RF passband to complex baseband, cutting out PC
latencies.
Thanks in advance for your responses.
Cheers
Richard