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.
Start here
about 7 minutes, interactiveRead 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:
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:
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:
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:
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:
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:
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
JFET characteristics
fitted to measurementsHow 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 here | Datasheet line | Maker's test condition |
|---|---|---|
| V_P | Gate-source cutoff voltage V_GS(off), also called pinch-off voltage | a tiny drain current, 1 nA to 1 µA |
| I_DSS | Zero-gate-voltage drain current I_DSS | V_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:
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:
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)²:
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.
- 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.
- Drive the gate from an adjustable negative voltage, for instance a potentiometer across a negative supply. The gate draws almost no current.
- 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.
- Stop when V_D is almost V_in: the channel is nearly closed.
- 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.
- 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.
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.
- 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.
- 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.
- 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.
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:
| Aspect | Divider (Measured points) | Fixed V_DS |
|---|---|---|
| What is set | V_in at the top of R_series | V_DS on the drain |
| What is read | V_D, a voltmeter only | I_DS, an ammeter in series |
| Current limit | R_series limits it: safe even at V_GS = 0 | only V_DS and the channel: keep V_DS small |
| Series resistance | part of R_series, measured on an ohmmeter | the ammeter and the source add to r_DS unless V_DS is read at the drain |
| Near V_P | V_D climbs to V_in, the channel stays ohmic | I_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
- 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).
- 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.
| Points used / read | 6 / 6 |
| Fitted V_P (line crosses zero) | -7.34 V |
| Slope beta | 10.9223 mS/V |
| Implied I_DSS / r_DS(on) | 293.89 mA / 12.5 Ω |
| R² / largest deviation from the line | 0.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.
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:
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.
Sources and op-amp
TL08x: 3 to 4 MHz, 13 to 16 V/usThe 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.
Gain cell
non-inverting, n = 0.746| Bias point V_C | -3.60 V |
| Channel resistance at V_C | 24.5 Ω |
| Feedback resistor R_b | 160 Ω (x = 6.529) |
| Gate swing V_GS | -6.81 V to -386 mV |
| Channel resistance range | 13.2 Ω to 176 Ω |
| Signal gain: trough / bias / crest | 1.91 / 7.53 / 13.15 |
| Modulation index n | 0.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:
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:
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:
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.
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):
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:
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:
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:
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:
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:
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:
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.
Carrier path
A_c = 76.0 mV, set by the triode region| Triode limit V_GS,min - V_P | 522 mV (carrier at most 78.2 mV with margin k = 0.15) |
| Op-amp limit V_out,max / K_max | 1.03 V |
| Carrier amplitude A_c delivered | 76.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_c | 572 mV |
| Envelope min / max | 145 mV / 1.00 V |
| JFET and op-amp peak current | 5.77 mA |
| V_DS² term: DC offset and tone at 2 f_p | 2.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:
(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:
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:
What comes out, from the gain at the bias point and at the two extremes of the message:
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.
Op-amp limits at the carrier
f_p K_max / GBW = 0.16| Closed-loop bandwidth: trough / bias / crest | 2.09 MHz / 531 kHz / 304 kHz |
| Gain factor at f_p: trough / bias / crest | 0.9997 / 0.996 / 0.987 |
| Modulation index: designed / effective / read from the peaks | 0.746 / 0.743 / 0.737 |
| Audio distortion from the crest loss (THD) | 0.49 % |
| Slew needed / available | 0.31 V/us / 16 V/us |
| Op-amps in the modulator | 3 (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-inverting | Inverting | |
|---|---|---|
| Modulation index n (designed) | 0.746 | 0.860 |
| n effective after the crest loss | 0.743 | 0.814 |
| Noise gain at the crest K_max | 13.1 | 14.7 |
| Closed-loop bandwidth at the crest | 304 kHz | 273 kHz |
| f_p K_max / GBW | 0.16 | 0.18 |
| Audio THD from the envelope | 0.49 % | 8.03 % |
| Output carrier amplitude | 572 mV | 1.02 V |
| Feedback resistor | 160 Ω | 180 Ω |
| Op-amps | 2 | 4 |
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.
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:
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:
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%.
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:
Carrier oscillator
Wien bridge at 50.6 kHz| Frequency: wanted / predicted with this op-amp | 50.0 kHz / 50.6 kHz (1.16 %) |
| R and C (two of each) | 6.20 kΩ, 470 pF |
| Feedback: Rf1 / Rf2 (diodes across it) / Rg | 9.31 kΩ / 12.0 kΩ / 10.0 kΩ |
| Limiting diodes | 2 x 1N4148 / 1N914 (silicon), one each way |
| Output amplitude | about 988 mV peak, into the divider above |
| Gain needed / set / limited | 3.01 / 3.13 / 1.93 |
| Distortion on the carrier | about 2.5 % |
| Op-amp lag at the carrier, and what it does | 2.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.
Gate drive
one inverting summer: gain, DC block and bias| R_f | 18.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:
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.
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.
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.
Preview
what the op-amp delivers, crest loss includedPower 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:
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:
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:
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:
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).
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.
Every formula this design used: Formula sheet.