[sdiy] Variable rate waveform playback in NED synclavier
gsn10 at hotmail.com
Fri Aug 31 19:58:45 CEST 2012
> There's one bit I don't understand. On the left hand side of the diagram are the two Sample Rate Generators, which seem to take a clock signal Fclk and multiply it by a fraction N/M, where N and M are 8-bit numbers. How is this done? Doing arbitrary division is easy enough (just count M clock pulses) but how is the multiplication performed? Would it have to be a PLL with a divider in the feedback loop? This seems a bit dirty for NED. If not, how? I can't see how this bit works.
> Secondly, once this new sample rate is generated from the Fclk, it's fed to a Phase Angle Incrementer, which I take it is what we'd call an NCO. This seems to have a 8-bit frequency increment. So the final frequency is some weird combination of the variable sample rate Fclk*N/M and the freq inc - does this seem right or am I miles off here?
I'd been thinking about this recently too. I'd love to see a schematic of the FM part...
Unless the input clock frequency is absurdly high, a divide-by-m counter by itself won't give adequate resolution for high frequencies. If they're using a PLL, maybe it's used as a sort of coarse pre-scaler that's perhaps set according to the keyboard range you're playing, with the divide-by-M taking care of the finer frequency control. The clock frequency Fclk is fixed, and if N is only set on note-on, you wouldn't get much weird stuff happening. And I'm interpreting the third 8 bit input as an initial phase setting. But it could also be the phase angle increment, which would skip samples... hmm, maybe the phase accumulator is more than 8 bits...
I've been thinking of ways to model the Synclavier's FM in software. Variable sample rates are sort of a problem (and I think oversampling isn't very elegant), but I thought of a band limited way to synthesize the "image frequencies" of the zero order hold reconstruction using amplitude modulation. This works for arbitrary waveforms, but not FM.
I was also thinking it might now be fairly easy to make a variable rate hardware implementation using a cheap microprocessor per voice (Wersi did this for their digital organs), thus enabling arbitrary waveshaping or other nasty things that would result in crazy aliasing if done at a fixed rate. But you could do this in software too if you pre-rendered a portion of the audio and then used band limited interpolation to transpose it to the desired pitch.
So I tried to quickly make a program in Octave to simulate how I thought the Synclavier worked. One question that came up is whether the output changes instantaneously at both the carrier and modulator's clock rates, or whether the DAC is clocked at the carrier's rate only (effectively resampling the modulator). At this low waveform resolution, the output is a lot less glitchy if it's sampled only at the carrier's rate. And it's also much easier to emulate.
I noticed that the low resolution of the carrier waveform adds a huge amount of fizzy quantization noise to the FM, which isn't really great sounding. It's not "authentic", but this can be improved by applying linear interpolation to the phase modulation only. The desirably gritty and lo-fi qualities are otherwise retained.
More information about the Synth-diy