-
Notifications
You must be signed in to change notification settings - Fork 34
Why you may get high frequency distortion from some wavetables
When using some of the wavetables in 'generated' and playing low notes you will notice some very high frequency distortion popping in. You may end up putting it into an analyzer and seeing something like this:
For a complete discussion of this problem, check out this GitHub issue. But this distortion is a purposeful artifact of how the surge wavetable and window oscillator work with small sample counts.
As @kurasu said of the issue:
“Its a feature not a bug”
What that oscillator is doing is essentially simulating a variable-rate D/A converter running at the rate of the original wavetable. The convolute method is generating a band-limited impulse with a sub-sample time localization precision, which is then integrated to provide the stepped function.
This means that it basically doesn't produce any inharmonic aliasing (which make stuff sound messy). But it does produce harmonic aliasing, ie the waveform spectrum will continue indefinitely as opposed to other interpolation methods. It's similar to very early pre-interpolation samplers that had a dedicated D/A converter per-voice (and analog filters) instead. But yeah, it's not the right choice if you want a triangle wave without any additional overtones.
So these overtones are a fundamental part of Surge's sound. But with small-sample-size waveforms and low frequencies the noise becomes overwhelming.
We decided to not change the wavetable oscillator. Changing the sound of every patch just because of this low frequency edge case, after the careful work to deal with the wavetable spectrum, was a poor choice. So since 1.6.2 release, for small wavetables we have been, on an as-needed basis, adding higher resolution versions.
This means if you use "sine fm 2x" wavetable and you don't want the associated harmonic distortion (for instance, if you were using a bass sound) you could instead use the "sine fm 2x hires" wavetable.
If you find other wavetables without high res versions but with bad aliasing in useful regions, please open a GitHub issue and we'll take a peek!
Relevant Surge XT Links: