Skip to content

End-to-end learning of optical communication systems

License

Notifications You must be signed in to change notification settings

Rassibassi/claude

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

End-to-end learning of optical communication systems

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages