Google Summer of Code (GSoC)¶
Students interested in participating, read the student instructions.
- Google Summer of Code (GSoC)
- List of ideas
- Old GSoC ideas
- Vector signal analyzer
- Performance Counters
- Improved support for many-core floating-point accelerators
- Performance metric suite for GNU Radio (first proposed: 2012)
- Channel Sounder (first proposed: 2012)
- Generic compressive sensing framework (first proposed: 2012)
- Rewrite tunnel.py (first proposed: 2012)
- Integration of GNU Radio into Eclipse. (first proposed: 2012)
- Vector-network analyzer
- AGC loop for the USRP. (first proposed: 2012)
- DECT Tools (first proposed: 2013)
- FPGA pre-correlation (first proposed: 2013)
- DVB-T transmitter / receiver (first proposed: 2013)
- Turbo Equalizer (first proposed: 2013)
- MIMO stuff (first proposed: 2013)
- Wireless networks in-the-loop (first proposed: 2013)
List of ideas¶
This is the list of project ideas for GSoC 2014 within GNU Radio. All of these projects have mentors, so if you have any questions, feel free to contact them!
Remember that these are ideas and are merely meant as an inspiration for you to write your own proposal.
Students who do not find a fit among these projects are encouraged to engage with us and suggest new ones. The GNU Radio discussion mailing list is the best place to contact all of us. Please do not contact us off-list for the sake of discussing GSoC, unless you're contacting a mentor listed here to get feedback on a proposal.
Reviewing the Google FAQ page for a broader understanding of project, mentor, and student responsibilities is recommended.
If you need a USRP to complete the project, we will be able to arrange something.
The list is now open! Please suggest stuff.
Old GSoC ideas¶
These ideas for projects did not find a student in previous GSoCs. The project ideas are left in here for archaeological purposes and future reference.
Vector signal analyzer¶
Details: A vector signal analyzer pertmits to visualize simultaneously signals in various domains. For example, it is possile to visualize a modulated signal in time domain, the constellation of the signal, its PSD (Power Spectrum Density), and depending on the demodulators disponile in the equipment, to visualize the demodulated signal.
In this project a vector-signal analyzer app (qtgui based) will be implemented. It will be possible to visualize and to export the visualized signal to data files and figures (eps, ps and pdf). Using demodulator disponible, o implemented u the user, it will be possile to visualize the demodulated signal.
Mentor: Edmar Gurjao, UFCG, Brazil
Extending the tools for viewing, monitoring, and/or analyzing the new performance counters in GNU Radio. See:
There is current work to build a tool using ControlPort to visualize the running graph and show the different performance counters for each block. There are two versions located in gnuradio-core/src/python/gnuradio/ctrlport called gr-perf-monitor and gr-perf-monitorx. The former is a simple QT-based tool that displays all of the performance counters for each block and buffer. It is a fairly crude rendering that makes it difficult to easily parse the data.
The second tool, gr-perf-monitorx uses Python's Matplotlib an NetworkX modules to draw the graph. An example of this graph is shown below using the pfb_sync_test-qt.grc example from GNU Radio. It displays the graph as a set of nodes and edges. The size of the nodes are directly proportional to the "work_time" performance counter (how much time is spent in work). The width and darkness of the edges is directly proportional to the amount of data in the buffers between blocks.
We have also created separate tabs where we can view these numbers in either table form or bar graph. Further, we can select if we want to use the instantaneous, average, or variance metrics in each display. We can also drag-and-drop nodes on the canvas to make it easier to see the graph.
While this is a good starting point, we could improve these tools, add on to it, add more performance counters, or provide some other tool(s) to understand the performance counters. More easily viewable and the addition of the other performance counters would be a good start.
The goal is to provide both useful tools for us to visualize the performance of a running GNU Radio application. Also, we hope that this will lead to a better understanding of GNU Radio's performance in general, possibly even being able to use these counters to set traps when something is going wrong or performance limitations are being reached.
Mentor: Tom Rondeau
Improved support for many-core floating-point accelerators¶
Functionality to enable the effective use of MIMD floating-point accelerator hardware, using the Parallella board as a reference platform. For example:
- further development of Performance Counters and Block Core Affinity
- implementing message passing using on-chip networks
A project could choose something like a digital waveform receiver and use one of the above to optimise for throughput.
Note that work has been started on porting blocks to Epiphany, but it's likely that the student will need to do further porting work in order to complete and evaluate the benefit of the project.
Hardware will be supplied by the Parallella Project, along with support on the architecture, SDK and OpenCL implementation. While the student is waiting to receive hardware it should be possible to provide remote access to a Parallella prototype at the ORBIT test bed at WINLAB, Rutgers.
Mentor: Tommy Tracy II, High Performance Low Power Lab, University of Virginia.
Performance metric suite for GNU Radio (first proposed: 2012)¶
Details: Build a set of performance measurement tools for GNU Radio to enable accurate measurement of a variety of metrics including processor load, throughput (of a flow-graph) and end-to-end latency. For example, an existing set of patches to GNU Radio (and a Linux libc include file) was developed to measure latency between GNU Radio and the USB-based Ettus Research USRP1 (ArchitecureLatencyMeasurements). However, this project has not been updated to use the new UHD interface, and therefore does not work with the network-based or embedded varieties of the USRP family. Further, this project was not intended for end-to-end latency measurements of a complete GNU Radio application and is specific to the USRP radio front-end.
In addition, GNU Radio has been developing the VOLK library to provide platform-specific, optimized signal processing blocks. The intent is expose and make the use of vector processing capabilities in general purpose processors easy. Since the idea of VOLK is to improve performance, having a general purpose tool to measure application-level metrics is critical. The goal is to build a suite of performance measurement tools that can track end-to-end application-level metrics such as latency and speed, and which complements profiling tools such as OProfile to help guide optimization work. An initial attempt at VOLK benchmarking was done in GNU Radio and is discussed here, but a more complete, easy to use toolset is called for.
Knowledge Prerequisite: General Linux/Unix programming, C++, maybe Python
Access to USRPs required.
Mentor: Doug Geiger
Channel Sounder (first proposed: 2012)¶
Details: Channel sounding describes the process of measuring a multipath propagation channel and obtain information about excess delay, Doppler spread and fading properties. The final product should make use of USRPs for channel sounding (the high timing constraints require use of the FPGA) and provide a complete measurement tool which can be used to gather statistics about mobile communication channels.
Knowledge prerequisite: Digital signal processing basics, FPGA basics
Access to USRPs required.
Mentor: Johnathan Corgan
Generic compressive sensing framework (first proposed: 2012)¶
Details: By correlating the incoming signal with pseudo-random sequences, it may become possible to obtain the entire 100 MHz spectrum at once via Ethernet, albeit in a different base than the usual regular sampling time base. One proven application for this is Compressed Spectral Estimation. This project includes developing an FPGA image to correlate with pseudo-random sequences.
Knowledge prerequisite: Some FPGA experience, basic digital signal processing
Mentor: Jens Elsner
Rewrite tunnel.py (first proposed: 2012)¶
Details: Tunnel.py has been around for quite some time and has served as a simple example of how GNU Radio could be used for basic MAC layer development. Basically, it's a transceiver radio which connects GNU Radio to the networking stack of the operating system through virtual network devices (i.e. TUN/TAP devices). This allows to tunnel any IP traffic through GNU Radio and therefore use it similar to a normal Wifi device. In the recent past however, it turned out that tunnel.py is not really working as it is supposed to do. For many GNU Radio users it doesn't work at all. That's because tunnel.py is quite choosy in terms of modulation type, rate+gain settings, the daughterboard used etc. This project therefore aims at rewriting tunnel.py in order to turn it into a working example again which also allows GNU Radio beginners to see how powerful it is.
Knowledge prerequisite: C++ & Python, basic digital signal processing
Mentor: Andre Puschmann
Integration of GNU Radio into Eclipse. (first proposed: 2012)¶
Details: Create a development environment for GNU Radio based on Eclipse (see also: Call20120119). The goal is to make the entry point into GNU Radio easier for beginners. The Eclipse extension could help in the actual coding process (e.g. code completion, knowledge of GNU Radio modules etc.) but also provide graphical tools (possibly a GRC integration).
Details: Build a vector-network analyzer app (qtgui based) that can show PSD, constellations, maybe other representations of the signal. Demodulate some basic modulation schemes (BPSK, QPSK, GMSK, QAM, etc.).
AGC loop for the USRP. (first proposed: 2012)¶
Details: Make an AGC loop for the USRP (i.e., in hardware with direct, low-latency control over analog gain stages).
Access to USRPs required.
DECT Tools (first proposed: 2013)¶
Details: DECT is a standard used to connect wireless phones to basestations (for landline operation). DECT for GNU Radio has been attempted before (see https://www.cgran.org/wiki/GR_DECT), but is lacking a stable release. With all the new features in-place a fully functional and nicely integrated DECT transceiver should be possible.Goals of this project:
- Receive a clear voice signal from an unencrypted DECT signal (DECT sniffer)
- Can we use GNU Radio to actually connect to a DECT base station?
Skills required: DSP, C++, Python
FPGA pre-correlation (first proposed: 2013)¶
If there was a possibility to pre-correlate and decimate on the FPGA, this could help a lot downstream and allow usage of high bandwidths with lower sampling frequencies.Applications:
- Channel Sounding
- Spectrum estimation
- Compressive Sensing
DVB-T transmitter / receiver (first proposed: 2013)¶
Turbo Equalizer (first proposed: 2013)¶
Details: A turbo equalizer is a receiver component similar to turbo codes, see also https://en.wikipedia.org/wiki/Turbo_equalizer. The performance of such equalizers is very good; even in tricky channels, the bit error rates converge closely to theoretical limits.
Implementing such an equalizer is difficult on several levels: first of all, the theory behind turbo equalizers must be understood. Then, the iterative nature of such systems requires a highly optimized implementation if it should be usable in real-time systems.
Skills required: DSP theory, C++, Python, SIMD-codes (e.g. VOLK)