Physical Models

Models for optoelectronic devices (optic.models.devices)

pm(Ai, u, Vπ)

Optical Phase Modulator (PM).

mzm(Ai, u[, param])

Optical Mach-Zehnder Modulator (MZM).

iqm(Ai, u[, param])

Optical In-Phase/Quadrature Modulator (IQM).

pbs(E, θ=None)

Polarization beam splitter (PBS).

hybrid_2x4_90deg(Es, Elo)

Optical 2 x 4 90° hybrid.

photodiode(E[, param])

Pin photodiode (PD).

balancedPD(E1, E2[, param])

Balanced photodiode (BPD).

coherentReceiver(Es, Elo[, param])

Single polarization coherent optical front-end.

pdmCoherentReceiver(Es, Elo, θsig=None[, param])

Polarization multiplexed coherent optical front-end.

edfa(Ei[, param])

Implement simple EDFA model.

basicLaserModel([param])

Laser model with Maxwellian random walk phase noise and RIN.

adc(Ei, param)

Analog-to-digital converter (ADC) model.

adc(Ei, param)

Analog-to-digital converter (ADC) model.

Parameters:
  • Ei (ndarray) – Input signal.

  • param (core.parameter) –

    Resampling parameters:
    • param.Fs_in : sampling frequency of the input signal [default: 1 sample/s]

    • param.Fs_out : sampling frequency of the output signal [default: 1 sample/s]

    • param.jitter_rms : root mean square (RMS) value of the jitter in seconds [default: 0 s]

    • param.nBits : number of bits used for quantization [default: 8 bits]

    • param.Vmax : maximum value for the ADC’s full-scale range [default: 1V]

    • param.Vmin : minimum value for the ADC’s full-scale range [default: -1V]

    • param.AAF : flag indicating whether to use anti-aliasing filters [default: True]

    • param.N : number of taps of the anti-aliasing filters [default: 201]

Returns:

Eo – Resampled and quantized signal.

Return type:

ndarray

balancedPD(E1, E2, param=None)

Balanced photodiode (BPD).

Parameters:
  • E1 (np.array) – Input optical field.

  • E2 (np.array) – Input optical field.

  • param (parameter object (struct), optional) –

    Parameters of the photodiodes.

    • param.R: photodiode responsivity [A/W][default: 1 A/W]

    • param.Tc: temperature [°C][default: 25°C]

    • param.Id: dark current [A][default: 5e-9 A]

    • param.RL: impedance load [Ω] [default: 50Ω]

    • param.B bandwidth [Hz][default: 30e9 Hz]

    • param.Fs: sampling frequency [Hz] [default: 60e9 Hz]

    • param.fType: frequency response type [default: ‘rect’]

    • param.N: number of the frequency resp. filter taps. [default: 8001]

    • param.ideal: ideal PD?(i.e. no noise, no frequency resp.) [default: True]

Returns:

ibpd – Balanced photocurrent.

Return type:

np.array

References

[1] M. Seimetz, High-Order Modulation for Optical Fiber Transmission. em Springer Series in Optical Sciences. Springer Berlin Heidelberg, 2009.

[2] K. Kikuchi, “Fundamentals of Coherent Optical Fiber Communications”, J. Lightwave Technol., JLT, vol. 34, nº 1, p. 157–179, jan. 2016.

basicLaserModel(param=None)

Laser model with Maxwellian random walk phase noise and RIN.

Parameters:

param (parameter object (struct), optional) –

Parameters of the laser.

  • param.P: laser power [W] [default: 10 dBm]

  • param.lw: laser linewidth [Hz] [default: 1 kHz]

  • param.RIN_var: variance of the RIN noise [default: 1e-20]

  • param.Fs: sampling rate [samples/s]

  • param.Ns: number of signal samples [default: 1e3]

Returns:

optical_signal – Optical signal with phase noise and RIN.

Return type:

np.array

References

[1] M. Seimetz, High-Order Modulation for Optical Fiber Transmission. em Springer Series in Optical Sciences. Springer Berlin Heidelberg, 2009.

coherentReceiver(Es, Elo, param=None)

Single polarization coherent optical front-end.

Parameters:
  • Es (np.array) – Input signal optical field.

  • Elo (np.array) – Input LO optical field.

  • param (parameter object (struct), optional) – Parameters of the photodiodes.

Returns:

s – Downconverted signal after balanced detection.

Return type:

np.array

References

[1] M. Seimetz, High-Order Modulation for Optical Fiber Transmission. em Springer Series in Optical Sciences. Springer Berlin Heidelberg, 2009.

[2] K. Kikuchi, “Fundamentals of Coherent Optical Fiber Communications”, J. Lightwave Technol., JLT, vol. 34, nº 1, p. 157–179, jan. 2016.

edfa(Ei, param=None)

Implement simple EDFA model.

Parameters:
  • Ei (np.array) – Input signal field.

  • param (parameter object (struct), optional) –

    Parameters of the edfa.

    • param.G : amplifier gain in dB. The default is 20.

    • param.NF : EDFA noise figure in dB. The default is 4.5.

    • param.Fc : central optical frequency. The default is 193.1e12.

    • param.Fs : sampling frequency in samples/second.

Returns:

Eo – Amplified noisy optical signal.

Return type:

np.array

References

[1] R. -J. Essiambre,et al, “Capacity Limits of Optical Fiber Networks,” in Journal of Lightwave Technology, vol. 28, no. 4, pp. 662-701, 2010, doi: 10.1109/JLT.2009.2039464.

hybrid_2x4_90deg(Es, Elo)

Optical 2 x 4 90° hybrid.

Parameters:
  • Es (np.array) – Input signal optical field.

  • Elo (np.array) – Input LO optical field.

Returns:

Eo – Optical hybrid outputs.

Return type:

np.array

References

[1] M. Seimetz, High-Order Modulation for Optical Fiber Transmission. em Springer Series in Optical Sciences. Springer Berlin Heidelberg, 2009.

[2] K. Kikuchi, “Fundamentals of Coherent Optical Fiber Communications”, J. Lightwave Technol., JLT, vol. 34, nº 1, p. 157–179, jan. 2016.

iqm(Ai, u, param=None)

Optical In-Phase/Quadrature Modulator (IQM).

Parameters:
  • Ai (scalar or np.array) – Amplitude of the optical field at the input of the IQM.

  • u (complex-valued np.array) – Modulator’s driving signal (complex-valued baseband).

  • param (parameter object (struct)) –

    Object with physical/simulation parameters of the mzm.

    • param.Vpi: MZM’s Vpi voltage [V][default: 2 V]

    • param.VbI: I-MZM’s bias voltage [V][default: -2 V]

    • param.VbQ: Q-MZM’s bias voltage [V][default: -2 V]

    • param.Vphi: PM bias voltage [V][default: 1 V]

Returns:

Ao – Modulated optical field at the output of the IQM.

Return type:

complex-valued np.array

References

[1] M. Seimetz, High-Order Modulation for Optical Fiber Transmission. em Springer Series in Optical Sciences. Springer Berlin Heidelberg, 2009.

mzm(Ai, u, param=None)

Optical Mach-Zehnder Modulator (MZM).

Parameters:
  • Ai (scalar or np.array) – Amplitude of the optical field at the input of the MZM.

  • u (np.array) – Electrical driving signal.

  • param (parameter object (struct)) –

    Object with physical/simulation parameters of the mzm.

    • param.Vpi: MZM’s Vpi voltage [V][default: 2 V]

    • param.Vb: MZM’s bias voltage [V][default: -1 V]

Returns:

Ao – Modulated optical field at the output of the MZM.

Return type:

np.array

References

[1] G. P. Agrawal, Fiber-Optic Communication Systems. Wiley, 2021.

[2] M. Seimetz, High-Order Modulation for Optical Fiber Transmission. em Springer Series in Optical Sciences. Springer Berlin Heidelberg, 2009.

pbs(E, θ=0)

Polarization beam splitter (PBS).

Parameters:
  • E ((N,2) np.array) – Input pol. multiplexed optical field.

  • θ (scalar, optional) – Rotation angle of input field in radians. The default is 0.

Returns:

  • Ex ((N,) np.array) – Ex output single pol. field.

  • Ey ((N,) np.array) – Ey output single pol. field.

References

[1] M. Seimetz, High-Order Modulation for Optical Fiber Transmission. em Springer Series in Optical Sciences. Springer Berlin Heidelberg, 2009.

pdmCoherentReceiver(Es, Elo, θsig=0, param=None)

Polarization multiplexed coherent optical front-end.

Parameters:
  • Es (np.array) – Input signal optical field.

  • Elo (np.array) – Input LO optical field.

  • θsig (scalar, optional) – Input polarization rotation angle in rad. The default is 0.

  • param (parameter object (struct), optional) – Parameters of the photodiodes.

Returns:

S – Downconverted signal after balanced detection.

Return type:

np.array

References

[1] M. Seimetz, High-Order Modulation for Optical Fiber Transmission. em Springer Series in Optical Sciences. Springer Berlin Heidelberg, 2009.

[2] K. Kikuchi, “Fundamentals of Coherent Optical Fiber Communications”, J. Lightwave Technol., JLT, vol. 34, nº 1, p. 157–179, jan. 2016.

photodiode(E, param=None)

Pin photodiode (PD).

Parameters:
  • E (np.array) – Input optical field.

  • param (parameter object (struct), optional) –

    Parameters of the photodiode.

    • param.R: photodiode responsivity [A/W][default: 1 A/W]

    • param.Tc: temperature [°C][default: 25°C]

    • param.Id: dark current [A][default: 5e-9 A]

    • param.Ipd_sat: saturation value of the photocurrent [A][default: 5e-3 A]

    • param.RL: impedance load [Ω] [default: 50Ω]

    • param.B bandwidth [Hz][default: 30e9 Hz]

    • param.Fs: sampling frequency [Hz] [default: None]

    • param.fType: frequency response type [default: ‘rect’]

    • param.N: number of the frequency resp. filter taps. [default: 8001]

    • param.ideal: ideal PD?(i.e. no noise, no frequency resp.) [default: True]

Returns:

ipd – photocurrent.

Return type:

np.array

References

[1] G. P. Agrawal, Fiber-Optic Communication Systems. Wiley, 2021.

pm(Ai, u, )

Optical Phase Modulator (PM).

Parameters:
  • Ai (scalar or np.array) – Amplitude of the optical field at the input of the PM.

  • u (np.array) – Electrical driving signal.

  • (scalar) – PM’s Vπ voltage.

Returns:

Ao – Modulated optical field at the output of the PM.

Return type:

np.array

References

[1] G. P. Agrawal, Fiber-Optic Communication Systems. Wiley, 2021.

Models for fiber optic channels (optic.models.channels)

linearFiberChannel(Ei, param)

Simulate signal propagation through a linear fiber channel.

ssfm(Ei[, param])

Split-step Fourier method (symmetric, single-pol.).

manakovSSF(Ei, param)

Run the Manakov split-step Fourier model (symmetric, dual-pol.).

awgn(sig, snr[, Fs, B, complexNoise])

Implement a basic AWGN channel model.

awgn(sig, snr, Fs=1, B=1, complexNoise=True)

Implement a basic AWGN channel model.

Parameters:
  • sig (np.array) – Input signal.

  • snr (scalar) – Signal-to-noise ratio in dB.

  • Fs (real scalar) – Sampling frequency. The default is 1.

  • B (real scalar) – Signal bandwidth, defined as the length of the frequency interval [-B/2, B/2]. The default is 1.

  • complexNoise (bool) – Generate complex-valued noise. The default is True.

Returns:

Input signal plus noise.

Return type:

np.array

References

[1] P. Massoud Salehi e J. Proakis, Digital Communications. McGraw-Hill Education, 2007.

linearFiberChannel(Ei, param)

Simulate signal propagation through a linear fiber channel.

Parameters:
  • Ei (np.array) – Input optical field.

  • param (parameter object (struct)) –

    Object with physical/simulation parameters of the optical channel.

    • param.L: total fiber length [km][default: 50 km]

    • param.alpha: fiber attenuation parameter [dB/km][default: 0.2 dB/km]

    • param.D: chromatic dispersion parameter [ps/nm/km][default: 16 ps/nm/km]

    • param.Fc: carrier frequency [Hz] [default: 193.1e12 Hz]

    • param.Fs: sampling frequency [Hz] [default: None]

    • param.returnParameters: bool, return channel parameters [default: False]

Returns:

Eo – Optical field at the output of the fiber.

Return type:

np.array

References

[1] G. P. Agrawal, Fiber-Optic Communication Systems. Wiley, 2021.

[2] S. J. Savory, “Digital coherent optical receivers: Algorithms and subsystems”, IEEE Journal on Selected Topics in Quantum Electronics, vol. 16, nº 5, p. 1164–1179, set. 2010, doi: 10.1109/JSTQE.2010.2044751.

manakovSSF(Ei, param)

Run the Manakov split-step Fourier model (symmetric, dual-pol.).

Parameters:
  • Ei (np.array) – Input optical signal field.

  • Fs (scalar) – Sampling frequency in Hz.

  • param (parameter object (struct)) –

    Object with physical/simulation parameters of the optical channel.

    • param.Ltotal: total fiber length [km][default: 400 km]

    • param.Lspan: span length [km][default: 80 km]

    • param.hz: step-size for the split-step Fourier method [km][default: 0.5 km]

    • param.alpha: fiber attenuation parameter [dB/km][default: 0.2 dB/km]

    • param.D: chromatic dispersion parameter [ps/nm/km][default: 16 ps/nm/km]

    • param.gamma: fiber nonlinear parameter [1/W/km][default: 1.3 1/W/km]

    • param.Fc: carrier frequency [Hz] [default: 193.1e12 Hz]

    • param.Fs: simulation sampling frequency [samples/second][default: None]

    • param.prec: numerical precision [default: np.complex128]

    • param.amp: ‘edfa’, ‘ideal’, or ‘None. [default:’edfa’]

    • param.NF: edfa noise figure [dB] [default: 4.5 dB]

    • param.maxIter: max number of iter. in the trap. integration [default: 10]

    • param.tol: convergence tol. of the trap. integration.[default: 1e-5]

    • param.nlprMethod: adap step-size based on nonl. phase rot. [default: True]

    • param.maxNlinPhaseRot: max nonl. phase rot. tolerance [rad][default: 2e-2]

    • param.prgsBar: display progress bar? bolean variable [default:True]

    • param.saveSpanN: specify the span indexes to be outputted [default:[]]

    • param.returnParameters: bool, return channel parameters [default: False]

Returns:

  • Ech (np.array) – Optical signal after nonlinear propagation.

  • param (parameter object (struct)) – Object with physical/simulation parameters used in the split-step alg.

References

[1] D. Marcuse, C. R. Menyuk, e P. K. A. Wai, “Application of the Manakov-PMD equation to studies of signal propagation in optical fibers with randomly varying birefringence”, Journal of Lightwave Technology, vol. 15, nº 9, p. 1735–1745, 1997, doi: 10.1109/50.622902.

[2] P. Serena, C. Lasagni, S. Musetti, e A. Bononi, “On Numerical Simulations of Ultra-Wideband Long-Haul Optical Communication Systems”, Journal of Lightwave Technology, vol. 38, nº 5, p. 1019–1031, 2020, doi: 10.1109/JLT.2019.2938580.

[3] O. V. Sinkin, R. Holzlöhner, J. Zweck, e C. R. Menyuk, “Optimization of the split-step Fourier method in modeling optical-fiber communications systems”, Journal of Lightwave Technology, vol. 21, nº 1, p. 61–68, jan. 2003, doi: 10.1109/JLT.2003.808628.

ssfm(Ei, param=None)

Split-step Fourier method (symmetric, single-pol.).

Parameters:
  • Ei (np.array) – Input optical signal field.

  • Fs (scalar) – Sampling frequency in Hz.

  • param (parameter object (struct)) –

    Object with physical/simulation parameters of the optical channel.

    • param.Ltotal: total fiber length [km][default: 400 km]

    • param.Lspan: span length [km][default: 80 km]

    • param.hz: step-size for the split-step Fourier method [km][default: 0.5 km]

    • param.alpha: fiber attenuation parameter [dB/km][default: 0.2 dB/km]

    • param.D: chromatic dispersion parameter [ps/nm/km][default: 16 ps/nm/km]

    • param.gamma: fiber nonlinear parameter [1/W/km][default: 1.3 1/W/km]

    • param.Fc: carrier frequency [Hz] [default: 193.1e12 Hz]

    • param.Fs: simulation sampling frequency [samples/second][default: None]

    • param.prec: numerical precision [default: np.complex128]

    • param.amp: ‘edfa’, ‘ideal’, or ‘None. [default:’edfa’]

    • param.NF: edfa noise figure [dB] [default: 4.5 dB]

    • param.prgsBar: display progress bar? bolean variable [default:True]

    • param.returnParameters: bool, return channel parameters [default: False]

Returns:

  • Ech (np.array) – Optical signal after nonlinear propagation.

  • param (parameter object (struct)) – Object with physical/simulation parameters used in the split-step alg.

References

[1] G. P. Agrawal, Nonlinear Fiber Optics, Elsevier Science, 2013.

[2] O. V. Sinkin, R. Holzlöhner, J. Zweck, e C. R. Menyuk, “Optimization of the split-step Fourier method in modeling optical-fiber communications systems”, Journal of Lightwave Technology, vol. 21, nº 1, p. 61–68, jan. 2003, doi: 10.1109/JLT.2003.808628.

Models for optical amplifiers (optic.models.amplification)

OSA(x, Fs[, Fc])

Plot the optical spectrum of the signal in X and Y polarizations.

get_spectrum(x, Fs, Fc[, xunits, yunits, ...])

Calculates the optical spectrum of the signal.

gilesSpectrum(z, P, properties)

Routine used to solve the EDFA rate and propagation equations, considering the spectral Giles algorithm.

gilesSpatial(z, P, properties, param_edf)

Routine used to solve the EDFA rate and propagation equations, considering the spatial Giles algorithm.

getN2Pop(P, properties)

Determines the number of carriers at the metastable level, considering the spectral and spatial Giles algorithm.

getOverlapInt(n2_norm, properties, param_edf)

Determines the overlap integral between the field envelope and the doping profile.

get_mode_radius(model, radius, V, v, u)

edfParams(param_edfa)

edfaArgs(param_edfa)

edfaSM(Ei, Fs, Fc, param_edfa)

OSA(x, Fs, Fc=193100000000000.0)

Plot the optical spectrum of the signal in X and Y polarizations.

Parameters:
  • x (np.array) – Signal

  • Fs (scalar) – Sampling frequency in Hz.

  • Fc (scalar, optional) – Central optical frequency. The default is 193.1e12.

Return type:

plot

getN2Pop(P, properties)

Determines the number of carriers at the metastable level, considering the spectral and spatial Giles algorithm.

Parameters:
  • P (np.array) – Signal power (signal + pump + ASE).

  • properties (object with constants and edfa parameters.)

Returns:

norm2 – Number of carriers at the metastable level.

Return type:

np.array

getOverlapInt(n2_norm, properties, param_edf)

Determines the overlap integral between the field envelope and the doping profile.

Parameters:
  • n2_norm (np.array) – Number of carriers at the metastable level.

  • properties (object) – With constants and edfa parameters.

  • param_edf (object) – With edf parameters.

Returns:

overlapIntegral – Overlap integral between the field envelope and the doping profile.

Return type:

np.array

get_spectrum(x, Fs, Fc, xunits='m', yunits='dBm', window=<function window_none>, sides='twosided')

Calculates the optical spectrum of the signal.

Parameters:
  • x (np.array) – Signal

  • Fs (scalar) – Sampling frequency in Hz.

  • Fc (scalar, optional) – Central optical frequency. The default is 193.1e12.

Returns:

  • spectrum (np.array) – Signal’s FFT

  • frequency (np.array) – Frequency array @ Fc.

gilesSpatial(z, P, properties, param_edf)

Routine used to solve the EDFA rate and propagation equations, considering the spatial Giles algorithm.

Parameters:
  • P (np.array) – Signal power (signal + pump + ASE).

  • z (scalar (float)) – Position - erbium doped fiber [0 - edf length].

  • properties (object with constants and edfa parameters.)

  • param_edf (object with constants and edf parameters.)

Returns:

Eo – Increment of the amplified optical signal.

Return type:

np.array

gilesSpectrum(z, P, properties)

Routine used to solve the EDFA rate and propagation equations, considering the spectral Giles algorithm.

Parameters:
  • P (np.array) – Signal power (signal + pump + ASE).

  • z (scalar (float)) – Position - erbium doped fiber [0 - edf length].

  • properties (object with constants and edfa parameters.)

Returns:

Eo – Increment of the amplified optical signal.

Return type:

np.array

Advanced models for optical transmitters (optic.models.tx)

simpleWDMTx(param)

Implement a simple WDM transmitter.

simpleWDMTx(param)

Implement a simple WDM transmitter.

Generates a complex baseband waveform representing a WDM signal with arbitrary number of carriers

Parameters:

param (system parameters of the WDM transmitter.) –

optic.core.parameter object.

  • param.M: modulation order [default: 16].

  • param.constType: ‘qam’ or ‘psk’ [default: ‘qam’].

  • param.Rs: carrier baud rate [baud][default: 32e9].

  • param.SpS: samples per symbol [default: 16].

  • param.Nbits: total number of bits per carrier [default: 60000].

  • param.pulse: pulse shape [‘nrz’, ‘rrc’][default: ‘rrc’].

  • param.Ntaps: number of coefficients of the rrc filter [default: 4096].

  • param.alphaRRC: rolloff do rrc filter [default: 0.01].

  • param.Pch_dBm: launched power per WDM channel [dBm][default:-3 dBm].

  • param.Nch: number of WDM channels [default: 5].

  • param.Fc: central frequency of the WDM spectrum [Hz][default: 193.1e12 Hz].

  • param.lw: laser linewidth [Hz][default: 100 kHz].

  • param.freqSpac: frequency spacing of the WDM grid [Hz][default: 40e9 Hz].

  • param.Nmodes: number of polarization modes [default: 1].

Returns:

  • sigTxWDM (np.array) – WDM signal.

  • symbTxWDM (np.array) – Array of symbols per WDM carrier.

  • param (optic.core.parameter object) – System parameters for the WDM transmitter.