The September updates for GNU Radio are out. Here is the changelog summary for v3.9.3.0.

[] - 2021-09-30

This is an API compatible update to GNU Radio 3.9. Code written for 3.9.X versions should compile and link without modification. The ABI is not guaranteed to be compatible, so a rebuild of OOT modules may be necessary.



  • Many cleanups and some C++ modernization changes
  • Replace Boost with stdc++ equivalents (ongoing effort)
  • Logging cleanup and performance improvements (ongoing effort)
  • Cleanup of many unused includes
  • Various block yaml cleanups and repairs
  • Use Soapy instead of UHD for flowgraph testing in gr-analog and gr-dtv


  • Improvements in C++ templates and code generation, more blocks are usable
  • Add specification of packages to find (via cmake) for C++ templates
  • Fix C++ hier block param template
  • Add GUI hints for widgets in C++ code generation
  • Add no_quotes() convenience function to strip quotes from strings, callable from templates
  • Allow short and byte as valid types in an enum
  • Fix desync when dragging block (block would not always track cursor)
  • Correctly evaluate interdependent variables
  • Allow error messages to be copied to clipboard
  • Update disabled blocks if they depend on others


  • Deprecate tag_checker class (will be removed in 3.10)
  • Detect and follow symbolic links for installation prefix in gr::prefix()
  • Add “<” operator for comparison of tags (instead of offset_compare())


  • New Matrix Interleaver block
  • Throttle and Head blocks can be input-only when no output is needed, improving performance
  • Fix tag propagation in (un)pack-k-bits blocks
  • Fix namespace for nco and vco in benchmarks


  • New Async CRC16 block
  • Add NRZI option to Differential En/Decoder
  • Constellation performance improvements
  • Fix constellation normalization by average power
  • Remove unimplemented msg output port from Chunks to Symbols block
  • Make unpacking of bits optional in GMSK modulator so the blocks can accept unpacked bits
  • In GFSK/GMSK hier blocks, replace M&M clock recovery with newer and more capable Digital Symbol Sync block


  • Cleanups and code improvements


  • Add a “shift” paramenter to Log Power FFT, to place DC bin at center


  • Performance improvement in PFB Arbitrary Resampler when interpolating, especially at low rates


  • Fix display of tags on the last sample (would be dropped)
  • Python wrapping: replace pyqwidget() with qwidget() - this is not intended to be a visible fix, but is mentioned here in case it causes trouble for anyone
  • C++ generation
    • add double quotes to cpp_opts keys with colons
    • position windows correctly depending on gui_hint
    • use option attributes to generate enums
    • use the cpp enums for wintype and trigger_type


  • Fix input filename in freq hopping examples
  • Make RFNoC a separately enabled component in cmake
  • Python bindings for rfnoc_graph,_rx/tx_streamer


  • U and V channels were reversed on sink blocks


  • Added message support for SoapySDR 0.8 API


  • Set VERSION_PATCH to 0 instead of “git” in new modules
  • Fix “rm”, “bind”, disable”, “rename” and “makeyml” which had unexpected side effects, or did not work as a user would expect

Build System

  • Correct minimum version checking for Mako
  • Ensure that RC_*_VERSION are numeric (Windows)
  • Fix finding libunwind
  • Pass through extra arguments to GR_PYTHON_INSTALL to install command
  • Remove absolute paths and private links from exported targets
  • Add gir1.2-gtk-3.0 as deb runtime dependency


  • Code of Conduct updates and link to Wiki


  • Do not error out on deprecations, allowing testing of deprecated code


At LEAST the following people contributed code to this release.

  • Adrien Michel
  • cmrincon
  • Daniel Estévez
  • David Pi
  • David Winter
  • Håkon Vågsether
  • Igor Freire
  • japm48
  • JaredD
  • Jason Uher
  • Jeff Long
  • jfmadeira
  • jmadeira
  • Marc L
  • Marcus Müller
  • Mark Bauer
  • Martin Braun
  • Nicholas Corgan
  • Oleksandr Kravchuk
  • Pavon
  • Rohan Sharma
  • Ron Economos
  • Ryan Volz
  • Seth Hitefield
  • Solomon
  • Solomon Tan
  • Volker Schroer