import matplotlib
if not hasattr(matplotlib.RcParams, "_get"):
matplotlib.RcParams._get = dict.get
6.6 FM sidebands#
Vibrato is FM with a slow, shallow modulator. But the real power of FM appears when the modulator runs at audio rates. Recall the trumpet from the introduction, whose harmonics shift in balance continuously over time. Reproducing that with additive synthesis would demand many oscillators, each with its own time-varying amplitude. FM offers a wildly more efficient route.
Just as with ring and amplitude modulation, FM produces sidebands. But where those techniques produced only two, FM produces a theoretically infinite series of sidebands, spaced evenly around the carrier at
This is the key to FM’s efficiency. Two oscillators can generate an arbitrarily rich spectrum. The following figure shows the finite (three-line) spectrum of amplitude modulation with the infinite (many-line) spectrum of frequency modulation:
Fig. 29 Amplitude modulation (left) creates just two sidebands, while frequency modulation (right) creates an entire series of sidebands at \(f_c \pm k f_m\). The FM spectrum shown is schematic. The next figure measures the real thing.#
Two parameters shape the FM spectrum. First, the ratio \(f_c / f_m\) determines the harmonicity of the result. When \(f_c / f_m\) is a simple rational number, many of the sidebands land on integer multiples of a common fundamental, producing a harmonic, pitched tone. When the ratio is irrational, the sidebands are inharmonic, producing bell-like or metallic timbres.
Inharmonic, \(f_c/f_m = \sqrt{2}\)
Two FM tones at the same index of modulation (\(I = 3\)). Left: a simple ratio (\(f_c = 440\) Hz, \(f_m = 220\) Hz) lands the sidebands on integer multiples of a common fundamental, giving a harmonic, pitched tone. Right: the irrational ratio \(f_c/f_m = \sqrt{2}\) (\(f_c = 440\) Hz, \(f_m = 440/\sqrt{2} \approx 311\) Hz) gives an inharmonic, bell-like timbre.
Second, the number of audible sidebands is controlled by the index of modulation, the unitless ratio of the depth of modulation (\(D\), in Hz) to the rate of modulation (\(f_m\), also in Hz):
As \(I\) grows, energy spreads from the carrier out into more and more sidebands, and the tone brightens. A useful rule of thumb is that roughly \(I + 1\) sidebands are audible on each side of the carrier. The following figure measures the actual FM spectrum (via the Fourier transform) as the index of modulation increases:
Fig. 30 The measured spectrum of an FM tone (\(f_c = 440\) Hz, \(f_m = 110\) Hz) as the index of modulation \(I\) increases. At \(I = 0\) there is only the carrier. As \(I\) grows, sidebands appear at \(f_c + k f_m\) and energy spreads outward, roughly \(I + 1\) sidebands to a side.#
The same carrier and modulator (\(f_c = 440\) Hz, \(f_m = 110\) Hz) at increasing index of modulation. The tone grows brighter and richer as more sidebands become audible.
The exact amplitudes of the FM sidebands are given by mathematical functions (Bessel functions) whose derivation is beyond the scope of this book. What matters here is the qualitative picture: by carefully controlling \(f_c\), \(f_m\), and especially the index of modulation \(I\) over the duration of a note, we can emulate sophisticated, evolving instrumental spectra with just two oscillators. This is exactly how the FM synthesizers of the 1980s produced their signature sounds, which were our very first source of inspiration back in Chapter 0.
Explore how the parameters shape the spectrum for yourself. The widget below plots the FM waveform and its sidebands as you vary the carrier frequency, modulating frequency, and index of modulation:
Play with the classic FM parameters from the definition above: the carrier frequency \(f_c\), the modulating frequency \(f_m\), and the index of modulation \(I = D/f_m\). The waveform \(\sin(2\pi f_c t + I\sin(2\pi f_m t))\) is on the left, and its spectrum (the carrier and its sidebands at \(f_c \pm k f_m\)) is on the right. The audio card underneath rings the current settings like a bell.