PhaseModTimeStepper

class photonforge.PhaseModTimeStepper(*, length=None, n_eff, n_group=0, v_piL=, propagation_loss=0, k2=, k3=, dloss_dv=, dloss_dv2=, tau_rc=0)[source]

Time-stepper for a uniform electro-optic phase modulator.

This model implements a two-port optical phase modulator with a single electrical drive. It features a length-aware phase modulation law with optional nonlinear terms, a voltage-dependent loss model, and an optional first-order low-pass filter on the electrical input to model finite bandwidth. The optical path includes group delay based on a constant group index.

The induced phase shift and optical loss are given by:

\[ \begin{align}\begin{aligned}\Delta\phi &= \frac{\pi V \ell}{V_{\pi L}} + k_2 V^2 \ell + k_3 V^3 \ell\\L &= \left(L_p + \frac{{\rm d}L_p}{{\rm d}V} V + \frac{{\rm d}^2 L_p}{{\rm d}V^2} V^2 \right) \ell\end{aligned}\end{align} \]

Notes

The total loss is clamped are 0 dB to avoid gain.

The group delay \(n_g \ell / c_0\) is implemented as a fixed multiple of the time step.

Parameters:
  • length (Annotated[float, units='μm'] | None) – Physical length of the modulator segment.

  • n_eff (float) – Effective index of the optical mode at the carrier frequency.

  • n_group (float) – Group index of the optical mode, used to calculate delay.

  • v_piL (Annotated[float, units='V·μm']) – Electro-optic phase coefficient \(V_{\pi L}\).

  • propagation_loss (Annotated[float, minimum=0, units='dB/μm']) – Optical propagation loss.

  • k2 (Annotated[float, units='rad/μm/V²']) – Quadratic nonlinear phase coefficient.

  • k3 (Annotated[float, units='rad/μm/V³']) – Cubic nonlinear phase coefficient.

  • dloss_dv (Annotated[float, units='dB/μm/V']) – Linear voltage-dependent optical loss coefficient.

  • dloss_dv2 (Annotated[float, units='dB/μm/V²']) – Quadratic voltage-dependent optical loss coefficient.

  • tau_rc (Annotated[float, minimum=0, units='s']) – Time constant of the optional first-order low-pass filter for the electrical input. Only active for positive values.

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, time_index, ...)

Take a single time step on the given inputs.

update(*args, **kwargs)

Update this time stepper.

Attributes

parametric_function

Function used to update a parametric component.

parametric_kwargs

Keyword arguments used to update a parametric component.

properties

Object properties.

random_variables

Random variables associated to this modles's parameters.

reset()[source]

Reset internal state.

setup_state(*, component, time_step, carrier_frequency, **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 construct the time stepper. The carrier should be omitted from the input signals, as it is handled automatically by the time stepper.

  • kwargs – Unused.

step_single(inputs, time_index, update_state, shutdown)[source]

Take a single time step on the given inputs.

Parameters:
  • inputs (dict[str, complex]) – Dictionary containing inputs at the current time step, mapping port names to complex values.

  • 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.

Returns:

Outputs at the current time step.

Return type:

dict[str, complex]