What is GNU Radio and why do I want it?

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.

What's a Software Radio?

Have a look at the Wikipedia page. In brief, a software radio is a radio system which performs the required signal processing in software instead of using dedicated integrated circuits in hardware. The benefit is that since software can be easily replaced in the radio system, the same hardware can be used to create many kinds of radios for many different transmission standards; thus, one software radio can be used for a variety of applications!

So what exactly does GNU Radio do?

GNU Radio performs all the signal processing. You can use it to write applications to receive data out of digital streams or to push data into digital streams, which is then transmitted using hardware. GNU Radio has filters, channel codes, synchronisation elements, equalizers, demodulators, vocoders, decoders, and many other elements (in the GNU Radio jargon, we call these elements blocks) which are typically found in radio systems. More importantly, it includes a method of connecting these blocks and then manages how data is passed from one block to another. Extending GNU Radio is also quite easy; if you find a specific block that is missing, you can quickly create and add it.

Since GNU Radio is software, it can only handle digital data. Usually, complex baseband samples are the input data type for receivers and the output data type for transmitters. Analog hardware is then used to shift the signal to the desired centre frequency. That requirement aside, any data type can be passed from one block to another - be it bits, bytes, vectors, bursts or more complex data types.

GNU Radio applications are primarily written using the Python programming language, while the supplied, performance-critical signal processing path is implemented in C++ using processor floating point extensions, where available. Thus, the developer is able to implement real-time, high-throughput radio systems in a simple-to-use, rapid-application-development environment.

A more in-depth explanation is given in the core concepts tutorial.

Must I be able to program to use GNU Radio?

It's extremely useful. However, there are ways to use GNU Radio without being able to code. First, there's the GNU Radio Companion, a graphical user interface similar to Simulink. It allows you to create signal processing applications by drag-and-drop. Also, GNU Radio comes with a set of ready-to-use tools and utility programs. These serve to manage the most basic operations, such as recording RF signals and performing spectrum analysis. If this has sparked your interest, perhaps have a look at the beginner's guide how to use GNU Radio.

If you want to extend GNU Radio (i.e., add new functionality), however, then you must write code. For creating applications that are too complex for the GNU Radio Companion, Python is the easiest way to go. For performance-critical code, you should write C++ code.

How is GNU Radio licensed?

GNU Radio is licensed under the GNU General Public License (GPL) version 3. All of the code is copyright of the Free Software Foundation.

What have people done with GNU Radio?

If you install GNU Radio, it comes with a lot of examples. You can find tools to transmit data digitally, receive analog waveforms, and all kinds of other things. Others have posted code to CGRAN, a 3rd party repository of projects. Other projects are listed on our list of projects.

Digital signal processing, baseband, synchronisation... what does all of this mean?

If you're asking these questions, you might have some trouble working with GNU Radio. In order to create signal processing and radio communications software, you need to know a lot of things about signal processing. But, don't let this deter you! Grab a book, start reading, write some code and see what happens. Just a piece of advice: before you've understood the concept of complex baseband, don't ask anything on the mailing list :-).