SemiconductorAmplifierTimeStepper¶
- class photonforge.SemiconductorAmplifierTimeStepper(*, small_signal_gain=20.0, saturation_power=None, carrier_lifetime=200e-12, linewidth_enhancement_factor=0.0, noise_figure=None, substeps=1, ports=None, seed=None)[source]¶
Time-stepper for a semiconductor optical amplifier (SOA).
Unidirectional travelling-wave amplifier with gain saturation, finite carrier recovery, carrier-induced self-phase modulation, and amplified spontaneous emission (ASE). The reverse optical path is absorbed, as in
OpticalAmplifierTimeStepper.The single state variable is the gain integrated over the device length, \(h(t) = \int_0^L \Gamma g\,{\rm d}z\), so that the instantaneous power gain is \(G = e^h\). It obeys
\[\frac{{\rm d}h}{{\rm d}t} = \frac{h_0 - h}{\tau_c} - \left(e^h - 1\right) \frac{|A_\text{in}|^2}{E_\text{sat}}\]with \(h_0 = \ln G_0\) the unsaturated integrated gain, \(\tau_c\) the carrier lifetime, and \(E_\text{sat} = P_\text{sat}\tau_c\) the saturation energy. The output field carries both the gain and the coupled phase:
\[A_\text{out} = A_\text{in} \exp\!\left[\frac{h}{2}\left(1 - j\alpha_H\right)\right]\]in which \(\alpha_H\) is the linewidth enhancement factor.
On the chirp sign: an envelope factor \(e^{-2\pi j f_0 t}\) corresponds to the physical frequency \(f_c + f_0\), so the instantaneous frequency deviation is \(\delta\nu = -\frac{1}{2\pi}\frac{{\rm d}\phi}{{\rm d}t}\). With \(\phi = -\alpha_H h / 2\) this gives
\[\delta\nu = \frac{\alpha_H}{4\pi}\frac{{\rm d}h}{{\rm d}t}\]so gain depletion (\({\rm d}h/{\rm d}t < 0\)) red-shifts the leading edge of a pulse and gain recovery blue-shifts the trailing edge. That is opposite in sign to Kerr self-phase modulation in fibre, and it is the established SOA behaviour.
- Parameters:
small_signal_gain (Annotated[float, units='dB']) – Unsaturated power gain \(G_0\).
saturation_power (Annotated[float, exclusiveMinimum=0, units='W'] | None) – Internal saturation power \(P_\text{sat}\). If
None, saturation is disabled and the model reduces to a constant-gain amplifier.carrier_lifetime (Annotated[float, exclusiveMinimum=0, units='s']) – Carrier recovery time \(\tau_c\).
linewidth_enhancement_factor (Annotated[float, minimum=0]) – Henry’s \(\alpha_H\), coupling gain change to phase. A value of 0 disables chirp.
noise_figure (Annotated[float, units='dB'] | None) – Noise figure (NF). If
None, ASE is disabled.substeps (Annotated[int, exclusiveMinimum=0]) – Number of splitting substeps per time step, a count. The integrator is unconditionally stable at any value; increase only to reduce the second-order splitting error when the time step is comparable to the carrier lifetime.
ports (Annotated[Sequence[str], maxItems=2, minItems=2] | None) – Input and output port names, in that order. If not set, the sorted list of optical port names from the component is used.
seed (Annotated[int, minimum=0] | None) – Random number generator seed to ensure reproducibility.
Notes
saturation_poweris the internal saturation power appearing in the equations above, not the 3 dB output saturation power quoted on datasheets. The two differ by a factor of order \(\ln 2 \cdot G_0/(G_0-2)\); usesaturation_output_power()to convert self-consistently.Wavelength dependence of the gain is not modelled: a single band at the carrier frequency is assumed. Sub-picosecond effects (carrier heating, spectral hole burning) and counter-propagating signals are also outside the model.
References
Agrawal, G. P., & Olsson, N. A. (1989). Self-phase modulation and spectral broadening of optical pulses in semiconductor laser amplifiers. IEEE Journal of Quantum Electronics, 25(11), 2297-2306.
Agrawal, G. P. (2010). Fiber-Optic Communication Systems. Wiley.
Methods
reset()Reset internal state to the unsaturated gain.
setup(component, time_step, *[, ...])Initialize the time stepper.
setup_state(*, component, time_step, ...)Initialize internal state.
step([inputs, steps, time_step, show_progress])Compute the outputs of this time stepper, given inputs.
step_single(inputs, outputs, time_index, ...)Take a single time step on the given inputs.
update(*args, **kwargs)Update this time stepper.
write_verilog_a(path, *[, backend, ...])Write this configured time stepper as one Verilog-A module.
Attributes
parametric_functionFunction used to update the time stepper.
parametric_kwargsKeyword arguments used to update the time stepper.
propertiesObject properties.
random_variablesRandom variables associated to the time stepper's parameters.
- setup_state(*, component, time_step, carrier_frequency, **kwargs)[source]¶
Initialize internal state.
- Parameters:
component (Component) – Component representing the amplifier.
time_step (Annotated[float, minimum=0, units='s']) – The interval between time steps (in seconds).
carrier_frequency (Annotated[float, minimum=0, units='Hz']) – The carrier frequency used to construct the time stepper. Required to set the ASE photon energy.
kwargs (object) – Unused.
- Return type:
None
- step_single(inputs, outputs, time_index, update_state, shutdown)[source]¶
Take a single time step on the given inputs.
- Parameters:
inputs (ndarray) – Input values at the current time step. Must be a 1D array of complex values ordered according to
keys.outputs (ndarray) – Pre-allocated output array where results will be stored. Same size and type as
inputs.time_index (int) – Time series index for the current input.
update_state (bool) – Whether to update the internal stepper state.
shutdown (bool) – Whether this is the last call to the single stepping function for the provided
photonforge.TimeSeries.
- Return type:
None