Using the USRP LFRX daughterboard to receive a complex baseband signal (I+Q)


#1

Hi all,

I am having difficulties understanding how to combine the two signals on
the RXA and RXB connectors on the same LFRX-daughterboard to one single
complex signal (I+Q) using the “usrp_dual_source_x” block.

The best would be to receive a float from each, and then combine the two
signals to a complex signal using the “gr_float_to_complex” block.
However it seems it is only possible to get the samples as short or
complex, so my idea is to take the real part of each of the two
“complex” signals (as they in reality are real), and combine those to
complex using the above mentioned block.

This method involves some seemingly unnecessary conversions, so I am
guessing that there is another way?

  • Einar

#2

The current USRP API does not support receiving complex signal (I on RXA
and Q on RXB) from LFRX and BasicRX boards. At least not in an easy
way…

In the future, the USRP API will support complex samples, and
“usrp_dual_source_x” will have an option called antenna: “RXAB”

Any word on this from developers?

Einar T. wrote:

“complex” signals (as they in reality are real), and combine those to
complex using the above mentioned block.

This method involves some seemingly unnecessary conversions, so I am
guessing that there is another way?

Its not ideal, but thats the way to do it for now.

USRP dual source -> 2 convert complex to float -> combine 2 floats with
“gr_float_to_complex”

:frowning:

-Josh


#3

Josh B. wrote:

The current USRP API does not support receiving complex signal (I on RXA
and Q on RXB) from LFRX and BasicRX boards. At least not in an easy way…

In the future, the USRP API will support complex samples, and
“usrp_dual_source_x” will have an option called antenna: “RXAB”

Any word on this from developers?

We’ve talked about this in the past. The quickest way to do this would
be to mod the LFRX code. Currently it has 2 subdevices, one for the A
input and one for the B input, which control the mux settings. If we
made a setting for a “C” input which just changed the mux settings, that
would solve it pretty quickly.

Matt


#4

On Sun, Feb 15, 2009 at 02:24:32PM -0800, Matt E. wrote:

Any word on this from developers?

We’ve talked about this in the past. The quickest way to do this would
be to mod the LFRX code. Currently it has 2 subdevices, one for the A
input and one for the B input, which control the mux settings. If we
made a setting for a “C” input which just changed the mux settings, that
would solve it pretty quickly.

Matt

You can get what you want today by just setting an appropriate value
for the Rx mux:

/*!

  • \brief Set input mux configuration.
  • This determines which ADC (or constant zero) is connected to
  • each DDC input. There are 4 DDCs. Each has two inputs.
  • 
    
  • Mux value:
  • 3 2 1
  • 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  • ±------±------±------±------±------±------±------±------+
  • | Q3 | I3 | Q2 | I2 | Q1 | I1 | Q0 | I0 |
  • ±------±------±------±------±------±------±------±------+
  • Each 4-bit I field is either 0,1,2,3
  • Each 4-bit Q field is either 0,1,2,3 or 0xf (input is const zero)
  • All Q’s must be 0xf or none of them may be 0xf

*/
bool set_mux (int mux);

Assuming your Basic LF is on side A, this should work:

u.set_mux(0x00000010)

Eric


#5

svn up!

It is now possible to receive quadrature samples from the RXA + RXB
antennas of the basic RX and LFRX daughterboards. To use this…

:::For GRC, there is a new rx antenna option called RXAB.

:::For command line, usrp scripts support the “-R A:2” or “-R B:2”
option.

:::For python coders, the subdev spec should be (0, 2) for side A and
(1, 2) for side B.

-Josh