Processing math: 100%

Example 2: Intersymbol interference by chromatic dispersion

A good estimation to calculate the maximum reach limited by chromatic dispersion can be calculated by using the formular of pulse broadening:
Tmax=T(z=0)1+(zLD)2=T(z=0)1+(z|β2|T20)2

In the definition of the dispersion length LD=T20/|β2| the parameter T0 represents the 1/e pulse width of the electrical field (see example 1). Tmax is the maximum FWHM pulse width of a gaussian pulse concerning the optical power and T(z=0) the FWHM pulse width of the initial pulse befor the transmission fiber.

To generalize the formular the pulse widths are normalized to the symbol rate 1/Tsymbol: T(z=0)=τ(z=0)Tsymbol and Tmax=τmaxTsymbol , where 0<τ(z=0)<1 and τmax>τ(z=0).

Recalculating the 1/e pulswidth T0=T(z=0)/1.66510=τ(z=0)Tsymbol/1.66510 and solving the equation for z results in the maximum transmission distance: zmax=(Tsymbol1.665095)2τ(z=0)τ2maxτ(z=0)22πcDλ20

The example below shows the eye diagram of a single pulse with a symbolrate Tsymbol=1/109s and a FWHM pulse width of T(z=0)=36ps. Setting the maximum pulswidth to Tmax=Tsymbol (τmax=1) and assuming a fiber with a dispersion coefficient of D=16.8ps/(nmkm) the maximum reach is z=56.53km.

As can be seen in the eye diagram the FWHM pulse width of the output signal is equals as the symbolrate Tsymbol. Here only a single pulse is used to show the effect of pulse broadening without any inter symbol interference.

τmax=1 is very aggresive and should be set to about 0.75 .

Pulsebroadening by chromatic dispersion
Fig. 1 : Input and broadened output signal

Fig. 2 and Fig. 3 show the eyediagramme of sognal with different FWHM puls widths after the maximum transmission distance zmax. As can be seen the eyes looks different, although in both cases the maximum pulse width is set to τmax=0.75. The eye opening penalty is different. This means that the formular is only an estimation of the maximum transmission distance.

Pulsebroadening by chromatic dispersion
Fig. 2 : Eye diagramme for τ(z=0)=0.25 and z=29.75km.

Pulsebroadening by chromatic dispersion
Fig. 3 : Eye diagramme for τ(z=0)=0.50 and z=47.05km.

##!/usr/bin/env python2
# -*- coding: utf-8 -*-

#Import functions and libraries
from pypho_setup import pypho_setup
from pypho_bits import pypho_bits
from pypho_signalsrc import pypho_signalsrc
from pypho_lasmod import pypho_lasmod
from pypho_fiber import pypho_fiber
from pypho_eye import pypho_eye
from pypho_functions import *
import numpy as np
import copy
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
from scipy.interpolate import UnivariateSpline

# Define some parameter
T_FWHM = 50e-12       # FWHM-pulsewidth of the optical power
T_e = T_FWHM / 1.66510  # 1/e-pulsewidth of the electrical field
z = 29.756e3         # Fiber length
D = 16.8                # Dispersion coefficient
T_FWHM_norm_max = 0.75   # Maximum FWHM pulseiwdth of the 

# Define network elements
gp       = pypho_setup(nos = 4*16, sps = 1*256, symbolrate = 10e9)
bitsrc   = pypho_bits(glova = gp, nob = gp.nos, pattern = 'random') # Set pattern = "singlepulse"
esigsrc  = pypho_signalsrc(glova = gp, pulseshape = 'gauss_rz' , fwhm = T_FWHM*gp.symbolrate)
sig_1550 = pypho_lasmod(glova = gp, power = 0, Df = 0, teta = 0)
SSMF     = pypho_fiber(glova = gp, l = z,  D = D,   S = 0, alpha = 0.2e-12, gamma = 0, phi_max = 10.0)
eye      = pypho_eye(glova = gp, polarisation = 'x,y')

# Simulation
bits = bitsrc()

esig = esigsrc(bitsequence = bits)
E_Tx = sig_1550(esig = esig)                                              

E = copy.deepcopy(E_Tx)

# Fiber trannsmission
E = SSMF(E = E) 
E[0]['E'][0] = E[0]['E'][0] /np.max(np.abs(E[0]['E'][0]))*1e-3
E_Tx[0]['E'][0] = E_Tx[0]['E'][0] /np.max(np.abs(E_Tx[0]['E'][0]))*1e-3
# Plot Input and Output signal
beta_2, beta_3 = DS2beta(D, 0, gp.lambda0)
L_D = (T_e)**2  / np.abs(beta_2)     # Pulse width T_e here of the electrical field
 
plt.figure(1)
eye(E = E_Tx[0]['E'], polarisation = 'x', style="r")
eye(E = E[0]['E'], polarisation = 'x', style="g")

red_patch = mpatches.Patch(color='red', label='Input signal')
green_patch = mpatches.Patch(color='green', label='Output signal')
plt.legend(handles=[red_patch, green_patch], loc=1)
print 'Calculated output FWHM-pulse width : T_FWHM,1 = ' , T_FWHM * np.sqrt(1 + (z/L_D)**2)*1e12, ' ps'

T_FWHM_norm_0 = T_FWHM*1e12 / 100.0
print (  'Calculated max reach : ' , 100e-12**2 *(1/1.665095)**2 * 2.0*np.pi * 299792458 *  T_FWHM_norm_0*np.sqrt(  T_FWHM_norm_max**2 - T_FWHM_norm_0**2) / (16.8e-6 * 1550e-9**2 )  *1e-3 )