NL2:

Filter: Extension

Arbitrary Non Linear Filter Equation

Source: SLUGens.sc

//SLUGens released under the GNU GPL as extensions for SuperCollider 3, by Nick Collins, http://composerprogrammer.com/index.html

Represents the arbitrary non-linear filter difference equation in the time domain:

y(n) = sum over terms of constant * product of x terms at individual powers * product of y terms at individual powers

This allows arbitrary crossterms in x and y, but is expensive to calculate.

Stability is definitely not guaranteed; most equations will quickly blow-up. See the guard arguments below. It is recommended that you stick to positive exponents for signals which are within -1 to 1, else explosion of values is inevitable.

(0.1)**(-1.26) //negative exponents cause blowup for smaller signals abs(sig) < 1.0

(1.1)**(2.26) //positive exponents cause blowup for larger signals abs(sig) > 1.0

You need to pass in the parameters via two buffers, of arbitrary size.

input |
What do you want to filter? |

bufnum |
A single buffer containing numcrossterms in the first index, then the specification of crossterms as (constant, num x terms, list of x index/exponent pairs, num y terms, list of y index/coefficient pairs). Buffer contents can be switched at run-time as longas this data format is strictly adherred to. |

maxasize |
Maximum index stored for previous outputs |

maxbsize |
Maximum index stored for previous inputs |

guard1 |
Watch out for blow-up and reset if necessary; this is the value of the maximum absolute output allowed. |

guard2 |
Watch out for blow-up and reset if necessary; this is the value of the maximum absolute change of output allowed. On discovering blow-up, filter output is set back to zero for all stored outputs, so that feedback cannot occur. |

helpfile source: /usr/local/share/SuperCollider/Extensions/SC3plugins/SLUGens/HelpSource/Classes/NL2.schelp

link::Classes/NL2::

link::Classes/NL2::