Contents

class

SushiDSP::LongTailedPair

A long-tailed pair phase inverter, solved as two triodes sharing a cathode node.

Declared in
include/SushiDSP/circuits/stages/LongTailedPair.hpp

Both grids are inputs: one carries the forward signal, the other whatever the amplifier feeds back. The shared cathode follows the sum of the two grids through the tail, which is what turns a common-mode grid move into no differential output and a differential move into two opposed plate swings. Each half is a TriodeStage driven by its own grid-to-cathode voltage, so grid conduction and the plate ceiling stay that class's business.

Contains

Public member functions

LongTailedPair(const LongTailedPairTube &tube, const LongTailedPairHalf &half_a, const LongTailedPairHalf &half_b, float tail_resistance_ohms, float cathode_to_tail_ohms)

Parameters

tube

What both halves are, at the operating point the plate swings belong to.

half_a

The half whose grid takes the forward signal.

half_b

The half whose grid takes the feedback.

tail_resistance_ohms

Resistance from the tail node to the pair's reference.

cathode_to_tail_ohms

Resistance between the joined cathodes and the tail node.

Precondition

tube.plate_resistance_ohms > 0 and tube.amplification_factor > 0.

Precondition

tube.cathode_bias_volts < 0, so both grids rest below the cathodes.

Plates process_sample(float grid_a, float grid_b)

Processes one sample through both halves.

Parameters

grid_a

This sample's voltage at the first grid, referenced to the bias point.

grid_b

This sample's voltage at the second grid, same reference.

Returns

Both plate outputs, each bounded by its half's swing. Always finite.

float cathode_coupling() const

Returns how much of the summed grid voltage the shared cathode follows.

One half over this value is the factor the pair divides a single-ended input by, which a bench measurement of the drive at either plate checks.

float peak_grid_excursion_volts() const

Returns the larger |Vg - Vk| either half has reached since the last reset().

void reset()

Resets both halves.