[sdiy] Polyevolver internals
tom at electricdruid.net
Wed Dec 30 19:19:37 CET 2009
On 30 Dec 2009, at 14:09, Antti Huovilainen wrote:
> On Wed, 30 Dec 2009, Tom Wiltshire wrote:
>> Related is the fact that DCOs can easily generate sync waveforms
>> without aliasing, which is *hard* to do with digital oscillators;
> Not really, as long as you're not using more complicated waveforms
> than saw/pulse/triangle (and if you are, then you can't use normal
> DCO either).
> All you need to do is work out the exact time when reset happened
> (basic arithmetic) and then add bandlimited step and/or ramp to
> that point (just adding contents of indexed precalculated table to
> the output).
In my book, that's quite a lot more difficult than the DCO reset.
I've done some experiments with bandlimited steps, and you need a
fairly large table to store your step (e.g. some memory) and some
interpolation to deal with sub-sample offsets, and then you have to
output a sample every x KHz. Whilst it isn't the most complex
technique out there by a long way, it's complicated enough to be
impossible on a number of smaller chips than can easily produce DCO
>> DCOs have a relatively low processor overhead, since you only have
>> to deal with a timing reset pulse once per wavecycle instead of
>> dealing with generating a new sample at x KHz. That leaves you
>> time to do modulation processing on the same chip.
> Which you can do even if you have digital oscillators running on
> the same chip. DCOs can't be audio rate modulated, so comparison
> point should be "slowly" (less than 1 kHz) modulated digital
> oscillators. Envelopes and LFOs are really quite cheap using fixed
> point maths, so I don't see any problems running multiple envelopes
> and LFOs in addition to the oscillators.
> As I've mentioned before, I've done a bit of notepad coding for
> dspic (there are probably off by one errors etc in the code, but
> nothing that has significant effect on cycle count).
I really hope you're right, Antti! My own experiments have lead me to
be more pessimistic about the dsPICs capabilities.
> Alias free wavetable oscillator with smooth fade between adjacent
> wabetable entries is ~45 cycles. Rough estimate for analog saw/
> pulse oscillator is 60 cycles. A 4 pole filter with OTA-like
> distortion in feedback path is ~60 cycles.
> The classic two oscillators and one filter combination is then 150
> - 180 cycles. Synthesizing two voices at 72 kHz samplerate (1.5 *
> 48k) means 256 cycles per voice, so there's still 75 - 100 cycles
> left for modulations and other things.
This still sounds optimistic to me. Perhaps I'll have to have a look
through my own code and see what the equivalent times are. If you've
managed to shorten anything significantly, I'll be bugging you to
tell me how. If there's a better technique than I'm using, I *need*
to know about it!
More information about the Synth-diy