[sdiy] Polyevolver internals

Tom Wiltshire 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  
reset pulses.

>> 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 mailing list