[sdiy] Vocoder dabblings
Andrew Simper
andy at cytomic.com
Sat Oct 27 06:18:21 CEST 2012
>> Are these typical 'Chamberlin' SVFs or did you do anything clever to them?
>
>
> Yes, they are basic Chamberlin SVFs except for a few minor tweaks. The f
> and q coefficients for the SVF are calculated from MATLAB's output of
> standard Direct Form-1 IIR denominator coefficients. This ensures that the
> poles of the resulting Chamberlin filters are precisely where we want them,
> rather than the approximate positions achieved by simply shoving frequency
> and 1/Q values into the SVF's f and q parameters respectively. The
> resulting f and q coefficients are also wrapped up into an "fq" coefficient
> as a programming optimisation to speed up the SVF calculation since there's
> lots of filters to chew through and their parameters are all static. Finally
> a zero is added to the SVF's bandpass responses because the MATLAB
> application that generates the Butterworth filter coefficients assumes a
> zero at Nyquist frequency when it designs the 2nd order sections, but the
> Chamberlin's LP and BP outputs don't naturally posess them!
If anyone wants exact trapezoidal shapes in an efficient SVF with low
noise optimisations check here:
www.cytomic.com/technical-papers
It's calculated directly by trapezoidal integration of a linear SVF
circuit, and the algorithm is very good for SSE since the v1 and v2
variables are calculated in parallel. Total ops 7+ 5* and there are
only three variables to store - v0z is the previous input, and v1, v2
are the outputs of the two integrators, and you can modulate it at
audio rates without without issue:
const v0 = input
const v1z = v1
const v2z = v2
const v3 = v0 + v0z - 2 * v2z
v1 += g1 * v3 - g2 * v1z
v2 += g3 * v3 + g4 * v1z
v0z = v0
output = v2
All the best,
Andrew Simper
More information about the Synth-diy
mailing list