Blog / Sound Design

Through-Zero FM: When Frequency Goes Below Zero to Preserve Pitch

Through-Zero FM: When Frequency Goes Below Zero to Preserve Pitch

Every FM patch you've dialed in with an analog VCO has probably gone out of tune when you pushed the modulation depth. Most people treat this as normal. It is not a calibration problem or a tuning drift artifact. It is a mathematical consequence of how standard oscillators work, and through-zero FM is the solution.

The arithmetic of pitch drift

Start with exponential FM, the most common implementation on analog synthesizers. The modulation input uses volt-per-octave scaling, so the carrier frequency doubles for every +1V. A 440 Hz carrier modulated with a ±1V sine wave swings between 220 Hz (one octave down) and 880 Hz (one octave up). This sounds symmetric. It isn't. The arithmetic average of 220 and 880 is 550 Hz, not 440 Hz. Every cycle of the modulator pulls the perceived pitch slightly sharp. Use a fast audio-rate modulator and the drift becomes a permanent, audible upward detune.

Linear FM corrects this. Instead of volt-per-octave scaling, linear FM adds or subtracts a fixed number of hertz per volt. A 440 Hz carrier with ±300 Hz linear FM depth sweeps between 140 Hz and 740 Hz. The average is 440 Hz. Pitch holds.

Until you push deeper. Set the depth to ±500 Hz on that 440 Hz carrier and the low extreme would be 440 - 500 = -60 Hz. Most analog VCOs cannot reach -60 Hz. At 0 Hz the oscillator stalls, sitting at DC until the modulator swings back up. The carrier no longer spends symmetric time above and below center frequency. Average it out and the perceived pitch comes out higher than 440 Hz. The same drift, from a different cause.

Running the oscillator backward

Through-zero FM removes the floor. When the instantaneous frequency would go negative, the oscillator does not stop. The phase accumulator reverses direction and the carrier runs backward.

-60 Hz is not silence. It is a real oscillating frequency. The output at -60 Hz looks identical to the output at +60 Hz except the phase is inverted. The waveform unfolds backward.

The arithmetic works again. With a 440 Hz carrier at ±500 Hz depth, the instantaneous frequency sweeps from +940 Hz down through 0 Hz to -60 Hz and back. The average of +940 Hz and -60 Hz is (940 + (-60)) / 2 = 440 Hz. Pitch preserved, regardless of modulation depth.

The practical consequence is significant: you can draw a full modulation envelope across an FM index from zero to maximum and the carrier pitch does not move. What changes is timbre. What stays fixed is tuning. With standard linear FM, these two are coupled and cannot be separated at deep modulation.

Spectral consequences

At shallow modulation depths, through-zero FM and standard linear FM sound identical. The crossover point is where the instantaneous frequency first reaches 0 Hz. Below that threshold, the two implementations diverge.

Standard FM at deep modulation: the spectrum becomes asymmetric. Sidebands that should appear at negative-frequency positions fold back onto the positive-frequency spectrum instead, adding energy at unexpected locations and pulling the spectral center of gravity upward. The sound goes metallic but loses harmonic coherence. The pitch seems to float.

Through-zero FM at the same modulation depth: the spectrum remains symmetric around the carrier frequency. The negative-frequency sidebands stay properly positioned as phase-inverted components that do not fold back. The harmonic series stays coherent, and the timbre grows denser and brighter while pitch holds.

The most audible difference is in envelope modulation. Routing an envelope into FM depth on a standard VCO couples the pitch envelope and the timbre envelope. A sharp attack in the mod depth creates a pitch spike at the note onset. Through-zero FM breaks that coupling. The timbre sharpens and softens cleanly while pitch stays stationary. Percussive FM tones, metallic attacks, and FM bass all benefit.

Analog implementation

Through-zero FM requires careful design in analog circuitry. The oscillator core must genuinely run backward, not just stop at zero. Triangle-core VCOs handle this most naturally. A triangle oscillator integrates upward to a threshold, then reverses and integrates downward. Allowing the modulation input to drive the integrator into a negative frequency range produces through-zero behavior without additional logic.

The Frap Tools Brenso uses this architecture: two triangle-core VCOs with dedicated linear through-zero FM inputs, switchable between exponential and linear thru-zero modes. When frequency goes negative the oscillator flips direction, which Frap Tools describes as the waveform "folding over upon itself." Other confirmed hardware implementations include the Dannysound EN129 thru-zero oscillator, the Patching Panda Operat complex oscillator, and the Joranalogue Generate 3.

Worth being specific about what does not implement TZFM. The Make Noise DPO, despite its "bi-directional dynamic FM bus," uses standard linear FM that stalls at 0 Hz. Forum measurements on Modwiggler confirm that "the newly generated overtones hit the 0 Hz mark and can't go further, and on the high-frequency end there is no limit, so the overall pitch seems to move upwards." The original Buchla 259 Complex Oscillator also does not have through-zero FM. Some newer modules inspired by the Buchla design have added TZFM as a 21st-century extension, but the original 259 circuit does not include it.

Digital implementation

A digital oscillator is a phase accumulator. Standard linear FM:

// Standard linear FM: stalls at 0 Hz under deep modulation
float phase = 0.0f;

float next_sample(float carrier_freq, float mod_signal) {
    float inst_freq = carrier_freq + mod_signal;
    inst_freq = std::max(0.0f, inst_freq);   // clamp: can't go below zero
    phase += inst_freq / sample_rate;
    phase -= std::floor(phase);              // wrap to [0, 1)
    return std::sin(2.0f * M_PI * phase);
}

Through-zero FM removes the clamp:

// Through-zero FM: phase accumulates in both directions
float phase = 0.0f;

float next_sample(float carrier_freq, float mod_signal) {
    float inst_freq = carrier_freq + mod_signal;
    // no clamping: inst_freq can be negative
    phase += inst_freq / sample_rate;
    // sin() handles any phase value; negative phase gives inverted output
    return std::sin(2.0f * M_PI * phase);
}

The unwrapped phase in the TZFM version runs freely in both directions. sin(2π * phase) with a negative argument produces the phase-inverted output automatically. No special case needed. This is why digital through-zero FM is straightforward to implement: the math already works, and the only change is removing a constraint that was there to protect an analog limitation.

A note on the DX7

The Yamaha DX7 uses phase modulation (PM), not true frequency modulation. The marketing name stuck, but the circuit works differently. In PM, the carrier frequency is held constant and the modulator shifts the phase directly:

x(t) = sin(ωc·t + β·sin(ωm·t))

The carrier frequency never changes. No instantaneous frequency calculation means no 0 Hz floor problem. PM is inherently pitch-stable at any modulation depth, which is one reason Yamaha chose it over true FM for a mass-market instrument. With sinusoidal operators, PM and FM produce identical spectra, so the sonic difference is not audible in standard DX7-style patches.

Through-zero FM and phase modulation reach the same pitch stability from different directions. PM eliminates variable frequency entirely. TZFM allows frequency to go anywhere, including negative. They diverge sonically when you use non-sinusoidal modulators: wavefolded outputs, complex modulator waveforms, or feedback-driven signals produce different results through PM versus TZFM. That spectral difference is where through-zero FM starts to produce sounds a DX7 cannot.

Using it in practice

If your oscillator has a linear FM input with a separate thru-zero mode or offset control, that offset is the critical parameter. It sets the DC bias that keeps the carrier above 0 Hz before modulation starts. Match the offset to the carrier frequency. Now the modulator can swing instantaneous frequency symmetrically above and below zero.

Route an audio-rate modulator into the linear TZFM input and sweep the depth while holding a note. Timbre changes from simple to complex without pitch creep. Drop the carrier frequency low, down to 20 or 30 Hz, and apply deep audio-rate modulation. With standard linear FM, that patch goes silent and pitchy by turns. With TZFM, the oscillator continues running through the zero crossing and back, producing dense sub-harmonic textures that standard FM cannot reach without tuning artifacts.

The through-zero capability is a narrow technical change with wide musical consequences. Modulation depth becomes a pure timbre control. Once you have it, the coupling between FM depth and pitch that you've been working around stops being a constraint.