Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/edsonportosilva/opticommpy

Simulate optical communications systems with Python.
https://github.com/edsonportosilva/opticommpy

digital-signal-processing jupyter-notebook numba optical-communications photonics python

Last synced: 1 day ago
JSON representation

Simulate optical communications systems with Python.

Awesome Lists containing this project

README

        



This repository is a Python-based framework to simulate systems, subsystems, and components of fiber optic communication systems, for educational and research purposes.


![PyPI](https://img.shields.io/pypi/v/OptiCommPy?label=pypi%20package) ![PyPI - Downloads](https://img.shields.io/pypi/dm/OptiCommPy) [![Documentation Status](https://readthedocs.org/projects/opticommpy/badge/?version=latest)](https://opticommpy.readthedocs.io/en/latest/?badge=latest) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.11450597.svg)](https://doi.org/10.5281/zenodo.11450597) [![DOI](https://joss.theoj.org/papers/10.21105/joss.06600/status.svg)](https://doi.org/10.21105/joss.06600)

## Available features

* Several digital modulations available (M-PAM, square M-QAM, M-PSK, OOK) to simulate IM-DD and coherent optical systems.
* Numerical models to simulate optical transmitters, optical amplification, nonlinear propagation over optical fibers, and optical receivers.
* CPU and GPU-based implementations of the [*split-step Fourier Method*](https://en.wikipedia.org/wiki/Split-step_method) to simulate polarization multiplexed WDM transmission.
* Standard digital signal processing (DSP) blocks employed in coherent optical receivers, such as:
- *Signal resampling.*
- *Matched filtering.*
- *Clock recovery.*
- *Electronic chromatic dispersion compensation (EDC)*.
- *Several NxN MIMO adaptive equalization algorithms*.
- *Carrier phase recovery algorithms.*
* For most of the cases, [Numba](https://numba.pydata.org/) is used to speed up the core DSP functions.
* Evaluate transmission performance with metrics such as:
- *Bit-error-rate* (BER).
- *Symbol-error-rate* (SER).
- *Error vector magnitude* (EVM).
- *Mutual information* (MI).
- *Generalized mutual information* (GMI).
- *Normalized generalized mutual information* (NGMI).
* Visualization of the spectrum of electrical/optical signals, signal constellations, and eyediagrams.

## How can I contribute?

If you want to contribute to this project, implement the feature you want and send me a pull request. If you want to suggest new features or discuss anything related to OptiCommPy, please get in touch with me ([email protected]).

## Requirements/Dependencies

- python>=3.2
- numpy>=1.24.4
- scipy>=1.13.0
- matplotlib>=3.7.0
- numba>=0.54.1,<=0.57.0
- tqdm>=4.64.1
- simple-pid>=1.0.1
- mpl-scatter-density>=0.7.0
- sphinx-rtd-theme>=1.2.2
- nbsphinx>=0.9.3
- nbsphinx-link>=1.3.0
- cupy-cuda12x >= 13.1.0 (optional, in case GPU processing is desired)

## Installation

Using pip:

```
pip install OptiCommPy
```

Cloning the repository from GitHub:

```
$ git clone https://github.com/edsonportosilva/OptiCommPy.git
$ cd OptiCommPy
$ pip install .
```
## Documentation
We are continuously making efforts to improve the code documentation. You can find the latest documentation in [opticommpy.readthedocs.io](https://opticommpy.readthedocs.io/en/latest/index.html).

## Citing this repository

Edson Porto da Silva, Adolfo Fernandes Herbster. "OptiCommPy: Open-source Simulation of Fiber Optic Communications with Python", *Journal of Open Source Software*, 9(98), 6600, (2024) https://doi.org/10.21105/joss.06600