Usrp_sink_s and other quick questions

Hi all-

Several quick questions.

  1. For usrp sink_s, which bit of the short activates the MSB of the DAC
    chip? I.e., if I send 0bABCDEFGH IJKLMNOP, where each letter is either a
    1
    or a 0, which letter matches the MSB?

  2. If I want to generate a stream of alternating zeros and ones (stored
    in
    bytes is fine): 0b00000000, 0b00000001, 0b00000000, 0b00000001, etc.,
    which
    block is appropriate? …now that I think about it, vector_source_b
    seems
    appropriate. I could loop the vector_source_b ([0b00000000,
    0b00000001]), or
    I could loop vector_source_b ([0b01010101]) and send it to an
    unpacked_to_packed_bb(8). Is one of these ways preferred / less
    computationally intensive?

  3. Interpolating. Let’s talk first for a stream of floats: A, B, C,
    etc.,
    coming out at rate x. If I just want to get A, A, B, B, C, C, coming out
    at
    rate 2x, is the best/only route to use gr_interp_fir_filter_fff with
    [1,1]
    as taps? Seems like there are some wasteful multiplies going on here.
    What
    about if I want to do this with a stream of bytes? There’s no equivalent
    “gr_interp_fir_filter_bbb”. Do I have to convert the bytes to float,
    then
    interp, then back to bytes?

Hopefully someone can help me out with some/all of these questions.
Thanks for your time.

-Steven

On Mon, May 21, 2007 at 10:48:04AM -0400, Steven C. wrote:

Hi all-

Several quick questions.

  1. For usrp sink_s, which bit of the short activates the MSB of the DAC
    chip? I.e., if I send 0bABCDEFGH IJKLMNOP, where each letter is either a 1
    or a 0, which letter matches the MSB?

First off, I strongly suggest that you NOT user usrp.sink_s, just use
usrp.sink_c.

I hereby OFFICIALLY DEPRECATE usrp.sink_s and usrp.source_s.

Yes, Martin, I know you need them :wink:

Eric

If I need pin-level access to the DAC chip, sink_s is my only option
AFAIK.
I understand that it’s interleaved I&Q, don’t worry about that.
My original questions remain.

On Mon, May 21, 2007 at 04:19:58PM -0400, Steven C. wrote:

  1. For usrp sink_s, which bit of the short activates the MSB of the DAC
    chip? I.e., if I send 0bABCDEFGH IJKLMNOP, where each letter is either a
    1
    or a 0, which letter matches the MSB?

What you sent to sink_s doesn’t go directly to the DACs, but rather is
first interpolated and possibly upconverted.

See http://gnuradio.org/trac/wiki/UsrpRfxDiagrams

The DACs run at a constant 128 MS/s. They are fed from the FPGA at
32 MS/s, and are interpolated by a factor of 4 in the AD9862. See the
AD9862 datasheet for details.

The I & Q data written to sink_s should be 16-bit 2’s-complement
host-endian data in the range -32768 to 32767. The max and minimum
values that make sense actually depend somewhat on the associated RF
daughterboard. Analog clipping may occur at values smaller in
magnitude than +/- 32,767.

Eric

Thanks for the clarification Eric. I was being a bit disingenuous by not
revealing what I was really trying to do. I don’t actually care what’s
being
sent to the DAC. As I hinted at in an earlier email, what we’ve done is
create a custom verilog load that takes the data lines after the FIFO
but
before the CIC filter and routes some of them out to IO pins on the
daughtercard (which seem to be 0-3.3V LVTTL levels). The output of the
DAC
is of course nonsensical, but you’d just set its gain to the min and
ignore
it.

So we have created a sort of “poor-man’s digital sink”.

Using this, yesterday some coworkers and I successfully
integrated/synchronized a gnuradio demodulator (GMSK) with an external
hardware bit-error rate tester. Now we are characterizing BER vs
Eb/No…hopefully I can create a write-up of our experiences/results and
share it with the gnuradio community.

Thanks for the support.

-Steven