sycan.components.active.triode

Vacuum-tube triode with Langmuir 3/2-power DC law and small-signal AC model derived by differentiation.

DC:

I_p = K * (mu * V_gk + V_pk) ** (3/2)

(valid in the forward-conduction region mu*V_gk + V_pk > 0), with

  • V_gk = V(grid)  - V(cathode)

  • V_pk = V(plate) - V(cathode)

Plate current flows from plate to cathode internally, so externally it enters the plate terminal and exits the cathode — the same sign convention as the drain-current of an NMOS.

AC small-signal — obtained by differentiating I_p at the operating point (V_g_op, V_p_op):

g_m = dI_p/dV_gk |_OP = (3/2) K mu (mu V_g_op + V_p_op) ** (1/2)
g_p = dI_p/dV_pk |_OP = (3/2) K    (mu V_g_op + V_p_op) ** (1/2)

which obeys the classic triode identity mu = g_m / g_p = g_m * r_p.

Three intrinsic capacitances (grid-cathode, grid-plate, plate-cathode) can be supplied; the grid-plate cap is the dominant Miller contribution in a grounded-cathode amplifier.

If V_g_op / V_p_op are not provided, per-instance symbols are generated so that multiple tubes in one circuit do not collide.

Classes

Triode(name, plate, grid, cathode, K, mu[, ...])

Vacuum-tube triode.

class sycan.components.active.triode.Triode(name, plate, grid, cathode, K, mu, V_g_op=None, V_p_op=None, C_gk=<factory>, C_gp=<factory>, C_pk=<factory>, *, include_noise=None)[source]

Bases: Component

Vacuum-tube triode.

With include_noise="thermal" (or "all") a thermal noise current source is attached between plate and cathode with PSD 4·k_B·T·g_m where g_m is the small-signal transconductance evaluated at (V_g_op, V_p_op).

Parameters:
  • name (str)

  • plate (str)

  • grid (str)

  • cathode (str)

  • K (Expr)

  • mu (Expr)

  • V_g_op (Expr | None)

  • V_p_op (Expr | None)

  • C_gk (Expr)

  • C_gp (Expr)

  • C_pk (Expr)

  • include_noise (None | str | list[str] | tuple[str, ...] | frozenset[str])

name: str
plate: str
grid: str
cathode: str
K: Expr
mu: Expr
V_g_op: Expr | None = None
V_p_op: Expr | None = None
C_gk: Expr
C_gp: Expr
C_pk: Expr
include_noise: None | str | list[str] | tuple[str, ...] | frozenset[str] = None
ports: ClassVar[tuple[str, ...]] = ('plate', 'grid', 'cathode')
has_nonlinear: ClassVar[bool] = True
SUPPORTED_NOISE: ClassVar[frozenset[str]] = frozenset({'thermal'})
noise_sources()[source]

Return the small-signal noise sources this component emits.

Default is no-op; concrete components override to emit thermal / shot / flicker contributions weighted by the include_noise selection.

Return type:

list[NoiseSource]

stamp(ctx)[source]
Parameters:

ctx (StampContext)

Return type:

None

stamp_nonlinear(ctx)[source]

Add transcendental terms to ctx.residuals at solve time.

Only invoked for DC analysis when the circuit contains at least one component with has_nonlinear = True. Default is no-op.

Parameters:

ctx (StampContext)

Return type:

None