Getting started with the USRP/RFX2400 and underflows

I am currently trying to get some basic code working to test that my
shiny new USRP is working correctly. I have been going over the
code/examples/list archives for a few weeks on and off, but most of
the code examples are for the basic RX/TX boards, and I only have two
RFX2400’s.

My testing plan was to use the A side to send out some unmodulated
data (which should be the same as OOK? right?) and receive it at the B
side using the WA5VJB antennas, but I can’t seem to get it to work. I
have put together the following code based on the examples and what
help I could find searching the list archives. I’m thinking it should
play a sine wave out my speakers, but all I hear is static.
Additionally, I get a lot of ‘iU’ in the output, I was able to find
that U meant underflow, but there was no ‘i’ listed in the key, just
‘a’ and ‘u’.

So I have two questions that I hope someone has the answer to:

  1. Why don’t I hear a pretty sine wave?
  2. What type of underflow is indicated by the letter ‘i’

Thanks
Jason

Output

Using TX board A: Flex 2400 Tx MIMO B
Using RX board B: Flex 2400 Rx MIMO B

gr_fir_fff: using SSE
Press Enter to quit: uUiUiUiU(Lots more iU)

===================
Code

from gnuradio import gr
from gnuradio import audio
from gnuradio import usrp

def build_graph ():

#Parametrs
tx_inter_rate = 512
trans_freq = 24e8

rx_decim_rate = 128;

#Create the flow graph
fg = gr.top_block ()

#Create the USRP sink (transmitter)

ut = usrp.sink_c (0, tx_inter_rate)

#First choose the transmitting device
#tx_sd = usrp.pick_tx_subdevice(ut)
tx_sd = (0,0) #manually choose the correct device

m = usrp.determine_tx_mux_value(ut, tx_sd)
ut.set_mux(m)
t_subdev = usrp.selected_subdev(ut, tx_sd)
print “Using TX board %s” % (t_subdev.side_and_name(),)

#Transmit at the maximum possible gain
t_subdev.set_gain(t_subdev.gain_range()[1])

#Set the transmit frequency and check that it worked
r = ut.tune(t_subdev._which, t_subdev, trans_freq)

if not r:
sys.stderr.write(‘Failed to set RF transmit frequency\n’)
raise SystemExit

#Turn on the transmitter
t_subdev.set_enable(True)

#Connect the sink to a SIN source
src0 = gr.sig_source_c (48000, gr.GR_SIN_WAVE, 350, 0.5)
fg.connect (src0, ut)

#Create the USRP Source (receiver)
ur = usrp.source_c(0,rx_decim_rate)

#Choose the recieving device
rx_sd = (1,0)
m = usrp.determine_rx_mux_value(ur, rx_sd)
ur.set_mux(m)
r_subdev = usrp.selected_subdev(ur, rx_sd)
print “Using RX board %s” % (r_subdev.side_and_name(),)

#Set the recieve frequency
r = ur.tune(r_subdev._which, r_subdev, trans_freq)

if not r:
sys.stderr.write(‘Failed to set RF recieve frequency\n’)
raise SystemExit

#Make sure we are using the RX
r_subdev.select_rx_antenna( ‘RX2’)

#Convert complex data to sound samples
conv2 = gr.complex_to_float ()

#Decimate the received signal to soundcard rates
dec_filt = gr.fir_filter_fff(5,(1.0, 1.0, 1.0));

#Write received data to the soundcard
dst = audio.sink (48000)

#Connect the Source to the audio sink
fg.connect (ur,conv2)
fg.connect (conv2,dec_filt)
fg.connect (dec_filt,dst)

return fg

if name == ‘main’:
fg = build_graph ()
fg.start ()
raw_input ('Press Enter to quit: ')
fg.stop ()

On Mon, Jul 07, 2008 at 04:32:47PM -0500, Jason U. wrote:

#Connect the sink to a SIN source
src0 = gr.sig_source_c (48000, gr.GR_SIN_WAVE, 350, 0.5)
fg.connect (src0, ut)

This doesn’t seem right. You’re creating a sine wave w/ amplitude 0.5.
In order to fully use the dynamic range of your USRP D/A converters, the
signal needs to be somewhere in ±2^15. All you’re transmitting is very
quiet noise.

Regards,


Martin B.
Institut fuer Nachrichtentechnik
Universitaet Karlsruhe

http://www.int.uni-karlsruhe.de

On Tue, Jul 8, 2008 at 3:03 AM, Martin B.
[email protected] wrote:

On Mon, Jul 07, 2008 at 04:32:47PM -0500, Jason U. wrote:

#Connect the sink to a SIN source
src0 = gr.sig_source_c (48000, gr.GR_SIN_WAVE, 350, 0.5)
fg.connect (src0, ut)

This doesn’t seem right. You’re creating a sine wave w/ amplitude 0.5.
In order to fully use the dynamic range of your USRP D/A converters, the
signal needs to be somewhere in ±2^15. All you’re transmitting is very
quiet noise.

Thanks, that was definitely the problem. I added a multiplier in
there and I can now hear the sine wave (faintly) behind all the
static.

Also, last night while trying to figure out how to test code with only
one usrp I came up with what now seems like an obvious solution. I
transplanted the sine wave transmission code and plopped it into the
usrp_oscope script, forcing the oscope and transmitter to use the
correct devices, and now the signal shows up nice and clean on the
oscope display.

Jason

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs