Frequency modulation encodes a message signal by varying the instantaneous frequency of a carrier. Mathematically:
y(t) = sin(2πfct + (Δf / fm)·sin(2πfmt))
This is the same equation as the musical FM-synthesis tool on this site, but the radio/signals framing exposes Δf (peak frequency deviation) as the primary control rather than the modulation index I = Δf / fm. Real broadcast engineers think in kHz of deviation, not in dimensionless indices.
Real-world deviation values
- Narrowband FM (NBFM) — voice radio, two-way handhelds: Δf ≈ 2.5 – 5 kHz with fm ≤ 3 kHz, giving I ≤ 2.
- FM broadcast (88 – 108 MHz) — commercial radio: Δf = 75 kHz with fm ≤ 15 kHz (audio), giving I ≈ 5.
- NTSC TV audio — analog television: Δf = 25 kHz with fm ≤ 15 kHz, giving I ≈ 1.7.
- Aviation FM — aircraft band 108–137 MHz: Δf ≈ 2.5 kHz, narrow.
This tool scales these into the audible band (carrier ≤ 5 kHz, Δf ≤ 3 kHz) since Web Audio's sample rate (~48 kHz) can't reach RF frequencies. The modulation index I and the shape of the spectrum transfer identically across scales — Δf=75 kHz with fm=15 kHz produces the same Bessel sideband structure as Δf=1500 Hz with fm=300 Hz here. Digital protocols such as APRS (Automatic Packet Reporting System) also use FM: the 1200 baud AFSK variant uses NBFM with a 3.5 kHz deviation for the 1200/2200 Hz audio tones, while faster packet modes like 9600 baud GMSK use direct FM with tighter deviation. The modulation-index concepts explored in this tool apply equally to those digital-over-FM systems.
Carson's rule
The total occupied bandwidth of an FM signal is approximated by Carson's rule: BW ≈ 2·(Δf + fm). The gold dashed markers show the BW boundaries on the spectrum plot. Carson covers ~98 % of the signal energy — the remaining ~2 % extends past the markers but is what FCC channel-spacing calculations rely on. This is also why US FM broadcast channels are spaced 200 kHz apart: at Δf = 75 kHz and fm = 15 kHz, Carson BW is 180 kHz, fitting inside a 200 kHz slot with a small guard band. To look up which US FM broadcast channels (200–300) are assigned to real stations and see the spectrum map of the full 88–108 MHz band, see the FM frequency finder.
How many sidebands does FM produce — and how strong are they?
Unlike AM, which produces exactly two sidebands, FM theoretically generates infinitely many sidebands, spaced fm apart on either side of the carrier. The amplitude of the n-th sideband pair is proportional to the Bessel function Jn(β), where β = Δf / fm is the modulation index (the same value labeled "I" in this tool's readouts). At low β (narrowband FM, β << 1), only the first-order sidebands at fc ± fm carry significant power and Carson's rule collapses to BW ≈ 2 fm — barely wider than AM. As β grows (wideband FM), higher-order Bessel terms become significant and the spectrum fans out: Carson's rule written as BW ≈ 2 fm(β + 1) = 2(Δf + fm) shows that bandwidth grows mainly with deviation Δf once β is large. Because Bessel coefficients oscillate with β, individual sidebands can actually shrink or disappear at specific index values — the carrier itself nulls at β ≈ 2.405 (the "carrier-null" preset). To measure individual sideband amplitudes precisely, pipe this tool's output into the FFT Frequency Analyzer; to explore the same Bessel structure from a musical synthesis angle, see the musical FM synthesis tool.
Reading the spectrum
- Carrier (solid green) — the unmodulated frequency. Vanishes at modulation indices where J0(I) = 0 (first zero at I ≈ 2.405).
- Peak / trough markers (orange dash) — fc ± Δf. These mark the maximum and minimum instantaneous frequency excursion. The audible "frequency swing" lives between them.
- Carson BW edges (gold dash) — the boundaries of the ~98 %-energy region. Sidebands outside the gold markers contribute < 2 % of total power.
- Bessel sidebands — the FFT bars at fc ± n·fm. Amplitudes are Jn(I); the count of significant sidebands scales with I.
Instantaneous frequency readout
The "Live instantaneous frequency" readout reads carrier.frequency.value directly from the Web Audio engine each animation frame. This value reflects the modulation in real time — it sweeps between the trough (fc − Δf) and the peak (fc + Δf) at the message frequency. This is conceptually the value an FM discriminator at the receiver would output, scaled into the audible region.
How is this different from the musical Frequency Modulator Tool?
Same Web Audio implementation — both tools route modulator → modGain → carrier.frequency. The difference is purely UI: the musical tool exposes modulation/carrier ratio + modulation index as the primary controls (the parameters synthesists think in), while this tool exposes the peak frequency deviation Δf in Hz as the primary control (the parameter broadcast engineers think in). The musical tool's "10 patches" set classic synth timbres; this tool's "10 broadcast presets" reference real-world FM standards scaled to audible range.
Why doesn't this run at real FM broadcast frequencies (88-108 MHz)?
Because Web Audio's sample rate is typically 48 kHz, capping the Nyquist limit at 24 kHz. Real broadcast is at MHz, which a browser can't synthesise. The tool runs in the audible-equivalent band where the modulation-index math and spectrum shape transfer identically — you hear the same Bessel sideband structure, just shifted down in absolute Hz.
Why does the modulation index I appear so prominently in the readouts when Δf is the primary control?
Because the index is the parameter that determines the spectral structure (the Bessel coefficient series). Two different (Δf, fm) combinations that share the same I = Δf/fm produce identical sideband patterns scaled by fm. Showing both lets you see: "if I bump message freq, the index drops and the spectrum becomes narrower." Real broadcast engineers use both views interchangeably.
What's the relationship between deviation Δf and audible "FM brightness"?
More deviation → wider spectrum → more harmonics → brighter / harsher sound. Real FM broadcast uses 75 kHz deviation at a 100 MHz carrier — perceived brightness scales with the index I = Δf/fm, not absolute Δf, so 1500 Hz deviation against a 300 Hz message here sounds about as "bright" as 75 kHz against 15 kHz audio in real broadcast (both around I = 5).
Why is there a "carrier-null" preset at deviation 601 Hz?
Because at modulation index I = 2.405 the Bessel function J0(I) ≈ 0, which means the carrier amplitude vanishes — all signal energy moves into the sidebands. With message 250 Hz, deviation 601 Hz gives I = 2.404 (close enough). Listen for the spectrum becoming symmetric around the carrier position while the carrier marker itself sits over an empty bar — the most famous identity in FM math.
Why don't the orange peak/trough markers correspond to FFT peaks?
Because they mark the instantaneous frequency excursion, not the energy distribution. The carrier physically reaches fc + Δf at the peak of every message cycle and fc − Δf at the trough, but spends infinitesimal time at those exact frequencies. The FFT shows where the average power sits — which is the Bessel sideband pattern centered on fc. Carson BW (gold dash) is the better "energy" boundary.
Can I model an FM stereo subcarrier (38 kHz multiplex)?
Not at scale — the 38 kHz pilot/subcarrier system needs frequencies above this tool's 5 kHz carrier ceiling. You can model the structure (carrier + sidebands at ±multiplex_freq) but not the exact 19 kHz pilot / 38 kHz subcarrier values. For broadcast modulation experiments, audio at the modeled multiplex scale (e.g. 380 Hz pilot, 760 Hz subcarrier) would behave similarly.
Why is the time-domain waveform amplitude constant when frequency is being modulated?
That's the defining property of FM: the carrier's amplitude is unchanged; only its frequency varies. If you saw amplitude variation in the time-domain plot, that would be AM, not FM. The "modulation" is encoded entirely in how fast the wave is oscillating at each moment. Watch the live instantaneous-frequency readout — it'll sweep between the trough and peak values at the message rate.
Why does FM broadcast sound better than AM radio in noise?
FM has a fundamental noise advantage called the FM improvement threshold: when the carrier-to-noise ratio (CNR) exceeds about 10–12 dB, FM captures the signal cleanly and pushes noise well below audibility. Below the threshold, FM breaks up suddenly ("FM quieting"). AM, by contrast, linearly adds noise amplitude to the signal at all CNR levels — there's no threshold. Wideband FM broadcast (Δf = 75 kHz) gets an additional 6 dB of noise reduction for each doubling of bandwidth above the message bandwidth, per the FM bandwidth-SNR exchange. This is why a weak FM station sounds clean until it drops out entirely, while a weak AM station gradually gets noisier.
What is FM pre-emphasis and de-emphasis?
Real FM broadcast applies pre-emphasis at the transmitter — boosting high audio frequencies (above ~2.1 kHz in the US 75 µs standard, or 3.2 kHz in the European 50 µs standard) before modulation. The receiver applies matching de-emphasis, which attenuates those high frequencies back down. The net audio response is flat, but FM's noise spectrum (which rises with frequency) is suppressed by the de-emphasis filter. The combined result is roughly 14 dB of extra SNR on high-frequency audio content. This tool does not model pre-emphasis — it applies flat modulation — so its output doesn't replicate the exact spectral balance of a real broadcast station.
How is FM related to phase modulation (PM)?
FM and PM are closely related: FM is equivalent to PM where the modulating signal is first integrated. For a sine-wave message, integrating sin(2πfmt) gives −cos(2πfmt)/fm, which means the phase deviation for FM is proportional to Δf/fm — exactly the modulation index I. At a single modulating frequency, FM and PM are indistinguishable in the time domain; they differ when the message has multiple frequencies because FM integration produces frequency-dependent phase deviation (more deviation for low-frequency content) while PM holds deviation constant per-frequency. The Bessel sideband spectrum shown in this tool is identical for both — you'd need a known frequency sweep to distinguish them.