ChangeLogV3_7_2

Release 3.7.2 is a significant new feature and bux fix release, while
3.7.1.1 contains only the bug fixes since 3.7.1.

These releases are the result of contributions from 22 developers in
the GNU Radio community:

Alistair Bird <>
Bastian Bloessl <>
Ben Hilburn <>
Douglas Geiger <>
Jaroslav Škarvada <>
Johnathan Corgan <>
Louis Philippe Lessard <>
Marcus Müller <>
Mark Cottrell <>
Martin Braun <>
Mathieu Rene <>
Michael Berman <>
Michael Dickens <>
Moritz Fischer <>
Nathan West <>
Nicholas Corgan <>
Philip Balister <>
Rick Spanbauer <>
Sebastian Koslowski <>
Sylvain Munaut <>
Tim O'Shea <>
Tom Rondeau <>

GNU Radio Runtime/Framework updates

Work continues on fleshing out the new asynchronous messaging
capabilities in GNU Radio, with additional functionality available in
Python flowgraphs, several blocks getting message ports to accept
parameter changes (noted below), better support for messaging only
blocks (mblocks) that have no streaming ports, and several bug fixes.

Stream tag handling and propagation has been improved in cases where
DSP blocks introduce a signal delay. Block authors/users are able to
declare an effective delay value to the runtime, and stream tags will
have their position adjusted by the runtime when tags are
automatically propagated through the block. In addition, for blocks
derived from gr::block directly and have no fixed input/output item
ratio, the internal relative rate is dynamically adjusted according to
actual usage and stream tags are propagated appropriately.

The performance monitoring system has a new counter that tracks
accumulated work function time, and the high_res_timer functions are
now exported to Python.

GNU Radio Companion Updates

The GRC Working Group that formed at GRCON13 in October established a
roadmap for GRC:

http://gnuradio.org/redmine/projects/gnuradio/wiki/GRCroadmap

Led by Sebastian Koslowski, several new features and some clean up
and bug fixes have been merged for release in 3.7.2.

Searching for blocks on the right side GRC menu has always been
problematic. The search is now implemented with a search box above
the category tree that is accessed via menu, Ctrl-F, or '/'. This box
is persistent, and typing in it filters the category tree in-place,
allowing one to note which category the block is in. This also fixes
the long standing bug where GRC would crash if the search box was
opened and the category tree was scrolled.

Tim O'Shea added the ability to set max_output_buffer on a per-block
basis inside GRC parameter blocks.

Correlate and Sync block (Tom Rondeau)

As a result of work begun at GRHACK13 in June, we have added a new
block called gr::digital::correlate_and_sync. This block is designed
to search for a preamble by correlation and uses the results of the
correlation to get a time and phase offset estimate. These estimates
are passed downstream as stream tags for use by follow-on
synchronization blocks. The tags are:

  • time_est: the estimate of the timing offset in fractions of samples.
  • phase_est: the phase estimate in radians (from 0 to 2pi).
  • corr_est: the value that triggered the correlation. Could be used
    downstream to estimate the quality of the time/phase estimates.

These tags are located on the sample index where the correlation peak occurred.

The correlate_and_sync block is designed to aid in the processing of
burst modems where the timing and phase acquisition loops can get out
of sync when there is no transmission.

Currently, the pfb_clock_sync_ccf looks for and, if found, uses the
time_est tag to set its current value of the sample timing. By doing
this, we prime the clock synchronizer to be very close to the correct
sample time, which allows the loop to quickly converge and track
through the rest of the packet.

The Costas loop block (costas_loop_cc) looks for and, if found, uses
the phase_est tag. The loop uses the phase estimation to set its
internal phase value. The frequency estimation of the loop is left as
is. This again gets the loop very close to the real phase offset and
allows the loop to acquire and track the actual phase offset quickly.

There are three GRC programs that were created to test and explore the
use of this block. gr-digital/examples/demod/test_corr_and_sync.py is
a full simulation that generates burst PSK packets with a known header
and uses the correlate_and_sync block along with the
pfb_clock_sync_ccf and costas_loop_cc block's to generate and use the
correlation-based tags. Noise, timing offset, and frequency offset can
all be adjusted to test the limits and behavior of the receiver. If
the bottom disabled blocks are enabled, this example will also show
the original bits of the packets against the received and recovered
packets. Because the timing synchronization has a non-consistent
consume/produce model, the delay between the transmitter and receiver
is not constant, especially when a timing offset is applied. The
initial delay value is correct for the very start of the simulation
but will quickly walk away and must be manually tuned to keep the
streams synchronized.

The uhd_corr_and_sync_tx and _rx are designed for OTA testing. They
allow us to set the center frequency and gains (both digital and
analog) of both receiver and transmitter.

QTGUI Time Sink Improvements (Tom Rondeau)

Also derived from work begun at GRHACK13, time sinks from gr-qtgui now
display stream tags as a "key: value" on the sample they are
associated with. This behavior can be turned off using the drop-down
context menu (middle mouse button) and can be selected for a given
input stream. By default, all tags are shown on all input streams.

Time sinks also include triggering features. The triggering parameters
can be set in the Properties box of the sink or by using the drop-down
context menu (middle mouse button). The triggering features include
setting the mode to "free running," "auto trigger," "normal trigger,"
and "tag trigger." The auto and normal trigger modes are done based on
the slope of the line (positive or negative) crossing a set threshold
level. Tag triggering is done off a tag's key and will trigger if that
key is seen. Triggering is done on the left-most side of the screen by
default (delay = 0). A delay can be set from 0 to the end of the
visible timeline. If set outside this range, it is automatically
restricted to these bounds. The input channel to trigger off can also
be set.

Channel Model Additions (Tim O'Shea)

Three new channel model blocks have been added:

  • gr::channels::cfo_model implements a bounded random-walk on center
    frequency offset
  • gr::channels::sro_model implements a bounded random-walk on sample
    rate offset
  • gr::channels::dynamic_channel_model is a hierarchical block that
    combines AWGN, sample rate offset, center frequency offset, Rayleigh
    and Rician fading, channel impulse response, and power delay profile
    modeling.

OFDM Reference Code Updates

Martin Braun continues to improve the new OFDM reference code released
in 3.7.0, with new features such as scrambling and header error
checking. This is an area of rapid development and feedback on usage
is encouraged.

Digital Filter and Windows Cleanup (Tom Rondeau)

The code for implementing window functions has been overhauled, to
remove duplicated code between gr::fft and gr::filter, and fix a few
bugs.

Coverity Scan Bug Fixes

In July this year, Philip Balister set GNU Radio up to begin using the
Coverity static analysis tool, and an announcement went out on the
discussion list in October:

https://lists.gnu.org/archive/html/discuss-gnuradio/2013-10/msg00014.html

Since then, 25 identified bugs have been fixed and closed by several
contributors. If you are looking for a way to get involved in GNU
Radio, this is a great place to start.

Other new blocks or block updates:

  • gr::blocks::stream_to_tagged_stream is a new block to add periodic
    length tags, allowing uses like feeding file sources into tagged
    stream blocks. (Martin Braun)
  • gr::blocks::file_sink now has the ability to append to a file,
    making it easier to use with IPC instead of files. (Bastian Bloessl)
  • gr::blocks::chunks_to_symbols can now receive symbol table updates
    via async messages (Tom Rondeau)
  • gr::blocks::tag_debug can now filter/display single keys (Tom Rondeau)
  • gr::blocks::repack_bits can now update input and output values via
    async messages (Tom Rondeau)
  • gr::digital::constellation_soft_decoder is a new block that produces
    soft decisions as floats instead of hard decisions (Tom Rondeau)
  • gr::digital::constellation_modulator is a new block that uses a
    constellation object for configuration (Tom Rondeau)
  • gr::digital::constellation_receiver now has ControlPort interfaces
    and can receive a new constellation configuration via async message
    (Tom Rondeau)
  • gr::digital::costas_loop can now be monitored remotely by
    ControlPort. It can also now receive an initial phase offset
    estimate via an upstream added stream tag. (Tom Rondeau)
  • gr::digital::pfb_clock_sync can now receive an initial timing offset
    estimate via an upstream added stream tag (Tom Rondeau)
  • gr::digital::additive_scrambler now supports stream tags (Martin Braun)

VOLK Library Updates

Improved support for detecting and using AVX instructions was added,
and a number of toolchain related bugs were cleaned up. Tim O'Shea
added a new inverse square root kernel and speedups for
gr::analog::agc3.

Bug Fixes

There were too many bug fixes to list them individually; those
interested may look at the git log changes between tags v3.7.1 and
v3.7.1.1:

$ git shortlog v3.7.1...v3.7.1.1