ElectroAbsorptionModTimeStepper¶
- class photonforge.ElectroAbsorptionModTimeStepper(*, absorption, length, confinement_factor=1.0, bias=0.0, residual_loss=0.0, chirp=0.0, f_3dB=None, quantum_efficiency=1.0, n_group=0.0, voltage_samples=401, z0=None, ports=None)[source]¶
Time-stepper for an electro-absorption modulator (EAM).
Reverse-biased absorbing waveguide driven by one electrical port. The absorption table is sliced at the carrier wavelength during setup, giving \(\alpha(V)\), and the field transfer:
\[A_{\rm out} = A_{\rm in}\,10^{-L_0/20} \exp\!\left[-\frac{\Gamma\alpha(V)\ell}{2} \left(1 + j\alpha_c\right)\right]\]Transmission is exponential in \(\alpha\) while \(\alpha(V)\) itself rises then saturates, so the transfer curve in dB is S-shaped.
The drive passes through an optional first-order low-pass representing the junction RC. Absorbed light produces photocurrent
\[I_{ph} = \eta\frac{q}{h\nu}P_{\rm in} \left(1 - e^{-\Gamma\alpha(V)\ell}\right)\]emitted on the electrical port as \(-I_{ph}\sqrt{\Re Z_0}\).
- Parameters:
absorption (Interpolator) – Material absorption in 1/μm, as an
Interpolatorover voltage and wavelength.length (Annotated[float, exclusiveMinimum=0, units='μm']) – Interaction length.
confinement_factor (Annotated[float, maximum=1, minimum=0]) – Fraction of the optical mode overlapping the absorbing region.
bias (Annotated[float, units='V']) – Constant bias, in V, added to the voltage read from the electrical port. Reverse bias is negative.
residual_loss (Annotated[float, minimum=0, units='dB']) – Bias-independent insertion loss, in dB.
chirp (float) – Modulator chirp parameter \(\alpha_c\), defined by \({\rm d}\phi/{\rm d}t = (\alpha_c/2)\,{\rm d}\ln P/{\rm d}t\).
f_3dB (Annotated[Annotated[float, minimum=0, units='Hz'] | None, _]) – -3 dB cutoff of the junction RC low-pass on the drive. Only active for positive values.
quantum_efficiency (Annotated[float, maximum=1, minimum=0]) – Fraction of absorbed photons collected as photocurrent. Set to 0 to disable the photocurrent output.
n_group (Annotated[float, minimum=0]) – Group index for the optical transit delay. A value of 0 disables the delay.
voltage_samples (Annotated[int, minimum=2]) – Number of points used to resample alpha(V) at the carrier during setup. The original sample points are always kept, so this only adds fill between them.
z0 (Annotated[complex, units='Ω'] | None) – Characteristic impedance of the electrical port, used to convert the input field amplitude to a voltage. If
None, taken from the port spec impedance, else 50 Ohm.ports (Annotated[Sequence[str], maxItems=2, minItems=2] | None) – Optical input and output port names, in that order. If not set, the sorted list of optical port names is used.
Important
The electrical input \(A\) becomes a voltage through the port impedance, \(V = \Re\{A\}\sqrt{\Re Z_0}\), and the applied bias is
biasplus that voltage. Reverse bias is negative.Important
chirpfollows the modulator convention quoted on datasheets, opposite in sign tolinewidth_enhancement_factorin the laser and semiconductor amplifier models. Positive values blue-shift the falling optical edge.Note
A single band at the carrier is assumed: the absorption edge varies over terahertz while the signal occupies tens of gigahertz, so \(\alpha\) is evaluated once at the carrier wavelength. Absorption saturation from state filling is not modelled, and mode-solving for
z0is not supported here.See also
franz_keldysh_absorption()can be used to generateabsorptionfrom tabular data.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.
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 modulator.
time_step (Annotated[float, minimum=0, units='s']) – The interval between time steps (in seconds).
carrier_frequency (Annotated[float, minimum=0, units='Hz']) – Carrier frequency. Sets the wavelength at which the absorption table is sliced and the photon energy used for the photocurrent.
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