Simple questions on synth tech basics...

DSP, Plugin and Host development discussion.
Locked New Topic
RELATED
PRODUCTS

Post

What does this comparison mean?

I was just playing around with a spectrum analyzer and a few plugins. I set every synth to the same init values, i.e. 1 osc/saw and 12db lp filter with cutoff at max, zero resonance, filter and amp sustain at max. The graphs look quite different for those synths, two are identical, obviously because they use the same SynthEdit modules :hihi: I played a C on the keyboard.

So, what do the graphs mean? Is there a curve which should not look the way it does? I don't know much about the physics behind synths, but the curves that go up again at the end, isn't that basically band reject instead of lp?

https://app.box.com/s/izvfhanc7s6g15j3y9dy

What does -90 on the y axis mean? It is the thick line at the bottom. Does it not matter what goes on below it?

PS: To make it easier to refer to them, let's number them like this:
1 2
3 4
5 6
Last edited by fluffy_little_something on Sun Jan 04, 2015 1:36 pm, edited 2 times in total.

Post

-90 is -90dB
there is stuff below it surely

and yes, those responses look somewhat like Notch type
on the other hand, a decimator at ~15kHz would have made the same sort of mirrored response above ~15kHz
#6 reminds me of the SE normal oscillator, which uses mipmap tables for bandlimiting, and you get a sudden drop in harmonics at a given frequency when the mipmap table used happens to be too low ... did you play a very low-pitched note there?
because of this, you should also do tests like this with a white noise source, which at least fills the whole frequency spectrum
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

The synths were:
1: Superwave P80
3: Superwave Professional
5: Superwave Trance-Pro (identical with 3, except for Gibbs effect)
2: Dune 2
4: Waves Element
6: Phonec

All except 2 and 4 are SE. I was surprised to see that Element had a similar curve as the SE synths, even the white line (no signal on that frequency?) at the lowest point. Dune 2 seems by far the best in my view.

Yes, that sudden drop with 6 is striking. I remember playing different notes and the drop line moved around quite a bit, it is not tied to one frequency. Is that why people say SE synths sound worse? It's inconsistent: I just hit the C#4 key repeatedly, sometimes the drop line is at around 13k and sometimes at around 19k.

What does -90db mean? Is that audible or so quiet that it doesn't matter? And the signal that reemerges above 17kHz or so, is that audible? Maybe an age thing :hihi:

I played C3.

Post

You know what's interesting: When I compare those diagrams for Trance-Pro and Waves Element, they are exactly the same for all notes, can't be coincidence, can it? It's almost like a signature. Seems like Waves is using SE code behind the scenes :hihi: Here are the graphs for F3 for instance:
https://app.box.com/s/kvao5x4i9otw2mkdws9p

Post

well, it doesn't mean waves is using SE code, more like that they use algo based on the same thing.. a coincidence
if my calculations are correct, let's say F3 is 43.653529Hz (i could be off by a few octaves but it doesn't matter for this example)

at a sampling rate of 44100, the phase length of a single sawtooth cycle is 1010.227 samples (Fs/freq)
now, if you use mipmap tables, you typically use table size of powers of two
so you have tables with sizes 4096, 2048, 1024, 512, 256, 128, ....
so, given that for the desired frequency you need ideally a table of size 1010.227 - if you pick the table of size 1024 - it will be a bit too long - you'll have to play it faster than 1x speed, and that's gonna need decent resampling, otherwise the high freq content will alias
so instead, in such situation you could just pick the lower table - the 512 one, and play it slower, then even linear interpolation wouldn't sound too bad

if your sound of interest is at 0dB, then at -90dB you have a 90dB difference
however, if the sound of interest was at -50dB - at -90dB you would have only 40dB diff, which is not much, in that case you would want to look down to -140dB on the graph... or just amplify your signal so it goes to 0dB


now, a bit more about the mipmap tables
that's what the built-in SE oscillator module uses (at least in v1.0x, no idea about the new SE)
and Waves probably uses mipmaps as well
now, there are various ways to implement mipmaps
i personally hate mipmaps for VST synths, because you have a problem with low frequency notes
you typically start from the smallest table size (2 samples? that would be for frequencies just below nyquist) and go down to the bigger table sizes.. 4 samples (for freqs below nyquist/2).. 8 samples... etc
when do you stop? at what size? - that's the question
in my early implementations of mipmaps, i'd stop at 1024
that's quite big, right?
actually, a table of size 1024, at 44.1kHz sampling rate, maps to a frequency of 43.066Hz
and if that's your biggest table, then you don't have a table to play notes with lower pitches than that, which means that when you play 20Hz using the 1024 table - your sawtooth will lack one of the top harmonics... this gets worse when you play a 10Hz note
to put it another way, a 1024 size table can hold a specific amount of harmonics
if i hardcode this, and then if the user runs my plugin at 88.2kHz - then things get worse
the same 1024 table will map to 86.132Hz which is high

now, this problem can be dealt with, by deciding the max table size at run time, when the sampling rate is known, if you say you don't care about freqs below 30Hz - then you can calculate how big of a table you need to be able to play 30Hz with the full number of harmonics all the way to nyquist, i've done that, it works
there's still one thing left tho... if you switch between 44.1k and 48kHz sampling rates - the frequencies to which the tables map will slightly change, thus you'll have slightly different "lack" of harmonics depending on which note you play when you compare them
this is valid if the implementation is similar to the one in SE, where the lower table is used and a gap of missing top harmonics is left

and, i should also mention that mipmaps don't have to be 1 octave apart, you could make 2 tables per octave, or even 12 tables (one for each semitone)
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

Wow, thanks for your detailed explanation, I almost feel a bit bad because you spent so much time without my really understanding what you are talking about. I know little about how synths work internally. The only tables I know in this context are wavetables. Are you saying that even those simple, static waveforms such as saw come from wavetables, i.e. samples? I thought the wave is calculated "live" so to speak, based on formula 8)

Post

It can be, but that requires oversampling for aliasing prevention. Wavetables won't alias until their highest harmonics go above the nyquist frequency, and there, there may be some type of aliasing prevention as well.

IL Sytrus is a pretty basic wavetable synth, but it's kinda simple to see how this all works with it and a spectrum analyzer. You can setup a "true" sawtooth wave and oversample it, or you can convert that same sawtooth wave into a wavetable immediately inside the oscillator settings, where it will use 256 harmonics. With the true wave, looking at the analyzer, you will always see harmonics up to the nyquist frequency, and with the wavetable you will see a gap form when the root frequency is less than (fs/2 * # of wavetable harmonics).

Post

So, what we often consider basic SynthEdit synths producing just a few true waveforms are actually primitive wavetable synths? 8)
I assume that is where the inferior sound of SE comes from. Dune seems to produce its basic waves live. I am disappointed by Waves Element, from a 200-dollar synth I expected more than SE waveforms :hihi:

There is also some mirroring taking place. I selected a pulse and gradually changed the width. I could see a line at 16kHz or so, from which those funny signal mountains emerged, some moving to the left and some to the right of that line.

Post

Are people still stuck on the fact SynthEdit has a terrible look?
Or are you saying the sawtooth and square oscillator modules aren't generating true, aliased until oversampled, waveforms?

Post

camsr wrote:Are people still stuck on the fact SynthEdit has a terrible look?
Or are you saying the sawtooth and square oscillator modules aren't generating true, aliased until oversampled, waveforms?
I don't care much about the look as long as I can read the labels.

Judging from my experiments yesterday SE seems to use wavetable saw and square, not live ones. On some curves there were huge frequency bands without any content.
My audio stuff and DAW are set to 96 kHz, I don't think oversampling should be the problem.

Post

Okay then I agree that is disconcerting, especially since one usually expects a sawtooth wave to be a sawtooth wave, aliasing and all.
But from a music production standpoint, wavetables aren't so bad, even lo-fi types. It's not always necessary to have those highest harmonics, when using a lowpass filter for instance, or heavily distorting the waveform. Sometimes it is bad, the effect is appearant, and the only solution is to use something else.

Post

How much more resources do true waveforms require compared to the table approach?
But I agree, I can't really complain about bad sound quality even on my P80, #1 in the image, the one with the notch filter disguised as an lp filter :hihi: Most frequently I use #5, though. It can sound rather bright, which one can also see in the diagram. I only wish it had a 24db filter.

Maybe I would hear the difference better if I were younger and my hearing still extended to 18 or even 20 kHz. Now 15 kHz is the limit on my good earl, even less on my bad one :P

Post

fluffy_little_something wrote:So, what we often consider basic SynthEdit synths producing just a few true waveforms are actually primitive wavetable synths? 8)
uhm.. synths made with SE aren't "wavetable synths" nor "primitive" nor the combination of the two, just because the built-in oscillator module uses mipmap technique to generate bandlimited waveforms
I assume that is where the inferior sound of SE comes from. Dune seems to produce its basic waves live. I am disappointed by Waves Element, from a 200-dollar synth I expected more than SE waveforms :hihi:
inferior sound? :evil:
the fact that the waveforms are read from tables doesn't make them "dead"
mipmaps is a very old technique which has been used by loads of synths, and in games (to antialias the textures)
There is also some mirroring taking place. I selected a pulse and gradually changed the width. I could see a line at 16kHz or so, from which those funny signal mountains emerged, some moving to the left and some to the right of that line.
the pulse is probably made with just 2 reads from the sawtooth table
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

Calm down 8) I use SE stuff all the time :wink: Mostly because it uses so few resources, not so much because of its sound...

Post

antto wrote: and, i should also mention that mipmaps don't have to be 1 octave apart, you could make 2 tables per octave, or even 12 tables (one for each semitone)
The SE ones are every 4 semitones btw, and they are *very* efficient. The fastest saw algo(which still aliases a tad in the highs) I can do still uses ~25% more CPU.

Locked

Return to “DSP and Plugin Development”