This repository contains the teaching materials for the Nonlinear Signal Processing problem classes (442.022) held during the winter term 2022 at Graz University of Technology. You can enroll via the university's online interface here. See the course homepage for additional information about the corresponding lecture. The content of this repository will be continuously updated as the course progresses.
This course serves as a supplement to the Nonlinear Signal Processing lecture (442.021), as we will elaborate on some of the theoretical concepts introduced in the lecture and discuss more recent applications (e.g. neural network architectures for system identification, normalizing flows, WaveNet, ...) of these principles. Finally, we will apply the gained knowledge by implementing some experiments. We will work ourselves through the content by roughly following the structure of the lecture. See the Logistics for the planned schedule.
We expect you to know about undergraduate math, specifically basic probability theory and statistics (e.g. Bayes' Law, expectations, estimators, ...) and some linear algebra. Moreover, an introductory course in either machine learning or (linear) signal processing is strongly recommended. Knowledge about neural networks would be beneficial but is not necessary. For the implementation tasks some experience with Python and the Numpy, Scipy and PyTorch packages would come in handy, but that is nothing you cannot learn during the course. Apart from that, we will try to keep the course as self-contained as possible.
For each of the three main topic blocks you will have to complete one homework assignment. We will publish the assignments in the Teachcenter. The assignments will be a mix of pen&paper exercises and implementation tasks. For each task you can earn points such that the achievable total over all three assignments will be at least 100 points (there will be additional tasks where you can earn bonus points). We strongly encourage you to work in pairs, as it is always helpful to have someone to discuss your problems with and allows you to split the implementation work. Both members of a group will get the same amount of total points achieved. You will get your grades according following grading scheme:
Achieved Points P | Grade |
---|---|
0 <= P < 50 | (5) Failed |
50 <= P < 62 | (4) Sufficient |
62 <= P < 75 | (3) Satisfactory |
75 <= P < 88 | (2) Good |
88 <= P <= 100 | (1) Excellent |
A word on plagiarism: don't do it, there is no benefit in it for anyone (especially not for you). In addition to our corrections your submissions will undergo an automated plagiarism test. Should we discover any form of plagiarism (e.g. copying solution from the internet without citing its source, copying solutions from other groups, etc.) we will expel the culprits from the course.
We will try to cover the materials in approximately eight sessions (90 minutes each), but we can have additional sessions if we need more time. The sessions will be done in-person (see TUG Online for information on the lecture hall). Participation is of course recommended but not a formal requirement. See the below table for the planned schedule.
Date | Session Content |
---|---|
18 Oct 2022 | MLS*: Introduction, System Identification |
25 Oct 2022 | MLS*: Cumulants: Analysis and Estimation |
08 Nov 2022 | MLS*: Propagation of Uncertainty, Normalizing Flows |
22 Nov 2022 | FMS*: System identification with Convolutional Neural Networks |
06 Dec 2022 | FMS*: Higher-order Statistics in Practice |
13 Dec 2022 | NFMS*: Fixed points and Stability Analysis |
20 Dec 2022 | NFMS*: Analysis of Chaotic Systems |
10 Jan 2023 | NFMS*: Synthesis with Recurrent Architectures, Wavenet |
* MLS = memoryless systems, FMS = fading memory systems, NFMS = non-fading memory systems
Regarding communication I intend to mainly communicate via a dedicated Discord server (the invite link is accessible via the TeachCenter). You can also ask your questions in the TeachCenter forum but discussions are expected to be more lively on Discord. Important announcements will be made via email to registered participants. For personal issues (e.g. regarding organization, grading, ...) you can of course contact me personally (contact information).
Follow the instructions below to get your (Linux) system ready for working on the assignments. We strongly recommend you to work on a Linux-based system. It will make your life easier. Alternatively, working on a Mac should do as well. It might be painful to get your setup right on Windows (although it's doable).
To get a local copy of this repository, simply run
git clone https://github.com/chritoth/nonlinear-signal-processing-2022.git
If you are unfamiliar with Git, Atlassian provides you with some nice and compact tutorials. You could start by reading about what Git actually is or get a nice cheat sheet for the most common Git commands.
In case you want to work in your own git repository (e.g. on Github), you can add this repository as an upstream
git remote add upstream https://github.com/chritoth/nonlinear-signal-processing-2022.git
and grab the latest updates from the course repository e.g. via
git pull upstream master
We recommend to use Miniconda to setup your Python environment which is available for Windows, Linux and MacOSX. You can get the latest version from here or install it like so (Linux):
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
chmod +x Miniconda3-latest-Linux-x86_64.sh
./Miniconda3-latest-Linux-x86_64.sh
Once you have Miniconda installed, create a virtual environment from the included environment description in environment.yml
like so:
conda env create -f /path/to/local/nonlinear-signal-processing-2022/environment.yaml
Finally, activate the conda environment via
conda activate nsp2022
and set your python path to the repository root
export PYTHONPATH="/path/to/local/nonlinear-signal-processing-2022/"
In case the environment specification in the environment.yaml
changes after you have created you conda environment, you can simply update it via
conda env update -n nsp2022 -f environment.yaml
If you want to use Latex in combination with Matplotlib, make sure that you have Latex distribution installed and the executables are included in your PATH. See here for more details.
Below is a schematic file tree of this repository. You should stick to this structure when adding your work.
├── README.md <- This readme file.
│
├── environment.yml <- The file for reproducing the Python environment necessary for running the code in this project.
│
├── data <- Example data.
│
├── notebooks <- Jupyter notebooks for running experiments and analysis.
|
├── src <- Python source code.
│ ├── __init__.py <- Makes src a Python module
│ ├── models <- Trainable (PyTorch) models, ...
│ ├── scripts <- Scripts for running experiments.
│ ├── utils <- Utils for plotting, ...
|
You have to submit your assignment solutions via the Teachcenter. Each submission must include a written report in .pdf
format, containing your results and summarizing your findings. Make sure to include a title page with the names and registration numbers of all group members. Additionally, you must provide your well structured and commented source code packed into a .zip
file.