GNU Radio is a development toolkit that allows fast and easy simulation and implementation of software-defined radio (SDR). Due to its open source license, users can share their processing blocks to mutually speed up their signal processing projects. GNU Radio runs on a general-purpose processor, so to perform live SDR processing, the computer must be linked to a radio peripheral. The radio peripheral is used to receive and transmit the desired data in the radio frequency (RF). This is done by using the radio peripheral sink and source blocks in the GNU Radio environment. The data is in the baseband frequency and it’s the radio peripheral’s job to do the conversion between the RF and the baseband frequencies. A typical SDR development configuration is shown in Figure 1.

Typical SDR Configuration

Figure 1: Typical SDR Configuration


I/Q Streaming


In a standard GNU Radio application, the I and Q radio data is directly transmitted between the computer and the radio peripheral. In this kind of application, the carrier board is used only to configure the radios and to correctly route the data between the computer and radios (as shown in Figure 2). In this configuration, all the processing is done in the computer. For a simple and low bandwidth application, this approach is fast to implement and quick to configure, since all the processing code runs on the computer. For the application to run smoothly, however, the developer must ensure that the computer has enough processing power to run the algorithm in real time. Furthermore, the communication link between the computer and the radio peripheral must be able to sustain the throughput needed by the application.

 Standard GNU Radio Application

Figure 2: Standard GNU Radio Application

For example, if the radio peripheral runs at 30.72 MHz to sequentially sample I and Q signals with a 12‑bit precision, it will generate 368.64 megabits per second in each direction for each RF front end. The physical link between the computer and the peripheral radio will need to have enough bandwidth to send this amount of data along with the header information that’s required. (For more information on optimizing bandwidth for MIMO applications on GNU Radio, see our previous blog post).

For this data rate requirement, the throughput of a USB 2.0 device can’t handle a SISO configuration. In contrast, gigabit Ethernet, with its 1 Gbps full-duplex bandwidth, can handle a 2×2 MIMO configuration. For a higher number of RF front ends, or for greater sampling frequencies, a physical link with superior bandwidth, like PCIe, is needed.

In this standard SDR architecture, the required processing power and physical link bandwidth increase linearly with the number of RF front ends. This is due to sequential processing done in the processor and to the use of only one physical link for the data transfer.


FPGA Processing


If the carrier board includes an FPGA, a programmable and highly parallel chip, some processing can be moved from GNU Radio to the FPGA. Streaming raw I and Q data between the computer and the radio peripheral requires more bandwidth than the useful information it carries. This is even more true when redundant information is sent to different radio front ends in order to increase the transmission reliability. In such cases, part of the physical link bandwidth is wasted and the redundant information uselessly increases the bandwidth requirement.

FPGA chips are designed to do real-time parallel signal processing. FPGAs contain a number of logic resources that can operate at a certain frequency. In contrast to a conventional CPU which must run at a higher frequency in order to process more samples, an FPGA can replicate its current algorithm in unused logic resources to increase its processing power while keeping the same operating frequency. This enables the processing done in the FPGA to scale with the number of RF front ends as long as FPGA resources are available.

When the FPGA chip is used for signal processing, GNU Radio can stream only the useful information to the carrier. The carrier FPGA will generate the desired MIMO waveforms and send them to all the RF front ends (as shown in Figure 3).

 GNU Radio streaming FPGA signal processing MIMO waveforms

Figure 3: FPGA signal processing

In this configuration, because some signal processing has been transferred from GNU Radio to the FPGA, the physical link requirements no longer increase linearly with the number of RF front ends. Only the useful data is transferred, and it’s the FPGA processing algorithm that handles the multiple radios. In addition, this configuration reduces the processing power needed by the computer since part of the SDR algorithm is now done by the FPGA.




Standard GNU Radio applications directly stream I and Q signals to the RF front ends through the radio peripheral. That is the right approach to choose when the requirements for the bandwidth, processing power, and latency are not critical, since the GNU Radio environment enables fast SDR development. However, this conventional design is not the best suited for the kind of application where multiple RF front ends are used, because the physical link between the computer and the carrier board becomes a bottleneck. In this case, using the FPGA for signal processing can solve the bandwidth problem.