Pypho is Python based tool for simulating optical fiber transmission. Pypho is a collection of functions. With each function an object is defined which represents a network component such as transmission fiber, optical amplifier or laser diode.

The idea of Pypho is to be able to define a set of network elements with defined parameters and to add own functions. The user has the full flexibility to define parameters.

Each function (network element) has input and/or output variables and can be tuned by a set of parameters. The network elements are connected by feeding the input of one network element with the output of the other network element. As Pypho is script based you can define your transmission setup flexibile with all the advantages of a programming language (loops, if-else decisions, analysing and tweaking the variables,..).

No GUI! Pypho doesn't offer a GUI with click, drag & drop.

Pypho general idea
Fig. 1 : Functions (blue), Objects (Paramterized components) (red) and part of a transmission setup (green).


Fig. 1 shows that based on the imported libraries (blue) a set of network elements can be defined (red). These network elements can be connected.

The python code for the function import is:

from pypho_lasmod import pypho_lasmod
from pypho_fiber import pypho_fiber

The definition of the network elements are straighforward

SC_1549 = pypho_lasmod(glova = gp, esig=esig(), power = 3, Df = [-125] , teta = np.pi/8)
SC_1550 = pypho_lasmod(glova = gp, esig=esig(), power = 6, Df = [0] , teta = np.pi)
SC_1551 = pypho_lasmod(glova = gp, esig=esig(), power = 3, Df = [+125] , teta = np.pi/2)
SSMF    = pypho_fiber(glova = gp, l = 80.0e3, D = 16.8,   S = 5.8e-2, alpha = 0.21, gamma = 1.4)
DCF     = pypho_fiber(glova = gp, fibertype = 'DCF', l = 10e3)

Afterwards the signals are generated, added and transmitted over the fibers.

E_1549 = SC_1549()
E_1550 = SC_1550()
E_1551 = SC_1551()
E[0]['E'] = E_1549[0]['E'] + E_1550[0]['E'] + E_1551[0]['E']

E = DCF(E)

Looks easy! Is easy!

List of functions

The current version is V0.5 (2018-05-01).

Class or feature V 0.5 V 1.0 (2018-10-01) Remark
pypho_setup yes yes -
Noise calculation no yes -
pypho_bits yes yes -
pypho_tx no yes Generic transmitter modell
pypho_rx no yes Generic receiver modell
pypho_signalsrc yes yes -
pypho_lasmod yes yes -
pypho_cwlaser yes yes -
pypho_meanpower yes yes -
pypho_amp no yes Improved amp model with noise modelling
pypho_fiber yes yes -
pypho_cfiber no yes c implementation supporting multithreading
pypho_optfi yes yes -
pypho_eye yes yes -
pypho_poincare yes yes -
pypho_functions yes yes -


The current version is V0.5 (2018-05-01).

Version 1.0 is planned for 2018-10-01:

  • (Fast) Multithreading CPU version: Cython version of fiber modell
  • Correct noise modelling
  • Improved amplifier modell
  • More optical filter
  • Constellation diagramme (plot only)
  • Cloud based computation for beta-testers (please apply by email).


  • Cuda version of fiber modell
  • Tool for characterization of signal quality: timing and amplitude jitter, phase noise, ghostpulses.
  • Generic transmitter and receiver modell