if you’ve got the GNU Radio source code , 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 , because you then are able to (if our tutorial
is well-written) understand the differences.
Best regards, and happy hacking,