Physical Models
Models for optoelectronic devices (optic.models.devices)
|
Optical Phase Modulator (PM). |
|
Optical Mach-Zhender Modulator (MZM). |
|
Optical In-Phase/Quadrature Modulator (IQM). |
|
Polarization beam splitter (PBS). |
|
Optical hybrid 2 x 4 90°. |
|
Variable optical attenuator (VOA). |
|
Pin photodiode (PD). |
|
Balanced photodiode pair (BPD). |
|
Single polarization coherent optical front-end. |
|
Polarization multiplexed coherent optical front-end. |
|
Implement simple EDFA model. |
|
Laser model with Maxwellian random walk phase noise and RIN. |
|
Analog-to-digital converter (ADC) model. |
|
Digital-to-analog converter (DAC) model. |
- adc(sigIn, param)[source]
Analog-to-digital converter (ADC) model.
- Parameters:
sigIn (np.array) – Input signal.
param (optic.utils.parameters object, optional) –
Parameters of the ADC model.
param.inFs : sampling frequency of the input signal [samples/s][default: 1 sample/s]
param.outFs : sampling frequency of the output signal [samples/s][default: 1 sample/s]
param.jitter : jitter rms in seconds [s][default: 0 s]
param.nBits : number of bits used for quantization [default: 8 bits]
param.ENOB : effective number of bits of the ADC [default: 8 bits]
param.Vmax : maximum value for the ADC’s full-scale range [V][default: 1V]
param.Vmin : minimum value for the ADC’s full-scale range [V][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:
sigOut – Resampled and quantized signal.
- Return type:
np.array
Notes
The input signal will be clipped to the range [Vmin, Vmax] before quantization.
If the effective number of bits (ENOB) is less than nBits, additional noise will be added to the output signal to model the reduced resolution of the ADC. The noise power is calculated based on the difference between the ideal quantization noise power (corresponding to nBits) and the actual quantization noise power (corresponding to ENOB).
If AAF is enabled, anti-aliasing filters will be applied to the input signal before resampling and to the output signal after quantization to mitigate aliasing effects.
The analog-to-digital conversion is modeled by the following sequence of operations:
Anti-aliasing filtering: the input is lowpass filtered with cutoff frequency \(F_{out}/2\), the Nyquist frequency of the ADC.
Sampling: the signal is resampled at the ADC sampling rate \(F_{out}\), with instants \(t_m = m/F_{out} + \epsilon_m\) affected by a random timing jitter \(\epsilon_m \sim \mathcal{N}(0, \sigma_j^2)\) (see
optic.dsp.core.clockSamplingInterp).Clipping and quantization: the samples are limited to the full-scale range \([V_{min}, V_{max}]\) and quantized with a uniform \(b\)-bit quantizer (see
optic.dsp.core.quantizer).Output filtering: the quantized signal is filtered again by a lowpass filter with cutoff frequency \(F_{out}/2\).
Steps 1 and 4 are skipped if the anti-aliasing filters are disabled (
AAF). Real converters perform worse than an ideal quantizer with the same number of bits. This is described by the effective number of bits (ENOB), i.e., the resolution of an ideal quantizer with the same signal-to-noise-and-distortion ratio, \(\mathrm{SINAD} = 6.02\,\mathrm{ENOB} + 1.76\) dB for a full-scale sinusoid. With the full-scale range \(V_{FS} = V_{max} - V_{min}\), the quantization noise power of a \(b\)-bit quantizer is approximately \(V_{FS}^2 / (12 \cdot 2^{2b})\), and the degradation is modeled by adding a Gaussian noise with power\[P_{extra} = \frac{V_{FS}^2}{12}\left(2^{-2\,\mathrm{ENOB}} - 2^{-2b}\right), \tag{1}\]per real dimension (I and Q) of the signal, so that the total noise power corresponds to a quantizer with \(\mathrm{ENOB}\) bits.
- balancedPD(E1, E2, param=None)[source]
Balanced photodiode pair (BPD).
- Parameters:
E1 (np.array) – Input optical field.
E2 (np.array) – Input optical field.
param (optic.utils.parameters object, optional) –
Parameters of the photodiode models.
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 : photodiode 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: 255].
param.ideal : bool enabling the ideal photodiode model (i.e. no noise, no frequency resp.) [default: True].
param.seed : seed for the random number generator [default: None].
- Returns:
ibpd – Balanced photocurrent.
- Return type:
np.array
Notes
A balanced photodetector consists of two photodiodes whose photocurrents are subtracted,
\[i(t) = i_1(t) - i_2(t) = R\left(|E_1(t)|^2 - |E_2(t)|^2\right) + n_1(t) - n_2(t), \tag{1}\]where \(n_1\) and \(n_2\) are the independent noises of the photodiodes (see
photodiode). When the two inputs are the outputs of a coupler that combines a signal and a local oscillator, the terms \(|E_s|^2\) and \(|E_{LO}|^2\) cancel in Eq. (1), leaving only the beat term between the signal and the local oscillator.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)[source]
Laser model with Maxwellian random walk phase noise and RIN.
- Parameters:
param (optic.utils.parameters object, optional) –
Parameters of the laser model.
param.P : laser power [dBm] [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]
param.seed : random seed for noise generation [default: None]
param.freqShift : frequency shift with respect to the central simulation frequency [Hz] [default: 0 Hz]
- Returns:
Optical signal with phase noise and RIN.
- Return type:
np.array
Notes
The optical field at the laser output is modeled as
\[E(t) = \sqrt{P + \delta P(t)}\;\exp\left\{j\left[2\pi\Delta f\,t + \phi(t)\right]\right\}, \tag{1}\]where \(P\) is the average optical power, \(\Delta f\) is the frequency shift with respect to the central frequency of the simulation, and \(\phi(t)\) is the phase noise, modeled as a Wiener process whose increments over a sampling period \(T_s\) have variance \(2\pi\Delta\nu T_s\), where \(\Delta\nu\) is the laser linewidth (see
optic.dsp.core.phaseNoise). The relative intensity noise (RIN) is modeled by the random power fluctuation \(\delta P(t)\), a zero-mean Gaussian noise with varianceRIN_var(generated as a circularly-symmetric complex Gaussian sequence, seeoptic.dsp.core.gaussianComplexNoise).References
[1] M. Seimetz, High-Order Modulation for Optical Fiber Transmission. em Springer Series in Optical Sciences. Springer Berlin Heidelberg, 2009.
- coherentReceiver(Es, Elo, paramFE=None, paramPD=None)[source]
Single polarization coherent optical front-end.
- Parameters:
Es (np.array) – Input signal optical field.
Elo (np.array) – Input LO optical field.
paramFE (parameter object (struct), optional) –
Parameters of the optical frontend:
paramFE.Fs : simulation sampling frequency [samples/s].
paramFE.phaseImb : phase imbalance of the I/Q [rad].
paramFE.ampImb : amplitude imbalance of the I/Q [dB].
paramFE.timeSkew : delay of the I of the I/Q [s].
paramPD (parameter object (struct), optional) – Parameters of the photodiodes
- Returns:
s – Downconverted signal after balanced detection.
- Return type:
np.array
Notes
In a coherent receiver, the received signal is mixed with a local oscillator (LO) in a 90° optical hybrid, whose outputs are detected by two balanced photodetectors (see
opticalHybrid2x4andbalancedPD). The in-phase and quadrature photocurrents form the complex signal\[s(t) = i_I(t) + j\,i_Q(t) = R\,E_s(t)E_{LO}^*(t) + n(t), \tag{1}\]where \(R\) is the responsivity of the photodiodes and \(n(t)\) is the noise of the photodetectors. For an LO with constant amplitude and a frequency and phase aligned to those of the signal carrier, \(s(t)\) is proportional to the complex envelope of the optical field, i.e., both its amplitude and its phase are recovered. Imperfections of the front-end (IQ imbalance and skew) are finally added to \(s(t)\) (see
optic.dsp.core.iqMixing).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.
- dac(sigIn, param)[source]
Digital-to-analog converter (DAC) model.
- Parameters:
sigIn (np.array) – Input signal.
param (optic.utils.parameters object, optional) –
Parameters of the DAC model.
param.inFs : sampling frequency of the input signal [samples/s][default: 1 sample/s]
param.outFs : sampling frequency of the output signal [samples/s][default: 1 sample/s]
param.nBits : number of bits used for quantization [default: 8 bits]
param.ENOB : effective number of bits of the DAC [default: 8 bits]
param.jitter : jitter rms in seconds [s][default: 0 s]
param.Vpp : peak-to-peak voltage of the DAC’s output signal [V][default: 2 V]
param.AIF : flag indicating whether to use anti-imaging filters [default: True]
param.N : number of taps of the anti-imaging filters [default: 201]
- Returns:
sigOut – Resampled and quantized signal.
- Return type:
np.array
Notes
The input signal will be clipped to the range [Vmin, Vmax] before quantization.
If AIF is enabled, anti-imaging filters will be applied to the output signal after quantization to mitigate imaging effects.
The digital-to-analog conversion is modeled by the following sequence of operations:
Quantization: the samples are quantized with a uniform \(b\)-bit quantizer whose full-scale range \([V_{min}, V_{max}]\) is given by the minimum and maximum values of the input (see
optic.dsp.core.quantizer).Interpolation: the signal is converted from the input sampling rate \(F_{in}\) to the output rate \(F_{out}\) (see
optic.dsp.core.clockSamplingInterp), with an optional timing jitter.Anti-imaging filtering: the interpolated signal is filtered by a lowpass filter with cutoff frequency \(F_{out}/2\) (if
AIFis enabled).
A finite effective number of bits (ENOB) is modeled by adding a Gaussian noise with power
\[P_{extra} = \frac{V_{FS}^2}{12}\left(2^{-2\,\mathrm{ENOB}} - 2^{-2b}\right), \qquad V_{FS} = V_{max} - V_{min}, \tag{1}\]per real dimension of the signal (see
adc). Finally, the output is scaled so that the full-scale range corresponds to the peak-to-peak voltage \(V_{pp}\) of the DAC,\[y(t) \leftarrow \frac{V_{pp}}{V_{max} - V_{min}}\,y(t). \tag{2}\]
- edfa(Ei, param=None)[source]
Implement simple EDFA model.
- Parameters:
Ei (np.array) – Input signal field.
param (optic.utils.parameters object, optional) –
Parameters of the EDFA model.
param.G : amplifier gain [dB][default: 20 dB]
param.NF : EDFA noise figure [dB][default: 4.5 dB]
param.Fc : central optical frequency [Hz][default: 193.1 THz]
param.Fs : sampling frequency in [samples/s]
param.seed : random seed for noise generation [default: None]
- Returns:
Eo – Amplified noisy optical signal.
- Return type:
np.array
Notes
The amplifier multiplies the optical field by \(\sqrt{G}\), where \(G\) is the power gain, and adds the amplified spontaneous emission (ASE) noise, modeled as a complex circular Gaussian noise \(n(t)\):
\[E_{out}(t) = \sqrt{G}\,E_{in}(t) + n(t). \tag{1}\]The power spectral density of the ASE noise, per polarization mode, is
\[N_{ASE} = (G-1)\,n_{sp}\,h\nu, \tag{2}\]where \(h\nu\) is the photon energy at the carrier frequency \(\nu = F_c\) and \(n_{sp}\) is the spontaneous emission factor, which is related to the noise figure \(NF\) (in linear units) by
\[n_{sp} = \frac{G\cdot NF - 1}{2(G-1)}. \tag{3}\]For a large gain, \(NF \approx 2n_{sp} \geq 2\) (3 dB), which is the quantum limit of the noise figure of a phase-insensitive amplifier. The noise power within the simulation bandwidth is \(P_n = N_{ASE}F_s\), where \(F_s\) is the sampling frequency.
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.
- iqm(Ei, u, param=None)[source]
Optical In-Phase/Quadrature Modulator (IQM).
- Parameters:
Ei (scalar or np.array) – Optical field at the input of the IQM.
u (complex-valued np.array) – Modulator’s driving signal (complex-valued baseband).
param (optic.utils.parameters object, optional) –
Parameters of the MZM models.
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]
param.ERI : I-MZM extinction ratio [dB][default: 60 dB]
param.ERQ : Q-MZM extinction ratio [dB][default: 60 dB]
- Returns:
Eo – Modulated optical field at the output of the IQM.
- Return type:
complex-valued np.array
Notes
An in-phase/quadrature modulator (IQM) is a nested structure with one MZM in each of its two arms, and a phase modulator that introduces a \(\pi/2\) phase difference between them. The input field is split equally between the arms; the in-phase (I) MZM is driven by \(u_I(t) = \mathrm{Re}\{u(t)\}\) and the quadrature (Q) MZM by \(u_Q(t) = \mathrm{Im}\{u(t)\}\), and the two fields are then recombined,
\[E_{out}(t) = E_I(t) + E_Q(t)\,e^{j\pi V_\phi/V_\pi}, \tag{1}\]where \(E_I\) and \(E_Q\) are the outputs of the MZMs, each one fed with \(E_{in}/\sqrt{2}\) (see
mzm), and \(V_\phi\) is the bias of the phase modulator. With both MZMs biased at the null point, \(V_{b,I} = V_{b,Q} = -V_\pi\), and \(V_\phi = V_\pi/2\) (the defaults), an ideal IQM produces\[E_{out}(t) = \frac{E_{in}(t)}{\sqrt{2}}\left\{ \sin\left[\frac{\pi}{2}\frac{u_I(t)}{V_\pi}\right] + j\sin\left[\frac{\pi}{2}\frac{u_Q(t)}{V_\pi}\right]\right\}, \tag{2}\]which, for small drive signals, is proportional to the complex baseband signal \(u(t) = u_I(t) + ju_Q(t)\). This is how complex constellations such as QAM are imprinted on the optical carrier.
References
[1] M. Seimetz, High-Order Modulation for Optical Fiber Transmission. em Springer Series in Optical Sciences. Springer Berlin Heidelberg, 2009.
- mzm(Ei, u, param=None)[source]
Optical Mach-Zhender Modulator (MZM).
- Parameters:
Ei (scalar or np.array) – Optical field at the input of the MZM.
u (np.array) – Electrical driving signal.
param (optic.utils.parameters object, optional) –
Parameters of the MZM model.
param.Vpi : MZM’s Vpi voltage [V][default: 2 V]
param.Vb : MZM’s bias voltage [V][default: -1 V]
param.ER : MZM extinction ratio [dB][default: 60 dB]
- Returns:
Modulated optical field at the output of the MZM.
- Return type:
np.array
Notes
A Mach-Zehnder modulator (MZM) is an interferometer with a phase modulator in each of its arms. In push-pull operation, the arms are driven with opposite phase shifts, so that the output field is modulated in amplitude without residual phase modulation (chirp). For an ideal device, i.e. infinite extinction ratio,
\[E_{out}(t) = E_{in}(t)\cos\left[\frac{\pi}{2}\frac{u(t) + V_b}{V_\pi}\right], \tag{1}\]where \(u(t)\) is the driving signal, \(V_b\) is the bias voltage, and \(V_\pi\) is the voltage that switches the output from maximum to minimum transmission. The corresponding power transfer function is
\[\frac{P_{out}(t)}{P_{in}(t)} = \cos^2\left[\frac{\pi}{2}\frac{u(t) + V_b}{V_\pi}\right] = \frac{1}{2}\left\{1 + \cos\left[\pi\frac{u(t) + V_b}{V_\pi}\right]\right\}. \tag{2}\]Biasing the modulator at \(V_b = -V_\pi/2\) (quadrature point, the default) yields an output power that varies approximately linearly with small drive signals, as used in intensity modulation. Biasing at \(V_b = -V_\pi\) (null point) makes the output field approximately linear with the drive signal, taking positive and negative values, as used in coherent modulation. A finite extinction ratio is also taken into account (see
optic.dsp.core.calcMZM).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.
- opticalHybrid2x4(Es, Elo)[source]
Optical hybrid 2 x 4 90°.
- Parameters:
Es (np.array) – Input signal optical field.
Elo (np.array) – Input LO optical field.
- Returns:
Eo – Optical hybrid outputs.
- Return type:
np.array
Notes
The 2 x 4 90° optical hybrid combines the signal \(E_s\) and the local oscillator \(E_{LO}\) with relative phase shifts of 0, \(\pi\), \(\pi/2\) and \(-\pi/2\). Its outputs are
\begin{equation} \begin{bmatrix} E_1 \\ E_2 \\ E_3 \\ E_4 \end{bmatrix} = \frac{1}{2} \begin{bmatrix} E_s - E_{LO} \\ j\left(E_s + E_{LO}\right) \\ jE_s - E_{LO} \\ -E_s + jE_{LO} \end{bmatrix}. \tag{1} \end{equation}Detecting the pairs \((E_1, E_2)\) and \((E_3, E_4)\) with balanced photodetectors gives currents proportional to the in-phase and quadrature components of \(E_s E_{LO}^*\), since
\[|E_2|^2 - |E_1|^2 = \mathrm{Re}\left\{E_s E_{LO}^*\right\}, \qquad |E_3|^2 - |E_4|^2 = \mathrm{Im}\left\{E_s E_{LO}^*\right\}. \tag{2}\]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.
- pbs(E, θ=0)[source]
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.
Notes
The input field \(\mathbf{E} = [E_x, E_y]^T\) is first rotated by the angle \(\theta\) with respect to the principal axes of the polarization beam splitter (PBS), which then separates its two orthogonal components,
\begin{equation} \begin{bmatrix} E_x' \\ E_y' \end{bmatrix} = \begin{bmatrix} \cos\theta & \sin\theta \\ -\sin\theta & \cos\theta \end{bmatrix} \begin{bmatrix} E_x \\ E_y \end{bmatrix}. \tag{1} \end{equation}A single-polarization input is assumed to be aligned with the \(x\) axis, \(E_y = 0\), so that for \(\theta = \pi/4\) its power is split equally between the two outputs.
References
[1] M. Seimetz, High-Order Modulation for Optical Fiber Transmission. em Springer Series in Optical Sciences. Springer Berlin Heidelberg, 2009.
- pdmCoherentReceiver(Es, Elo, paramFE, paramPD=None)[source]
Polarization multiplexed coherent optical front-end.
- Parameters:
Es (np.array) – Input signal optical field.
Elo (np.array) – Input LO optical field.
paramFE (parameter object (struct), optional) –
Parameters of the optical frontend:
paramFE.Fs : simulation sampling frequency [samples/s].
paramFE.polRotation : input polarization rotation angle [rad].
paramFE.pdl : polarization dependent loss [dB]. If > 0, loss is on X polarization. If < 0, loss is on Y polarization.
paramFE.polDelay : polarization delay [s]. If > 0, delay is on X polarization. If < 0, delay is on Y polarization.
paramFE.polX.phaseImb : phase imbalance of the I/Q of the X polarization [rad].
paramFE.polX.ampImb : amplitude imbalance of the I/Q of the X polarization [dB].
paramFE.polX.skewI : delay of the I of the X polarization [s].
paramFE.polX.skewQ : delay of the Q of the X polarization [s].
paramFE.polY.phaseImb : phase imbalance of the I/Q of the Y polarization [rad].
paramFE.polY.ampImb : amplitude imbalance of the I/Q of the Y polarization [dB].
paramFE.polY.skewI : delay of the I of the Y polarization [s].
paramFE.polY.skewQ : delay of the Q of the Y polarization [s].
paramPD (parameter object (struct), optional) – Parameters of the photodiodes (see photodiode model documentation)
- Returns:
S – Downconverted signal after balanced detection.
- Return type:
np.array
Notes
A polarization-diversity coherent receiver detects the two orthogonal polarizations of the received field. The signal is split by a polarization beam splitter (PBS) into its components \(E_{s,x}\) and \(E_{s,y}\), after a rotation of its state of polarization by the angle
polRotation, while the LO, launched at 45°, is split equally between the two polarizations (seepbs). Each pair of signal and LO components is then detected by a single-polarization coherent receiver (seecoherentReceiver),\begin{equation} \mathbf{S}(t) = \begin{bmatrix} S_x(t) \\ S_y(t) \end{bmatrix} \propto \begin{bmatrix} E_{s,x}(t)E_{LO,x}^*(t) \\ E_{s,y}(t)E_{LO,y}^*(t) \end{bmatrix}. \tag{1} \end{equation}A polarization dependent loss of
pdldB is modeled by attenuating one polarization and amplifying the other bypdl/2dB, and a differential delay \(\tau\) between the polarizations is modeled by advancing the \(x\) component and delaying the \(y\) component by \(\tau/2\).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)[source]
Pin photodiode (PD).
- Parameters:
E (np.array) – Input optical field.
param (optic.utils.parameters object, optional) –
Parameters of the photodiode model.
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 : photodiode bandwidth [Hz][default: 30e9 Hz]
param.IpdSat : saturation value of the photocurrent [A][default: 5e-3 A]
param.N : number of the frequency resp. filter taps. [default: 255]
param.fType : frequency response type [default: ‘rect’]
param.ideal : bool enabling the ideal photodiode model (i.e. \(i_{pd}(t) = R|E(t)|^2\)) [default: False]
param.shotNoise : bool enabling the addition of shot noise to photocurrent. [default: True]
param.thermalNoise : bool enabling the addition of thermal noise to photocurrent. [default: True]
param.currentSaturation : bool enabling the photocurrent saturation. [default: False]
param.bandwidthLimitation : bool enabling the bandwidth limitation. [default: True]
param.Fs : sampling frequency [Hz] [default: None]
param.seed : seed for the random number generator [default: None]
- Returns:
ipd – photocurrent.
- Return type:
np.array
Notes
A PIN photodiode converts the incident optical power into an electric current. For an ideal photodiode, the photocurrent is proportional to the optical power,
\[i_{pd}(t) = R\,|E(t)|^2 = R\,P(t), \tag{1}\]where \(R\) is the responsivity in A/W. For a multimode field, the powers of all the modes are summed. Two noise sources are added to the photocurrent. The shot noise arises from the discrete nature of the photons and electrons, and has variance
\[\sigma_s^2 = 2q\left[i_{pd}(t) + I_d\right]B, \tag{2}\]where \(q\) is the elementary charge, \(I_d\) is the dark current and \(B\) is the photodiode bandwidth. The thermal (Johnson) noise is produced by the random motion of the electrons in the load resistor \(R_L\), at the absolute temperature \(T\), and has variance
\[\sigma_T^2 = \frac{4k_B T B}{R_L}, \tag{3}\]where \(k_B\) is the Boltzmann constant. Both are modeled as Gaussian noises, generated as white noises with power spectral density \(\sigma^2/(2B)\) over the simulation bandwidth \([-F_s/2, F_s/2]\), so that after the bandwidth limitation of the photodiode, which is modeled by a lowpass filter with cutoff frequency \(B\), their variances are those given by Eqs. (2) and (3). The photocurrent may also be limited to a saturation value \(I_{sat}\).
References
[1] G. P. Agrawal, Fiber-Optic Communication Systems. Wiley, 2021.
- pm(Ei, u, Vπ)[source]
Optical Phase Modulator (PM).
- Parameters:
Ei (scalar or np.array) – Optical field at the input of the PM.
u (np.array) – Electrical driving signal.
Vπ (scalar) – PM’s Vπ voltage.
- Returns:
Ao – Modulated optical field at the output of the PM.
- Return type:
np.array
Notes
The electro-optic (Pockels) effect in a material such as lithium niobate changes its refractive index proportionally to the applied electric field. As a result, the optical field that propagates through a phase modulator driven by the voltage \(u(t)\) acquires a phase shift proportional to it,
\[E_{out}(t) = E_{in}(t)\exp\left[j\pi\frac{u(t)}{V_\pi}\right], \tag{1}\]where \(V_\pi\) is the voltage required to produce a phase shift of \(\pi\) rad. The modulator changes only the phase of the field, so that \(|E_{out}(t)| = |E_{in}(t)|\).
References
[1] G. P. Agrawal, Fiber-Optic Communication Systems. Wiley, 2021.
- voa(E, A=0)[source]
Variable optical attenuator (VOA).
- Parameters:
E (np.array) – Input optical field.
A (float) – attenuation [dB][default: 0 dB]
- Returns:
Eo – Output optical field.
- Return type:
np.array
Notes
An attenuation of \(A\) dB reduces the optical power by a factor \(10^{-A/10}\), which corresponds to scaling the optical field by
\[E_{out}(t) = 10^{-A/20}\, E_{in}(t). \tag{1}\]References
[1] G. P. Agrawal, Fiber-Optic Communication Systems. Wiley, 2021.
Models for fiber optic channels (optic.models.channels)
|
Simulate signal propagation through a linear fiber channel. |
|
Split-step Fourier method (symmetric, single-pol.). |
|
Run the Manakov split-step Fourier model (symmetric, dual-pol.). |
|
Implement a basic AWGN channel model. |
- awgn(sig, param)[source]
Implement a basic AWGN channel model.
- Parameters:
sig (np.array) – Input signal.
param (optic.utils.parameters object) –
Physical/simulation parameters of the AWGN channel.
param.snr : signal-to-noise ratio [dB][default: 20 dB]
param.Fs : simulation sampling frequency [samples/second][default: 1]
param.B : signal bandwidth [Hz][default: 1]
param.complexNoise : boolean variable, add complex noise? [default: True]
param.seed : seed for the random number generator [default: None]
- Returns:
Input signal plus noise.
- Return type:
np.array
Notes
Complex (or real) white Gaussian noise \(n[k]\) is added to the signal, \(y[k] = x[k] + n[k]\). The signal-to-noise ratio is defined within the signal bandwidth \(B\),
\[\mathrm{SNR} = \frac{P_x}{\sigma_B^2}, \tag{1}\]where \(P_x\) is the average power of the signal and \(\sigma_B^2\) is the power of the noise within \(B\). Since the noise is white over the simulation bandwidth \(F_s\) (the sampling frequency), its total power is
\[\sigma^2 = \frac{F_s}{B}\,\frac{P_x}{\mathrm{SNR}}. \tag{2}\]References
[1] P. Massoud Salehi e J. Proakis, Digital Communications. McGraw-Hill Education, 2007.
- linearFiberChannel(Ei, param)[source]
Simulate signal propagation through a linear fiber channel.
- Parameters:
Ei (np.array) – Input optical field.
param (optic.utils.parameters object) –
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: 17 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
Notes
In the linear regime, the propagation of the complex envelope \(A(z, t)\) of the optical field along the fiber is described by
\[\frac{\partial A}{\partial z} = -\frac{\alpha}{2}A - j\frac{\beta_2}{2}\frac{\partial^2 A}{\partial t^2}, \tag{1}\]where \(\alpha\) is the attenuation coefficient and \(\beta_2\) is the group velocity dispersion parameter. They are obtained from the fiber parameters in engineering units as
\[\alpha = \frac{\alpha_{dB}}{10\log_{10}e}, \qquad \beta_2 = -\frac{D\lambda^2}{2\pi c}, \tag{2}\]where \(\alpha_{dB}\) is the loss in dB/km, \(D\) is the dispersion parameter, \(\lambda = c/F_c\) is the carrier wavelength and \(c\) is the speed of light. In the frequency domain, Eq. (1) has the exact solution
\[\tilde{A}(L, \omega) = \tilde{A}(0, \omega) \exp\left(-\frac{\alpha}{2}L + j\frac{\beta_2}{2}\omega^2 L\right), \tag{3}\]where \(\tilde{A}(z, \omega)\) is the Fourier transform of \(A(z, t)\) and \(L\) is the fiber length. The model is applied independently to each mode (column) of the input field.
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)[source]
Run the Manakov split-step Fourier model (symmetric, dual-pol.).
- Parameters:
Ei (np.array) – Input optical signal field.
param (optic.utils.parameters object) –
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.seed : seed for the random number generator [default: None]
param.returnParameters : bool, return channel parameters [default: False]
- Returns:
Ech (np.array) – Optical signal after nonlinear propagation.
param (optic.utils.parameters object) – Object with physical/simulation parameters used in the split-step alg.
Notes
In fibers with random birefringence, the propagation of the two polarization components \(A_x(z, t)\) and \(A_y(z, t)\) of the optical field, averaged over the fast random evolution of the state of polarization, is described by the Manakov equations,
\[\frac{\partial A_{x,y}}{\partial z} = -\frac{\alpha}{2}A_{x,y} - j\frac{\beta_2}{2}\frac{\partial^2 A_{x,y}}{\partial t^2} + j\frac{8}{9}\gamma\left(|A_x|^2 + |A_y|^2\right)A_{x,y}, \tag{1}\]where \(\alpha\), \(\beta_2\) and \(\gamma\) are defined as in
ssfm, and the factor \(8/9\) results from the averaging of the nonlinear interaction over the Poincaré sphere. Eq. (1) is solved with a symmetric split-step Fourier method: in each step of length \(h\), a linear half-step is followed by a nonlinear phase rotation and another linear half-step. The nonlinear phase rotation, common to both polarizations,\[\phi_{NL}(t) = \frac{8}{9}\gamma\, \frac{P(z, t) + P(z+h, t)}{2}\,h, \qquad P = |A_x|^2 + |A_y|^2, \tag{2}\]uses the trapezoidal rule to approximate the integral of the power over the step. Since \(P(z+h, t)\) depends on the result of the step itself, the step is iterated until the relative change of the fields falls below the tolerance
tol. WhennlprMethodis enabled, the step size is adapted along the fiber so that the maximum nonlinear phase rotation per step, \(\max_t \phi_{NL}(t)\), is equal tomaxNlinPhaseRot. Each span of length \(L_{span}\) is followed by an optical amplifier that compensates its loss.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)[source]
Split-step Fourier method (symmetric, single-pol.).
- Parameters:
Ei (np.array) – Input optical signal field.
param (optic.utils.parameters object) –
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.seed : seed for the random number generator [default: None]
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 (optic.utils.parameters object) – Object with physical/simulation parameters used in the split-step alg.
Notes
The propagation of the complex envelope \(A(z, t)\) of the optical field in a single-mode fiber is described by the nonlinear Schrödinger equation (NLSE),
\[\frac{\partial A}{\partial z} = -\frac{\alpha}{2}A - j\frac{\beta_2}{2}\frac{\partial^2 A}{\partial t^2} + j\gamma|A|^2A, \tag{1}\]where \(\alpha\) is the attenuation coefficient, \(\beta_2\) is the group velocity dispersion parameter (see
linearFiberChannel), and \(\gamma\) is the nonlinear parameter. Writing Eq. (1) as \(\partial A/\partial z = (\hat{D} + \hat{N})A\), where \(\hat{D}\) accounts for loss and dispersion and \(\hat{N} = j\gamma|A|^2\) for the Kerr nonlinearity, the symmetric split-step Fourier method (SSFM) advances the field by a step \(h\) as\[A(z+h, t) \approx e^{\frac{h}{2}\hat{D}}\, e^{h\hat{N}}\, e^{\frac{h}{2}\hat{D}} A(z, t). \tag{2}\]The linear operator \(e^{\frac{h}{2}\hat{D}}\) is applied in the frequency domain, where it is the multiplication by \(\exp\left[\left(-\frac{\alpha}{2} + j\frac{\beta_2}{2}\omega^2\right)\frac{h}{2}\right]\), and the nonlinear operator is applied in the time domain, where it is the phase rotation \(\exp\left(j\gamma|A|^2h\right)\). The approximation in Eq. (2) has a global error of order \(h^2\). The link is composed of spans of length \(L_{span}\), each one followed by an optical amplifier with gain \(\alpha_{dB}L_{span}\) dB, which compensates the span loss.
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)
|
Plot the optical spectrum of the signal in X and Y polarizations. |
|
Calculates the optical spectrum of the signal. |
|
Routine used to solve the EDFA rate and propagation equations, considering the spectral Giles algorithm. |
|
Routine used to solve the EDFA rate and propagation equations, considering the spatial Giles algorithm. |
|
Determines the number of carriers at the metastable level, considering the spectral and spatial Giles algorithm. |
|
Determines the overlap integral between the field envelope and the doping profile. |
|
|
|
|
|
|
|
- OSA(x, Fs, Fc=193100000000000.0)[source]
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)[source]
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)[source]
Determines the overlap integral between the field envelope and the doping profile.
- get_spectrum(x, Fs, Fc, xunits='m', yunits='dBm', window=<function window_none>, sides='twosided')[source]
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.
xunits (str, optional) – Units for the frequency axis: ‘m’ for wavelength in meters or ‘Hz’ for frequency in Hz. The default is ‘m’.
yunits (str, optional) – Units for the power spectral density: ‘dBm’ or linear. The default is ‘dBm’.
window (callable, optional) – Windowing function applied before computing the spectrum. The default is mlab.window_none.
sides (str, optional) – Specifies which sides of the spectrum to return: ‘twosided’ or ‘onesided’. The default is ‘twosided’.
- Returns:
spectrum (np.array) – Signal’s FFT
frequency (np.array) – Frequency array @ Fc.
- gilesSpatial(z, P, properties, param_edf)[source]
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)[source]
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
Functions adapted to run with GPU (CuPy) processing (optic.models.modelsGPU)
|
Split-step Fourier method (symmetric, single-pol.). |
|
Run the Manakov split-step Fourier model (symmetric, dual-pol.). |
|
Run the Manakov SSF digital backpropagation (symmetric, dual-pol.). |
|
Implement simple EDFA model. |
- edfa(Ei, param)[source]
Implement simple EDFA model.
- Parameters:
Ei (np.array) – Input signal field.
param (optic.utils.parameters object, optional) –
Parameters of the EDFA model.
param.G : amplifier gain in dB [default: 20 dB].
param.NF : EDFA noise figure in dB [default: 4.5 dB].
param.Fc : central optical frequency [default: 193.1e12 Hz].
param.Fs : sampling frequency in samples/second [default: None].
param.prec : numerical precision [default: cp.complex128].
param.seed : seed for the random number generator [default: None].
- Returns:
Eo – Amplified noisy optical signal.
- Return type:
np.array
Notes
This is the GPU (CuPy) implementation of the EDFA model, \(E_{out}(t) = \sqrt{G}\,E_{in}(t) + n(t)\), where \(n(t)\) is the amplified spontaneous emission noise. See
optic.models.devices.edfafor the expressions of the noise power as a function of the gain and the noise figure.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.
- manakovDBP(Ei, param)[source]
Run the Manakov SSF digital backpropagation (symmetric, dual-pol.).
- Parameters:
Ei (np.array) – Input optical signal field.
param (optic.utils.parameters object) –
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: cp.complex128]
param.amp : ‘edfa’, ‘ideal’, or ‘None. [default:’edfa’]
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 backward propagation.
param (optic.utils.parameters object) – Object with physical/simulation parameters used in the split-step alg.
Notes
Digital backpropagation (DBP) compensates the deterministic linear and nonlinear impairments of the fiber by numerically solving the Manakov equations (see
manakovSSF) in the reverse direction, i.e. with the signs of the attenuation, dispersion and nonlinear parameters inverted,\[\frac{\partial A_{x,y}}{\partial z} = +\frac{\alpha}{2}A_{x,y} + j\frac{\beta_2}{2}\frac{\partial^2 A_{x,y}}{\partial t^2} - j\frac{8}{9}\gamma\left(|A_x|^2 + |A_y|^2\right)A_{x,y}, \tag{1}\]starting from the received field and propagating it back to the transmitter over the same spans. This is the GPU (CuPy) implementation.
References
[1] E. Ip e J. M. Kahn, “Compensation of dispersion and nonlinear impairments using digital backpropagation”, Journal of Lightwave Technology, vol. 26, nº 20, p. 3416–3425, 2008, doi: 10.1109/JLT.2008.927791.
[2] E. Ip, “Nonlinear compensation using backpropagation for polarization-multiplexed transmission”, Journal of Lightwave Technology, vol. 28, nº 6, p. 939–951, mar. 2010, doi: 10.1109/JLT.2010.2040135.
- manakovSSF(Ei, param)[source]
Run the Manakov split-step Fourier model (symmetric, dual-pol.).
- Parameters:
Ei (np.array) – Input optical signal field.
param (optic.utils.parameters object) –
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: cp.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.seed : seed for the random number generator [default: None]
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 (optic.utils.parameters object) – Object with physical/simulation parameters used in the split-step alg.
Notes
This is the GPU (CuPy) implementation of the split-step Fourier solution of the Manakov equations,
\[\frac{\partial A_{x,y}}{\partial z} = -\frac{\alpha}{2}A_{x,y} - j\frac{\beta_2}{2}\frac{\partial^2 A_{x,y}}{\partial t^2} + j\frac{8}{9}\gamma\left(|A_x|^2 + |A_y|^2\right)A_{x,y}. \tag{1}\]See
optic.models.channels.manakovSSFfor the description of the model and of the numerical method, including the adaptive step size and the iterative trapezoidal integration of the nonlinear phase.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)[source]
Split-step Fourier method (symmetric, single-pol.).
- Parameters:
Ei (np.array) – Input optical signal field.
param (optic.utils.parameters object) –
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: cp.complex128]
param.amp : ‘edfa’, ‘ideal’, or ‘None. [default:’edfa’]
param.NF : edfa noise figure [dB] [default: 4.5 dB]
param.seed : seed for the random number generator [default: None].
param.prgsBar : display progress bar? bolean variable [default:True]
param.saveSpanN : specify the span indexes to be outputted [default: [last span]]
param.returnParameters : bool, return channel parameters [default: False]
- Returns:
Ech (np.array) – Optical signal after nonlinear propagation.
param (optic.utils.parameters object) – Object with physical/simulation parameters used in the split-step alg.
Notes
This is the GPU (CuPy) implementation of the split-step Fourier solution of the nonlinear Schrödinger equation,
\[\frac{\partial A}{\partial z} = -\frac{\alpha}{2}A - j\frac{\beta_2}{2}\frac{\partial^2 A}{\partial t^2} + j\gamma|A|^2A. \tag{1}\]See
optic.models.channels.ssfmfor the description of the model and of the numerical method.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.
Advanced models for optical transmitters (optic.models.tx)
|
Implement a simple WDM transmitter. |
|
Generate a optical PAM signal. |
- pamTransmitter(param)[source]
Generate a optical PAM signal.
- Parameters:
param (optic.core.parameter object) –
Parameters of the PAM transmitter.
param.M : modulation order [default: 4].
param.Rs : symbol rate [baud][default: 32e9].
param.SpS : samples per symbol [default: 16].
param.probDist : pmf type of the symbol source, either ‘uniform’ or ‘maxwell-boltzmann’ [default: ‘uniform’].
param.shapingFactor : shaping factor of the symbols [default: 0].
param.seed : seed for the random number generator [default: None].
param.nBits : total number of bits [default: 40000].
param.pulseType : pulse shape [‘nrz’, ‘rrc’][default: ‘rrc’].
param.nFilterTaps : number of coefficients of the rrc filter [default: 4096].
param.pulseRollOff : rolloff do rrc filter [default: 0.01].
param.mzmVpi : MZM Vpi [V][default: 3 V].
param.mzmVb : MZM bias voltage [V][default: -1.5 V].
param.mzmScale : MZM modulation scale factor Vrf/Vpi [default: 0.25].
param.mzmER : MZM extinction ratio [dB][default: 80 dB].
param.power : optical output power [dBm][default:-3 dBm].
param.nPolModes : number of polarization modes [default: 1].
param.returnParam : whether to return the parameter object [default: False].
- Returns:
sigTx (np.array) – PAM signal.
symbTx (np.array) – Array of symbols.
param (optic.core.parameter object) – System parameters for the PAM transmitter.
Notes
The optical PAM signal is generated by intensity modulation of a continuous-wave laser with a Mach-Zehnder modulator (see
optic.models.devices.mzm). The PAM symbols are upsampled and pulse shaped, and the resulting signal \(s(t)\), normalized to unit peak amplitude, drives the MZM as \(u(t) = m V_\pi s(t)\), where \(m\) is the modulation index (mzmScale). For an ideal MZM biased at \(V_b\), the output field is\[E(t) \propto \cos\left[\frac{\pi}{2}\,\frac{u(t) + V_b}{V_\pi}\right], \tag{1}\](the finite extinction ratio of the modulator is also taken into account), and it is finally scaled to the average optical power \(P\). At the quadrature bias, \(V_b = -V_\pi/2\) (the default), the optical power \(|E(t)|^2\) varies approximately linearly with small driving signals.
- simpleWDMTx(param)[source]
Implement a simple WDM transmitter.
Generates a complex baseband waveform representing a WDM signal with arbitrary number of carriers
- Parameters:
param (optic.core.parameter object) –
Parameters of the WDM transmitter.
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.probDist : pmf type of the symbol source, either ‘uniform’ or ‘maxwell-boltzmann’ [default: ‘uniform’].
param.shapingFactor : shaping factor of the symbols [default: 0].
param.seed : seed for the random number generator [default: None].
param.nBits : total number of bits per carrier [default: 60000].
param.pulseType : pulse shape [‘nrz’, ‘rrc’][default: ‘rrc’].
param.nFilterTaps : number of coefficients of the rrc filter [default: 1024].
param.pulseRollOff : rolloff do rrc filter [default: 0.01].
param.mzmScale : MZM modulation scale factor Vrf/Vpi [default: 0.5].
param.powerPerChannel : launched power per WDM channel [dBm][default:-3 dBm].
param.nChannels : number of WDM channels [default: 5].
param.Fc : central frequency of the WDM spectrum [Hz][default: 193.1e12 Hz].
param.laserLinewidth : laser linewidth [Hz][default: 0 Hz].
param.wdmGridSpacing : frequency spacing of the WDM grid [Hz][default: 50e9 Hz].
param.nPolModes : number of polarization modes [default: 1].
param.prgsBar : display progress bar? [default: True].
- 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.
Notes
The WDM signal is the sum of \(N_{ch}\) independently modulated channels, each one centered at a frequency \(f_k\) of the WDM grid with spacing \(\Delta f\), relative to the central frequency \(F_c\),
\[E_{WDM}(t) = \sum_{k=1}^{N_{ch}} \sqrt{P_k}\;s_k(t)\,e^{j2\pi f_k t}, \qquad f_k = \left(k - \frac{N_{ch}+1}{2}\right)\Delta f, \tag{1}\]where \(P_k\) is the launch power of the \(k\)-th channel and \(s_k(t)\) is its normalized (unit power) optical field. Each channel is generated as follows: random symbols, uniformly or Maxwell-Boltzmann distributed, are upsampled and pulse shaped, and the resulting baseband signal drives an IQ modulator (see
optic.models.devices.iqm) that modulates the field of a laser with phase noise of linewidth \(\Delta\nu\) (seeoptic.dsp.core.phaseNoise). With \(N_{pol}\) polarization modes, each mode carries independent symbols and the power \(P_k/N_{pol}\).
Perturbation models for fiber nonlinear interference (optic.models.perturbation)
|
Calculates the coefficients for the intrachannel nonlinear first-order perturbation model. |
|
Fast calculation of the first-order perturbation model. |
|
Fast calculation of the first-order perturbation model with reduced number of coefficients. |
|
Calculates the intrachannel NLIN via first-order perturbation models. |
- calcNLINperturbation(C_ifwm, C_ixpm, C_ispm, x, y, prec=<class 'numpy.complex64'>)[source]
Fast calculation of the first-order perturbation model.
- Parameters:
C_ifwm (ndarray of shape (2L+1, 2L+1)) – Nonlinear coefficient matrix for intrachannel four-wave mixing (IFWM).
C_ixpm (ndarray of shape (2L+1, 2L+1)) – Nonlinear coefficient matrix for intrachannel cross-phase modulation (IXPM).
C_ispm (float) – Scalar nonlinear coefficient for intrachannel self-phase modulation (SPM).
x (ndarray of shape (N,)) – Input signal for polarization X (complex-valued).
y (ndarray of shape (N,)) – Input signal for polarization Y (complex-valued).
prec (data-type, optional) – Precision of the computation (
np.complex64ornp.complex128), by defaultnp.complex64.
- Returns:
dx (ndarray of shape (N,)) – Nonlinear perturbation waveform for polarization X.
dy (ndarray of shape (N,)) – Nonlinear perturbation waveform for polarization Y.
phi_ixpm_x (ndarray of shape (N,)) – Phase rotation due to cross-phase modulation affecting polarization X.
phi_ixpm_y (ndarray of shape (N,)) – Phase rotation due to cross-phase modulation affecting polarization Y.
References
[1] Z. Tao, et al., “Analytical Intrachannel Nonlinear Models to Predict the Nonlinear Noise Waveform,” Journal of Lightwave Technology, vol. 33, no. 10, pp. 2111-2119, 2015.
[2] E. P. da Silva, et al., “Perturbation-Based FEC-Assisted Iterative Nonlinearity Compensation for WDM Systems,” Journal of Lightwave Technology, vol. 37, no. 3, pp. 875-881, 2019.
- calcNLINperturbationSimplified(C_ifwm, C_ixpm, C_ispm, x, y, coeffTol=-20, prec=<class 'numpy.complex64'>)[source]
Fast calculation of the first-order perturbation model with reduced number of coefficients.
- Parameters:
C_ifwm (ndarray of shape (M,)) – Coefficient matrix for the Inverse Fourier-weighted filter model.
C_ixpm (ndarray of shape (M,)) – Coefficient matrix for the Inverse XPM model.
C_ispm (scalar) – Coefficient for the Inverse Single-Phase Modulation model.
x (ndarray of shape (N,)) – Input signal for the X component (complex-valued).
y (ndarray of shape (N,)) – Input signal for the Y component (complex-valued).
coeffTol (float) – Coefficient magnitude tolerance in dB. Coefficients with a magnitude below this threshold (in dB) are excluded from the calculation to reduce computational complexity. Default is -20 dB.
prec (dtype, optional) – The precision of the computation. Default is
np.complex64.
- Returns:
dx (ndarray of shape (N,)) – The computed result for the X component after processing.
dy (ndarray of shape (N,)) – The computed result for the Y component after processing.
phi_ixpm_x (ndarray of shape (N,)) – Phase information related to the XPM effect on the X component.
phi_ixpm_y (ndarray of shape (N,)) – Phase information related to the XPM effect on the Y component.
References
[1] Z. Tao, et al., “Analytical Intrachannel Nonlinear Models to Predict the Nonlinear Noise Waveform,” Journal of Lightwave Technology, vol. 33, no. 10, pp. 2111-2119, 2015.
[2] E. P. da Silva, et al., “Perturbation-Based FEC-Assisted Iterative Nonlinearity Compensation for WDM Systems,” Journal of Lightwave Technology, vol. 37, no. 3, pp. 875-881, 2019.
- calcPertCoeffMatrix(param)[source]
Calculates the coefficients for the intrachannel nonlinear first-order perturbation model.
- Parameters:
param (optic.utils.parameters object) –
Object with physical/simulation parameters of the optical channel.
param.D : chromatic dispersion parameter [ps/nm/km] [default: 17 ps/nm/km]
param.alpha : fiber attenuation parameter [dB/km] [default: 0.2 dB/km]
param.lspan : span length [km] [default: 50 km]
param.length : total fiber length [km] [default: 800 km]
param.pulseWidth : pulse width (fraction of symbol period) [default: 0.5]
param.gamma : fiber nonlinear coefficient [1/W/km] [default: 1.3 1/W/km]
param.Fc : carrier frequency [THz] [default: 193.2e12 Hz]
param.powerWeighted : power-weighted coefficient calculation? Boolean variable [default: False]
param.Rs : symbol rate [baud] [default: 32e9 baud]
param.powerWeightN : power-weighting order [default: 10]
param.matrixOrder : nonlinear memory matrix order [default: 25]
- Returns:
C (ndarray of shape (2L+1, 2L+1)) – Matrix of perturbation coefficients for nonlinear impairments.
C_ifwm (ndarray of shape (2L+1, 2L+1)) – Nonlinear coefficient matrix for intrachannel four-wave mixing (IFWM).
C_ixpm (ndarray of shape (2L+1, 2L+1)) – Nonlinear coefficient matrix for intrachannel cross-phase modulation (IXPM).
C_ispm (float) – Scalar nonlinear coefficient for intrachannel self-phase modulation (SPM).
References
[1] Z. Tao, et al., “Analytical Intrachannel Nonlinear Models to Predict the Nonlinear Noise Waveform,” Journal of Lightwave Technology, vol. 33, no. 10, pp. 2111-2119, 2015.
- perturbationNLIN(Ein, param)[source]
Calculates the intrachannel NLIN via first-order perturbation models.
- Parameters:
Ein (ndarray of shape (N, 2)) – Input signal for dual-polarization (complex-valued). The first column represents the X polarization, and the second column represents the Y polarization.
param (optic.utils.parameters object) –
Object with physical/simulation parameters of the optical channel.
param.D : chromatic dispersion parameter [ps/nm/km] [default: 17 ps/nm/km]
param.alpha : fiber attenuation parameter [dB/km] [default: 0.2 dB/km]
param.lspan : span length [km] [default: 50 km]
param.length : total fiber length [km] [default: 800 km]
param.pulseWidth : pulse width (fraction of symbol period) [default: 0.5]
param.gamma : fiber nonlinear coefficient [1/W/km] [default: 1.3 1/W/km]
param.Fc : carrier frequency [THz] [default: 193.2e12 Hz]
param.powerWeighted : power-weighted coefficient calculation? Boolean variable [default: False]
param.Rs : symbol rate [baud] [default: 32e9 baud]
param.powerWeightN : power-weighting order [default: 10]
param.matrixOrder : nonlinear memory matrix order [default: 25]
param.mode : ‘AM’ for standard perturbation calculation or ‘AMR’ for reduced complexity calculation [default: ‘AM’]
param.Pin : launch power per channel [dBm] [default: 0 dBm]
param.coeffTol : threshold for ignoring small perturbation coefficients [dB] [default: -20 dB]
param.prec : numerical precision [default: np.complex128]
- Returns:
nlin – Nonlinear perturbation for dual-polarization signals. The first column represents the X polarization, and the second column represents the Y polarization.
- Return type:
ndarray of shape (N, 2)
References
[1] Z. Tao, et al., “Analytical Intrachannel Nonlinear Models to Predict the Nonlinear Noise Waveform,” Journal of Lightwave Technology, vol. 33, no. 10, pp. 2111-2119, 2015.
[2] E. P. da Silva, et al., “Perturbation-Based FEC-Assisted Iterative Nonlinearity Compensation for WDM Systems,” Journal of Lightwave Technology, vol. 37, no. 3, pp. 875-881, 2019.