DMLaserTimeStepper¶
- class photonforge.DMLaserTimeStepper(*, quantum_efficiency, spontaneous_emission_factor, carrier_lifetime, gain_compression_factor, transparency_carrier_density, differential_gain, n_group, linewidth_enhancement_factor, confinement_factor, photon_lifetime, active_region_volume, rel_intensity_noise=0, linewidth=0, reflection=0, z0=None, mesh_refinement=None, verbose=True, seed=None)[source]¶
Time-stepper for a directly modulated laser source.
This model solves the single-mode semiconductor laser rate equations for photon density (\(p\)), carrier density (\(n\)), and optical phase (\(\phi\)). The model includes gain compression, and intensity and phase noises (implemented similarly to
CWLaserTimeStepper).The rate equations are:
\[ \begin{align}\begin{aligned}\frac{{\rm d} p}{{\rm d} t} &= \Gamma G(p) (n-n_0) p - \frac{p}{\tau_p} + \frac{\beta\Gamma}{\tau_n}n\\\frac{{\rm d} n}{{\rm d} t} &= \frac{I(t)}{q V_a} - G(p) (n-n_0) p - \frac{n}{\tau_n}\\\frac{{\rm d} \phi}{{\rm d} t} &= \frac{\alpha}{2} \left(\Gamma v_g a_0 (n-n_0) - \frac{1}{\tau_p}\right)\\G(p) &= \frac{c_0}{n_g} \frac{a_0}{1 + \epsilon p}\end{aligned}\end{align} \]From the solution of the rate equations at each time step, the instantaneous output power and complex field amplitude for a carrier with frequency \(f_c\) are:
\[ \begin{align}\begin{aligned}P_\text{out} &= \frac{\eta_0 h f_c V_a}{2 \Gamma \tau_p} p\\A &= \sqrt{P_\text{out}} e^{-j\phi}\end{aligned}\end{align} \]- Parameters:
quantum_efficiency (Annotated[float, minimum=0]) – Total quantum efficiency (\(\eta_0\)) for power calibration.
spontaneous_emission_factor (Annotated[float, minimum=0]) – Fraction of spontaneous emission coupled into the lasing mode (:math`beta`).
carrier_lifetime (Annotated[float, exclusiveMinimum=0, units='s']) – Effective carrier recombination lifetime (\(\tau_n\)).
gain_compression_factor (Annotated[float, minimum=0, units='m³']) – Gain compression coefficient (\(\epsilon\)).
transparency_carrier_density (Annotated[float, minimum=0, units='m⁻³']) – Transparency carrier density (\(n_0\)).
differential_gain (Annotated[float, minimum=0, units='m³/s']) – Differential material gain coefficient (\(a_0\)).
n_group (Annotated[float, minimum=0]) – Optical group index in the gain medium (\(n_g\)).
linewidth_enhancement_factor (Annotated[float, minimum=0]) – Henry’s α factor (\(\alpha\)) for AM-FM coupling.
confinement_factor (Annotated[float, exclusiveMinimum=0]) – Modal confinement in the active region (\(\Gamma\)).
photon_lifetime (Annotated[float, exclusiveMinimum=0, units='s']) – Photon lifetime in the optical cavity (\(\tau_p\)).
active_region_volume (Annotated[float, exclusiveMinimum=0, units='m³']) – Volume of the active gain region (\(V_a\)).
rel_intensity_noise (Annotated[float, minimum=0, units='1/Hz']) – One-sided relative intensity noise (RIN) power spectral density.
linewidth (Annotated[float, minimum=0, units='Hz']) – Full-width at half-maximum (FWHM) of the laser’s Lorentzian shape.
reflection (complex) – Reflection coefficient for incident fields.
z0 (Annotated[complex, units='Ω'] | Interpolator | None) – Characteristic impedance of the electrical port used to convert the input field amplitude to voltage. If
None, derived from port impedance, calculated by mode-solving, or set to 50 Ω.mesh_refinement (Annotated[float, exclusiveMinimum=0] | None) – Minimal number of mesh elements per wavelength used for mode solving.
verbose (bool) – Flag setting the verbosity of mode solver runs.
seed (Annotated[int, minimum=0] | None) – Random number generator seed to ensure reproducibility.
Important
The electrical input \(A\) is converted to a current signal through the port impedance:
\[I = \frac{\Re\{A\}}{\sqrt{\Re\{Z_0\}}}\]References
Coldren, L. A., Corzine, S. W., & Ma, M. L. (2012). Diode Lasers and Photonic Integrated Circuits. Wiley.
Agrawal, G. P., & Dutta, N. K. (1993). Semiconductor Lasers. Van Nostrand Reinhold.
Methods
reset()Reset internal state.
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.
Attributes
parametric_functionFunction used to update a parametric component.
parametric_kwargsKeyword arguments used to update a parametric component.
propertiesObject properties.
random_variablesRandom variables associated to this modles's parameters.
status- setup_state(*, component, time_step, carrier_frequency, verbose=None, **kwargs)[source]¶
Initialize internal state.
- Parameters:
component (Component) – Component representing the laser source.
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 determine the photon energy in the model.
verbose (bool | None) – If set, overrides the time stepper’s verbose attribute.
kwargs – Unused.
- 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
TimeSeries.
- Return type:
None