Forum: GNU Radio Re: Format of captured data

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
3d593de8acbe2510722af740d8668352?d=identicon&s=25 Firas Abbas (Guest)
on 2009-05-28 06:19
(Received via mailing list)
Hi,

> On Wed, 5/27/09, Karthik <karthik1024@gmail.com> wrote:
>
> If you use usrp_c() source, then the real part of the complex values are the I values 
and the imaginary parts are Q values. They are each 16 bits.
>
> Karthik
>

That is not correct. If you use usrp_c source, then I & Q each are 32
bits (total complex is 64bits). However, if you use usrp_s, then each
are 16 bits (total complex is 32bits)..

Best Regards,

Firas
B538f3568f304bb9c10b6719e1d370af?d=identicon&s=25 Karthik (Guest)
on 2009-05-28 08:37
(Received via mailing list)
On Wed, May 27, 2009 at 9:18 PM, Firas Abbas <firasmail2000@yahoo.com>
wrote:
> That is not correct. If you use usrp_c source, then I & Q each are 32 bits (total 
complex is 64bits). However, if you use usrp_s, then each are 16 bits (total complex is 
32bits)..
>
> Best Regards,
>
> Firas
>

Apologies for the wrong information. I don't mean to side track the
original query, but I have a couple of questions.

I found this in the FAQ.

"Regarding the bandwidth, we can sustain 32MB/sec across the USB. All
samples sent over the USB interface are in 16-bit signed integers in
IQ format, i.e. 16-bit I and 16-bit Q data (complex) which means 4
bytes per complex sample. This resulting in a (32MByte per sec/4Byte)
8Mega complex samples/sec across the USB."

So I guess here we are assuming that we are using usrp_s() ?

 Also, since the ADC only has 12bit precision, are the extra bits used
to retain precision as we go through the CIC and Halfband filters?

If I were to use the std_4rx_0tx.rbf and usrp_s() to receive 4
channels. Then am I correct in saying that I need to have a
deinterleaver with 8 channels after the usrp_s() from which I will
club channel 0 and 1 into a new complex stream (similarly for channel
2 and 3 etc) to get 4 complex streams?

Thanks,
Karthik
B538f3568f304bb9c10b6719e1d370af?d=identicon&s=25 Karthik (Guest)
on 2009-05-28 09:39
(Received via mailing list)
On Wed, May 27, 2009 at 11:35 PM, Karthik <karthik1024@gmail.com> wrote:
>>
> I found this in the FAQ.
> to retain precision as we go through the CIC and Halfband filters?
>
> If I were to use the std_4rx_0tx.rbf and usrp_s() to receive 4
> channels. Then am I correct in saying that I need to have a
> deinterleaver with 8 channels after the usrp_s() from which I will
> club channel 0 and 1 into a new complex stream (similarly for channel
> 2 and 3 etc) to get 4 complex streams?
>
> Thanks,
> Karthik
>

After snooping about a bit more, I found this on "The USRP under a
1.5X Magnifying Lens" ,
http://gnuradio.org/trac/attachment/wiki/UsrpFAQ/U....

"Q) ADC samples at 64MHz, and passes through both I and Q channels
over the 24-bit RX bus.
 Internal to the FPGA, the CIC automatically decimates by a value of
at least 4. The halfband
decimating FIR filter internal to the FPGA decimates by a fixed value
of 2. This gives a minimum
decimation rate of 8, leaving 8Msps going over the USB of the USRP.
Is this correct?

A) Yes.  Note that some FPGA builds don't contain the half-band.
With 16-bit I & Q decim =  8 ->  8MS/sec -> 32MB/sec.
With  8-bit I & Q decim =  4 -> 16MS/sec -> 32MB/sec "

Does this mean that when we use usrp_c(), the data sent over USB is
16bit I and Q but the container used to hold it after it reaches the
computer is 32 bit each. And when we use usrp_s(), the data sent is
8bit I and Q and the container used is 16bit?

Karthik
4252201ac30d6dd44d8090ce1070e35f?d=identicon&s=25 Josh Blum (Guest)
on 2009-05-28 09:44
(Received via mailing list)
>
> So I guess here we are assuming that we are using usrp_s() ?
>

Everything is 16 bits. usrp_c just casts the interleaved shorts into
floats, whereas usrp_s leaves the interleaved shorts as they are. That
is why the min and max values are +/- 2**15 even in floating point.

>  Also, since the ADC only has 12bit precision, are the extra bits used
> to retain precision as we go through the CIC and Halfband filters?
>

Also, being byte-aligned is a key issue here. Imagine what would happen
if the host had to shift every sample in memory.

> If I were to use the std_4rx_0tx.rbf and usrp_s() to receive 4
> channels. Then am I correct in saying that I need to have a
> deinterleaver with 8 channels after the usrp_s() from which I will
> club channel 0 and 1 into a new complex stream (similarly for channel
> 2 and 3 etc) to get 4 complex streams?
>

does the usrp_s/c answer clear this up for you?

-Josh
B538f3568f304bb9c10b6719e1d370af?d=identicon&s=25 Karthik (Guest)
on 2009-05-28 20:40
(Received via mailing list)
On Thu, May 28, 2009 at 12:42 AM, Josh Blum <josh@joshknows.com> wrote:
>> 8Mega complex samples/sec across the USB."
>>
>
> does the usrp_s/c answer clear this up for you?
>
> -Josh
>

Thanks Josh,

That clears things up for me.

Regards,
Karthik
This topic is locked and can not be replied to.