I could use some help fixing some aliasing problems with my Venom VCO (derived from 21kHz Palm Loop). I’ll describe the issues toward the end. But first I want to give some background.
The reason I am interested in creating a new VCO using the Palm Loop VCO as a starting point is because it does a good job with anti-aliasing without obvious distortions at the discontinuities. This allows me to more effectively use it as audio rate CV with clean waveforms, while still being used as anti aliased audio at the same time.
The other point of interest is its ability to do true linear through zero FM (not phase modulation). With a bit of work it can also be used as a 0 Hz carrier wave. I have done a bunch of comparisons with different VCOs that can also do 0 Hz carrier wave through 0 linear FM, and was a bit surprised that all the other modules I looked at have aliasing and/or other issues when outputting negative frequencies.
Below is a series of frequency plots showing the issues, and why I am so intrigued with the Palm Loop. All the VCOs are configured to be in a 0 Hz carrier wave mode, each being supplied a constant CV input at the linear FM input. I had to do a bunch of calibration so that they all produce the same frequency (more or less) as I sweep the master CV control. The amplitudes are all at -120dB so it is easier to see the aliasing, even when mostly inaudible.
Sine Wave Positive FM input
Sine Wave Negative FM input
Triangle Wave Positive FM input
Triangle Wave Negative input
Square Wave Positive input
Square Wave Negative input
Saw Wave Positive input
Saw Wave Negative input
The Palm Loop consistently looks very clean, both in the scope, and the analyzer. It certainly has aliasing, but it manages to keep all of the aliasing in the high frequency range. It folds at the Nyquist frequency as expected, but then on the return reflection it folds forward at a high frequency, unlike most that fold forward at 0 Hz.
My Venom adaptation mostly preserves the Palm Loop behavior, except it aliases the negative triangle frequencies The really fine looking negative saw wave is an artifact of being slightly out of tune compared to the Palm Loop. The high frequency aliasing is there, but it just happens to coincide with other partials in the wave form.
The Neoni looks decent as far as aliasing, but the signal is very dirty and harsh when compared to the others (especially when listening). It also has a number of oddities that show up when doing actual FM.
The VCV and Bogaudio clearly have significant aliasing issues in the negative range, although sine is not bad. You can see how the saw waves flip when in the negative region. But the Bogaudio negative saw is offset to be unipolar.
The things I don’t like about the Palm Loop are
- the triangle and square are 1 octave down - this is an inherent result of the algorithm used.
- Not shown, but it has some sync issues with the sub octaves
- It is not polyphonic
- No pulse square wave pulse width modulation
I wanted to address those issues with my Venom VCO. I’m not going to address polyphony until I resolve other issues. It seems like I am close, but I am worried about the aliasing problem. I have no idea how to fix it.
Besides aliasing with the negative triangle, it also explodes with triangle aliasing once the frequency rises above ~ 1/4 Nyquist frequency.
I have also implemented pulse width modulation, and attempted to eliminate DC offset, but the moment it strays from 50% duty cycle there is a ton of aliasing, and also DC offset. I think the DC is from the aliasing, but I am not sure.
The saw and sine are working great. And the square is fine as long as I stay at 50% duty cycle.
Below is a video that shows both problems.
I’d love if someone with some DSP skills could look into this.
My code is at GitHub - DaveBenham/VenomModules: Venom VCV Rack Modules
And Palm Loop code is at GitHub - netboy3/21kHz-rack-plugins: Modules for VCV Rack