GNU Radio – the Free and Open Software Radio Ecosystem

Overview

Build Version AUR Docs Packaging status

GNU Radio is a free & open-source software development toolkit that provides signal processing blocks to implement software radios. It can be used with readily-available, low-cost external RF hardware to create software-defined radios, or without hardware in a simulation-like environment. It is widely used in hobbyist, academic, and commercial environments to support both wireless communications research and real-world radio systems.

Please visit the GNU Radio website at https://www.gnuradio.org/ and the wiki at https://wiki.gnuradio.org/. Bugs and feature requests are tracked on GitHub's Issue Tracker. If you have questions about GNU Radio, please search the discuss-gnuradio mailing list archive, as many questions have already been asked and answered. Please also subscribe to the mailing list and post your new questions there.

How to Install GNU Radio

Prebuilt Binaries

The recommended way to install GNU Radio on most platforms is using available binary package distributions.

The following command is for Debian, Ubuntu, and derivatives. It will install Release 3.7 with Python2.

sudo apt install gnuradio

For other operating systems, see Installing from Binaries

PyBOMBS

PyBOMBS is good at building GNU Radio, UHD, and various Out of Tree (OOT) modules from source and then installing into a specified user directory rather than in the system files. PyBOMBS detects the user's Operating System and loads all of the prerequisites in the first stage of the build.

For a quick start, open a terminal window and enter the following commands. This will install Release 3.8 with Python3.

sudo -H pip3 install PyBOMBS
pybombs auto-config
pybombs recipes add-defaults
pybombs prefix init ~/gnuradio -R gnuradio-default

Wait. The terminal will show the progress.

To run GNU Radio Companion, enter:

    pybombs run gnuradio-companion

Complete PyBOMBS instructions are in the PyBOMBS README.

From Source

Complete instructions for building Gnuradio from source code are detailed in Installing GR From Source.

Legal Matters

Some files have been changed many times throughout the years. Copyright notices at the top of source files list which years changes have been made. For some files, changes have occurred in many consecutive years. These files may often have the format of a year range (e.g., "2006 - 2011"), which indicates that these files have had copyrightable changes made during each year in the range, inclusive.

Comments
  • Install on Macbook M1 Apple Silicon

    Install on Macbook M1 Apple Silicon

    I tried sudo port install gnuradio, but I get the following error:

    --->  Fetching archive for python37
    --->  Attempting to fetch python37-3.7.10_1.darwin_20.arm64.tbz2 from http://fco.it.packages.macports.org/python37
    --->  Attempting to fetch python37-3.7.10_1.darwin_20.arm64.tbz2 from https://lil.fr.packages.macports.org/python37
    --->  Attempting to fetch python37-3.7.10_1.darwin_20.arm64.tbz2 from https://mse.uk.packages.macports.org/python37
    --->  Fetching distfiles for python37
    Error: Failed to fetch python37: python37 cannot yet be built for Apple Silicon
    Error: See /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_python37/python37/main.log for details.
    Error: Follow https://guide.macports.org/#project.tickets to report a bug.
    Error: Processing of port gnuradio failed
    

    Has anyone had success in installing gnuradio on a Macbook M1? Is it a problem of Macports or is it known that gnuradio cannot be compiled yet on M1? Thanks

    Bug Mac OS X 
    opened by Vinz87 77
  • Disallow copy broke MSVC/clang-cl

    Disallow copy broke MSVC/clang-cl

    The change in https://github.com/gnuradio/gnuradio/pull/3619 has broken MSVC + clang-cl build for me. From clang-cl while compiling e.g. filterbank.cc and others:

    In file included from f:\gv\VC_2019\VC\Tools\MSVC\14.27.29110\include\string:11:
    In file included from f:\gv\VC_2019\VC\Tools\MSVC\14.27.29110\include\xstring:14:
    f:\gv\VC_2019\VC\Tools\MSVC\14.27.29110\include\xmemory(694,76): error: call to deleted constructor of
          'gr::filter::kernel::fir_filter<std::complex<float>, std::complex<float>, float>'
            ::new (const_cast<void*>(static_cast<const volatile void*>(_Ptr))) _Objty(_STD forward<_Types>(_Args)...);
                                                                               ^      ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    f:\gv\VC_2019\VC\Tools\MSVC\14.27.29110\include\xmemory(1508,35): note: in instantiation of function template
          specialization 'std::_Default_allocator_traits<std::allocator<gr::filter::kernel::fir_filter<std::complex<float>,
          std::complex<float>, float> > >::construct<gr::filter::kernel::fir_filter<std::complex<float>,
          std::complex<float>, float>, gr::filter::kernel::fir_filter<std::complex<float>, std::complex<float>, float> &>'
          requested here
            allocator_traits<_Alloc>::construct(_Al, _Unfancy(_Last), _STD forward<_Types>(_Vals)...);
                                      ^
    ...
    F:/gv/dx-radio/gnuradio/gv-build/include\gnuradio/filter/fir_filter.h(41,5): note: 'fir_filter' has been explicitly
          marked deleted here
        fir_filter(const fir_filter&) = delete;
        ^
    

    In my lack of C++ knowledge, I fail to understand what the problem is. It seems to work with GNU-C++ since this change has been there for almost 4 months.

    But trying a:

        fir_filter (const fir_filter &);
        fir_filter (fir_filter &&) = default;
        fir_filter & operator = (const fir_filter &);
        fir_filter & operator = (fir_filter &&) = default;
    
    

    causes 6 unresolved symbols during link.

    filter Windows 
    opened by gvanem 47
  • Tags for the

    Tags for the "next" branch

    We're planning on dropping Qt 4 from Homebrew soon, so I'm wondering if it would be possible to get some tags on a regular basis for the next branch so that we can build gnuradio with Qt 5 without "inventing" releases out of thin air by unilaterally selecting git commit revisions from next.

    opened by ilovezfs 44
  • log4cpp-related linking error with OOT-packages when GNURadio was built with log4cpp

    log4cpp-related linking error with OOT-packages when GNURadio was built with log4cpp

    I've just built GNURadio 3.7.10.1 with log4cpp support but now gr-osmosdr fails to compile because of "undefined reference to log4cpp:Appender..." errors since it does not have the information to also link against log4cpp.

    Here's the full buildlog from gr-osmosdr: https://blackhole.pmtu.de/.dump/gr-osmosdr-buildlog-fail.txt

    I actually worked around by adding log4cpp to the linker flags manually but it still does not feel like the proper way to address this problem... https://blackhole.pmtu.de/.dump/gr-osmosdr-fix-log4cpp-linking-error.diff

    Conditionally adding the lib4cpp linking flags to gnuradio-runtime.pc could be a solution.

    GNUradio was build in a clean chroot-environment. CMake automatically detected log4cpp and set ENABLE_GR_LOG to ON.

    Here's a the GNURadio buildlog: https://blackhole.pmtu.de/.dump/gnuradio-buildlog-log4cpp.txt

    libgnuradio-runtime.so is linked to liblog4cpp.so and so should all programs that make use of this library ... https://blackhole.pmtu.de/.dump/ldd_libgnuradio-runtime_so.txt

    Bug 
    opened by mnhauke 43
  • Issue with thrift and maint-3.7 gnu build

    Issue with thrift and maint-3.7 gnu build

    OS: CentOS 8 GNU Rev: maint-3.7 Thrift Rev: 0.10.0 Cmake Rev: 3.11.4 Python: 2.7

    #40 815.6 -- Checking for module 'thrift' #40 815.7 -- Found thrift, version 0.10.0 #40 815.8 -- #40 815.8 -- Python checking for Thrift #40 815.8 -- Python checking for Thrift - found #40 815.8 -- Found THRIFT: /opt/truearrow/6.2/lib/libthrift.so
    #40 815.8 -- Found and enabling Thrift backend to ControlPort

    During the make build (from source), GNURADIO finds thrift and enables control port, which is what I want, but during the make process I get the error below.

    Any suggestions?

    Thank you

    Mark

    #40 343.6 [ 34%] Built target pygen_gr_vocoder_swig_79184 #40 343.7 /bin/ld: cannot find -lthrift #40 343.7 collect2: error: ld returned 1 exit status #40 343.7 make[2]: *** [gnuradio-runtime/lib/CMakeFiles/gnuradio-runtime.dir/build.make:1171: gnuradio-runtime/lib/libgnuradio-runtime-3.7.13.5.so.0.0.0] Error 1 #40 343.7 make[1]: *** [CMakeFiles/Makefile2:690: gnuradio-runtime/lib/CMakeFiles/gnuradio-runtime.dir/all] Error 2 #40 343.7 make: *** [Makefile:163: all] Error 2 #40 ERROR: executor failed running [/bin/sh -c source ./install_gnuradio.sh]: exit code: 2

    opened by mwk088 42
  • 3.8 Packaging: Test buildability and inform Distro maintainers

    3.8 Packaging: Test buildability and inform Distro maintainers

    We'll need to verify that the current build specifications for

    • Debian (hence Ubuntu)
    • Fedora / CentOS
    • Arch
    • Gentoo

    can and will be adapted to 3.8.

    @noc0lour did deb builds, I think, and we have Maitland, who is generally pretty awesome.

    I have specs that have become dated from the next merge period.

    For Gentoo, we need to reach out to the maintainer, whom we know (whose IRC handle I just can't remember right now).

    For Arch: we need to figure out.

    packaging 
    opened by marcusmueller 41
  • QT GUI Chooser causing problems in GNU Radio v3.8.2

    QT GUI Chooser causing problems in GNU Radio v3.8.2

    Adding the QT GUI Chooser block to a simple working scheme causes a failure to RUN and generates error code.

    Environment is new GNU Radio v3.8.2 installation on Linux Mint 20 with Python 3.8.5. Working schematic is a Signal Source into a QT GUI Sink via a Throttle. A QT GUI Range slider is used to control the frequency - all works fine.

    Simple addition of adding the (unconfigured) Chooser to the schematic causes the issue. Correctly configuring the Chooser for the intended operation does not remove the problem.

    The error starts with - Generate Error: (NameError("'i' is not defined")......

    Two files attached - screen snapshot of the schematic and a text file of the error.

    Simple_project_using_GUI_Chooser

    Simple_project_plus_configured_GUI_Chooser.txt

    opened by bobbryce 40
  • zeromq: add port getter for streaming zmq blocks

    zeromq: add port getter for streaming zmq blocks

    Add a port getter/accessor that parses the zmq endpoint. If it is tcp, then parse out the port and return as an integer. New QA tests

    • the port accessor with a known port
    • the loopback test for pubsub that already exists, but uses an ephermeral port for the sink that is read back for the source to attach to

    Current issue that I have with this is that it requires some string parsing and that the message blocks don't inherit from base_{source,sink}_impl so they don't get the feature. Also, we might want to make this more generic as an endpoint() accessor and force users of it to parse the port on their own. That's a design choice I don't have strong feelings on since I only care about the port and this makes it easier for me although it is less generic and potentially more error prone due to string parsing.

    opened by n-west 37
  • Add new in-tree module gr-pdu and move existing pdu functionality out of gr-blocks

    Add new in-tree module gr-pdu and move existing pdu functionality out of gr-blocks

    The gr-pdu in tree module is intended to house PDU processing blocks, and enable expansion of GNU Radio's PDU API without cluttering the catch-all gr-blocks. This commit builds and passes QA though there may be some minor doxygen kinks to work out.

    Specifically, this PR moves the following items from gr-blocks to gr-pdu:

    • pdu (noblock)
    • pdu_filter block
    • pdu_remove block
    • pdu_set block
    • pdu_to_tagged_stream block
    • random_pdu block
    • socket_pdu block
    • stream_pdu_base (noblock)
    • tagged_stream_to_pdu block
    • tcp_connection (noblock)
    • tuntap_pdu block

    And adds the following blocks from gr-pdu_utils to gr-pdu:

    • pdu_frequency_modulator_fc (formerly pdu_gmsk_fc, but this takes an arbitrary filter as an input and was poorly named originally)
    • pdu_split

    This commit also removes the gr::blocks::pdu namespace and incorporates this directly into gr::pdu.

    The intention is to get this merged so that it is not waiting and becoming stale while I go through and add the rest of the blocks that are in GREP-0020 from the gr-pdu_utils OOT. This PR breaks the gr-blocks API, but this seems like a reasonable way to go about this.

    This is a follow-up PR to #4022, and is now intended to be mergeable whenever 3.10 is stable. There is some more discussion of the motivation there.

    The GREP this begins addressing is here.

    API Change blocks PMT 
    opened by jacobagilbert 36
  • Frequency Xlating FIR Filter block is not phase-continuous

    Frequency Xlating FIR Filter block is not phase-continuous

    The Frequency Xltating FIR Filter block is not phase-continuous when the frequency is updated. The prototypical use case where this causes problems is when it's used to correct the the Doppler shift of a PSK signal.

    The cause is that freq_xlating_fir_filter_impl::build_composite_fir() doesn't take into account the current phase of the rotator d_r when rebuilding the taps of the FIR filter after a frequency change. I think that it can be fixed by multiplyin the taps by a suitable complex exponential that depends on the phase of d_r (I didn't think of the details, but I think it's easy to write the formula).

    The rotator doesn't have a method to get its current phase. We could do d_r.rotate(gr_complex(1.0, 0.0)), and then d_r.set_phase() with what we get (since calling rotate() increases the phase, which we don't want to do here). However, it seems much cleaner to add a get_phase() method to the rotator.

    I'll probably send a PR with this in a few days/weeks, unless someone says here that they want to do it themselves.

    opened by daniestevez 36
  • grc: Un-hide option_attributes from rest of parameters

    grc: Un-hide option_attributes from rest of parameters

    Following the discussion from https://github.com/gnuradio/gnuradio/issues/1912 and this gist.

    This fixes the problem with a lot of blocks having some of their parameters handled as raw while the parameter's dtype is in fact dependent on the block's chosen type. This happened because the namespace didn't contain the option_attributes when evaluating the block.

    I've given this fix its own PR because I'm only 90% sure this doesn't break anything.

    GRC 
    opened by haakov 36
  • grc: fix debug logging and GTK import order

    grc: fix debug logging and GTK import order

    Description

    Replacement PR for #5220.

    This fixes the logger prefix which can change depending on how GRC is launched. This also fixes an issue with importing GTK if multiple versions are installed.

    Related Issue

    Fixes the logger prefix in grc (#4628)

    Which blocks/areas does this affect?

    Testing Done

    Checklist

    GRC Backport-3.10 
    opened by sdh11 1
  • pdu: Don't enable blocks and filter

    pdu: Don't enable blocks and filter

    Not required: e36f2fab5 ("pdu: Remove unused dependencies", 2022-06-01)

    Signed-off-by: Chris Mayo [email protected]

    Description

    Testing Done

    Build 3.10.5.0 with this patch.

    Checklist

    CMake pdu Backport-3.10 
    opened by cjmayo 0
  • Custom Python Block : self.set_msg_handler accept python lamda functions to allow hooking

    Custom Python Block : self.set_msg_handler accept python lamda functions to allow hooking

    Feature Description

    Let's say I want to write a custom python block that has a configurable number of message input ports.

    I try to do this with code in the init function like this:

    for i in range(N_ports): hook = lambda x: self.original_handler(x, extra_args) port_name = "input_"+str(i) self.set_msg_handler(pmt.intern(port_name),hook)

    I get a runtime error "gnuradio.gr.gr_python_block_gateway" object has no attribute "<lambda> ".

    Since this is a runtime error, it may be impossible in the current framework with how object memory is handled, but it would be cool if you could make it happen.

    Feature Urgency

    medium (would be nice to have in the near future)

    More Information

    Maybe there is already another way to have dynamically configurable ports using custom python blocks?

    Feature Request 
    opened by jwkunz 0
  • grc: snippets before init is called

    grc: snippets before init is called

    Description

    There are situations where snippets need to be inserted before block initialization, such as when a block constructor makes contact with an external server, it might be handy to initialize the server or check whether it is ready prior to calling the flowgraph init function that calls the block constructor

    The problem with the current construct is snippets can only be injected after the flowgraph is initialized, since they use self as a reference to the flowgraph object. There is probably a better way to do this but the easy solution is to pass None as what will become self, and snippets that are inserted before main are not able to make calls to self

    Notes:

    1. Main Before Init is placed second on the list, so Main After Init is the default

    I'm wondering if it would be more useful to have the injection point inside the top_block.__init__ after variables are instantiated, then the snippet would have access to variables

    Related Issue

    None

    Which blocks/areas does this affect?

    Just GRC when snippets are used

    Testing Done

    Checklist

    GRC Backport-3.10 
    opened by mormj 3
  • fec: fix tagged decoder frame size for CC_TERMINATED

    fec: fix tagged decoder frame size for CC_TERMINATED

    Description

    This fixes a bug in the calculation of the frame size used by the tagged decoder that affects the CC decoder in terminated mode.

    Currently, tagged_decoder calls the set_frame_size() method of the decoder with a size computed as the input size multiplied by the rate.

    In the cc_decoder, the frame_size parameter of the set_frame_size() method is used to calculate and set d_veclen. The value of d_veclen is used to determine how many forward steps (butterflies) the Viterbi algorithm should be run. The number of input items that are read in d_veclen forward steps is d_veclen * d_rate (note that d_rate is actually the inverse of the rate; typically, d_rate == 2). Therefore, the size of the input buffer should be as large as this value, and in most cases it should be equal, because we want the cc_decoder to look at all the provided input.

    The d_veclen variable is related to d_frame_size, which indicates how many output bits are produced by the decoder. The value of d_frame_size is equal to the parameter of set_frame_size() in all cases except in terminated mode with byte padding, in which case the byte padding is subtracted when computing d_frame_size. The value of d_veclen is equal to d_frame_size + d_k - 1 in terminated and streaming modes, and to d_frame_size in truncated mode.

    The problem with the current code is that in tagged_decoder the set_frame_size() method is called with ninput_items[0] * rate. In the streaming and terminated modes this will cause d_veclen to be too large. The forward steps (butterflies) of the Viterbi algorithm will read past the end of the input buffer. This is undefined behaviour and can cause some bit errors at the end of the decoded codeword (the effect of reading past the end of the buffer is essentially extending the codeword with 12 symbols of garbage).

    This problem does not happen in the async_decoder because there is some code that computes a "diff", which works out to be

    d_k - 1 + d_padding * rate()
    

    in terminated mode and 0 in all other cases. The diff is subtracted from the frame size. This subtraction gives the correct d_veclen calculation, so that the butterflies do not read past the input end.

    This commit fixes the tagged_decoder when used with the terminated CC decoder by adding the same code as in the async_decoder to calculate and subtract this "diff" value.

    Some caveats:

    1. This commit changes the size of the output packets of tagged_decoder when used with a terminated CC decoder. Formerly, the output packets were 6 bits longer, as if the tail bits were included in the output. However, having these 6 extra bits was just an artifact of looking 12 symbols past the end of the input. The cc_decoder_impl::chainback_viterbi() function is not prepared to extract tail bits in the terminated case. This chainback extracts bits "as they exit the shift register on the right", so tail bits cannot be extracted, because they "never exit the shift register". (Here I have in mind the usual depiction of a convolutional encoder, where input bits are shifted from left to right into a shift register).

    The CC_TRUNCATED case in cc_decoder_impl::generic_work() has some additional code to extract additional bits which haven't "exited the shift register" yet, because it is mandatory to extract them in this case (they are the last 6 bits of the message).

    It think there is no good use case for attempting to extract the tail bits in the terminated case, so this modification seems a good way forward. The new behaviour also matches that of async_decoder, which does not output tail bits.

    However, this breaks tag propagation of the tagged_decoder when used with the terminated CC decoder, because the block calls set_relative_rate() with the nominal rate (1/2), which is slightly different from the true rate once we take into account the fact that tail bits are dropped. This could be fixed by propagating tags manually in the work() function.

    1. The streaming mode is still broken, both when used with the async_decoder and with the tagged_decoder. Since for the streaming case diff is 0 but d_veclen includes the term d_k - 1, the streaming mode reads past the input buffer. It isn't really possible to run the streaming mode properly with the async_decoder or tagged_decoder (it should be run with the decoder_impl.cc), because the streaming mode requires history (some overlapping input items between consecutive calls), which is not available with the async_decoder or tagged_decoder.

    2. The code copied from async_decoder has a "watch out" comment stating that it might be over-specializing for the CC decoder in terminated mode. It is true that this code seems specially crafted to cover this very specific case, but as far as I have been able to think, it does not affect negatively any other cases (taking into account other modes of the CC decoder and other FEC decoders).


    I'm specially interested in feedback regarding point 1 above. If we think that this is a good way forward, then I can implement the manual tag propagation. If we think we don't want to change the output size and still have the 6 tail bits in the output, a different approach would be needed to fix the bug.

    Which blocks/areas does this affect?

    Affected blocks in gr-fec: Tagged Decoder and CC Decoder.

    Testing Done

    I could provide an ad-hoc test flowgraph that shows the problem if needed.

    Checklist

    FEC Bug Fix Backport-3.10 
    opened by daniestevez 0
  • Empty Python Snippet causes invalid rendered python

    Empty Python Snippet causes invalid rendered python

    What happened?

    If I plop down a snippet block, but don't put any code in the block, the rendered python looks like:

    def snipfcn_snippet_0(self):
    
    
    def snippets_main_after_init(tb):
        snipfcn_snippet_0(tb)
    

    Which will cause a python parsing error.

    GRC should have the logic to put a pass in there, or not add the snippet if it is empty

    System Information

    OS: (Linux Distro, Mac, Windows) GR Installation Method: (native distro packages - apt, rpm, etc., Conda, Source

    GNU Radio Version

    3.11-git (main)

    Specific Version

    0.0.0.0

    Steps to Reproduce the Problem

    Drop an empty python snippet block in GRC and render the flowgraph

    Relevant log output

    No response

    Bug GRC good first issue Python 
    opened by mormj 1
Releases(v3.10.5.0)
  • v3.10.5.0(Dec 19, 2022)

    [3.10.5.0] - 2022-12-19

    Runtime

    • Python block have access to the block logger, as in C++
    • Default log level changed to INFO (from OFF)
    • Memory-based logger gr.dictionary_logger_backend() added for log debugging
    • API Note: The Python block gateway is now completely implemented in the PyBind11 wrapper, in order to clean up Python dependencies. This is technically an API change, but should not have any external effect.
    • PMT serialization of Complex32 vectors is now REAL | IMAG on all platforms
    • Python IO signature replication (multiple ports specified by one signature) fixed

    GRC

    • Continue processing block connections after a connection error occurs
    • Drawing/scaling fixes that improve user experience on HiDPI and Windows machines

    Build system and packaging

    • Many deprecation warnings fixed
    • Make target link libraries PRIVATE wherever possible, removing unnecessary downstream dependencies
    • Add Fedora 37 and drop Fedora 35 CI targets
    • Conda re-rendered with more recent packages - thanks to Ryan Volz for making Conda an easy-to-use, cross-platform method of installing GNU Radio
    • Debian and Fedora packaging specs are no longer included in the code base, since they were out of date, and are maintained by downstreams

    Testing

    • Code formatting rules for clang format updated to v14
    • Removed all compiler warning suppression
    • Enable Python block testing for Conda on macOS
    • Many other improvements that make maintenance easier - thanks again to Clayton Smith. In the process of fixing tests, a number of latent bugs were fixed throughout the code.

    gr-analog

    • AGC3 performance and bug fixes
    • Python has access to control_loop parent class in PLL blocks
    • CTCSS detection of standard tones improved by fixing floating point comparison

    gr-blocks

    • Probe Signal cross platform reliability improved by better thread synchronization

    gr-digital

    • CRC32 and CRC16 blocks use little-endian order regardless of host order. This is a wire format change. The options were to have different endian machines unable to communicate, or older and newer versions unable to communicate. Note that there is a more general set of blocks (CRC Append and CRC Check) that are recommended for use wherever possible.
    • Packet headers use consistent bit order across machines
    • Floating point/rounding fix in constellation lookup table

    gr-fec

    • LDPC G matrix n and k can be access from Python
    • LDPC matrix output size calculation corrected
    • CCSDS/Viterbi path metrics overflow fix

    gr-network

    • Improve UDP Source/Sink efficiency by removing a layer of buffering and using the GR circular buffer instead of the Boost equivalent

    gr-qtgui

    • Fixed Python code generation for Msg CheckBox, Digital Number Control, Toggle Button, Toggle Switch

    gr-soapy

    • Sources will generate rx_time, rx_freq and rx_rate tags, as in UHD sources, where supported by the underlying Soapy driver

    gr-uhd

    • Re-enable uhd.find_devices(), in addition to uhd.find()
    • RFNoC: generate correct Python code when using clock/time source
    • RFNoC: allow specification of adapter IDs for streamers
    • RFNoC: enable setting of vlen and types for streamers
    • RFNoC: streamers pay attention to stream args
    • RFNoC: sync block controller with gr-ettus OOT
    • RFNoC:set_property() and get_property() added to the C++ and Python APIs
    • RFNoC: Python binds added for rfnoc_block_generic

    gr-zeromq

    • Sinks will optionally block on full queue, providing backpressure. Previously, overflow data was dropped.
    Source code(tar.gz)
    Source code(zip)
    gnuradio-3.10.5.0.tar.gz.asc(252 bytes)
    gnuradio-3.10.5.0.zip.asc(252 bytes)
    gnuradio-software-signing-key.asc(1.13 KB)
  • v3.10.4.0(Sep 16, 2022)

    GNU Radio Release v3.10.4.0

    [3.10.4.0] - 2022-09-16

    Changed

    Project Scope

    • Replace get_initial_sptr() calls with make_block_sptr() calls. There were a number of places the incorrect function was being used.

    Runtime

    • Use correctly typed arguments to log messages to prevent build errors.

    GRC

    • Add xfce4-terminal and urxvt to the list of terminal emulators discovered during the build process.
    • Suppress GUI hint errors that were being shown in the terminal window.
    • Use integers for screenshot size (floats were causing Cairo errors).

    Build system and packaging

    • Reformat cmake files and make cmake formatting part of the workflow.
    • Allow GNU Radio to be a part of other cmake-based projects.
    • Correct linking to libiio and libad9361 on macOS.
    • Update method for determining Python installation directory. This should work correctly now on (all?) distro releases.

    gr-blocks

    • New Block Interleaver/Deinterleaver interleaves blocks of symbols
    • Correct calculation of items_remaining in File Source, which allows seek() to work correctly.
    • Add an example for Wavefile Sink

    gr-digital

    • Deprecate the CRC32 and CRC16 blocks, which will be removed in the future. There are more general CRC blocks which do the same thing (and more).

    gr-filter

    • Fix demo for PFB channelizer

    gr-iio

    • FMCOMMS2 Sink assumes CS16 data is scaled to 32768, rather than 2048.
    • FMCOMMS2 returns the correct samples for the second channel in 2-channel mode.

    gr-trellis

    • Correct Python bindings for trellis::metrics.

    gr-qtgui

    • Range widget can now output messages when value changes.
    • Add C++ code generation for Time Sink
    • Regenerate Python bindings for some blocks when necessary.
    • Waterfall Sink correctly uses half spectrum for float input.

    gr-uhd

    • Add Python bindings for the UHD find() functino.

    gr-zeromq

    • Support newer get() and older/deprecated getsockopt() functions in cppzmq depending on availability.

    Modtool

    • Parse IO signatures with or without gr:: prefix.

    Documentation

    • Update certain file lists to keep build paths out of documentation.

    Testing

    • Update Conda recipe for Qt 5.15 and re-render CI support files.
    • Add testing on Ubuntu 22.04.
    • Link tests directly against spdlog with not linking to GR runtime.
    • Ignore Python "missing whitespace after keywork" formatting error.
    Source code(tar.gz)
    Source code(zip)
    gnuradio-3.10.4.0.tar.gz.asc(252 bytes)
    gnuradio-3.10.4.0.zip.asc(252 bytes)
    gnuradio-software-signing-key.asc(831 bytes)
  • v3.9.8.0(Sep 16, 2022)

    GNU Radio Release v3.9.8.0

    [3.9.8.0] - 2022-09-16

    This is last quarterly release of GNU Radio 3.9. Version 3.10 is mostly compatible with 3.9, so we recommend that all users of 3.9 migrate to 3.10 when able.

    Changed

    Project Scope

    • Replace get_initial_sptr() calls with make_block_sptr() calls. There were a number of places the incorrect function was being used.

    GRC

    • Add xfce4-terminal and urxvt to the list of terminal emulators discovered during the build process.
    • Suppress GUI hint errors that were being shown in the terminal window.
    • Use integers for screenshot size (floats were causing Cairo errors).

    gr-blocks

    • Correct calculation of items_remaining in File Source, which allows seek() to work correctly.

    gr-filter

    • Fix demo for PFB channelizer

    gr-trellis

    • Correct Python bindings for trellis::metrics.

    gr-uhd

    • Add Python bindings for the UHD find() functino.

    Testing

    • Ignore Python "missing whitespace after keywork" formatting error.
    Source code(tar.gz)
    Source code(zip)
    gnuradio-3.9.8.0.tar.gz.asc(252 bytes)
    gnuradio-3.9.8.0.zip.asc(252 bytes)
    gnuradio-software-signing-key.asc(831 bytes)
  • v3.10.3.0(Jun 21, 2022)

    Changed

    Project Scope

    • Continue replacement of Boost functionality with standard C++ continues, where practical, making the code more maintainable.
    • Fix more flaky CI tests that were failing unnecessarily. This helps greatly with maintenance.

    gnuradio-runtime

    • Only catch Thrift transport exceptions
    • Import PyQt5 before matplotlib to work around a bug
    • Fix broken log format string in set_min_output_buffer
    • Process system messages before others. This helps with orderly flowgraph termination.
    • Custom buffers: add missing (simulated) data transfer to input/output_blocked_callback functions in host_buffer class
    • Fix Mach-kernel timebase (numer and denom were reversed)
    • Fix signed integer overflows in fixed-point table generation

    GRC

    • Add parentheses on arithmetic expressions to avoid operator precedence problems in templated code
    • Fix create hier / missing top_block error

    Build system and packaging

    • CI: Add testing for Fedora 36, remove Fedora 34.
    • cmake: Use platform-specific Python install schemes
    • cmake: Always prefix git hash used as version with "g"
    • cmake: Allow MPIR/MPLIB package find to fail gracefully
    • cmake: Remove 'REQUIRED' flag for Volk

    gr-blocks

    • Fix rotator_cc scheduled phase increment updates
    • Wavefile Sink: add support for Ogg Opus if libsndfile is >= 1.0.29
    • Probe Signal: synchronize access to d_level to prevent race conditions

    gr-digital

    • Use memcmp for CRC comparisons to avoid alignment errors

    gr-dtv

    • Use unsigned integer for CRC calculation
    • Fix use of uninitialized memory
    • Fix initialization of L1Post struct

    gr-filter

    • Fix various bugs in Generic Filterbank

    gr-iio

    • Fix grc pluto sink attenuation callback

    gr-qtgui

    • Several sinks produce wrong error messages, when GUI Hint is used. Reorder params in yml files to fix.

    gr-soapy

    • Deactivate stream before closing. Some modules depend on this behavior.

    gr-uhd

    • Implement get_gpio_attr()

    Code generation tools

    • C++ generation: Fix various template errors

    Modtool

    • gr_newmod: Fix copying python bindings to test dir on Windows
    • gr_newmod: Make untagged conda package version less specific
    • modtool: Add a conda recipe to the OOT template
    • Make the pydoc_h.mako more clang compliant

    Documentation

    • Add shim Sphinx config for readthedocs

    Authors

    The following people contributed commits to this release. They are credited by the name used in commits. There are may people who contribute in other ways ... discussions, reviews, bug reporting, testing, etc. We just don't have an easy way to provide credit for all that valuable work.

    Source code(tar.gz)
    Source code(zip)
    gnuradio-3.10.3.0.tar.gz.asc(252 bytes)
    gnuradio-3.10.3.0.zip.asc(252 bytes)
    gnuradio-software-signing-key.asc(831 bytes)
  • v3.9.7.0(Jun 21, 2022)

    Changed

    Project Scope

    • Fix more flaky CI tests that were failing unnecessarily. This helps greatly with maintenance.

    gnuradio-runtime

    • Only catch Thrift transport exceptions
    • Import PyQt5 before matplotlib to work around a bug
    • Process system messages before others. This helps with orderly flowgraph termination.
    • Fix Mach-kernel timebase (numer and denom were reversed)
    • Fix signed integer overflows in fixed-point table generation

    GRC

    • Fix create hier / missing top_block error

    Build system and packaging

    • CI: Add testing for Fedora 36, remove Fedora 34.
    • cmake: Allow MPIR/MPLIB package find to fail gracefully

    gr-blocks

    • Fix rotator_cc scheduled phase increment updates
    • Probe Signal: synchronize access to d_level to prevent race conditions

    gr-digital

    • Use memcmp for CRC comparisons to avoid alignment errors

    gr-dtv

    • Use unsigned integer for CRC calculation
    • Fix use of uninitialized memory
    • Fix initialization of L1Post struct

    gr-filter

    • Fix various bugs in Generic Filterbank

    gr-qtgui

    • Several sinks produce wrong error messages, when GUI Hint is used. Reorder params in yml files to fix.

    gr-soapy

    • Deactivate stream before closing. Some modules depend on this behavior.

    gr-uhd

    • Implement get_gpio_attr()

    Modtool

    • gr_newmod: Fix copying python bindings to test dir on Windows
    • Make the pydoc_h.mako more clang compliant

    Authors

    The following people contributed commits to this release. They are credited by the name used in commits. There are may people who contribute in other ways ... discussions, reviews, bug reporting, testing, etc. We just don't have an easy way to provide credit for all that valuable work.

    Source code(tar.gz)
    Source code(zip)
    gnuradio-3.9.7.0.tar.gz.asc(252 bytes)
    gnuradio-3.9.7.0.zip.asc(252 bytes)
    gnuradio-software-signing-key.asc(831 bytes)
  • v3.10.3.0-rc1(Jun 9, 2022)

    [3.10.3.0-rc1] - 2022-06-09

    Changed

    Project Scope

    • Continue replacement of Boost functionality with standard C++ continues, where practical, making the code more maintainable.
    • Fix more flaky CI tests that were failing unnecessarily. This helps greatly with maintenance.

    gnuradio-runtime

    • Only catch Thrift transport exceptions
    • Import PyQt5 before matplotlib to work around a bug
    • Fix broken log format string in set_min_output_buffer
    • Process system messages before others. This helps with orderly flowgraph termination.
    • Custom buffers: add missing (simulated) data transfer to input/output_blocked_callback functions in host_buffer class
    • Fix Mach-kernel timebase (numer and denom were reversed)
    • Fix signed integer overflows in fixed-point table generation

    GRC

    • Add parentheses on arithmetic expressions to avoid operator precedence problems in templated code
    • Fix create hier / missing top_block error

    Build system and packaging

    • CI: Add testing for Fedora 36, remove Fedora 34.
    • cmake: Use platform-specific Python install schemes
    • cmake: Always prefix git hash used as version with "g"
    • cmake: Allow MPIR/MPLIB package find to fail gracefully
    • cmake: Remove 'REQUIRED' flag for Volk

    gr-blocks

    • Fix rotator_cc scheduled phase increment updates
    • Wavefile Sink: add support for Ogg Opus if libsndfile is >= 1.0.29
    • Probe Signal: synchronize access to d_level to prevent race conditions

    gr-digital

    • Use memcmp for CRC comparisons to avoid alignment errors

    gr-dtv

    • Use unsigned integer for CRC calculation
    • Fix use of uninitialized memory
    • Fix initialization of L1Post struct

    gr-filter

    • Fix various bugs in Generic Filterbank

    gr-iio

    • Fix grc pluto sink attenuation callback

    gr-qtgui

    • Several sinks produce wrong error messages, when GUI Hint is used. Reorder params in yml files to fix.

    gr-soapy

    • Deactivate stream before closing. Some modules depend on this behavior.

    gr-uhd

    • Implement get_gpio_attr()

    Code generation tools

    • C++ generation: Fix various template errors

    Modtool

    • gr_newmod: Fix copying python bindings to test dir on Windows
    • gr_newmod: Make untagged conda package version less specific
    • modtool: Add a conda recipe to the OOT template
    • Make the pydoc_h.mako more clang compliant

    Documentation

    • Add shim Sphinx config for readthedocs

    Authors

    The following people contributed commits to this release. They are credited by the name used in commits. There are may people who contribute in other ways ... discussions, reviews, bug reporting, testing, etc. We just don't have an easy way to provide credit for all that valuable work.

    Source code(tar.gz)
    Source code(zip)
    gnuradio-3.10.3.0-rc1.tar.gz.asc(252 bytes)
    gnuradio-3.10.3.0-rc1.zip.asc(252 bytes)
    gnuradio-software-signing-key.asc(831 bytes)
  • v3.9.7.0-rc1(Jun 9, 2022)

    [3.9.7.0-rc1] - 2022-06-09

    Changed

    Project Scope

    • Fix more flaky CI tests that were failing unnecessarily. This helps greatly with maintenance.

    gnuradio-runtime

    • Only catch Thrift transport exceptions
    • Import PyQt5 before matplotlib to work around a bug
    • Process system messages before others. This helps with orderly flowgraph termination.
    • Fix Mach-kernel timebase (numer and denom were reversed)
    • Fix signed integer overflows in fixed-point table generation

    GRC

    • Fix create hier / missing top_block error

    Build system and packaging

    • CI: Add testing for Fedora 36, remove Fedora 34.
    • cmake: Allow MPIR/MPLIB package find to fail gracefully

    gr-blocks

    • Fix rotator_cc scheduled phase increment updates
    • Probe Signal: synchronize access to d_level to prevent race conditions

    gr-digital

    • Use memcmp for CRC comparisons to avoid alignment errors

    gr-dtv

    • Use unsigned integer for CRC calculation
    • Fix use of uninitialized memory
    • Fix initialization of L1Post struct

    gr-filter

    • Fix various bugs in Generic Filterbank

    gr-qtgui

    • Several sinks produce wrong error messages, when GUI Hint is used. Reorder params in yml files to fix.

    gr-soapy

    • Deactivate stream before closing. Some modules depend on this behavior.

    gr-uhd

    • Implement get_gpio_attr()

    Modtool

    • gr_newmod: Fix copying python bindings to test dir on Windows
    • Make the pydoc_h.mako more clang compliant

    Authors

    The following people contributed commits to this release. They are credited by the name used in commits. There are may people who contribute in other ways ... discussions, reviews, bug reporting, testing, etc. We just don't have an easy way to provide credit for all that valuable work.

    Source code(tar.gz)
    Source code(zip)
    gnuradio-3.9.7.0-rc1.tar.gz.asc(252 bytes)
    gnuradio-3.9.7.0-rc1.zip.asc(252 bytes)
    gnuradio-software-signing-key.asc(831 bytes)
  • v3.10.2.0(Apr 10, 2022)

    [3.10.2.0] - 2022-04-09

    Changed

    Project Scope

    • Clayton Smith continues the effort to replace Boost usage with modern C++ equivalents. In a related effort, he has continued the logging modernization started by Marcus Müller. In his spare time, he has tackled some tricky, intermittent CI failures, some of which turned out to be real bugs. Much of this work is invisible to end users, but is extremely useful in making GNU Radio more reliable and maintainable. Special thanks are due to Clayton for a lot of hard work this cycle.
    • Use exceptions instead of exit() in several places.
    • Fixed a variety of Python deprecation warnings.
    • Packager note: jsonschema is required for the JSON Config and YAML Config blocks. Those blocks will be disabled if jsonschema is not found.

    gnuradio-runtime

    • Correct size/usage for single-mapped buffers (part of the new Custom Buffers feature).
    • Correct buffer size allocation. This was actually the single change in v3.10.1.1, which did not get its own CHANGELOG entry.

    GRC

    • Improve discovery of xterm and related programs.
    • Save generated hierarchical block code to the block library instead of the directory containing the current GRC flowgraph.
    • New JSON Config and YAML Config blocks that load configuration variables from files at runtime. Those variables may then be used in block parameters.
    • Store the GNU Radio version in flowgraph metadata when saving.
    • Minor change in Python evaluation code to allow affinity, minoutbuf and maxoutbuf to be adjusted via script parameters.

    Build system and packaging

    • Require C++-17 for gnuradio-runtime and code compiled against it (via cmake flags).
    • Add pythonschema to build- and run-time dependencies.

    gr-blocks

    • Add exponential distribution to Message Strobe Random block's delay selection.
    • Quiet down debug messages in File Sink.
    • Skip alignment check in File Source when the input file is not seekable (e.g., it is a pipe).

    gr-filter

    • Fix crash in Rational Resampler logging

    gr-digital

    • Add generic CRC blocks: CRC Append and CRC Check.

    gr-qtgui

    • Improve text/background color on Range widget.
    • Digital Number Control emits message with new, instead of previous, value.
    • Message Edit Box sends message only when return is pressed, rather than whenever focus is lost.
    • Vector Sink allows legend to be disabled.
    • Type error fixes (Python 3.10 is stricter about int casting).

    gr-trellis

    • Provide Python bindings for PCCC Encoder and Viterbi Combo.

    gr-vocoder

    • Add C++ generation support to gr-vocoder

    Code generation tools

    • Support strongly-typed enums in Python bindings

    Authors

    The following people contributed commits to this release. There are may people who contribute in other ways ... discussions, reviews, bug reporting, testing, etc. We just don't have an easy way to provide credit for all that valuable work.

    Source code(tar.gz)
    Source code(zip)
    gnuradio-3.10.2.0.tar.gz.asc(252 bytes)
    gnuradio-3.10.2.0.zip.asc(252 bytes)
    gnuradio-software-signing-key.asc(831 bytes)
  • v3.9.6.0(Apr 10, 2022)

    [3.9.6.0] - 2022-04-09

    Changed

    Project Scope

    • PEP8 formatting applied and enforced on all Python files.

    GRC

    • New JSON Config and YAML Config blocks that load configuration variables from files at runtime. Those variables may then be used in block parameters.
    • Store the GNU Radio version in flowgraph metadata when saving.
    • Minor change in Python evaluation code to allow affinity, minoutbuf and maxoutbuf to be adjusted via script para meters.
    • Show blocks with "deprecated" flags as deprecated.
    • Bug fix: initialize value for "priority" parameter in Python Snippets.
    • Don't blacklist default as a flowgraph ID to prevent always starting in an error state

    Runtime

    • Add ownership and locking to hier_block2 to avoid crash/freeze after disconnect.

    gr-analog

    • Fix C++ code generation for random_uniform_source

    gr-blocks

    • Add exponential distribution to Message Strobe Random block's delay selection.
    • Skip alignment check in File Source when the input file is not seekable (e.g., it is a pipe).

    gr-filter

    • Fix crash in Rational Resampler logging
    • Bug fix: buses should now work with PFB channelizer and synthesizer.

    gr-trellis

    • Provide Python bindings for PCCC Encoder and Viterbi Combo.

    gr-qtgui

    • Improve text/background color on Range widget.
    • Digital Number Control emits message with new, instead of previous, value.
    • Message Edit Box sends message only when return is pressed, rather than whenever focus is lost.
    • Vector Sink allows legend to be disabled.
    • Type error fixes (Python 3.10 is stricter about int casting).
    • Frequency/Waterfall Sinks force power of 2 for fft size

    gr-uhd

    • Correct descriptor names in uhd_fpga_ddc/duc.

    Code generation tools

    • Support strongly-typed enums in Python bindings

    Authors

    The following people contributed commits to this release. There are may people who contribute in other ways ... discussions, reviews, bug reporting, testing, etc. We just don't have an easy way to provide credit for all that valuable work.

    Source code(tar.gz)
    Source code(zip)
    gnuradio-3.9.6.0.tar.gz.asc(252 bytes)
    gnuradio-3.9.6.0.zip.asc(252 bytes)
    gnuradio-software-signing-key.asc(831 bytes)
  • v3.10.1.1(Feb 2, 2022)

  • v3.10.1.0(Jan 29, 2022)

    This is mostly a bug fix release. It is API compatible with 3.10.X.Y releases. Code built against GNU Radio libraries (including OOTs) will likely need to be recompiled, as ABI compatibility is not guaranteed.

    Runtime

    • Add ownership and locking to hier_block2 to avoid crash/freeze after disconnect.

    gr-analog

    • Fix C++ code generation for random_uniform_source

    gr-blocks

    • Minimal implementation of a SigMF Sink, allowing users to easily try out generation SigMF output. SigMF uses a raw data file and a separate JSON metadata file. A SigMF Source is also provided. At this time, it is a wrapper around a File Source (the data files are compatible), but metadata is not processed.

    gr-filter

    • Bug fix: buses should now work with PFB channelizer and synthesizer.

    gr-iio

    • Various fixes for fmcomms2/3/4.

    gr-uhd

    • Bug fix: overflow count was uninitialized.
    • Correct descriptor names in uhd_fpga_ddc/duc.

    GRC

    • Bug fix: initialize value for "priority" parameter in Python Snippets.
    • Show blocks with "deprecated" flags as deprecated.
    Source code(tar.gz)
    Source code(zip)
    gnuradio-3.10.1.0.tar.gz.asc(252 bytes)
    gnuradio-3.10.1.0.zip.asc(252 bytes)
    gnuradio-software-signing-key.asc(831 bytes)
  • v3.10.1.0-rc1(Jan 25, 2022)

    This is mostly a bug fix release. It is API compatible with 3.10.X.Y releases. Code built against GNU Radio libraries (including OOTs) will likely need to be recompiled, as ABI compatibility is not guaranteed.

    Runtime

    • Add ownership and locking to hier_block2 to avoid crash/freeze after disconnect.

    gr-analog

    • Fix C++ code generation for random_uniform_source

    gr-blocks

    • Minimal implementation of a SigMF Sink, allowing users to easily try out generation SigMF output. SigMF uses a raw data file and a separate JSON metadata file. A SigMF Source is also provided. At this time, it is a wrapper around a File Source (the data files are compatible), but metadata is not processed.

    gr-filter

    • Bug fix: buses should now work with PFB channelizer and synthesizer.

    gr-iio

    • Various fixes for fmcomms2/3/4.

    gr-uhd

    • Bug fix: overflow count was uninitialized.
    • Correct descriptor names in uhd_fpga_ddc/duc.

    GRC

    • Bug fix: initialize value for "priority" parameter in Python Snippets.
    • Show blocks with "deprecated" flags as deprecated.
    Source code(tar.gz)
    Source code(zip)
    gnuradio-3.10.1.0-rc1.tar.gz.asc(252 bytes)
    gnuradio-3.10.1.0-rc1.zip.asc(252 bytes)
    gnuradio-software-signing-key.asc(831 bytes)
  • v3.10.0.0(Jan 14, 2022)

    It is with much excitement (and after only 4 RCs!!) that we release the next step forward for GNU Radio - 3.10.0.0!

    Not only does this release bring in some extremely useful new modules (gr-iio, gr-pdu, and arguably gr-soapy thought that thankfully made it also into recent 3.9 maintenance releases), but also sets a path forward for using GNU Radio in heterogeneous compute environments by providing "custom buffers" for more efficiently interacting with accelerators (GPUS, FPGAs, TPUs, etc.).

    We have been fortunate this year to have extremely active backporting and consistent maintenance releases from co-maintainter Jeff Long - so many of the fixes and smaller features (and larger ones) have already seen the light of day in the 3.9.x.x and even 3.8.x.x releases. Here are some highlights of the 3.10 release:

    gr-pdu

    PDUs (protocol data units) in GNU Radio are a special type of PMT that have a dictionary and a uniform vector type representing a burst of data with some metadata. Up to this point, support of pdus has been scattered throughout the codebase with minimal supporting the way of handling this type of data consistently. Fortunately, Jacob Gilbert has been able to upstream much of the amazing work from himself and the team at Sandia National Labs which brings in-tree a suite of tools for manipulating these data objects (see https://github.com/sandialabs/gr-pdu_utils). Also, many of the previous PDU processing blocks that existed in other in-tree modules have been migrated to this module, so there has been some block re-arrangement. Please see https://www.youtube.com/watch?v=bT60hVVte48 for more detailed information

    gr-iio

    IIO is the industrial I/O framework that provides an industry standard method for communicating with a wide-range of devices. Analog Devices has supported out of tree a gr-iio module that brings this capability into GNU Radio and now upstreamed this module so support for devices like the PlutoSDR are available out of the box. Special thanks here to Adam Horden, Dave Winter, Volker Shroer for bringing this in-tree and working through many of the complexities. Please see https://www.youtube.com/watch?v=2gKbollW6wg for a more technical description of IIO and gr-iio.

    Custom Buffers Support

    NOTE: this is an advanced "experimental" feature that if not actively employed will not affect normal GNU Radio usage.
    David Sorber from Black Lynx has introduced a feature that enables streamlined data movement between GNU Radio blocks and hardware accelerators. By creating a "custom buffer" class (or using one that is provided by someone else), blocks can be made to abstract the data movement behind the scenes so that when the work function is reached, data already exists in the device memory.
    Let me give a quick example - previously if you wanted to write a GPU accelerated block with CUDA, you would have to get into the work function, move the data from the GNU Radio circular buffers to GPU device memory, execute the CUDA kernels, then move the data back to GR buffers. Now that data movement is done behind the scenes if the block is set up right so that when the work function is hit, the data is in GPU device memory and will get transferred back to CPU memory behind the scenes as well. This allows back to back HW accelerated blocks to not have to ingress/egress in and out of GR memory unnecessarily. Also, the single mapped buffer abstraction brings huge performance benefits as can be seen here: https://www.youtube.com/watch?v=VO1zMXowezg for a much better description, and for all the technical details: https://wiki.gnuradio.org/index.php/Custom_Buffers For examples of this in action, please see the gr-cuda repository here: https://github.com/gnuradio/gr-cuda - which contains the CUDA custom buffers (that can be re-used in your OOT) and some example blocks.

    Logging Infrastructure

    Log4CPP has previously been our logging backend library, but has become a troublesome dependency. A huge thanks to Marcus Müller for fixing all of this up, replacing Log4CPP with spdlog - a more modern logging library, and also for his ongoing architectural leadership on this project. The move to spdlog also opens up the door for more modern logging statements that don't rely on Boost.format, and libfmt (which is now also a dependency) can be used for general string manipulation as well. All the previous methods and macros still exist (except for the log4cpp specific ones), but there is now new capability to log in a more convenient way using the libfmt statements.
    Previous: GR_LOG_INFO(this->d_logger, boost::format("this happened: %d") % code) New: this->d_logger->info("this happened {:d}", code)

    Contributors

    Much appreciation to all that contributed through code, documentation, review, and just generally being a part of this wonderful community. The code contributors for 3.10 includes AT LEAST the following: 0xloem [email protected] a-andre [email protected] Adam Horden [email protected] Adarsh Singh [email protected] Aditya Thomas [email protected] Adrien Michel [email protected] André Apitzsch [email protected] Andrej Rode [email protected] Artem Pisarenko [email protected] Bernard Tyers - Sane UX Design [email protected] beroset [email protected] Bill Muzika [email protected] Callyan [email protected] Chris [email protected] Christophe Seguinot [email protected] Christoph Koehler [email protected] Chuang Zhu [email protected] Clayton Smith [email protected] cmrincon cmrinco[email protected] Codey McCodeface [email protected] Daniel Estévez [email protected] David Pi [email protected] David Sorber [email protected] David Winter [email protected] Derek Kozel [email protected] Doron Behar [email protected] duggabe [email protected] efardin [email protected] Elof Wecksell [email protected] Emmanuel Blot [email protected] Ferenc Gerlits [email protected] GitHub [email protected] gnieboer [email protected] Håkon Vågsether [email protected] Igor Freire [email protected] Ipsit [email protected] Jacob Gilbert [email protected] japm48 [email protected] JaredD [email protected] Jason Uher [email protected] Jeff Dumps [email protected] Jeff Long [email protected] Jeppe Ledet-Pedersen [email protected] jfmadeira [email protected] jmadeira [email protected] Johannes Demel [email protected] John Sallay [email protected] Josh Blum [email protected] Josh Morman [email protected] karel [email protected] lenhart [email protected] Liu, Andrew Z [email protected] luz paz luz[email protected] Marc L [email protected] Marcus Müller [email protected] Mark Bauer markb[email protected] Mark Pentler [email protected] Martin Braun [email protected] Martyn van Dijke [email protected] masw [email protected] Matt Ettus [email protected] Matt Mills [email protected] muaddib1984 [email protected] Nicholas Bruce [email protected] Nicholas Corgan [email protected] Nick Foster [email protected] Nick M [email protected] Nick Østergaard [email protected] Niki [email protected] Notou [email protected] Oleksandr Kravchuk [email protected] Pavon [email protected] Philip Balister [email protected] rear1019 [email protected] Rohan Sharma [email protected] Ron Economos [email protected] Ryan Volz [email protected] schneider42 [email protected] Sebastian Koslowski [email protected] Seth Hitefield sdhitefie[email protected] shwhiti [email protected] Solomon Tan [email protected] Sylvain Munaut [email protected] Terry May [email protected] Thomas Habets [email protected] Tim Huggins [email protected] Travis F. Collins [email protected] Vasilis Tsiligiannis [email protected] Vasil Velichkov [email protected] Victor Wollesen [email protected] Volker Schroer 347042[email protected] Zackery Spytz [email protected]

    Source code(tar.gz)
    Source code(zip)
    gnuradio-3.10.0.0.tar.gz.asc(252 bytes)
    gnuradio-3.10.0.0.zip.asc(252 bytes)
    gnuradio-software-signing-key.asc(831 bytes)
  • v3.10.0.0-rc4(Jan 11, 2022)

  • v3.9.5.0(Jan 9, 2022)

    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.

    Changes

    GRC

    • Fix: dependent variables sometimes fail to evaluate
    • Modify and cleanup bokeh server loop

    gr-analog

    • Update python bindings for power squelch

    gr-dtv

    • Add energy normalization for DVB-S2X constellations.

    gr-filter

    • Remove pyqwt and qt4 from filter_design

    gr-network

    • Fix: segfaults when TCP & UDP blocks are restarted
    • Add throttle flag to the tcp source and sink blocks

    gr-qtgui

    • Enable use of Qwt 6.2

    gr-uhd

    • Add Python bindings for rfnoc_{block, ddc, duc, rx/tx_radio}

    modtool

    • Improvements in generated QA code

    Build System

    • Better support for cross-compiling (OpenEmbedded)
    • Find log4cpp on Ubuntu systems
    • Handle optional components in find_package
    • Add version check for pygccxml

    CI/QA

    • Update tests to work with OpenEmbedded

    Contributors

    At LEAST the following people contributed to this release:

    Source code(tar.gz)
    Source code(zip)
    gnuradio-3.9.5.0.tar.gz.asc(252 bytes)
    gnuradio-3.9.5.0.zip.asc(252 bytes)
    gnuradio-software-signing-key.asc(831 bytes)
  • v3.8.5.0(Jan 9, 2022)

    This is an API compatible update to GNU Radio 3.8. Code written for 3.8.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.

    GRC

    • GRC now runs on Fedora 35 ... Gtk initialization checks were too strict
    • Fix: dependent variables sometimes fail to evaluate
    • Change type aliasing to allow interleaved short/byte to be connected to vectors of short/byte. Stricter type checking was added previously and caused some blocks to be unconnectable when using these types.
    • Account for scale factor when computing drawing area size
    • Tooltips fixed for categories and modules

    gr-digital

    • Fix yml file for Header/Payload Demux

    gr-dtv

    • Add energy normalization for DVB-S2X constellations.

    gr-filter

    • Remove pyqwt and qt4 from filter_design

    gr-qtgui

    • Enable use of Qwt 6.2
    • Remove unusable int type in Number Sink yml
    • RangeWidget - implement Eng & EngSlider

    At LEAST the following authors contributed to this release.

    Source code(tar.gz)
    Source code(zip)
    gnuradio-3.8.5.0-with-volk-2.5.0.tar.gz(3.92 MB)
    gnuradio-3.8.5.0-with-volk-2.5.0.tar.gz.asc(252 bytes)
    gnuradio-3.8.5.0.tar.gz.asc(252 bytes)
    gnuradio-3.8.5.0.zip.asc(252 bytes)
    gnuradio-software-signing-key.asc(831 bytes)
  • v3.10.0.0-rc1(Nov 27, 2021)

  • v3.9.4.0(Oct 31, 2021)

    Release v3.9.4.0 is appearing a little early because of a couple of regressions in v3.9.3.0. While we were at it, we pulled in a few more helpful commits from the master branch.

    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.

    Changes

    Regressions Fixes

    • Remove #include <filesystem> (C++17 feature) from one file
    • Restore pyqwidget() in gr-qtgui

    GRC

    • GRC now runs on Fedora 35 ... Gtk initialization checks were too strict
    • Add keyboard shortcuts for zoom
    • Account for scale factor when computing drawing area size
    • Use font size from config for block comments
    • Change type aliasing to allow interleaved short/byte to be connected to vectors of short/byte. Stricter type checking was added previously and caused some blocks to be unconnectable when using these types.
    • Required params no longer default to 0 when left empty. This caused hard-to-find errors. Older flowgraphs that have empty required fields will need to be fixed.
    • Tooltips fixed for categories and modules

    gr-runtime

    • PMT uses the VOLK allocator for vectors
    • get_tags_in_window() Python wrapper calls the correct function
    • Add --pybind option to gnuradio-config-info to get PyBind11 version

    gr-blocks

    • Add example for XMLRPC
    • Add a unit test for Message Strobe
    • Fix C++ support for Unpacked to Packed

    gr-channels

    • RNG seeds are initialized correctly

    gr-digital

    • Fix yml file for Header/Payload Demux

    gr-network

    • Suppress warning in tuntap

    gr-qtgui

    • Remove unusable int type in Number Sink yml
    • Use no_quotes() function in several yml files

    modtool

    • Hashes can be fixed using modtool using --update-hash-only
    • Use tempfile() instead of /tmp in bindtool and modtool
    • Use static_cast instead of reinterpret_cast in templates
    • Correct broken Python general block template

    Build system

    • Better check for Boost version
    • Determine the Python prefix more reliably
    • Use GR-specified compiler standard (C++14) in gr-soapy, instead of the SoapySDR standard (C++11)
    • GrPython.cmake is compatible with older cmake

    Documentation

    • Man pages are in-tree
    • Repair many examples, especially in gr-digital
    • Allow UTF-8 in pydoc templates

    CI

    • Execute make install during test
    • Add Ubuntu 18.04 test target
    Source code(tar.gz)
    Source code(zip)
    gnuradio-3.9.4.0.tar.gz.asc(252 bytes)
    gnuradio-3.9.4.0.zip.asc(252 bytes)
    gnuradio-software-signing-key.asc(831 bytes)
  • v3.9.3.0(Sep 30, 2021)

    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.

    Changes

    General

    • 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

    GRC

    • 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

    gnuradio-runtime

    • 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())

    gr-blocks

    • 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

    gr-digital

    • 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

    gr-fec

    • Cleanups and code improvements

    gr-fft

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

    gr-filter

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

    gr-qtgui

    • 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

    gr-uhd

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

    gr-video-sdl

    • U and V channels were reversed on sink blocks

    gr-soapy

    • Added message support for SoapySDR 0.8 API

    modtool

    • 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

    Documentation

    • Code of Conduct updates and link to Wiki

    CI

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

    Contributors

    At LEAST the following people contributed code to this release.

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

    Source code(tar.gz)
    Source code(zip)
    gnuradio-3.9.3.0.tar.gz.asc(252 bytes)
    gnuradio-3.9.3.0.zip.asc(252 bytes)
    gnuradio-software-signing-key.asc(831 bytes)
  • v3.8.4.0(Sep 30, 2021)

    API is compatible with C++ code written against previous v3.8 releases.

    ABI (link time) compatibility is not guaranteed. Out-of-tree C++ code linked to previous v3.8 releases should be rebuilt against this version.

    Changed

    GRC

    • Fix drag and drop issue with Quartz
    • Fix desync when dragging block
    • Update disabled blocks if they depend on others
    • Allow short and byte as valid types in an enum
    • Fix evaluation of interdependent variables

    modtool

    • Set VERSION_PATH to 0 in new modules, instead of using GIT rev
    • For Python3, return correct exeption ModuleNotFoundError instead of ImportError

    gr-blocks

    • New Matrix Interleaver block

    gr-channels

    • Fix "hide" expressions in yml files

    gr-digital

    • Remove unused msg output port from Chunks To Symbols block yml

    gr-fft

    • Add "shift" parameter to Log Power FFT

    gr-qtgui

    • Fix: tags on the last sample were not shown

    gr-video-sdl

    • Fix: U and V channels were reversed on sink blocks

    At LEAST the following authors contributed to this release.

    Source code(tar.gz)
    Source code(zip)
    gnuradio-3.8.4.0-with-volk-2.0.0.tar.gz(3.68 MB)
    gnuradio-3.8.4.0-with-volk-2.0.0.tar.gz.asc(252 bytes)
    gnuradio-3.8.4.0-with-volk-2.5.0.tar.gz(3.78 MB)
    gnuradio-3.8.4.0-with-volk-2.5.0.tar.gz.asc(252 bytes)
    gnuradio-3.8.4.0.tar.gz.asc(252 bytes)
    gnuradio-3.8.4.0.zip.asc(252 bytes)
    gnuradio-software-signing-key.asc(831 bytes)
Graphical interface to control granular sound synthesis.

Granular sound synthesis interface SoundGrain is a graphical interface where users can draw and edit trajectories to control granular sound synthesis

Olivier Bélanger 122 Dec 10, 2022
FPGA based USB 2.0 high speed audio interface featuring multiple optical ADAT inputs and outputs

ADAT USB Audio Interface FPGA based USB 2.0 High Speed audio interface featuring multiple optical ADAT inputs and outputs Status / current limitations

Hans Baier 78 Dec 31, 2022
A library for augmenting annotated audio data

muda A library for Musical Data Augmentation. muda package implements annotation-aware musical data augmentation, as described in the muda paper. The

Brian McFee 214 Nov 22, 2022
Praat in Python, the Pythonic way

Parselmouth - Praat in Python, the Pythonic way Parselmouth is a Python library for the Praat software. Though other attempts have been made at portin

Yannick Jadoul 786 Jan 09, 2023
Pythonic bindings for FFmpeg's libraries.

PyAV PyAV is a Pythonic binding for the FFmpeg libraries. We aim to provide all of the power and control of the underlying library, but manage the gri

PyAV 1.8k Jan 03, 2023
An Amazon Music client for Linux (unpretentious)

Amusiz An Amazon Music client for Linux (unpretentious) ↗️ Install You can install Amusiz in multiple ways, choose your favorite. 🚀 AppImage Here you

Mirko Brombin 25 Nov 08, 2022
live coding in python + supercollider

live coding in python + supercollider

Zack 6 Feb 06, 2022
Muzic: Music Understanding and Generation with Artificial Intelligence

Muzic is a research project on AI music that empowers music understanding and generation with deep learning and artificial intelligence.

Microsoft 2.6k Dec 30, 2022
Python module for handling audio metadata

Mutagen is a Python module to handle audio metadata. It supports ASF, FLAC, MP4, Monkey's Audio, MP3, Musepack, Ogg Opus, Ogg FLAC, Ogg Speex, Ogg The

Quod Libet 1.1k Dec 31, 2022
All-In-One Digital Audio Workstation and Plugin Suite

How to install Windows Mac OS X Fedora Ubuntu How to Build Debian and Ubuntu Fedora All Other Linux Distros Mac OS X Windows What is MusiKernel? MusiK

j3ffhubb 111 Sep 21, 2021
MusicBrainz Picard

MusicBrainz Picard MusicBrainz Picard is a cross-platform (Linux/Mac OS X/Windows) application written in Python and is the official MusicBrainz tagge

MetaBrainz Foundation 3k Dec 31, 2022
Basically Play Pauses the song when it is safe to do so. when you die in a round

Basically Play Pauses the song when it is safe to do so. when you die in a round

AG_1436 1 Feb 13, 2022
This is a realtime voice translator program which gets input from user at any language and converts it to the desired language that the user asks

This is a realtime voice translator program which gets input from user at any language and converts it to the desired language that the user asks ...

Mohan Ram S 1 Dec 30, 2021
Scalable audio processing framework written in Python with a RESTful API

TimeSide : scalable audio processing framework and server written in Python TimeSide is a python framework enabling low and high level audio analysis,

Parisson 340 Jan 04, 2023
❤️ Hi There Im Cozmo Music Bot A next gen powerful telegram group Music bot for get your Songs and music @Venuja_Sadew

🎵 Cozmo MUSIC 🎵 Cozmo Music is a Music powerfull bot for playing music on telegram voice chat groups. Requirements FFmpeg NodeJS nodesource.com Pyth

Venuja Sadew 3 Jan 08, 2022
Mousai is a simple application that can identify song like Shazam

Mousai is a simple application that can identify song like Shazam. It saves the artist, album, and title of the identified song in a JSON file.

Dave Patrick 662 Jan 07, 2023
Pianote - An application that helps musicians practice piano ear training

Pianote Pianote is an application that helps musicians practice piano ear traini

3 Aug 17, 2022
MUSIC-AVQA, CVPR2022 (ORAL)

Audio-Visual Question Answering (AVQA) PyTorch code accompanies our CVPR 2022 paper: Learning to Answer Questions in Dynamic Audio-Visual Scenarios (O

44 Dec 23, 2022
a library for audio and music analysis

aubio aubio is a library to label music and sounds. It listens to audio signals and attempts to detect events. For instance, when a drum is hit, at wh

aubio 2.9k Dec 30, 2022
Accompanying code for our paper "Point Cloud Audio Processing"

Point Cloud Audio Processing Krishna Subramani1, Paris Smaragdis1 1UIUC Paper For the necessary libraries/prerequisites, please use conda/anaconda to

Krishna Subramani 17 Nov 17, 2022