Change ALSA device default to 'default' from hw:0
[zynaddsubfx-code.git] / doc / filter.txt
blobd1f0a215a2b1c70b9ceda75c8051e47e02e26a0c
1 [[filters]]
2 Filters
3 -------
4 :Author: Mark McCurry
5 :Date: June 24, 2012
7 ZynAddSubFX offers several different types of filters, which can be used to
8 shape the spectrum of a signal.
9 The primary parameters that affect the characteristics of the filter are the
10 cutoff, resonance, filter stages, and the filter type.
12 * *Cutoff*: This value determines which frequency marks the changing point for
13             the filter. In a low pass filter, this value marks the point where
14             higher frequencies are attenuated.
15 * *Resonance*: The resonance of a filter determines how much excess energy is
16                present at the cutoff frequency. In ZynAddSubFX, this is
17                represented by the Q-factor, which is defined to be the cutoff
18                frequency divided by the bandwidth. In other words higher Q
19                values result in a much more narrow resonant spike.
20 * *Stages*: The number of stages in a given filter describes how sharply it is
21             able to make changes in the frequency response.
23 The basic 'analog' filters that ZynAddSubFX offers are shown below, with the
24 center frequency being marked by the red line.
25 The 'state variable' filters should look quite similar.
27 image:images/filter0.png[]
29 As previously mentioned, the Q value of a filter affects how concentrated the
30 signal's energy is at the cutoff frequency; The result of differing Q values are
31 below.
33 TIP: For many classical analog sounds, high Q values were used on sweeping
34 filters. A simple high Q low pass filter modulated by a strong envelope is
35 usually sufficient to get a good sound.
37 image:images/filter1.png[]
39 Lastly, the affect of the order of the filter can be seen below.
40 This is roughly synonymous with the number of stages of the filter.
41 For more complex patches it is important to realize that the extra sharpness in
42 the filter does not come for free as it requires many more calculations being
43 performed; This phenomena is the most visible in subsynth, where it is easy to
44 need several hundred filter stages to produce a given note.
46 image:images/filter2.png[]
50 There are different types of filters. The number of poles define what will
51 happen at a given frequency. Mathematically, the filters are functions which
52 have poles that correspond to that frequency. Usually, two poles mean that the
53 function has more "steepness", and that you can set the exact value of the
54 function at the poles by defining the "resonance value". Filters with two poles
55 are also often referenced
56 as https://de.wikipedia.org/wiki/Butterworth-Filter[Butterworth Filters].
58 ********************************************************************
59 For the interested, functions having poles means that we are given a quotient of
60 polynomials. The denominator has degree 1 or 2, depending on the filter having
61 one or two poles. In the file _DSP/AnalogFilter.cpp_,
62 _AnalogFilter::computefiltercoefs()_ sets the coefficients (depending on the
63 filter type), and _AnalogFilter::singlefilterout()_ shows the whole polynomial
64 (in a formula where no quotient is needed).
65 ********************************************************************
67 User Interface
68 ~~~~~~~~~~~~~~
70 image:images/uifilter.png[]
72 * *C.freq*: Cutoff frequency
73 * *Q*: Level of resonance for the filter
74 * *V.SnsA.*: Velocity sensing amount for filter cutoff
75 * *V.Sns.*: Velocity sensing function
76 * *freq.tr*: Frequency tracking amount. When this parameter is positive, higher
77              note frequencies shift the filter's cutoff frequency higher.
78 * *gain*: Additional gain/attenuation for filter
79 * *St*: Filter stages
81 NOTE: TODO add a lengthy section on the formant filter setup