-----------------------------------------------------------------------------------

    Copyright (C) 2003 Fons Adriaensen
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

-----------------------------------------------------------------------------------


First release - 25/4/2003


Description
-----------

This LADSPA plugin contains three versions of a digital implementation of
the voltage controlled lowpass filter as used in vintage Moog synthesizers.
Many software versions of this filter already exist. Most use some limiting
mechanism in order to keep the self-oscillation amplitude under control, but
as far as I know, none of them attempt to accurately emulate the non-linear
circuit elements of the original analog filter. To do this has been the 
main reason for developing this plugin.


The Moog VCF
------------

The basic architecture of the Moog VCF is quite simple: it consists of a
chain of four first order RC filters and a feedback path. In the clever
design by Robert Moog, the four filter sections are current driven 
parallel RC combinations, the current flowing in the resistor of one
section also being the input signal for the next. The 'resistors' are
each formed by the series connection (as far as the signal is concerned)
of two forward-biased base-emitter junctions, the impedance of which is
controlled by the bias current coming from an exponentially controlled
current source.
Whereas for a normal resistor we would have I_R / V_R = constant = 1/R,
in this scheme we find I_R = w * tanh(V_R), where w is proportional to
the bias current. Thus the impedance increases with signal level, which
explains why the resonance frequency rises (by about one semitone) when
the filter is taken out of self-oscillation by decreasing the feedback.


The three versions
------------------

MoogVCF1 is a fairly simple design, and it does not even pretend to come
close the 'real thing'. It uses a very crude approximation of the non-linear
resistor in the first filter section only. I retained it in this distribution
because it's a cheap (in terms of CPU usage) general purpose 24 dB/oct lowpass
filter that could be useful, and for sentimental reasons since this was my
first ever LADSPA plugin.

MoogVCF2 uses five non-linear elements, in the input and in all four filter
sections. It works by using the derivative of the nonlinearity (for which
1 / (1 + x * x) is reasonable approximation). The main advantage of this is
that only one evaluation of the non-linear function is required for each
section. The four variables that contain the filter state (c1...c4) represent
not the voltage on the capacitors (as in the first filter) but the current
flowing in the resistive part.

MoogVCF3 is based on the previous one, with two differences. It uses the
the technique described by Stilson and Smith to extend the constant-Q
range, and the internal sample frequency is doubled, giving a better
approximation to the non-linear behaviour at high freqencies.
This version has high Q over the entire frequency range and will
oscillate up to above 10 kHz, while the two others show a decreasing
Q at high frequencies. Moogvcf3 is reasonably well tuned, and can be
'played' as a VCO up to at least 5 kHz.

All three versions subsample the audio rate controls to 1/16, with linear
interpolation in between. This could be changed at the expense of more
CPU cycles.


Thanks
------

Many thanks are due to Dr. Matthias Nagorni of SuSE AG, who first prodded
me gently to undertake the development of this plugin, and who provided
invaluable feedback and comments on the early versions. Matthias also
kindly offered me the use of his AMS page on sourceforge to host the
first distribution.


The ams directory contains some example patches for alsamodularsynth.





















 


  

 



 


