A simple way to stabilize most quadrature oscillators including
Martin's quadrature oscillator is to multiply each state variable by a
temporary variable:

  g = 1.5 - 0.5*(u*u + v*v)

where u and v are unit-amplitude quadrature oscillator outputs. The
correction does not need to be done very often, but this depends on
the oscillator algorithm and the precision of its state variables. The
variable g is a Taylor approximation of the exact normalization factor
1/sqrt(u*u + v*v) about u*u + v*v = 1. The Taylor approximation can
only lead to oscillator blow-up if u*u + v*v >= 4, and otherwise
corrects the sinusoid amplitude to 1 or below. For u*u + v*v < 2 the
correction brings the amplitude closer to 1. An amplitude error of -92
dB or less will already be corrected to below the quantization error
of double precision floating point state variables, so the
stabilization method need not be more complicated.

dupswapdrop: music-dsp mailing list

Reply via email to