This repository contains sets of notebooks and scripts used to reproduce the results of my thesis "Deep Learning for Wireless Communications: Flexible Architectures and Multitask Learning".
The work is meant to be reproducible, the notebooks have random seeds locked down, etc. I hope at least some of this will be useful for fellow future researchers going down the path I had decided to embark upon so long ago.
Software versions used to run all the notebooks:
- Python 3.8
- NumPy 1.20.1
- PyTorch 1.10
- CUDA 10.1
Optional:
- MATLAB 2021b (matlab python engine required for some multipath fading channel evaluations)
I might update these to more up-to-date versions at some point, but this is what the original results were obtained with. That said, all the code should still run on later versions of PyTorch.
I highly recommend running the training notebooks with a GPU. Even on my 1080ti the Seq2Seq models take days to train. Don't attempt on CPU. The great thing about Jupyter notebooks is that they typically render pretty well on github and you can view the code/results without actually running anything.
- Background - more educational than anything, you can use the code in these to reproduce the wireless communications background chapter figures. It covers baseband modulation, channel impairments and some high order stats (moments). For more in-depth on fundamentals there's a nice collection of notebooks on the Strath-SDR github. I also can't recommend Sam Lichtman's PySDR book enough (it's a must-read if you're just starting out in wireless comms and SDR).
- Seq2Seq - Sequence-to-Sequence models based on RNNs. I used these models for simultaneous AMC and demodulation. Proof of concept model can do 2 classes - BPSK and QPSK. Doesn't have the bells and whistles of attention, or bidirectionality. This is a good example if you want to do comms Seq2Seq, however for general Seq2Seq education I highly recommend this repo.
- FCN - Fully Convolutional Neural Network work on frame synchronization. There's some material in here that explains frame sync from scratch, which might be useful if you're new to the field. Primarily focuses on training FCNs for short preamble lengths you can find in Internet of Things (IoT) or sensor networks applications (e.g. 4 bytes).
- MTL - Multitask learning. This one's split into two:
- amc - contains a set of notebooks for deep learning-based SNR estimation, then combines a regular VGG-like AMC network from this paper by O'Shea with an SNR estimator to create an SNR-aware AMC CNN.
- fcn - expands upon the FCN work on frame sync and adds CFO estimation as an additional task to improve performance at high carrier offsets. Also shows how to train a fully convolutional double-headed frame synchronizer + SNR estimator. A lot of the initial SNR estimation work was heavily inspired by this speech recognition paper.