Gnuradio
Signal Processing Software
Software Defined Radio
Typical Transceivers
- Built for one purpose only (DVB-T, 4G, Bluetooth…)
- Signal processing mostly done in hardware (ASICs)
- Produce/Consume data packets
Software Defined Radios
- Extremly flexible
- Signal processing done in software on PC (some projects also utilize FPGAs)
- Can implement any standard if sample rate and processing power is high enough
- Produce/Consume RF samples
Applications
- Research and Development
- Mobile base stations
- Digital broadcast receivers
Gnuradio
Gnuradio is a framework for realtime signal processing mostly used for communication systems in combination with a SDR.
- Signal processing framework for radio communications
- Blocks written in C++ and Python
- Modular approach: blocks for decoders, filters, gui, fft…
- Automated scheduling and buffer management for the blocks
GNU Radio Companion
GNU Radio itself is a framework that can be included in Python applications. To generate systems through a graphical editor GNU Radio Companion (GRC) can be used. Systems can be built as so-called flowgraphs with each block representing a specific function. A block can either source and/or sink data through the in/out ports displayed in GRC. The GNU Radio framework supports different data types:
- complex float
- two float values per sample representing the Inphase and Quadrature component of the complex signal (see Figure fig:iq_phase_amp).
- float
- float type for real values. Used for instance to output audio signals to audio devices.
- byte
- type for digital data. This is the output of digital demodulation/decoding.
Challenges
Some parts of Gnuradio are poorly documented. We have had several problems and challenges:
- Vector data type
- how does gnuradio handles this type (does it provide vectors or only samples)
- Buffer Management
- how are unprocessed samples handled
- Minimal amount of samples
- how do we tell GNURadio to provide a minimal amount of samples for transformations like FFTs