Investigating Neoni FM - Traditional mode is Through Zero!

I assumed that most oscillators that support true linear frequency modulation used a constant Hz/volt modulation coefficient, as does the version 2 VCV Fundamental VCO. The VCV VCO does not support through zero.

But I was surprised to learn that Neoni scales the modulation coefficient to the base frequency of the Neoni carrier wave. And beyond that, the “Traditional” mode is also through zero, just not centered at 0 volts.

The formulas for the Neoni output frequency after the FM is applied are as follows (approximately):

Through Zero Freq = |(Volts+2.1)*Base/2.1|

“Traditional” Freq = |(Volts)*Base/1.08|

where Volts is the current attenuated voltage at the FM input, and Base is the base frequency of the Neoni carrier wave. The vertical bars represent absolute value.

Based on those formulas, I’ve discovered that I can get identical results using either mode if I tune the traditional mode Neoni base frequency 1 octave higher (+1 volt), and offset the traditional mode modulation signal by -2.1 volts. Of course the traditional mode must use DC coupled mode in order for the offset to have any effect.

The accompanying video demonstrates some differences between the VCV VCO and Neoni, shows how I derived the formulas, and demonstrates the patch that shows the equivalency between the Neoni Through Zero and “Traditional” modes.


That’s pretty cool.

a) Why do you say fundamental doesn’t go through zero? I sure looks like it does to me. Do you mean “it doesn’t do what Neoni does”?

b) Bosting the FM depth at higher freq is a common trick. As I noted before, my Chebyshev does this. This makes FM sound almost like PM.

1 Like

Through zero does not mean the modulation is negative. Rather it means the carrier frequency has been modulated below 0 Hz. For the Neoni that happens to be at 0 volts. But for the VCV VCO that happens with negative voltages, the specific value depends on the carrier base frequency.

Obviously the VCO can’t do negative Hz. So the through zero in regard to true frequency modulation reflects the modulation back into the positive range. The trick is to find a method of reflection and/or offset that preserves symmetry between the positive and negative modulation.

Very nice, thanks!

This finally clears up what exactly is going on with that oscillator. The explanations from the manufacturer were a bit confusing, but the concept is really cool.

A surprise for me here is that Fundamental VCO and WT-VCO don’t perform phase modulation. This explains why they sound so different from all the rest of the oscillators in my test patch.

The Fundamental VCO stalls when fed low enough voltage to its LFM input. WT-VCO doesn’t.

But both of them do respond to DC at their LFM inputs. That alone differentiates them both from all the rest in that patch (Kitchen Sink, NYSTHI operators, Bogaudio oscillators in linear FM mode, and Terrorform in default mode but not in True FM mode).

Phase modulation can never respond to DC - the phase has to be constantly changing in order to hear a change in the output. Not only that, but the rate of change has to vary in order to hear variability in the pitch.

If you phase modulate with a LFO triangle wave, then you will hear two distinct pitches, one while ascending, and another while descending. That is because the rate of change is constant. Contrast that with a sine wave that has a continuously changing rate of change, and you hear continuously varying pitch. A saw modulates the pitch up a fixed amount, with a click at the begin/end of cycle. A ramp modulates down a fixed amount. And a square wave doesn’t change the pitch at all, but just introduces some clicks.


That was my understanding. I just had no idea that the Fundamental v2 oscillators in LFM mode were performing actual FM and not PM. Nor did I realize that each was doing something different in LFM mode.

Thanks for the video, by the way!

Yeah. I finally got around to experimenting with Chebyshev for the first time just now. When I saw a video about the various forms of FM (from Omri maybe?) it talked about linear through zero FM and reflection at the stall point. I didn’t realize that the Hz/volt might be scaled to the carrier frequency. I thought they were all like the VCV fundamental. That is why I didn’t understand why you didn’t need to reflect both at the low and high end to keep things symmetric. But now that I understand about the scaling, it makes sense.

I wonder what other true linear frequency modulating VCOs are available in VCV? And which ones support through zero?

Valley Terrorform is one, once you click the True button to activate True FM mode.

1 Like

You should read my article about pm v2 fm. It tells this.

1 Like

What do you mean, “it stalls”? Douse it clip the freq to keep it going negative?

No. Mathematically frequency can go negative. I really think you are wrong here.

Stalling is when the VCO core frequency tries to go negative and just stops at 0Hz instead. You can’t charge the capacitor in an analog saw-core VCO backwards.

Analog TZFM requires a bunch of extra circuitry that has to be calibrated properly. I haven’t tried the hardware Neoni yet but the Doepfer A-110-4 is really bad at this (it can sound cool but I think it’s overrated by some).

In a digital VCO, if it’s not modeling an analog core closely, TZFM is not a problem – you can subtract from the phase accumulator as easily as adding to it, so it’ll reverse without any issues.


Thanks. It appears that the Terrorform applies a constant 200Hz per FM volt (100% FM attenuation), regardless what the base frequency is. As you go negative, it never stalls, but has a range where it reaches a minimum frequency, and then as you continue negative it starts increasing frequency again. So it is through zero.

The Squinky Labs Chebyshev uses the base frequency to scale the Hz/Volt. So 1 V always doubles the frequency, and -1 V stalls the oscillator. And then continuing negative increases the frequency again. So it also is through zero.

VCV fundamental uses a constant 261.625 Hz/volt for FM, but is not through zero, so stalls when you reach 0 Hz and never increases again as you go further negative.

The Neoni through zero mode always scales the FM Hz/volt to the base frequency, where ~1 volt = the base frequency, but 0 FM volts is the stall point, and negative volts are equivalent to positive, except the waveform is inverted.

Four oscillators that support linear frequency modulation, and four different implementations

1 Like

Oh, it has a second page linked at the bottom! That’s where you look at the Fundamental oscillators. I’d read the first page only. I think your articles in that repo could use a table of contents or overview page; it’s not clear at a glance how much info is hiding beneath the surface.

Link for the uninitiated (read the whole repo, it’s good):

Past -1V, further decreasing voltage makes no difference. At that voltage, the frequency of the oscillator becomes zero.

Thanks very much for investigating all this. I’m super interested in Neóni, and feel much closer now to understanding what makes its behavior unique (as well as learning more about other oscillators).

Any particular reason for not including Fundamental WT VCO alongside those other four?

Here’s a look at some of the testing I’ve been doing with Neóni. I have each group present in two forms, and those two forms are plotted against eachother on each Bogaudio Analyzer XL:

  • C4 Osc → FM C3 Osc
  • (C5 Osc + C4 Osc) → FM C3 Osc

In other words, the spectrogram is showing the difference created by the addition of a C5 oscillator.

In both groups, the C3 Osc serves as the sync source for the other oscillator(s).

These are the oscillators (I aimed for including all linear through-zero true-FM oscillators with sync):

  • Terrorform (True FM mode)
  • Fundamental WT VCO (LFM mode)
  • Neóni (all oscillators Traditional mode)
  • Neóni (C3 Osc in T.Z. mode, all others Traditional mode)

In the 3-oscillator-algorithms, the sync has this effect visible in Hot Tuna:

  • Terrorform throws Hot Tuna off its tracks
  • Fundamental shifts to a solid E3
  • Neóni leaves Hot Tuna mostly unperturbed

true_fm_sync_test.vcv (7.9 KB)

Edit: fixed screenshot

That is unfortunate. I did not know that.

ah, right you are! The fundamental VCO limits the frequency to be >= 0 and <= nyquist:

if (!linear) {
    pitch += inputs[FM_INPUT].getPolyVoltageSimd<float_4>(c) * fmParam;
    freq = dsp::FREQ_C4 * dsp::approxExp2_taylor5(pitch + 30.f) / std::pow(2.f, 30.f);
} else {
    freq = dsp::FREQ_C4 * dsp::approxExp2_taylor5(pitch + 30.f) / std::pow(2.f, 30.f);
    freq += dsp::FREQ_C4 * inputs[FM_INPUT].getPolyVoltageSimd<float_4>(c) * fmParam;
freq = clamp(freq, 0.f, args.sampleRate / 2.f);

To me, any digital “FM” VCOthat doesn’t go through zero is doesn’t something wrong. When Chowning claimed to have invented FM synthesis in the 70’s it went through zero. And I would be astounded if the “digital first” FM VCOs don’t all do this (Bogaudio, Squinky Labs, Nystyhi, Dexter).

As far as analog VCOs and modules that emulate them - fair enough. While someone said it’s “impossible” to make a charge pump run backwards I would soften that to “it’s extremely difficult to make an analog VCO run backwards”. Whatever Neoni is doing I applaud, and (not that they need it) they have my permission to call it whatever they want.

Not available as a module in VCV but the video on Intellijel Rubicon explains TZFM really well.

1 Like

yeah, that’s video is not bad. It is a little bit specific to that module with the “symmetry” control. And, while someone above said it’s impossible for an analog VCO to go backwards, clearly this one can.