AvalanchePhotodiodeTimeStepper¶
- class photonforge.AvalanchePhotodiodeTimeStepper(*, responsivity, gain=1.0, multiplication=1.0, bias=0.0, ionization_ratio=0.0, gain_bandwidth_product=0.0, intrinsic_bandwidth=0.0, dark_current=0.0, bulk_dark_current=0.0, thermal_noise=.0, saturation_current=0.0, roll_off=2.0, reflection=0.0, z0=None, seed=None)[source]¶
Avalanche photodiode with excess noise and a gain-bandwidth limit.
The primary photocurrent \(I_p = R_0 \lvert A \rvert^2\) and bulk dark current are multiplied by \(M\):
\[I = M\left(I_p + I_{d,\rm bulk}\right) + I_{d,\rm surf}\]The one-sided current noise power spectral density and McIntyre excess noise factor are:
\[ \begin{align}\begin{aligned}S_I = 2q\left[M^2 F(M)\left(I_p + I_{d,\rm bulk}\right) + I_{d,\rm surf}\right] + S_{\rm th}\\F(M) = k M + \left(1 - k\right)\left(2 - \frac{1}{M}\right)\end{aligned}\end{align} \]The signal grows as \(M\) while the shot noise grows as \(M\sqrt{F(M)}\), so the SNR improves only while the multiplied shot noise stays below the fixed thermal noise.
- Parameters:
responsivity (Annotated[float, exclusiveMinimum=0, units='A/W']) – Primary responsivity at unity gain.
gain (Annotated[float, units='V/A']) – Transimpedance gain.
multiplication (Interpolator | Annotated[float, exclusiveMinimum=0]) – Mean multiplication \(M\). A number, or an
Interpolatorof \(M\) against reverse bias evaluated atbias.bias (Annotated[float, minimum=0, units='V']) – Reverse bias magnitude. Only used when
multiplicationis an interpolator.ionization_ratio (Annotated[float, maximum=1, minimum=0]) – \(k\) for the excess noise factor.
gain_bandwidth_product (Annotated[float, minimum=0, units='Hz']) – If positive, set the avalanche bandwidth limit.
intrinsic_bandwidth (Annotated[float, minimum=0, units='Hz']) – If positive, transit and RC limited bandwidth.
dark_current (Annotated[float, minimum=0, units='A']) – Surface dark current, not multiplied, in A.
bulk_dark_current (Annotated[float, minimum=0, units='A']) – Bulk dark current at unity gain, multiplied along with the signal.
thermal_noise (Annotated[float, minimum=0, units='A²/Hz']) – One-sided thermal noise density of the front end.
saturation_current (Annotated[float, minimum=0, units='A']) – Space-charge saturation current. Zero disables saturation. Applied to the multiplied current.
roll_off (Annotated[float, exclusiveMinimum=0]) – Sharpness of the saturation knee.
reflection (complex) – Field reflection coefficient for light incident on the optical port. Reflected power never reaches the junction, so it produces no photocurrent.
z0 (Annotated[complex, units='Ω'] | None) – Reference impedance of the electrical port.
seed (int | None) – Seed for the noise generator.
See also
miller_gain()can be used as a helper to createmultiplication.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=0.0, **kwargs)[source]¶
Initialize internal state.
- Parameters:
component (Component) – Component with one optical and one electrical port.
time_step (float) – The interval between time steps (in seconds).
carrier_frequency (Annotated[float, minimum=0, units='Hz']) – Unused; the responsivity already carries the wavelength dependence.
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, ordered by
keys.outputs (ndarray) – Pre-allocated output array, 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 for the current series.
- Return type:
None