Stream Tags

I’m starting up on another R&D project using GnuRadio.

The project is a transponder, used by NASA for ranging.
It uses DSSS on both the uplink and the downlink. The
transponder has to be coherent, and it synchronizes the
PN epochs of the received uplink and the transmitted downlink.
This allows the groundstation to compute the round-trip time,
(and hence the range), by comparing the offset of the
received epoch to that of the one originally transmitted
to the transponder.

My plan is to use stream tags to accomplish the
synchronization. This will require getting a time tag
for each received sample, identifying the time of the
first sample associated with the epoch of the received
uplink, and using that time to start the transmission
of the first sample of the downlink epoch a small integer
number of epochs later (to allow for GnuRadio latency).

I have not yet used stream tags, and have a number of
questions:

  1. Is it possible to get timetags for every sample? My
    readings on time tags seemed to imply that only one
    is created at the beginning of a stream.

  2. What is the accuracy/precision of the time tags? Jitter
    is going to be the make-or-break factor on this project.

  3. It looks like the Start-Of-Burst (SOB) tag is the only
    way to control the time of transmission. Is there any
    limitation on the length of a burst? In my case, I would
    want to start the transmitter in response to receiving
    the uplink, and not stop it until the uplink ceases,
    about 4 minutes later.

  4. Is there any good tutorial or example information on
    the use of stream tags? (I’m using GR 3.6.1)

  5. Does all this sound like I’m headed in the right direction,
    or is there something fundamental that I’m missing?

Thanks in advance for any help!

@(^.^)@ Ed

I have not yet used stream tags, and have a number of
questions:

  1. Is it possible to get timetags for every sample? My
    readings on time tags seemed to imply that only one
    is created at the beginning of a stream.

Your block will need to grab a hold of the last time tag that was
produced. If you know the sample count of this tag, and the sample count
of the sample you are interested in, its a simple interpolation.

  1. What is the accuracy/precision of the time tags? Jitter
    is going to be the make-or-break factor on this project.

The fractional seconds are stored as double precision floating point.
This gives the fractional seconds enough precision to unambiguously
specify a clock-tick/sample-count up to rates of several petahertz.

:slight_smile:

  1. It looks like the Start-Of-Burst (SOB) tag is the only
    way to control the time of transmission. Is there any
    limitation on the length of a burst? In my case, I would
    want to start the transmitter in response to receiving
    the uplink, and not stop it until the uplink ceases,
    about 4 minutes later.

The tx_time tag is the way to control the time of transmission.

Bursts can be any length. Its important to end a burst or an underflow
is produced if you stop producing TX samples.

  1. Is there any good tutorial or example information on
    the use of stream tags? (I’m using GR 3.6.1)

Yes:
http://gnuradio.org/cgit/gnuradio.git/tree/gr-uhd/examples/c++/tags_demo.cc

  1. Does all this sound like I’m headed in the right direction,
    or is there something fundamental that I’m missing?

I think you have got it!
http://code.ettus.com/redmine/ettus/projects/uhd/wiki/GNU_Radio_UHD#Using-UHD-with-GNU-Radio

-josh