Burst TX and RX

I am just starting to work with a USRP in order to create burst TX and
simultaneous RX streams, so I am trying to learn about tagged streams,
which I believe is the way to do this. I see references in this forum to
a program called tags_demo which looks like it could be very useful. Is
this available as a program withing GRC or elsewhere? Right now I can’t
find it.

Are there any other test and/or tutorial programs within GRC that would
be useful for bringing myself up to sped with implementing burst
TX and RX functionality? If so, I’d very much appreciate learning about

Thanks very much.


Hi David,

if you’ve got the GNU Radio source code [1], tags_demo.cc is in

Now, we’ll have to make a difference between “tagged streams” and
“streams with stream tags”, as confusing as it is:
Tagged streams are like normal streams, only that GNU Radio makes sure
that all samples in a burst are given to a block’s work method at once,
whereas tag streams are annotations in continuous streams (where a
work() method might get any number of tags, and might chose to process
only a part of them, saving the rest for the next call).

If you set the length_tag_key to pmt::nil (default), you use the sob
(start of burst) and eob (end of burst) stream tag mode. If you set the
length_tag key, the USRP blocks work in stream tagged mode. Which one of
these is right is hard to tell.

Now, none of these examples are GRC (GNU Radio Companion) examples, but
C++ – that’s because generating these tags that need to specify where a
burst starts and how long it is (or where it ends) is something that
can’t be done very easily graphically, so you’d have to write proper
program code, anyway. You can do that in both python and C++.

To get you up to speed:


is the right place to start. I don’t know how used to GNU Radio you
already are, but chapters 1 and 2 can be done in less than an hour, I
think. Carefully work through 3 and 4, as they explain core concepts
(such as the way work() is called, crucial to understanding why burst
mode isn’t trivial in GNU Radio), and they will be very helpful in
understanding 5, which explains stream tags more clearly. Chapter 6 will
then be a fun read for you, as it directly involves talking to the USRP
(but not bursty mode, that’s kind of too advanced for an introdcutory
After you’ve done Chapter 5, I recommend reading the doxygen page on
tagged stream blocks [2], because you then are able to (if our tutorial
is well-written) understand the differences.

Best regards, and happy hacking,

[1] GitHub - gnuradio/gnuradio: GNU Radio – the Free and Open Software Radio Ecosystem
[2] https://gnuradio.org/doc/doxygen/page_tagged_stream_blocks.html


That’s great input. Thanks very much indeed. I’ll get to work!