Tool 03

AM Modulator / Demodulator Design

Three real circuits for amplitude modulation: a JFET used as a voltage-controlled resistor to build a variable-gain modulator, a diode plus a resonant tank exploiting nonlinear mixing, and a precision-rectifier envelope detector to recover the modulating signal.

00

Start here

about 7 minutes, interactive
Read the introduction: what this is about, with a little maths and the words used on this page

A 1 kHz whistle on a scope is one slow wave. Ridden on a 50 kHz carrier, it becomes a fast wave whose height rises and falls with the whistle. Every circuit on this page either writes a message onto a carrier's height that way, or reads it back off.

A note on a scope

A steady 1 kHz whistle into a microphone shows on a scope as one smooth wave, 1000 cycles a second. That is the message. The carrier is another sine wave, much faster: 50 kHz here, 50 cycles for every one of the message, above what the ear hears. The carrier frequency field on the page sets it.

A wave as slow as the message cannot leave an antenna of any sensible size, and two messages sent as they are would land on top of each other. Riding the message on a carrier moves it up to a frequency of the designer's choosing, where it can be picked out again and shared with others. Amplitude modulation is the simplest way to do the riding: the message sets the height of the carrier.

The carrier copies the message

In the figure below, blue is the carrier once the message has taken charge of its height: tall where the message is high, short where it is low. Green is the message alone. The dashed line drawn along the peaks is the envelope, and it has the shape of the message. How deep the envelope dips is the modulation index, written n.

At n = 0 the carrier is untouched. At n = 1 the envelope touches zero once per message cycle. Past 1 the outline crosses zero and folds back, the tops of the trace stop copying the message, and a receiver that only reads heights gets it wrong. Under the wave is the same signal sorted by frequency instead of by time; a later section comes back to it. The sliders start from this page's numbers and can be moved freely.

V_max = A_p (1 + n) = 1.00 V, V_min = A_p |1 - n| = 0.15 V, n read back = (V_max - V_min) / (V_max + V_min) = 0.75

Blue: the modulated carrier. Dashed: its envelope. Green: the message alone. The envelope keeps the shape of the message, so the two cursor readings give n straight back.

sidebands n A_p / 2 = 0.214 V each, at 49 kHz and 51 kHz; width 2 f_m = 2 kHz

The carrier stem stays at 0.57 V whatever n is: n only grows the two side stems. Nothing stands at f_m = 1 kHz on the upper axis; the ruler below it, a frequency axis starting at 0 Hz, shows the whole message moved from near zero up to the carrier.

The same picture written down

The trace has a formula, and the formula reads like the picture. Call the carrier's height with no message A_p, and the message m(t), scaled to swing between -1 and +1. The height at any instant is A_p times one plus a slice of the message, and the size of the slice is n. Multiplying that height by a plain cosine at the carrier frequency f_p gives the whole signal. The bracket is the envelope; the cosine is the fast wiggle inside it.

On the second line A_p is the carrier this design delivers at its output and n its modulation index, so the line matches the tables further down.

Height times carrier, then with this page's values:

x(t)=Ap [1+n m(t)]cos⁡(2πfpt)=0.572 V [1+0.75 m(t)]cos⁡(2π⋅50 000 t)\begin{aligned} x(t) &= A_p\,\big[1 + n\,m(t)\big]\cos(2\pi f_p t) \\ &= 0.572\ \text{V}\,\big[1 + 0.75\,m(t)\big]\cos(2\pi \cdot 50\,000\,t) \end{aligned}

Reading n off a scope

On the bench n is not known in advance; it is read from the envelope. The envelope is highest where the message peaks, at A_p (1 + n), and lowest where it troughs, at A_p (1 - n). Subtracting the two leaves 2 n A_p, adding them leaves 2 A_p, and the ratio is n with A_p gone. Two cursor readings on a scope are enough.

The carrier path table lists this envelope maximum and minimum for the design, and the figure above prints the same two values for its sliders. A useful n sits between 0.7 and 1. Lower, and the sidebands, the two copies of the message described below, are small next to the carrier, which carries none of it: at n = 0.75 the sidebands hold 22 % of the power. Higher, and the envelope folds.

From the two extremes of the envelope, then with this design's envelope:

n=Vmax−VminVmax+Vmin=0.999−0.1450.999+0.145=0.75\begin{aligned} n &= \dfrac{V_{max} - V_{min}}{V_{max} + V_{min}} \\ &= \dfrac{0.999 - 0.145}{0.999 + 0.145} = 0.75 \end{aligned}

Where the message went

A spectrum analyser sorts a signal by frequency instead of by time. The whistle alone is one line at 1 kHz. Once modulated, that line is gone. Three lines stand in its place: the carrier at f_p, untouched, and two smaller copies of the message just beside it, at f_p - f_m and f_p + f_m, 49 kHz and 51 kHz. These are the sidebands, and they are where the message travels; each is n / 2 as tall as the carrier.

The reason is a trigonometric identity: the product of two cosines is two cosines at the sum and the difference of their frequencies. The whole signal is only 2 f_m wide, 2 kHz here, next to the carrier and far from where the message started. The lower ruler of the figure shows the move. The JFET cell only ever handles this narrow band around the carrier, so its op-amp has to be fast at f_p, not at f_m.

The message term of the AM wave multiplied out, then the two sideband frequencies with this page's carrier and message:

nApcos⁡(2πfmt)cos⁡(2πfpt)=nAp2cos⁡(2π(fp−fm) t)+nAp2cos⁡(2π(fp+fm) t)fp±fm=50 000±1 000=49 000 Hz and 51 000 Hz\begin{aligned} n A_p\cos(2\pi f_m t)\cos(2\pi f_p t) &= \dfrac{n A_p}{2}\cos\big(2\pi (f_p - f_m)\,t\big) + \dfrac{n A_p}{2}\cos\big(2\pi (f_p + f_m)\,t\big) \\ f_p \pm f_m &= 50\,000 \pm 1\,000 = 49\,000\ \text{Hz and}\ 51\,000\ \text{Hz} \end{aligned}

A transistor used as a volume knob

The message has to turn the carrier's height up and down, so the circuit needs a volume knob that a voltage can turn. An op-amp with two resistors is the simplest amplifier there is; the two resistors set its gain and nothing else does. Make one of them change and the gain changes with it. The changing resistor is a JFET.

For small signals across it, the channel between drain and source behaves as a resistor whose value the gate voltage sets: open at the pinch-off voltage V_P, -7.34 V for the part set on this page, about 12.5 ohms at 0 V. In between, its conductance G, one over its resistance, runs on a straight line. That line is the whole model the tool needs.

Feed the carrier into the amplifier and the message onto the gate, and the carrier comes out with the message written on its height. The message never passes through the amplifier as a signal; it only turns the knob, 1000 times a second.

The channel's conductance against the gate voltage, a straight line of slope beta, then with the line fitted to the measured points, at the gate's bias point:

G(VGS)=1rDS=β (VGS−VP)G(−3.6 V)=10.9 mS/V (−3.6+7.34) V=40.8 mS,rDS=24.5 Ω\begin{aligned} G(V_{GS}) &= \dfrac{1}{r_{DS}} = \beta\,(V_{GS} - V_P) \\ G(-3.6\ \text{V}) &= 10.9\ \text{mS/V}\,(-3.6 + 7.34)\ \text{V} = 40.8\ \text{mS}, \qquad r_{DS} = 24.5\ \Omega \end{aligned}

In the figure the green marker is the gate of the moment, and the grey ones are where the message takes it at its trough and its crest.

gate -3.60 V: G = 40.804 mS, r_DS = 25 ohm, K = 1 + R_b G = 7.53, carrier out K A_c = 0.57 V
trough -6.81 V, crest -0.39 V: K_min = 1.91, K_max = 13.15, n = (K_max - K_min) / (K_max + K_min) = 0.75

Moving the gate by hand is what the message does on every cycle. The line is straight, so equal steps of gate voltage give equal steps of conductance, and the gain follows the message without bending it. The fixed 1 in K = 1 + R_b G keeps K_min above 1, so n = 0.75 stays below the conductance depth 0.86, even at full swing. The larger R_b is next to the channel, the less the 1 counts: R_b = 160 ohm here.

The non-inverting cell

The JFET is the lower leg of the divider that sets the gain, under the feedback resistor R_b, and the carrier goes into the + input. One chip does the whole job. The 76 mV of carrier that the divider delivers comes out as 0.572 V at rest. The message swings the gate 86 % of the way to each end of its line, so the gain swings from 1.91 to 13.1 and the envelope follows.

The gain is 1 plus R_b over the channel, as the formula below shows, and the fixed 1 never moves, which dilutes the depth. That is why R_b comes out 6.5 times the channel's resistance, 160 ohms against 24.5 ohms, and why the tool checks that the chip is still fast enough at a gain of 13.1 at 50 kHz. The gain cell panel on the page is this one op-amp and this one resistor.

The cell's gain with the gate at its bias point, V_C = -3.6 V, where the channel is 24.5 ohms:

K=1+RbrDS=1+160 Ω24.5 Ω=7.53K = 1 + \dfrac{R_b}{r_{DS}} = 1 + \dfrac{160\ \Omega}{24.5\ \Omega} = 7.53

Feeding the gate, finding a carrier

The gate wants the message in a particular form: sitting on a steady negative voltage, the middle of the line, and neither too large nor too small. The gate drive panel on the page does that with one op-amp. It scales the message from its 1 V source to a 3.21 V swing, adds the -3.6 V bias from the supply, and blocks any offset the source might carry with a capacitor sized so that the lowest message frequency, 100 Hz, still passes.

With the carrier from the on-board Wien oscillator: the board makes its own 50 kHz with a small self-feeding loop that runs at one frequency, designed with the Sine Oscillator tool's method for this op-amp. A divider brings its 0.988 V down to the 76 mV the JFET can take. The carrier oscillator panel shows it.

What the numbers on the page mean

The design aims for n = 0.75. Two things pull the real figure away from it. The op-amp is not infinitely fast: its gain-bandwidth product, 4 MHz for the part set on the page, is the gain it can hold times the frequency it holds it at. At the crest of the envelope the cell asks the op-amp for a gain of 13.1, which it holds flat only well below 304 kHz, and 50 kHz is far enough below it. The crests come out 1.3 % low, so the effective index is 0.74.

The JFET is not a perfect resistor either: it bends slightly and adds a small tone at twice the carrier, 47 dB below it (230 times smaller in voltage), which lifts every peak, so the index read from the peaks is 0.74. The THD figure, for total harmonic distortion, is 0.49 % here. It says how far the envelope's shape strays from the message: below 1 % is clean, and this design is there.

The frequency up to which the op-amp holds the crest gain, gain and speed trading against each other:

fB=GBWKcrest=4 MHz13.1=304 kHzf_B = \dfrac{\text{GBW}}{K_{crest}} = \dfrac{4\ \text{MHz}}{13.1} = 304\ \text{kHz}

Reading the rest of the page

The panels below follow the circuit from the part to the output. JFET characteristics sets the straight line, from datasheet numbers or from measured points. Sources and op-amp holds the message, the carrier, the supply and the op-amp. Then come the gain cell, the carrier path, the op-amp limits with both cells side by side, the carrier oscillator, the gate drive and a preview of the output.

Each result panel has a Show the math section, and the formula sheet collects every formula. The download gives a script, an LTspice schematic and a netlist of the whole modulator.

Words used on this page

carrier
the fast sine wave that does the carrying; 50 kHz here, set by the carrier frequency field
message
the slow signal to be carried, audio here; also called the modulating signal, m(t)
envelope
the outline along the carrier's peaks; the message plus a constant
modulation index n
how deep the envelope dips: 0 is no message, 1 touches zero, above 1 the envelope folds
sidebands
the two copies of the message at f_p - f_m and f_p + f_m; the only places the message exists after modulation
gain
how many times an amplifier enlarges its input; in the JFET modulator the message changes it cycle by cycle
op-amp
the amplifier chip the circuits are built around; two resistors set its gain
JFET
a transistor used here as a resistor set by its gate voltage; V_P and I_DSS describe one
01

JFET characteristics

fitted to measurements
Datasheet preset (limits, not typicals)
How to find V_P, I_DSS and r_DS(on): datasheet, calculation, lab

1. Read on the datasheet

Three lines of the electrical characteristics table fill the fields above. Makers print limits (a minimum, a maximum or a range), never the value of the part in hand.

Field hereDatasheet lineMaker's test condition
V_PGate-source cutoff voltage V_GS(off), also called pinch-off voltagea tiny drain current, 1 nA to 1 µA
I_DSSZero-gate-voltage drain current I_DSSV_GS = 0, V_DS about 15 V, often a short pulse
r_DS(on)Drain-source on-resistance r_DS(on), on switching JFETs (J111 to J113)V_GS = 0, V_DS of 0.1 V or less
r_DS(on) ≈ 1/|y_fs|Forward transfer admittance |y_fs| or g_fs, on amplifier JFETs (2N5457, 2N3819) that print no r_DS(on)V_GS = 0, V_DS about 15 V, 1 kHz

Enter V_P and one of the other two. For V_P take the middle of the V_GS(off) range, as the presets do. r_DS(on) is printed as a maximum and I_DSS as a minimum, so both describe the weakest part the maker will ship, not a typical one.

2. Worked out on this page

The design needs one straight line: the channel conductance G against the gate voltage. Its zero is V_P and its slope is beta. No datasheet prints beta; it follows from V_P and either of the other two figures, which is also why either one gives the other:

G(VGS)=β (VGS−VP),β=2IDSSVP2=1rDS(on) ∣VP∣G(V_{GS}) = \beta\,(V_{GS} - V_P), \qquad \beta = \dfrac{2 I_{DSS}}{V_P^2} = \dfrac{1}{r_{DS(on)}\,|V_P|}

The same model says the channel conductance at V_GS = 0 equals the transconductance there, the figure amplifier datasheets print, hence the last row of the table:

rDS(on)=∣VP∣2IDSS=1gfs0,gfs0=2IDSS∣VP∣r_{DS(on)} = \dfrac{|V_P|}{2 I_{DSS}} = \dfrac{1}{g_{fs0}}, \qquad g_{fs0} = \dfrac{2 I_{DSS}}{|V_P|}

Everything after that is computed too: the bias V_C = V_P/2, the channel resistance there, and the JFET model of the LTspice export, whose Beta is half this page's beta because SPICE writes the square law as Beta (V_GS - V_P)²:

SPICE: Vto=VP,Beta=IDSSVP2=β2\text{SPICE: } V_{to} = V_P, \qquad \text{Beta} = \dfrac{I_{DSS}}{V_P^2} = \dfrac{\beta}{2}

3. Measure it in the lab

Two JFETs with the same part number can differ by a factor of three or more, so the part that goes on the board is worth measuring. The safest way is also the one the Measured points mode reads: the channel as a resistor with a small voltage across it, exactly how the modulator uses it.

VVV_in, 0.1 to 0.2 VR_seriesV_DV_GSadjustable, 0 V to V_PDSG
  1. Ground the source. Feed the drain from a small V_in, 0.1 V to 0.2 V, through R_series of about twice the expected r_DS(on), the channel's value at the bias point. V_D can never exceed V_in, which keeps the channel ohmic everywhere but in the last few tenths of a volt before V_P.
  2. Drive the gate from an adjustable negative voltage, for instance a potentiometer across a negative supply. The gate draws almost no current.
  3. Start at V_GS = 0 and step towards V_P in about ten steps. At each step read V_GS at the gate, V_in at the top of R_series and V_D at the drain.
  4. Stop when V_D is almost V_in: the channel is nearly closed.
  5. Choose Measured points above and enter one row per step: V_GS V_in V_D R_series, with R_series as measured on an ohmmeter. The page turns each row into a conductance and fits the line.
  6. Set the fit window on the straight stretch, leaving out the last points near V_P, where a real channel closes gradually rather than at once.
rDS=Rseries VDVin−VD,G=1rDS=a VGS+b ⇒ VP=−ba,β=ar_{DS} = R_{series}\,\dfrac{V_D}{V_{in} - V_D}, \qquad G = \dfrac{1}{r_{DS}} = a\,V_{GS} + b \ \Rightarrow\ V_P = -\dfrac{b}{a}, \quad \beta = a

The fitted V_P lands a little closer to 0 V than a V_GS(off) reading, which is taken at a tiny current, out in that gradual tail. The design runs on the line, so the fitted value is the one to keep.

4. Another way: a fixed V_DS and an ammeter

The same line can be measured the other way round: hold the drain at a fixed small voltage and read the drain current while the gate voltage steps. The mode Measured I_DS at a fixed V_DS reads these rows. Holding the gate and sweeping the drain instead gives the output curves, read in the optional section of the same mode.

AVVV_DS fixed, 0.2 VI_DSV_DS at the drainV_GSadjustable, 0 V to V_PDSG
  1. Ground the source. Hold the drain at a small fixed voltage, 0.2 V for instance, with an ammeter in series to read I_DS.
  2. Step the gate from 0 V towards V_P, for instance by 0.5 V, and note I_DS at each step, until the current is almost zero.
  3. Choose Measured I_DS at a fixed V_DS above, enter V_DS and one row per step: V_GS I_DS, with I_DS in milliamps.

Both methods measure the same thing, the channel conductance at a small drain voltage. Dividing the current by V_DS gives it, so the straight line of I_DS against V_GS is the conductance line scaled by V_DS: its slope is beta V_DS and it reaches zero at V_P.

G=IDSVDS,IDS=VDS β (VGS−VP) ⇒ slope=β VDS,IDS=0 at VGS=VPG = \dfrac{I_{DS}}{V_{DS}}, \qquad I_{DS} = V_{DS}\,\beta\,(V_{GS} - V_P) \ \Rightarrow\ \text{slope} = \beta\,V_{DS}, \quad I_{DS} = 0 \text{ at } V_{GS} = V_P

The difference is in what the voltage reading includes. A V_DS set on a supply also drops across everything in series with the channel: the ammeter's shunt, the output resistance of the source (50 Ω on a function generator), the wires. Near V_GS = 0 the channel itself is only a few tens of ohms, so that resistance R_s takes a large share and flattens the top of the curve. Reading V_DS with a voltmeter at the drain removes it; otherwise the field R_s subtracts it:

rDS=VDSIDS−Rsr_{DS} = \dfrac{V_{DS}}{I_{DS}} - R_s
AspectDivider (Measured points)Fixed V_DS
What is setV_in at the top of R_seriesV_DS on the drain
What is readV_D, a voltmeter onlyI_DS, an ammeter in series
Current limitR_series limits it: safe even at V_GS = 0only V_DS and the channel: keep V_DS small
Series resistancepart of R_series, measured on an ohmmeterthe ammeter and the source add to r_DS unless V_DS is read at the drain
Near V_PV_D climbs to V_in, the channel stays ohmicI_DS falls to the ammeter's last digits

The output curves answer the other question of the design: how large V_DS may get before the channel stops acting as a resistor. On the I_DS against V_DS curves the straight start is the ohmic region and, once the drain passes |V_P|, the flat top at V_GS = 0 is I_DSS. Sweeping V_DS to the plateau puts V_DS x I_DS into the part, about 0.36 W for 60 mA at 6 V, already past what a TO-92 J111 dissipates at room temperature: keep that sweep short.

Quick readings without the fit

  1. V_P, any JFET: gate to ground, 1 MΩ from source to ground, drain at +15 V. The source rises until the channel is almost closed, so a 10 MΩ voltmeter on the source reads about |V_P| (V_GS(off) at a few microamps, like a datasheet).
  2. I_DSS, low-current parts only: gate tied to source, V_DS about 10 V (more than |V_P|), read the drain current briefly. 10 V x 5 mA = 50 mW is fine for a 2N5457; a J111 passes 20 mA or more, so measure it the ohmic way instead.

Both go into the V_P and I_DSS mode.

Four columns describe the divider measurement: V_in through R_series into the drain, V_D read at the drain, source grounded, gate at V_GS; the tool computes r_DS = R_series V_D / (V_in - V_D). Keep V_D small (a few tenths of a volt at most) so the part stays in the ohmic region. The window picks the straight stretch the design is allowed to use: its middle becomes the bias point, its half-width the maximum swing.

0.0022446587-7-5-3-1V_GS (V)G (mS)V_P
Points used / read6 / 6
Fitted V_P (line crosses zero)-7.34 V
Slope beta10.9223 mS/V
Implied I_DSS / r_DS(on)293.89 mA / 12.5 Ω
R² / largest deviation from the line0.9931 / 1.8 % at -1.00 V
Bias point (window middle) / max swing-3.60 V / ±3.60 V

Do not measure I_DSS of a J111 by shorting the gate and applying a large V_DS: V_DS x I_DSS can exceed what a TO-92 dissipates. Characterize in the ohmic region instead (small V_D through a series resistor) and let the tool fit the line. JFET parameters vary a lot between individual parts, so a measured line beats any datasheet figure.

Show the math for the characterization

Everything the gain cell needs from the JFET is one straight line, the conductance against the gate voltage. Its slope is called beta and its zero is the pinch-off voltage V_P. Any two facts about the part fix that line.

G(VGS)=1rDS=β (VGS−VP)G(V_{GS}) = \dfrac{1}{r_{DS}} = \beta\,(V_{GS} - V_P)

From measurements: each row gives the channel resistance at one gate voltage, either read directly or from a divider (V_in through R_series into the drain, V_D at the drain, source grounded, so r_DS = R_series V_D / (V_in - V_D)). Turned into conductances, the 6 points inside the chosen window (-7.20 V to 0.00 V) are fitted with a least-squares line:

G=a VGS+b ⇒ β=a=10.9223 mS/V,VP=−ba=−7.336 VG = a\,V_{GS} + b \ \Rightarrow\ \beta = a = 10.9223\ \text{mS/V}, \qquad V_P = -\dfrac{b}{a} = -7.336\ \text{V}

How straight the part really is over that window: R^2 = 0.9931, and the largest gap between a point and the line is 1.8% at V_GS = -1.00 V. A few percent is normal; the design stays inside this window, so it never relies on the line where it was not checked.

The bias point is the middle of the window and the swing is a fraction of its half-width, instead of the V_P/2 and |V_P|/2 the datasheet modes assume. The I_DSS and r_DS(on) the fitted line implies, 293.89 mA and 12.5 Ω, are shown only for comparison with a datasheet.

02

Sources and op-amp

TL08x: 3 to 4 MHz, 13 to 16 V/us

The output swing is what the op-amp reaches on this supply, about Vcc minus 1.5 V for a TL08x. The carrier frequency is a design input here, not a preview setting: it is what the op-amp has to keep up with, at the highest gain the message drives the cell to. The non-inverting cell needs a large x to reach a deep modulation, which is what the op-amp struggles with at a fast carrier; the inverting cell reaches n = s with a small x, at the cost of up to two more op-amps. The comparison table below puts the two side by side. An output gain stage after the non-inverting cell brings the carrier up to a target amplitude without asking the JFET for a larger carrier, which would cost current and linearity.

03

Gain cell

non-inverting, n = 0.746
x_p(t)v_gateVoutR_b 160 ΩSDG
Bias point V_C-3.60 V
Channel resistance at V_C24.5 Ω
Feedback resistor R_b160 Ω (x = 6.529)
Gate swing V_GS-6.81 V to -386 mV
Channel resistance range13.2 Ω to 176 Ω
Signal gain: trough / bias / crest1.91 / 7.53 / 13.15
Modulation index n0.746 (ideal)
Show the math

An AM modulator needs a gain that follows the message. The trick used here: a JFET operated with a small drain-source voltage behaves like a resistor whose value is set by its gate voltage, so it can be dropped in wherever a resistor sets an amplifier's gain.

Why a resistor: in the ohmic (triode) region, where V_DS is small, the JFET channel is a conducting path whose width the gate controls. A more negative gate narrows it, until at V_GS = V_P (the pinch-off voltage, negative for an N-channel part) it closes completely. The standard model for the drain current there is:

ID=2IDSSVP2[(VGS−VP) VDS−VDS22]I_D = \dfrac{2 I_{DSS}}{V_P^2}\left[(V_{GS}-V_P)\,V_{DS} - \dfrac{V_{DS}^2}{2}\right]

I_DSS is the current at V_GS = 0 with the channel fully open. For a small V_DS the squared term is negligible next to the first one, and what is left is Ohm's law, I = G V, with a conductance that depends on the gate only:

ID≈G(VGS) VDS,G(VGS)=1rDS=2IDSSVP2 (VGS−VP)I_D \approx G(V_{GS})\,V_{DS}, \qquad G(V_{GS}) = \dfrac{1}{r_{DS}} = \dfrac{2 I_{DSS}}{V_P^2}\,(V_{GS} - V_P)

That conductance is a straight line in V_GS with slope beta: zero at V_GS = V_P (channel closed, infinite resistance) and beta |V_P| = 2 I_DSS/|V_P| = 1/r_DS(on) at V_GS = 0 (channel wide open). Here the line was fitted to measured points (see the characterization panel), which gives beta = 10.9223 mS/V and V_P = -7.336 V directly, and the bias sits at the middle of the measured window, V_C = -3.60 V, so the design never leaves the stretch of the curve that was checked:

VC=−3.60 V,G(VC)=β (VC−VP)=40.804 mS,rDS(VC)=24.5ΩV_C = -3.60\ \text{V}, \qquad G(V_C) = \beta\,(V_C - V_P) = 40.804\ \text{mS}, \qquad r_{DS}(V_C) = 24.5 Ω

Two separate conditions govern how large V_DS may be, and in this circuit V_DS is the carrier itself: the op-amp's feedback holds its inverting input, where the drain sits, at the carrier voltage. First, the triode formula only holds while V_DS stays below V_GS - V_P; past that point the channel pinches off at the drain end and the current stops growing (saturation). The tightest moment is the most negative gate swing, V_GS = -6.81 V, where V_GS - V_P = 0.522 V. A carrier larger than that saturates the JFET on every carrier peak while the message is in its trough, and the envelope is clipped there.

VDS≤VGS,min−VP=0.522 VV_{DS} \le V_{GS,min} - V_P = 0.522\ \text{V}

Second, within the triode region the squared term is not a problem for the envelope at all, and it is worth seeing why rather than just keeping V_DS small. Put the carrier in and write out the op-amp output (the current through R_b is the drain current, so V_out = V_DS + R_b I_D):

VDS=Accos⁡ωpt ⇒ Vout=Accos⁡ωpt [1+RbG(VGS)]−RbβAc24 (1+cos⁡2ωpt),β=2IDSSVP2V_{DS} = A_c\cos\omega_p t \ \Rightarrow\ V_{out} = A_c\cos\omega_p t\,[1 + R_b G(V_{GS})] - \dfrac{R_b\beta A_c^2}{4}\,(1 + \cos 2\omega_p t), \qquad \beta = \dfrac{2 I_{DSS}}{V_P^2}

The first term is the wanted AM signal, gain set by the gate. The second term does not contain V_GS: it is a fixed DC offset plus a tone at twice the carrier frequency, both of amplitude R_b beta A_c^2/4, whatever the message is doing. It cannot distort the envelope; it only adds a spectral line at 2 f_p, which any band-limiting after the modulator removes. With the carrier amplitude designed below (A_c = 76.0 mV) that line is 2.5 mV, -47.1 dBc below the output carrier, at 100 kHz.

The gain cell is a non-inverting amplifier with the JFET channel in place of the bottom resistor: the carrier x_p(t) drives the + input, the channel goes from the - input to ground, and R_b feeds the output back to the - input. With negative feedback an ideal op-amp keeps its two inputs at the same voltage and draws no input current, so the - input sits at x_p(t), and the current through the channel must also flow through R_b:

xprDS=Vout−xpRb ⇒ Vout=xp(1+RbrDS)=xp[1+Rb G(VGS)]\dfrac{x_p}{r_{DS}} = \dfrac{V_{out} - x_p}{R_b} \ \Rightarrow\ V_{out} = x_p\left(1 + \dfrac{R_b}{r_{DS}}\right) = x_p\big[1 + R_b\,G(V_{GS})\big]

So the gain is 1 + R_b G, and G is set by the gate. Now put the message on the gate on top of the bias, V_GS(t) = V_C + x_m(t). Because G is a straight line in V_GS, adding x_m to the gate adds a proportional amount to G. The swing here is a fraction 0.90 of the measured window's half-width, ±3.21 V; as a fraction of the room between V_C and V_P (3.74 V) that is s = 0.860, and s is what sets how far G moves:

G(VC+xm)=β (VC−VP+xm)=G(VC)[1+xmVC−VP]=G(VC)[1+s m(t)]G(V_C + x_m) = \beta\,(V_C - V_P + x_m) = G(V_C)\left[1 + \dfrac{x_m}{V_C - V_P}\right] = G(V_C)\big[1 + s\,m(t)\big]

Substitute that into the gain and call x = R_b G(V_C) = R_b / r_DS(V_C), the feedback resistor measured in units of the channel resistance at bias:

Vout(t)=xp(t)[1+x+x s m(t)]=xp(t) (1+x)[1+x s1+x m(t)]V_{out}(t) = x_p(t)\big[1 + x + x\,s\,m(t)\big] = x_p(t)\,(1+x)\left[1 + \dfrac{x\,s}{1+x}\,m(t)\right]

That is exactly the AM form A_p[1 + n m(t)] cos(ω_p t) from the basics, with the carrier amplitude multiplied by a constant gain and the message riding on it:

K0=1+x,n=s x1+xK_0 = 1 + x, \qquad n = s\,\dfrac{x}{1+x}

Two things to read off. n can never reach s, because x/(1+x) is always below 1: the swing fraction is the ceiling of the modulation index. And a bigger R_b raises both the gain and the depth of modulation, which is what a scope shows when R_b is changed on the same JFET. To hit a target n, invert the relation:

x=ns−n,Rb=rDS(VC) xx = \dfrac{n}{s - n}, \qquad R_b = r_{DS}(V_C)\, x
x=0.7500.860−0.750=6.794,Rb=24.5Ω×6.794=167Ω→E24: 160Ωx = \dfrac{0.750}{0.860 - 0.750} = 6.794, \qquad R_b = 24.5 Ω \times 6.794 = 167 Ω \rightarrow \text{E24: } 160 Ω

R_b has to be a part that exists, so the rounded value is the one that sets x, and n comes out a little off the target:

x=RbrDS(VC)=160Ω24.5Ω=6.529x = \dfrac{R_b}{r_{DS}(V_C)} = \dfrac{160 Ω}{24.5 Ω} = 6.529
K0=1+6.529=7.529,n=0.860×6.5291+6.529=0.746K_0 = 1 + 6.529 = 7.529, \qquad n = 0.860 \times \dfrac{6.529}{1 + 6.529} = 0.746

Over one message cycle the gate swings by ±3.21 V around V_C and the gain moves between 1.912 and 13.146: the carrier comes out 6.88 times larger at the crest of the message than in its trough, which is the ratio (1+n)/(1-n) of the envelope.

04

Carrier path

A_c = 76.0 mV, set by the triode region
from the Wien oscillatorto + input12.0 kΩ1.00 kΩ
Triode limit V_GS,min - V_P522 mV (carrier at most 78.2 mV with margin k = 0.15)
Op-amp limit V_out,max / K_max1.03 V
Carrier amplitude A_c delivered76.0 mV from 988 mV, divider 12.0 kΩ / 1.00 kΩ, rounded to stay at or under the limit
Output carrier K_0 A_c572 mV
Envelope min / max145 mV / 1.00 V
JFET and op-amp peak current5.77 mA
V_DS² term: DC offset and tone at 2 f_p2.5 mV, -47.1 dBc at 100 kHz
Show the math

The carrier goes into the op-amp's + input, and the op-amp's feedback copies it onto the - input, which is the JFET's drain. So the carrier amplitude A_c is the drain-source voltage, and two limits decide how large it may be.

(a) Triode region. The channel saturates once V_DS exceeds V_GS - V_P, and the message drives V_GS as low as -6.81 V, so the carrier must stay under 0.522 V. A margin factor k keeps it comfortably inside, where the conductance is still the straight line the whole design rests on:

Ac,triode=k (VGS,min−VP)=0.15×0.522=78.2mVA_{c,triode} = k\,(V_{GS,min} - V_P) = 0.15 \times 0.522 = 78.2 mV

(b) Op-amp output. At the crest of the message the gain is K_max = 1 + x(1+s) = 13.15, and K_max A_c has to fit inside the output swing:

Ac,opamp=Vout,maxKmax=13.5V13.15=1.03VA_{c,opamp} = \dfrac{V_{out,max}}{K_{max}} = \dfrac{13.5 V}{13.15} = 1.03 V

The smaller of the two wins: A_c = 78.2 mV, set by the triode region. The source delivers 988 mV, so a resistive divider brings it down. Its top resistor is rounded up, to the next value on hand, so that A_c lands at or just under the limit and never above it. It feeds the op-amp's + input, which draws no current, so the divider needs no buffer and its ratio is exact:

RbotRtop+Rbot=AcAsrc ⇒ Rtop=Rbot(AsrcAc−1)=11.6kΩ→E24, rounded up: 12.0kΩ,Ac=988mV×1.00kΩ13.0kΩ=76.0mV\dfrac{R_{bot}}{R_{top} + R_{bot}} = \dfrac{A_c}{A_{src}} \ \Rightarrow\ R_{top} = R_{bot}\left(\dfrac{A_{src}}{A_c} - 1\right) = 11.6 kΩ \rightarrow \text{E24, rounded up: } 12.0 kΩ, \quad A_c = 988 mV \times \dfrac{1.00 kΩ}{13.0 kΩ} = 76.0 mV

What comes out, from the gain at the bias point and at the two extremes of the message:

K0Ac=7.53×76.0mV=572mV,envelope from KminAc=145mV to KmaxAc=1.00VK_0 A_c = 7.53 \times 76.0 mV = 572 mV, \qquad \text{envelope from } K_{min}A_c = 145 mV \text{ to } K_{max}A_c = 1.00 V

Current: at the crest the channel is at its lowest resistance, r_DS = 13.2 Ω, and carries A_c / r_DS = 5.77 mA peak. That current comes out of the op-amp through R_b, so it is the op-amp's output current too; well under the 10 mA or so a small op-amp delivers cleanly.

05

Op-amp limits at the carrier

f_p K_max / GBW = 0.16
Closed-loop bandwidth: trough / bias / crest2.09 MHz / 531 kHz / 304 kHz
Gain factor at f_p: trough / bias / crest0.9997 / 0.996 / 0.987
Modulation index: designed / effective / read from the peaks0.746 / 0.743 / 0.737
Audio distortion from the crest loss (THD)0.49 %
Slew needed / available0.31 V/us / 16 V/us
Op-amps in the modulator3 (gate-drive summer and Wien oscillator included)

Within the gain-bandwidth rule of thumb (f_p K_max / GBW at or below 0.2): the crest loses 1.3 %.

Both cells on this JFET, carrier and op-amp

Non-invertingInverting
Modulation index n (designed)0.7460.860
n effective after the crest loss0.7430.814
Noise gain at the crest K_max13.114.7
Closed-loop bandwidth at the crest304 kHz273 kHz
f_p K_max / GBW0.160.18
Audio THD from the envelope0.49 %8.03 %
Output carrier amplitude572 mV1.02 V
Feedback resistor160 Ω180 Ω
Op-amps24

Same JFET line, same swing, same carrier and op-amp. The non-inverting row uses the target n above; the inverting row's n is the conductance depth s itself, since that cell cannot dilute it. Where the non-inverting cell exceeds the gain-bandwidth rule, its R_b suggestion above trades n for a clean envelope; the inverting cell keeps n and pays in op-amps.

Show the math

Nothing so far has asked whether the op-amp can follow. The gain cell is a non-inverting amplifier, and a real op-amp's gain-bandwidth product GBW means a non-inverting stage of gain K only reaches GBW/K before it rolls off. Here the gain is not fixed: it moves with the message, so the bandwidth moves with it too.

K(m)=1+x (1+s m),f−3dB(m)=GBWK(m),∣H(fp)∣=11+(fpK(m)GBW)2K(m) = 1 + x\,(1 + s\,m), \qquad f_{-3dB}(m) = \dfrac{GBW}{K(m)}, \qquad |H(f_p)| = \dfrac{1}{\sqrt{1 + \left(\dfrac{f_p K(m)}{GBW}\right)^2}}

At the carrier frequency f_p = 50.0 kHz, with GBW = 4.00 MHz, the gain and the loss at the three points that matter:

trough (m=−1): K=1.91, f−3dB=2.09MHz, ∣H∣=0.9997 (0.0% lost)\text{trough } (m=-1):\ K = 1.91,\ f_{-3dB} = 2.09 MHz,\ |H| = 0.9997\ (0.0\% \text{ lost})
bias (m=0): K=7.53, f−3dB=531kHz, ∣H∣=0.9956 (0.4% lost)\text{bias } (m=0):\ K = 7.53,\ f_{-3dB} = 531 kHz,\ |H| = 0.9956\ (0.4\% \text{ lost})
crest (m=+1): K=13.15, f−3dB=304kHz, ∣H∣=0.9868 (1.3% lost)\text{crest } (m=+1):\ K = 13.15,\ f_{-3dB} = 304 kHz,\ |H| = 0.9868\ (1.3\% \text{ lost})

The loss is largest exactly where the gain is largest, at the crest. That flattens the top of the envelope more than its bottom, which is a distortion of the message itself, not just a smaller signal. Reading the modulation index off the compressed envelope gives the value a scope would show:

neff=Kmax∣H∣crest−Kmin∣H∣troughKmax∣H∣crest+Kmin∣H∣trough=0.743(designed 0.746)n_{eff} = \dfrac{K_{max}|H|_{crest} - K_{min}|H|_{trough}}{K_{max}|H|_{crest} + K_{min}|H|_{trough}} = 0.743 \quad (\text{designed } 0.746)

Applying that gain-dependent loss to a full sine-wave message and taking the harmonics of the resulting envelope gives the distortion a perfect demodulator would recover: THD = 0.49%. The rule of thumb used here is to keep f_p K_max / GBW at or below 0.2, where the crest loses about 2% and the THD stays well under 1%.

fpKmaxGBW=50.0kHz×13.154.00MHz=0.16 ≤0.2\dfrac{f_p K_{max}}{GBW} = \dfrac{50.0 kHz \times 13.15}{4.00 MHz} = 0.16\ \le 0.2

Within the rule of thumb: this op-amp keeps up with this carrier at this gain.

Slew rate is the other limit: the output is a sine of amplitude up to K_max A_c = 1.00 V at 50.0 kHz, whose steepest slope is 2 pi f_p times that amplitude. Keeping it under half the op-amp's slew rate leaves the waveform undistorted:

2πfp KmaxAc=0.314 V/us≤SR2=8.0 V/us2\pi f_p \, K_{max} A_c = 0.314\ \text{V/us} \le \dfrac{SR}{2} = 8.0\ \text{V/us}
05b

Carrier oscillator

Wien bridge at 50.6 kHz
VoutR 6.20 kΩC 470 pFR 6.20 kΩC 470 pFRf1 9.31 kΩRf2 12.0 kΩ1N4148 / 1N914, one each wayRg 10.0 kΩ
Frequency: wanted / predicted with this op-amp50.0 kHz / 50.6 kHz (1.16 %)
R and C (two of each)6.20 kΩ, 470 pF
Feedback: Rf1 / Rf2 (diodes across it) / Rg9.31 kΩ / 12.0 kΩ / 10.0 kΩ
Limiting diodes2 x 1N4148 / 1N914 (silicon), one each way
Output amplitudeabout 988 mV peak, into the divider above
Gain needed / set / limited3.01 / 3.13 / 1.93
Distortion on the carrierabout 2.5 %
Op-amp lag at the carrier, and what it does2.3 degrees: the textbook RC would land -5.4 % off, so RC is retuned -7.4 %

The Wien bridge is the right choice here for one reason: it needs a gain of only 3, so at 50.0 kHz this op-amp lags it by only 2.3 degrees, which the retuned RC absorbs. A phase-shift oscillator would need a gain of 29, and this op-amp would lag it by 28 degrees at this frequency, too much to trust.

Carrier distortion is not the same problem as message distortion: the harmonics of the carrier land at 2 f_p and above, far from the sidebands, and the demodulator's low-pass removes them. A percent or so here is harmless, which is why diode limiting is enough and the oscillator needs nothing more elaborate. The Sine Oscillator Design tool has the other topologies and the reasoning behind that choice.

06

Gate drive

one inverting summer: gain, DC block and bias
x_m(t)+VccC 2.20 uFRac 5.60 kΩRbias 75.0 kΩRf 18.0 kΩto gate
R_f18.0 kΩ
R_ac (sets the gain R_f / R_ac)5.60 kΩ, gain 3.214 (target 3.240)
R_bias (from +Vcc, sets the bias)75.0 kΩ, bias -3.60 V (target -3.60 V)
C (blocks DC, high-pass with R_ac)2.20 uF, corner 12.9 Hz (target 10.0 Hz)
Most negative gate voltage delivered-6.81 V (op-amp swing ±13.5 V)
Show the math

The gate needs V_C + x_m(t): a DC level of -3.60 V with the message swinging ±3.21 V on top of it. A signal generator delivers something else, typically ±1.00 V centered on 0 V. One inverting summer does the whole job: the source comes in through a capacitor and a resistor R_ac, the supply comes in through a resistor R_bias, and R_f feeds back. Because the op-amp's - input is a virtual ground, each input's current is set by its own resistor alone, nothing loads anything, and the three numbers that matter (gain, bias, high-pass corner) are exactly what the formulas below say.

Currents into the virtual ground add up and flow out through R_f:

xmRac+VccRbias=−VoutRf ⇒ Vout=−RfRac xm(t)−RfRbias Vcc\dfrac{x_m}{R_{ac}} + \dfrac{V_{cc}}{R_{bias}} = -\dfrac{V_{out}}{R_f} \ \Rightarrow\ V_{out} = -\dfrac{R_f}{R_{ac}}\,x_m(t) - \dfrac{R_f}{R_{bias}}\,V_{cc}

The message term needs the gain V_swing / V_source, so R_ac follows from R_f; the DC term has to equal -|V_C|, so R_bias follows from R_f and V_cc. The minus signs are useful: they turn the positive supply into the negative bias an N-channel gate needs, and merely invert the message, a 180 degree phase shift that changes nothing in the AM envelope.

Rac=Rfgain=18.0kΩ3.240=5.56kΩ→E24: 5.60kΩ,gain actual=RfRac=3.214R_{ac} = \dfrac{R_f}{\text{gain}} = \dfrac{18.0 kΩ}{3.240} = 5.56 kΩ \rightarrow \text{E24: } 5.60 kΩ, \qquad \text{gain actual} = \dfrac{R_f}{R_{ac}} = 3.214
Rbias=Rf Vcc∣VC∣=18.0kΩ×15.03.600=75.0kΩ→E24: 75.0kΩ,Vbias=−RfRbias Vcc=−3.60VR_{bias} = \dfrac{R_f\,V_{cc}}{|V_C|} = \dfrac{18.0 kΩ \times 15.0}{3.600} = 75.0 kΩ \rightarrow \text{E24: } 75.0 kΩ, \qquad V_{bias} = -\dfrac{R_f}{R_{bias}}\,V_{cc} = -3.60 V

The capacitor in series with R_ac blocks any DC the source might carry, so the bias is set by R_bias alone. Seen from the source, C and R_ac form a high-pass whose corner is 1/(2 pi R_ac C), and since R_ac ends on a virtual ground nothing sits in parallel with it to move that corner. Putting it a decade below the lowest message frequency (100 Hz) costs the message almost nothing: at f = 10 f_c the loss is 10 log(1 + 0.01) = 0.04 dB.

fc=fm,min10=10.0Hz ⇒ C=12πRacfc=2.84uF→2.20uF,fc actual=12πRacC=12.9Hzf_c = \dfrac{f_{m,min}}{10} = 10.0 Hz \ \Rightarrow\ C = \dfrac{1}{2\pi R_{ac} f_c} = 2.84 uF \rightarrow 2.20 uF, \qquad f_c\text{ actual} = \dfrac{1}{2\pi R_{ac} C} = 12.9 Hz

Two practical checks. The source has to drive R_ac = 5.60 kΩ (a generator or a sound card does that without trouble). And the op-amp has to reach the most negative gate voltage, V_bias minus the full swing: -6.81 V here, against an output swing of ±13.5 V on this supply. That fits. With a J111, whose V_P can reach -10 V, this check is the one that bites first.

Why one stage instead of three: an earlier version amplified, then high-passed, then summed with a bias divider. Each stage loaded the one before it, so the divider actually delivered about half the intended bias and the high-pass corner moved up by a factor of ten. With everything meeting at one virtual ground there is nothing to load.

07

Preview

what the op-amp delivers, crest loss included

Power efficiency at the effective modulation index: eta = 21.64%.

Show the math

A message such as audio lives at low frequencies. Sent as it is, it cannot be radiated (the antenna would need to be kilometres long) and two senders could never share the air. Modulation moves the message up to a carrier frequency of the sender's choosing. Amplitude modulation is the simplest way to do it: let the message set the size, the amplitude, of a fast carrier wave.

Write the carrier as A_p cos(ω_p t) and the message as m(t), scaled so that it stays between -1 and +1. Amplitude modulation multiplies the carrier by a factor that follows the message:

xAM(t)=Ap[1+n m(t)]cos⁡(ωpt)x_{AM}(t) = A_p\left[1 + n\,m(t)\right]\cos(\omega_p t)

The bracket is the envelope, the slowly varying outline of the fast oscillation, and n is the modulation index: how far the message is allowed to push the amplitude away from A_p. Nothing in the bracket is invented; it reads "amplitude A_p, plus a bit proportional to the message".

What frequencies does that contain? Take the simplest message, a single tone m(t) = cos(ω_m t), and multiply out. The product of two cosines is where new frequencies appear:

cos⁡α cos⁡β=cos⁡(α−β)+cos⁡(α+β)2\cos\alpha\,\cos\beta = \dfrac{\cos(\alpha-\beta) + \cos(\alpha+\beta)}{2}
xAM(t)=Apcos⁡(ωpt)+nAp2cos⁡((ωp−ωm)t)+nAp2cos⁡((ωp+ωm)t)x_{AM}(t) = A_p\cos(\omega_p t) + \dfrac{nA_p}{2}\cos\big((\omega_p-\omega_m)t\big) + \dfrac{nA_p}{2}\cos\big((\omega_p+\omega_m)t\big)

So an AM signal is three sinusoids: the carrier itself, untouched, plus two copies of the message shifted to either side of it, the lower and upper sidebands, each of amplitude nA_p/2. The message never appears at its own frequency ω_m; only the sidebands carry it, and the whole signal fits in a band 2 f_m wide around the carrier.

On a scope the envelope is read directly: its highest value is A_p(1+n), where m = +1, and its lowest is A_p(1-n), where m = -1. Subtracting and adding the two removes A_p:

Vmax=Ap(1+n),Vmin=Ap(1−n) ⇒ n=Vmax−VminVmax+VminV_{max} = A_p(1+n),\quad V_{min} = A_p(1-n) \ \Rightarrow\ n = \dfrac{V_{max} - V_{min}}{V_{max} + V_{min}}

n cannot usefully exceed 1: past that the bracket goes negative during part of the cycle, the carrier flips phase there and the envelope folds back on itself. An envelope detector only sees the size of the signal, never its sign, so it recovers a distorted message. Below about 0.7 the sidebands become small next to the carrier and most of the transmitted power is wasted, as the next lines show.

The average power of a sinusoid of amplitude A (into 1 ohm) is A²/2. Applied to the three lines above: the carrier carries A_p²/2, each sideband (nA_p/2)²/2, and only the two sidebands carry the message. The fraction of the total power that is actually message is therefore:

η=PsidebandsPcarrier+Psidebands=2×n2Ap28Ap22+n2Ap24=n22+n2\eta = \dfrac{P_{sidebands}}{P_{carrier} + P_{sidebands}} = \dfrac{2 \times \dfrac{n^2 A_p^2}{8}}{\dfrac{A_p^2}{2} + \dfrac{n^2 A_p^2}{4}} = \dfrac{n^2}{2 + n^2}
η=0.74322+0.7432=0.2164=21.6%\eta = \dfrac{0.743^2}{2 + 0.743^2} = 0.2164 = 21.6\%

Even at n = 1 only a third of the power is message. The carrier is kept anyway because it is what lets a receiver recover the envelope with nothing more than a rectifier and a low-pass filter (see the Demodulator mode).

08

Download

A standalone script with this exact design, parameterized at the top, runnable with node jfet-am-modulator.js.

The LTspice files carry the whole modulator: the gate-drive summer, the carrier path with its oscillator, and the gain cell, with a transient run at 1.00 kHz already set up. The JFET goes in as a real SPICE device rather than the straight line this page designs against (Vto = V_P, Beta = I_DSS / V_P² give the same curve), and the op-amps are the TL082 with its supply pins on +15 V and -15 V rails, its model written into the file. That is the point of simulating it: the crest compression and the distortion predicted in section 05 come from those two departures from the ideal, and the transient shows them directly. Plot V(vout), and V(vgate) for the gate drive. The .asc is drawn wire by wire, the oscillator as its own block underneath, joined to the divider by the label vcar. The run holds the coupling capacitor at its steady-state charge so the gate bias is right from the first cycle, and, with the oscillator on board, starts the carrier at full amplitude and saves the four message periods after it has settled. The index measured from the carrier peaks in that run should read about 0.737: the V_DS squared term lifts every peak by the same amount, crest and trough alike, which is why it sits a little under the envelope's own figure.