GSoCIdeas: Difference between revisions
Luigifcruz (talk | contribs) (Add additional context for CyberEther track.) |
|||
(64 intermediate revisions by 15 users not shown) | |||
Line 1: | Line 1: | ||
Note- also check out [[Grant Ideas]] for additional ideas that are more suited towards grant money than GSoC. | |||
This is the list of project ideas for the summer of code | |||
== Summer of Code 2024: Project ideas list == | |||
This is the list of project ideas for the summer of code 2024 within GNU Radio.<br /> | |||
Remember that these are '''ideas''' and are merely meant as an inspiration for you to write your own proposal. | 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 [ | Students who do not find a fit among these projects are encouraged to engage with us and suggest new ones. The [[MailingLists|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 the summer of code, unless you're contacting a mentor listed here to get feedback on a proposal. | ||
Reviewing the [https://developers.google.com/open-source/gsoc/faq Google GSoC FAQ] page for a broader understanding of project, mentor, and student responsibilities is recommended. | Reviewing the [https://developers.google.com/open-source/gsoc/faq Google GSoC FAQ] page for a broader understanding of project, mentor, and student responsibilities is recommended. | ||
Line 19: | Line 22: | ||
* Both OOTs and in-tree improvements are welcome | * Both OOTs and in-tree improvements are welcome | ||
=== Graphical interoperability between CyberEther and GNU Radio === | |||
* | |||
* | The [https://github.com/luigifcruz/CyberEther CyberEther] project comes with some neat graphical sinks that would be great to have access to in GNU Radio. This project entails creating a new CyberEther GUI workflow much like the [https://github.com/gnuradio/gr-bokehgui gr-bokehgui] project, such that users can create flowgraphs with CyberEther sinks. This would allow the user to visualize GNU Radio data streams in one of the high-performance CyberEther plots (lineplot, waterfall, spectrogram, etc). | ||
'''Prerequisites''' | |||
* Knowledge of C++ and some Python | |||
* Familiarity with graphical APIs (OpenGL, Vulkan, Metal) | |||
* Basic Qt understanding | |||
'''Outcome''' | |||
* OOT module with CyberEther sinks | |||
* Support for both GNU Radio main branch and 3.10? | |||
'''Project length''' | |||
Long (350 hours) | |||
'''Difficulty''' | |||
Medium | |||
'''Mentor(s)''' | |||
Luigi Cruz, Håkon Vågsether | |||
=== GPU Accelerated Signal Processing Blocks === | |||
GPUs offer incredible capability for accelerating a number of signal processing routines when the calculations can be done in parallel. Also, GNU Radio 3.10 brought in a "custom buffers" feature which provides support generally for accelerator devices by allowing blocks to have direct access to device memory, finally making accelerator processing feasible through a flowgraph (see [https://fosdem.org/2022/schedule/event/radio_gr3_10/ FOSDEM 2022 Presentation]. | |||
One piece that is missing for GNU Radio is a library of blocks that accelerate common DSP routines. There are several interesting libraries of GPU accelerated signal processing - primarily using CUDA because of its accessible programming paradigm and the ubiquity of NVIDIA hardware: | |||
* | * [https://github.com/NVIDIA/MatX Matx] | ||
* | * [https://github.com/rapidsai/cusignal cuSignal] (Python signal processing) | ||
* | * [https://github.com/gnuradio/cusp CUSP] | ||
Integration of any of this functionality, along with additional kernels for signal processing would need to be predicated on using [https://github.com/gnuradio/gr-cuda gr-cuda] custom buffers, and expanding this module as needed | |||
This project can be broken into several subprojects: | |||
* Create gr-matx OOT | |||
** Add Matx Custom Buffer Type (after gr-cuda) | |||
** Create blocks wrapping Matx operations | |||
* Expand gr-cuda | |||
** Additional custom buffer types - pinned, unified | |||
** Create python custom buffers allowing zero copy into python blocks | |||
* Create gr-cuSignal | |||
** Wrap cuSignal functionality (dependent on python zero copy) | |||
* Replicate existing GR blocks as CUDA accelerated (things not in cuSignal or Matx) | |||
** Target for extensions to Matx, cuSignal, or CUSP (within our control) | |||
** FIR Filters | |||
** Polyphase Resampler | |||
** Signal Source | |||
** Moving Average | |||
** Polyphase Clock Sync | |||
** Stream Operators | |||
** ... | |||
'''Prerequisites''' | |||
* Knowledge of C++ and Python. | |||
* Familiarity with CUDA programming | |||
'''Outcome''' | |||
Depends on chosen subprojects (see above). | |||
'''Project length''' | |||
350 hours | |||
'''Difficulty''' | |||
Medium | |||
'''Mentor(s)''' | |||
Josh Morman | |||
=== GRC and GR 4.0 === | |||
Development of GR 4.0 is progressing quickly. In the current runtime prototype a plugin architecture is used to properly register blocks with the runtime. | |||
This allows a more dynamic construction of flowgraphs and introspection into the blocks. But this means the current way of assembling a flowgraph by generating a Python or C++ | |||
file needs updates. | |||
The idea is to port and change necessary parts of GRC (Qt development version) to use the block registry in the new GNU Radio runtime https://github.com/fair-acc/graph-prototype/ and assemble some of the example flowgraphs defined in GRC files and make them run. | |||
The design for this is not finalized and therefore you will have freedom to propose your ideas. | |||
'''Prerequisites''' | |||
* Good Knowledge of C++ and Python | |||
* Experience with inter-language bindings (not necessarily C++ & Python) is useful | |||
* Basic Qt understanding | |||
'''Outcome''' | |||
* Prototype integration of GRC with the new plugin architecture of GR 4.0 | |||
'''Project length''' | |||
Long (350 hours) | |||
'''Difficulty''' | |||
Challenging | |||
'''Mentor(s)''' | |||
Andrej Rode, Josh Morman | |||
=== | === GRC: Standalone application and pluggable workflows === | ||
GNU Radio Companion (GRC) has become useful outside of just GNU Radio, and several projects have forked and maintained their own versions. Even within GRC, there are different workflows (QT GUI, C++, Bokeh-gui) with different options in the path to render a working flowgraph see [https://github.com/gnuradio/greps/blob/main/grep-0025-grc-out-of-tree.md GREP 0025]. In its most basic form, GRC does the following: | |||
* User sets high level options (type of flowgraph) | |||
* User draws flowgraph graphically with blocks and connections | |||
* Flowgraph uses templates (Mako) to render to a python script | |||
The | The goal of this project is to pull GRC out of the GNU Radio codebase and make the workflow modular. There should be a high level selection of the workflow that defines the options block. In our current usage these workflows could be: | ||
* Python QT GUI | |||
* C++ QT GUI | |||
* Python No GUI | |||
* C++ No GUI | |||
* Bokeh GUI | |||
The workflow should map to a set of templates that are used to render the output script. The definition of the workflow options and the associated templates should be defined in some pluggable manner (files dropped into a directory that GRC sees at runtime), so that "out of tree" workflows can be added easily - because we don't know all the use cases of GRC. | |||
'''Steps''' | |||
* Move GRC as a separate repository (while maintaining git history) | |||
* Remove dependence of GRC on gnuradio | |||
* Modularized options block | |||
* Modularized templates | |||
* Allow templating with jinja as well | |||
* If time allows: | |||
** Modularize gr-modtool templates as well per [https://github.com/gnuradio/greps/blob/main/grep-0026-modtool-template-rework.md GREP 0026] | |||
** Support multiple domains' workflows. | |||
'''Prerequisites''' | |||
* Knowledge of Python. | |||
'''Outcome''' | |||
* GRC as a GNU Radio-independent application | |||
* Support for additional workflows in GRC | |||
* Depends on chosen subprojects (see above). | |||
'''Project length''' | |||
350 hours | |||
'''Difficulty''' | |||
Medium | |||
'''Mentor(s)''' | |||
Josh Morman, | |||
Håkon Vågsether, | |||
Sebastian Koslowski, | |||
?? Someone else that is a GRC Wizard | |||
GRC | === GRC: Build-in sub flowgraphs === | ||
GNU Radio has hierarchical blocks as a way to build reuseable sub flowgraphs. These hier_blocks can be designed in GRC, however, they have to be compiled to code and GRC bindings, before they can be used in other GRC files. While this is great for reuseablity across flowgraphs, it is quite cumbersome when the main use is to structure a single (larger) flowgraph. The goal of this project is to ease this use-case by embedding sub flowgraphs directly in the main GRC file. Instead of creating bindings and code and then parsing them back again, this process shall be done in-place to allow quickly editing sub flowgraphs on-the-fly. | |||
'''Prerequisites''' | |||
* GRC is written in Python which is (almost) all you need to know for this project. | |||
'''Outcome''' | |||
* A vastly improved workflow for structuring flowgraphs | |||
'''Project length''' | |||
175 hours | |||
'''Difficulty''' | |||
Easy | |||
'''Mentor(s)''' | |||
Håkon Vågsether | |||
=== Revitalize in-tree and out-of-tree (OOT) modules === | |||
A lot has changed since version 3.7, and GNU Radio has made great technical strides the last few years. However, some OOT modules haven't been updated to support the latest versions of GNU Radio, and these modules currently require the user to install an older version of the framework. This is unfortunate, and lowers the useability of GNU Radio as a whole. Some of these modules have been superseded by others, but might still have some blocks or flowgraphs that are useful, and these could be updated and moved in-tree. Some in-tree modules are also in need of attention, like gr-wavelet, which does not have any examples. | |||
'''Prerequisites''' | |||
* Knowledge of C++, Python and DSP. | |||
'''Outcome''' | |||
* More example code, tests and flowgraphs for various in-tree modules | |||
* Porting various OOT modules to support recent versions of GNU Radio | |||
* Possibly blocks/flowgraphs from old OOT modules moved in-tree | |||
'''Project length''' | |||
Small (90 hours) - Medium (175 hours) | |||
'''Difficulty''' | |||
Easy - Medium | |||
'''Mentor(s)''' | |||
Håkon Vågsether, ? | |||
GNU Radio | === Forward Error Correction in GNU Radio === | ||
Over the years many different forward error correction (FEC) methods ( e.g. Polar Encoder/Decoder, LDPC Encoder/Decoder) have been added to GNU Radio. | |||
In other open-source projects (e.g. Aff3ct, more modern methods and possibly more performant methods have been implemented. | |||
The goal of this project is to update and possibly overhaul the FEC implementations within GNU Radio. Since there are quite some methods in the wild, | |||
we need to coordinate on which methods and other libraries should be included in the comparison. Same goes for the already available methods for error coding in GNU Radio. | |||
'''Prerequisites''' | |||
* Knowledge of C++, Python and DSP. | |||
* Interest in information theory and error coding | |||
* No fear of reading & comparing other implementations | |||
'''Outcome''' | |||
* Updated & polished FEC experience in GNU Radio | |||
* Addition of more performant and updated methods for error coding | |||
* Deletion of possibly redundant and inperformant methods | |||
'''Project length''' | |||
Medium (175 hours) - Long (350 hours) | |||
'''Difficulty''' | |||
Medium - Hard | |||
'''Mentor(s)''' | |||
Andrej Rode, ? | |||
=== | === CI for maintenance branches and select OOT modules === | ||
It would be useful to have nightly builds for GNU Radio's maintenance branches (3.8, 3.9, 3.10) and some select OOTs. | |||
'''Prerequisites''' | |||
* Experience with Docker? | |||
* ? | |||
'''Outcome''' | |||
* Automated PPAs, Snaps, Flatpak apps | |||
'''Project length''' | |||
175 hours | |||
'''Difficulty''' | |||
Easy | |||
'''Mentor(s)''' | |||
Håkon Vågsether, ? | |||
== | == Old Ideas == | ||
Feel free to browse [https://wiki.gnuradio.org/index.php?title=OldGSoCIdeas old ideas] from previous years for inspiration. | |||
Latest revision as of 16:36, 23 February 2024
Note- also check out Grant Ideas for additional ideas that are more suited towards grant money than GSoC.
Summer of Code 2024: Project ideas list
This is the list of project ideas for the summer of code 2024 within GNU Radio.
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 the summer of code, unless you're contacting a mentor listed here to get feedback on a proposal.
Reviewing the Google GSoC FAQ page for a broader understanding of project, mentor, and student responsibilities is recommended.
If you need a USRP or other radio hardware to complete the project, we will be able to arrange something.
Please add ideas to this list (you may cannibalize old ideas, of course!).
Guidelines for good projects (when suggesting projects, please consider these):
- Clearly defined scope, with a main target that can be done in 3 months
- Clear benefits for the GNU Radio project
- Not specific to a certain hardware. No specific embedded devices, either, please.
- Both OOTs and in-tree improvements are welcome
Graphical interoperability between CyberEther and GNU Radio
The CyberEther project comes with some neat graphical sinks that would be great to have access to in GNU Radio. This project entails creating a new CyberEther GUI workflow much like the gr-bokehgui project, such that users can create flowgraphs with CyberEther sinks. This would allow the user to visualize GNU Radio data streams in one of the high-performance CyberEther plots (lineplot, waterfall, spectrogram, etc).
Prerequisites
- Knowledge of C++ and some Python
- Familiarity with graphical APIs (OpenGL, Vulkan, Metal)
- Basic Qt understanding
Outcome
- OOT module with CyberEther sinks
- Support for both GNU Radio main branch and 3.10?
Project length
Long (350 hours)
Difficulty
Medium
Mentor(s)
Luigi Cruz, Håkon Vågsether
GPU Accelerated Signal Processing Blocks
GPUs offer incredible capability for accelerating a number of signal processing routines when the calculations can be done in parallel. Also, GNU Radio 3.10 brought in a "custom buffers" feature which provides support generally for accelerator devices by allowing blocks to have direct access to device memory, finally making accelerator processing feasible through a flowgraph (see FOSDEM 2022 Presentation.
One piece that is missing for GNU Radio is a library of blocks that accelerate common DSP routines. There are several interesting libraries of GPU accelerated signal processing - primarily using CUDA because of its accessible programming paradigm and the ubiquity of NVIDIA hardware:
Integration of any of this functionality, along with additional kernels for signal processing would need to be predicated on using gr-cuda custom buffers, and expanding this module as needed
This project can be broken into several subprojects:
- Create gr-matx OOT
- Add Matx Custom Buffer Type (after gr-cuda)
- Create blocks wrapping Matx operations
- Expand gr-cuda
- Additional custom buffer types - pinned, unified
- Create python custom buffers allowing zero copy into python blocks
- Create gr-cuSignal
- Wrap cuSignal functionality (dependent on python zero copy)
- Replicate existing GR blocks as CUDA accelerated (things not in cuSignal or Matx)
- Target for extensions to Matx, cuSignal, or CUSP (within our control)
- FIR Filters
- Polyphase Resampler
- Signal Source
- Moving Average
- Polyphase Clock Sync
- Stream Operators
- ...
Prerequisites
- Knowledge of C++ and Python.
- Familiarity with CUDA programming
Outcome
Depends on chosen subprojects (see above).
Project length
350 hours
Difficulty
Medium
Mentor(s)
Josh Morman
GRC and GR 4.0
Development of GR 4.0 is progressing quickly. In the current runtime prototype a plugin architecture is used to properly register blocks with the runtime. This allows a more dynamic construction of flowgraphs and introspection into the blocks. But this means the current way of assembling a flowgraph by generating a Python or C++ file needs updates.
The idea is to port and change necessary parts of GRC (Qt development version) to use the block registry in the new GNU Radio runtime https://github.com/fair-acc/graph-prototype/ and assemble some of the example flowgraphs defined in GRC files and make them run. The design for this is not finalized and therefore you will have freedom to propose your ideas.
Prerequisites
- Good Knowledge of C++ and Python
- Experience with inter-language bindings (not necessarily C++ & Python) is useful
- Basic Qt understanding
Outcome
- Prototype integration of GRC with the new plugin architecture of GR 4.0
Project length
Long (350 hours)
Difficulty
Challenging
Mentor(s)
Andrej Rode, Josh Morman
GRC: Standalone application and pluggable workflows
GNU Radio Companion (GRC) has become useful outside of just GNU Radio, and several projects have forked and maintained their own versions. Even within GRC, there are different workflows (QT GUI, C++, Bokeh-gui) with different options in the path to render a working flowgraph see GREP 0025. In its most basic form, GRC does the following:
- User sets high level options (type of flowgraph)
- User draws flowgraph graphically with blocks and connections
- Flowgraph uses templates (Mako) to render to a python script
The goal of this project is to pull GRC out of the GNU Radio codebase and make the workflow modular. There should be a high level selection of the workflow that defines the options block. In our current usage these workflows could be:
- Python QT GUI
- C++ QT GUI
- Python No GUI
- C++ No GUI
- Bokeh GUI
The workflow should map to a set of templates that are used to render the output script. The definition of the workflow options and the associated templates should be defined in some pluggable manner (files dropped into a directory that GRC sees at runtime), so that "out of tree" workflows can be added easily - because we don't know all the use cases of GRC.
Steps
- Move GRC as a separate repository (while maintaining git history)
- Remove dependence of GRC on gnuradio
- Modularized options block
- Modularized templates
- Allow templating with jinja as well
- If time allows:
- Modularize gr-modtool templates as well per GREP 0026
- Support multiple domains' workflows.
Prerequisites
- Knowledge of Python.
Outcome
- GRC as a GNU Radio-independent application
- Support for additional workflows in GRC
- Depends on chosen subprojects (see above).
Project length
350 hours
Difficulty
Medium
Mentor(s)
Josh Morman, Håkon Vågsether, Sebastian Koslowski, ?? Someone else that is a GRC Wizard
GRC: Build-in sub flowgraphs
GNU Radio has hierarchical blocks as a way to build reuseable sub flowgraphs. These hier_blocks can be designed in GRC, however, they have to be compiled to code and GRC bindings, before they can be used in other GRC files. While this is great for reuseablity across flowgraphs, it is quite cumbersome when the main use is to structure a single (larger) flowgraph. The goal of this project is to ease this use-case by embedding sub flowgraphs directly in the main GRC file. Instead of creating bindings and code and then parsing them back again, this process shall be done in-place to allow quickly editing sub flowgraphs on-the-fly.
Prerequisites
- GRC is written in Python which is (almost) all you need to know for this project.
Outcome
- A vastly improved workflow for structuring flowgraphs
Project length
175 hours
Difficulty
Easy
Mentor(s)
Håkon Vågsether
Revitalize in-tree and out-of-tree (OOT) modules
A lot has changed since version 3.7, and GNU Radio has made great technical strides the last few years. However, some OOT modules haven't been updated to support the latest versions of GNU Radio, and these modules currently require the user to install an older version of the framework. This is unfortunate, and lowers the useability of GNU Radio as a whole. Some of these modules have been superseded by others, but might still have some blocks or flowgraphs that are useful, and these could be updated and moved in-tree. Some in-tree modules are also in need of attention, like gr-wavelet, which does not have any examples.
Prerequisites
- Knowledge of C++, Python and DSP.
Outcome
- More example code, tests and flowgraphs for various in-tree modules
- Porting various OOT modules to support recent versions of GNU Radio
- Possibly blocks/flowgraphs from old OOT modules moved in-tree
Project length
Small (90 hours) - Medium (175 hours)
Difficulty
Easy - Medium
Mentor(s)
Håkon Vågsether, ?
Forward Error Correction in GNU Radio
Over the years many different forward error correction (FEC) methods ( e.g. Polar Encoder/Decoder, LDPC Encoder/Decoder) have been added to GNU Radio. In other open-source projects (e.g. Aff3ct, more modern methods and possibly more performant methods have been implemented.
The goal of this project is to update and possibly overhaul the FEC implementations within GNU Radio. Since there are quite some methods in the wild, we need to coordinate on which methods and other libraries should be included in the comparison. Same goes for the already available methods for error coding in GNU Radio.
Prerequisites
- Knowledge of C++, Python and DSP.
- Interest in information theory and error coding
- No fear of reading & comparing other implementations
Outcome
- Updated & polished FEC experience in GNU Radio
- Addition of more performant and updated methods for error coding
- Deletion of possibly redundant and inperformant methods
Project length
Medium (175 hours) - Long (350 hours)
Difficulty
Medium - Hard
Mentor(s)
Andrej Rode, ?
CI for maintenance branches and select OOT modules
It would be useful to have nightly builds for GNU Radio's maintenance branches (3.8, 3.9, 3.10) and some select OOTs.
Prerequisites
- Experience with Docker?
- ?
Outcome
- Automated PPAs, Snaps, Flatpak apps
Project length
175 hours
Difficulty
Easy
Mentor(s)
Håkon Vågsether, ?
Old Ideas
Feel free to browse old ideas from previous years for inspiration.