Tuning the BasicRX board

Hi all,

As there is no solid C++ support for daughterboards yet, I’m attempting
to tune the BasicTX/RX boards to use them in the meantime with the
inband code.

I apparently have no issue tuning the TX board, as I can properly
transmit some GMSK encoded data and use the standard python receiver
(benchmark_rx.py) to decode it. However, I am having issues tuning the
RX board.

My goal is to tune the RX board to 10MHz.

The frequency of the DDC is set to -10e6 using set_rx_freq(), since the
BasicRX board doesn’t do quadrature downconversion and the spectrum is
inverted.

Is there a default target frequency of the BasicRX/TX boards, as I do
not think I can set it without C++ daughterboard control (i.e., a C++
equiv for set_freq())? At the same time, looking at db_basic.py it
seems as though set_freq() is an empty method, simply returning True on
all calls.

I know my board is not properly tuned like benchmark_rx.py, as the raw I
and Q values are on completely different scales when attempting to
receive the GMSK encoded transmission. Also, if I capture the raw
samples using python code, and inject them in to my in-band receiver I
can properly decode the transmission. This means something is off below
the GNU Radio level, down in to the USRP and daughterboard settings.

I’m fairly confident it is not an FPGA in-band implementation error, as
I can properly transmit and receive a sine wave (by plotting it) using
the code.

I’d greatly appreciate any help.

  • George

On Mon, Dec 10, 2007 at 01:25:31PM -0500, George N. wrote:

My goal is to tune the RX board to 10MHz.

The frequency of the DDC is set to -10e6 using set_rx_freq(), since the
BasicRX board doesn’t do quadrature downconversion and the spectrum is
inverted.

FYI, the spectrum isn’t inverted on the basic_rx.

set_rx_freq(-10e6) should work, assuming you’ve got the mux setup
correctly.

If you’re using the first input on the Basic Rx on the A-side you’ll
want set_mux(0xf0f0f0f0)

Is there a default target frequency of the BasicRX/TX boards, as I do not
think I can set it without C++ daughterboard control (i.e., a C++ equiv for
set_freq())? At the same time, looking at db_basic.py it seems as though
set_freq() is an empty method, simply returning True on all calls.

The computation that splits the tuning between the RF front end and
the DDC is done in usrp.py (tune). In the case of basic_rx, the
daughterboard set_freq returns (True, 0), indicating that DC is at 0
Hz in the IF. That is, there’s nothing to tune on the daughterboard,
and all the work is done in the DDC.

Eric

set_rx_freq(-10e6) should work, assuming you’ve got the mux setup
correctly.

If you’re using the first input on the Basic Rx on the A-side you’ll
want set_mux(0xf0f0f0f0)

This is the mux I’m setting, and with set_rx_freq(-10e6) I still have no
luck.

In benchmark_rx.py, the samples are unmodified up to the channel filter,
correct?

The computation that splits the tuning between the RF front end and
the DDC is done in usrp.py (tune). In the case of basic_rx, the
daughterboard set_freq returns (True, 0), indicating that DC is at 0
Hz in the IF. That is, there’s nothing to tune on the daughterboard,
and all the work is done in the DDC.

I see, this makes sense.

At this point, I’m not really sure what’s going on. I guess we will dig
around the FPGA code, but I still don’t understand how we can properly
receive and plot the sine wave if it were broken.

  • George

On Dec 10, 2007 3:26 PM, George N. [email protected] wrote:

In benchmark_rx.py, the samples are unmodified up to the channel filter,
correct?

All samples go through the FPGA’s CORDIC and then through the CIC
filter, possibly the halfband filter depending on your configuration.

What phase increment is being set on the CORDIC? This should be the
equivalent of -10MHz to shift the input samples down to 0Hz within the
FPGA.

I see, this makes sense.

At this point, I’m not really sure what’s going on. I guess we will dig
around the FPGA code, but I still don’t understand how we can properly
receive and plot the sine wave if it were broken.

Are you doing any frequency translations with the tone, or are you
sending a 2MHz tone and receiving a 2MHz tone?

Brian