Thanks mystran for the clarification. I see now how it works.mystran wrote: ↑Thu Jan 23, 2020 9:25 pmLet me try to explain this properly.
The transfer function is simply (a2*s^2+a1*s+a0*1)/(s^2+s/Q+1) where a2,a1,a0 are simply the gains you take from hp, bp and lp outputs. The denominator is what we are interested in.
We can rewrite R=1/Q where R is the BP feedback gain (my definition might be slightly different from Vadim's, but I feel like simple R=1/Q is the easiest to work with). As R goes to zero, the Q goes to infinity and for a linear filter, self-oscillation happens when R=0 -> Q=inf.
To get "forced self-oscillation" with any filter (which is unstable for linear filters), you want Q to be slightly "higher than infinity" which sounds funny, but sort of makes sense if you think in terms of extended real-line or extended complex-plane wrapping around through the point at infinity. As it turns out, in terms of R this happens simply when we cross zero and R becomes slightly negative. We can't do this by using a SEM-style variable resistor divider to ground, but it can be done even in analog with an extra inverting amplifier.
Now, in the SEM-style SVF the resonance pot (which is a variable divider to the ground) controls the feedback R when the BP signal amplitude is low. When the amplitude grows, the (separate) diode path (which we will assume is independent of the actual resonance setting) will pass-thru some additional damping to increase R and therefore decrease Q.
With the simple pot in the original R is basically limited to about [0,3]. The zero feedback when the resonance pot goes to ground. The factor of 3 happens because the main resonance path with pot turned to connect BP directly has only 33k resistor while the inverting HP opamp has 100k local feedback (hence gain of 100k/33k).
It is obviously trivial to vary R over a larger range in software, so if we take it to a slightly negative value, we get forced self-oscillation. If we assume the only actual non-linearity is the additional damping from the diode path, then the large-signal BIBO stability limit for self-oscillation is where the additional damping from the fully conducting diodes barely cancels out the main feedback with negative R.
In other words, with the diodes fully conducting, the combined damping must still be positive, but if the damping is negative at low amplitudes (when the diodes don't conduct), then the filter will regenerate until the amplitude is high enough that the diodes will start conducting enough to damp out additional regeneration.
Hopefully this clears up any confusion.
Yes, it seems that the filter is unstable near the cutoff min and max. But it's not a big deal. Maybe it helps if i use 64 bit floating points. I will make some more tests.