Format and dimension of USRP output samples

Hello everybody,

I’m sorry to post once again a question about the dimension and the
format of
the samples output by the USRP, but it is actually hard for me to
understand.

I’m using the USRP Motherboard with a LFRX daughterboard.
Question: if the ADC has 12 bits, each sample that arrives from the
doughterboard is 12 bits real or imaginary. But over the USB the samples
(real
or imaginary) are 16 bit signed integer. If my resolution is 12 bits,
why do I
need 16 bits?
Moreover, using a program like Baudline, the format of the samples I
have to use
is complex 32 bits floating point. If they are integer, why floating?

Thank you very much,

kind regards,

Marco

On Thu, 2008-12-04 at 12:28 -0500, Marco Bottino wrote:

I’m using the USRP Motherboard with a LFRX daughterboard.
Question: if the ADC has 12 bits, each sample that arrives from the
doughterboard is 12 bits real or imaginary. But over the USB the samples (real
or imaginary) are 16 bit signed integer. If my resolution is 12 bits, why do I
need 16 bits?

It is correct that the ADC samples at 12-bits per sample. This occurs
at 64 Msps.

The USRP FPGA contains performs some processing on these samples to
reduce the frequency content and sample rate of the stream before
sending over the USB. During this processing, the effective number of
bits increases to (at least) 16.

Even if it weren’t so, it would still be simpler and faster to pack 12
bits into 16 bits for transmission over USB.

Moreover, using a program like Baudline, the format of the samples I have to use
is complex 32 bits floating point. If they are integer, why floating?

The GNU Radio block for reading or writing samples to the USRP can use
either short integers or 32-bit floating point. The majority of GNU
Radio DSP blocks work in floating point, as it simplifies dealing with
issues like dynamic range and overflow that would otherwise require more
strict design in the fixed point domain.

The conversion to and from floating point occurs in the USRP source_c()
and sink_c() blocks and is transparent to the user. If you opt to use
the short integer sources and sinks (usrp.source_s() and usrp.sink_s()),
you may need to write your own low-level DSP blocks for the remainder of
the flowgraph to work in this domain.

-Johnathan