Investigating Neoni FM - Traditional mode is Through Zero!

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.

2 Likes

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.

oh, one more in the mix :wink: My SFZ player is a sample player that has through-zero PM.

1 Like

I don’t think anyone said it is impossible - but rather it requires a bunch more circuitry in the analog world. Even the video alludes to the fact that the Rubicon has extra circuitry to support TZFM.

1 Like

The Chebyshev can sound qualitatively the same as Neoni TZFM if the modulating signal is offset -1 volt. It then also becomes a wavefolder, with the modulator setting the fundamental pitch, and the carrier the texture/amount of wave folding.

Neoni vs Chebyshev.vcv (2.7 KB)

I’m not making a video, but you can play with the patch. There are two key differences as you sweep the carrier frequency.

The Chebyshev grows and folds from two peaks within one cycle, while the Neoni has one of those peaks constant and only folds from one. I’m not sure what accounts for this difference. A wild guess - there is a difference in how the waveforms are reversed/inverted when crossing the zero point?

The Chebyshev has a very smooth wave form throughout the sweep, and a much cleaner frequency spectra. The Neoni has a ton of extra noise, especially at the upper end. If you look at the image, you can see and odd spike at the top of three peaks. I suspect that is the source of the noise. And I am guessing that it may be the result of the Neoni reversing the waveforms at -0.2 volts instead of 0 volts. That introduces some asymmetry. Perhaps there is some additional noise created at the switch point having nothing to do with the -0.2V offset.

2 Likes

Right you are.

I have to confess that the FM in cheby is sort of an afterthought. But the way I remember it is that the FM part is totally simple and standard, the only slighty unusual thing is boosting the FM amount with fundamental pitch to make it sound more “right” to me (more like PM).

I believe that the folder only kicks in when the red light goes on. And the folder isn’t really part of the FM stuff - it comes afterwards, and it’s really on there to keep external inputs from driving the Chebyshev polynomials past one, which would be bad. So the clip/fold it really just that as a “poor man’s” limiter. I think it only kicks in if you use the external input, as I think that’s the only way to get a hot signal in there (in conjunction with gain? I don’t remember).

You could see if it’s doing anything by flipping the clip/fold switch and see if the spectrum changes. If so, it’s doing something.

All this said, I have never heard of anyone using the FM or the external waveshaping inputs of Cheby. I’m sure Cheby is quite excited to be getting this attention.

Looking at the manual, it is also quite explicit that using a lot of the “oddball” features can easily generate aliasing. SquinkyVCV-main/chebyshev.md at master · kockie69/SquinkyVCV-main · GitHub

Thanks for the compliment, btw!

I wasn’t referring to that type of folding. I was just referring to the natural outcome of the configuration of the FM. Try the patch - it is pretty cool. The Chebyshev effectively gets the same sound as the Neoni, but even better to my ears. The Neoni has more options with waveforms, and that can be fun see how they affect the FM. But the Chebyshev has all those different polynomials that can be adjusted, which provides an entirely different variety to the FM sounds.

1 Like

cool! I’ll check it out.

Because I didn’t realize it supports through zero linear FM. I assumed it was like the VCV VCO and stalled. But I suppose it makes sense to support through zero since it is not trying to emulate an analog VCO. Thanks for the heads up.

So I managed to figure out how to get the WT VCO and Terrorform to emulate the Neoni through zero FM, making a total of 4 VCOs to compare.

Since the WT-VCO FM uses a constant of 261.625 Hz/volt, and base frequency is 261.625 at 0V, I simply have to scale the modulator signal by a power of two, and then subtract 1.

FM signal = (Modulator * 2^BaseVoltage) - 1

The Terrorform uses 200 Hz/volt, so I need to multiply by an additional factor to scale it to 261.625.

FM signal = (Modulator * 261.625/200 * 2^BaseVoltage) - 1

Here is the patch: Linear FM comparison.vcv (5.6 KB)

2 Likes

Argh, it was the Sync that was stunting the one peak on the Neoni. Once I remove the sync, then it behaves like the others as I sweep the carrier wave frequency. So my 4 VCO comparison doesn’t use sync on any of the VCOs, though all but Chebyshev support it. There is some phase issue between the modulator and carrier that can lead to different sounds for the same settings. The sync eliminates the inconsistency. But it also distorts the waveform a bit as the frequency is swept.