• Stars
    star
    112
  • Rank 312,240 (Top 7 %)
  • Language
    Python
  • License
    MIT License
  • Created about 6 years ago
  • Updated about 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

End-to-end learning of optical communication systems

Claude

This repository provides helper functions and models for end-to-end learning of optical communication systems.

For clarifications or bugs feel free to create a Github issue or write me an email: chef@<firstname><lastname>.com

This code has been developed as part of my PhD at DTU, Denmark, but also thereafter. There is still some code that has not been integrated into the public repository here, which will take some more time.

The latest example concerns a laser phase noise channel (+ AWGN), as studied in optical communication systems [https://ieeexplore.ieee.org/document/4814758]. A recurrent neural network is used to estimate the phase noise in parallel to the end-to-end auto encoder. The learned constellation becomes eye shaped instead of round in order to have better properties regarding the phase noise, see here. The recurrent neural network can be seen as a spatial transformer network [https://arxiv.org/abs/1506.02025, https://arxiv.org/abs/1605.00716].

Some examples doing probabilistic shaping have been added, following this publication ([https://arxiv.org/abs/1906.07748]).

Another example, an implementation of the split-step Fourier method (SSFM) in Tensorflow, allows gradient based learning end-to-end through the SSFM. The procedure is computational expensive and memory demanding, see here for two rendered iPython notebooks containing a pure simulation and an example of constellation shaping across the SSFM via end-to-end learning. Since the SSFM models cross-wavelength, cross-polarization and temporal correlations of the signal, in principle, it is possible to learn a high dimensional constellation shape across all mentioned degrees of freedom. However, the computational demand and memory usage is very large.

Further, this repository provides an implementation for two conference contributions ([https://arxiv.org/abs/1805.03785], [https://arxiv.org/abs/1907.08535]) and a manuscript [https://arxiv.org/abs/1810.00774].

Content

iPython Notebook Example Shaping Channel Optimised for bits/symbols (GMI/MI) Gradient Through Channel Reference
Link Geometric AWGN Symbols (MI) βœ”οΈ ---
Link Probabilistic AWGN Symbols (MI) βœ”οΈ Arxiv
Link Joint Geo./Prob. AWGN Symbols (MI) βœ”οΈ Arxiv
Link Geometric Fiber (NLIN/GN) Symbols (MI) βœ”οΈ Arxiv 1, Arxiv 2
Link Probabilistic Fiber (NLIN/GN) Symbols (MI) βœ”οΈ ---
Link Geometric Fiber (SSFM) Symbols (MI) βœ”οΈ ---
Link Geometric Laser phase noise Symbols (MI) βœ”οΈ ---
Link Geometric AWGN Bits (GMI) βœ”οΈ ---
Link Geometric Fiber (NLIN/GN) Bits (GMI) βœ”οΈ Arxiv
Link Geometric AWGN Symbols (MI) ❌ Arxiv
Link Geometric AWGN Symbols (MI)/MINE ❌ Arxiv

Acknowledgements

The learning algorithm learns by embedding a fiber channel model within an autoencoder. The implementation of the fiber channel model is copied from a MATLAB implementation by Dar et al. [https://www.osapublishing.org/oe/abstract.cfm?uri=oe-22-12-14199, https://arxiv.org/abs/1310.6137]. Please cite the authors appropriately if you use the here provided Python implementation.

Numpy model [claude/claude/models/NLIN.py]

Tensorflow model [claude/claude/claudeflow/models/NLIN.py]

Installation using Anaconda on Ubuntu

Install Anaconda from https://www.anaconda.com/download/

Clone the git repository into your filesystem

git clone https://github.com/rassibassi/claude

Enter the git repository

cd claude

Create a new conda environment

conda create -n claudeDev python=3.6 pip scipy jupyter matplotlib

Activate the new environment

source activate claudeDev

Install TensorFlow as instructed here: https://www.tensorflow.org/install/install_linux#InstallingAnaconda

Install the local claude pip package

pip install -e claude

This will install claude from the claude folder.

Check if everything is installed

pip list | grep -E 'claude|tensorflow|numpy|scipy|jupyter|matplotlib'

Output:

claude             0.1       /home/path-to-some-folder/claude
jupyter            1.0.0     
jupyter-client     5.2.3     
jupyter-console    5.2.0     
jupyter-core       4.4.0     
matplotlib         2.2.3     
numpy              1.15.1    
scipy              1.1.0     
tensorflow         1.14

Start Jupyter with

jupyter notebook

Open the Jupyter notebooks in the example directory. Then you can click on Kernel -> Restart & Run All