[sdiy] [synth-diy] numerically controlled superoscillator without hard sync

cheater00 . cheater00 at gmail.com
Mon Feb 10 11:59:18 CET 2014


On Mon, Feb 10, 2014 at 10:35 AM, Roman Sowa <modular at go2.pl> wrote:
>> You've described a DAC.
>
> you mean ADC

yeah. Same thing in the end ;-)

> I was refering to simpler circuit that simply pulses while voltage changes.
> No actual code is generated/stored here, just clock.

When I said the ADC would be missing codes, that means something else
than "code executing on the ADC". Codes in an ADC are nomenclature
from signal theory. Missed codes mean that the ADC is not outputting
some values it should be outputting.

>> Your waveform reaches 95% peak voltage, then it
>> turns back and goes back to 92%, then turns back and goes up to 100%
>> and changes state to the falling edge, and goes back down to 0%. How
>> should a DAC multiplier recognize that? What about things that happen
>
>
> it does not. Of course there will be nonlinearities, but in rather constant
> and predictible manner, so the tuning can be compensated as it is with
> resistor inserted in series with integrating cap in most common triangle VCO
> core.

That's not a non-linearity - that's an amount of time in the real
world during which the time was frozen for the variable sample rate
system. It means incorrect reading of the signal and, in the end,
actually aliasing. Why aliasing? The situation I described above is
similar to if you took a recording of a VCO at a constant pitch, and
randomly, now and then, duplicated a run of a few samples. That's not
great.

>> within one DAC code? With a 16 bit DAC it might be less important, but
>> as you say yourself, even an 8 bit DAC is braving it. No, having a
>> superoscillator and simply counting it is a better idea.
>
>
> I'll shut up if I see good tracking VCO with 10-octave usable range going up
> to, let's say, 50Mhz.

I can't talk for that. I did describe a DCO though. Those are much
easier to control. You just need a good reference clock (and that can
be had inexpensively). See the post from December. This thread is a
discussion of that DCO's applications.

>>> We also need to consider that constant number of samples leads to
>>> unnecessary massive amount of calculations and samples at higher end, and
>>> surely too low sample count at lower frequencies, which requires
>>> filtering
>>> down to very low frequencies. Audio would be very limited if we don't
>>> want
>>> to hear the sampling clock, and IMHO it's not a nice thing to hear on any
>>> sound.
>>
>>
>> Easily optimized away by use of mip-mapping.
>
>
> If I understood you correctly, that is going back to the idea of constant
> sample rate, where timbre may suddenly change noticeably between 2
> semitones.


No, you just wrap the sampling rate around. Basically, say your clock
is at 10 kHz. It goes up, and as soon as it reaches 99 999 Hz, it
drops down to 10 kHz again, rather than continue to 100 kHz. It's a
simple barber-pole arrangement.

Look at it otherwise. Mip-mapping in graphics: what you said is equal
to: you can only do mip-mapping of the output resolution is constant
around the whole image. But we know that's not true. We can mip-map
and then render parts of the geometry at a high resolution, and others
at a lower resolution. Some games do that: pieces that are moving are
rendered at low resolution but high frame rate, and pieces that are
not moving are rendered at high resolution but low frame rate.

The barber-pole arrangement can be performed because the original
frequency is very high. So you have to divide it a few times. If you
want to change which Riemann sheet you're on, you just change the
division ratio by two. You signal the current division ratio to the
uC, so that it knows what mip-map to caluclate.

This can go even further. Even the top oscillator can be mip-mapped if
you wish so. This can work very well in fact. This way we don't need a
10 octave span on a MHz oscillator - just perhaps a 1.5 octave span.
And the linearization of that can be easily performed because we're
using numerical control.

To mip-map the oscillator itself, you do the following. As before, you
have a super-oscillator. It has an octave-switch which is numerically
controlled. It's just a voltage divider, in ratios like 1/1, 1/2, 1/4,
etc. The numeric controller changes the octave switch depending on
what octave the incoming voltage signals. The numeric control still
counts the frequency of the SO, but it ensures that it is the desired
frequency modulo that single octave we're moving in. Then, that gets
put back in the audio frequency through frequency-shifting by a static
reference. Instead of using a single reference oscillator, we use a
bank of reference oscillators, all at frequencies double the previous
frequency. This is still really easy to generate on the numeric
control chip. The SO gets mixed with each RO (RO1, RO2, RO4, RO8...)
by a bank of 10 mixers. The output of which we'll use gets selected by
an audio mixer. So we cross-fade to get the right mip-map. I'm not
sure how to match the phase during hand-over.

As an optimization Instead of using an audio mixer, you can just use
the numeric control chip to change the amplitudes of the RO's. This
will create exactly the same effect as an audio mixer.

I'm still thinking that numeric control can easily help create a wide
range oscillator. Signal generators don't have perfect V/Hz tracking
as you say - but that's because it's not their purpose. If faced with
this as an important objective, I'm sure people could come up with
something worthwhile.

Cheers,
D.



More information about the Synth-diy mailing list