svn

svn — Non-linear state variable filter

Description

This opcode implements a non-linear state variable filter with overdrive control and optional user-defined non-linear transfer function.

Syntax

ahp,alp,abp,abr svn asig, xcf, xQ,
    kdrive[, ifn,inm,imx, istor]

Initialization

ifn -- if non-zero, a function table number containing the transfer function for the filter non-linearity. This should be mid-point centered and defined in the interval -imx to imx. If zero, the filter employs an internal non-linear map based on a hyperbolic tangent. Defaults to 0.

inm -- if non-zero, a function table number containing a normalising transfer function, generated from ifn (using GEN 4). Defaults to 0.

imx -- The absolute max of the function table domain, which is defined as -imx to imx. Defaults to 1.

istor --initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.

Performance

ahp,alp,abp,abr -- highpass, lowpass, bandpass and bandreject ouputs.

asig -- input

xcf -- filter cutoff frequency (a- or k-rate)

xQ -- filter Q (min 0.5) (a- or k-rate).

kdrive -- overdrive factor. With the internal non-linear map, values above 0.125 will introduce progressively more non-linearities in the filter signal. When using a user-supplied transfer function, the amount of distortion introduced by this parameter will depend on the function employed. A value of 0 makes the filter completely linear. The amount of drive is also dependent on the level of the input signal. If this signal is significantly less than 0dBFS, then proportionally more drive is needed to introduce non-linearities in the signal. With a 0dBFS-level input, 100% drive is achieved with kdrive=1. With hotter input levels, kdrive can be used to moderate the non-linear distortion in the filter.

Examples

Here is an example of the svn opcode. It uses the file svn.csd.

Example 1057. Example of the svn opcode.

See the sections Real-time Audio and Command Line Flags for more information on using command line flags.

<CsoundSynthesizer>
<CsOptions>
-odac
</CsOptions>
<CsInstruments>

0dbfs = 1

instr 1
 as vco2 0dbfs,100
 kcf expseg 20,p3/2,20000,p3/2,20
 ahp,alp,abp,abr svn as,kcf,p5,p6,p7,p8
    out alp*p4
endin

</CsInstruments>
<CsScore>
// x - .2x^3 + .3x^5 - .1x^7
f1 0 16385 3 -1 1 0 1 0 -.2 0 .3 0 -.1
f2 0 8193 4 1 1
i1 0 10 0.1 10 0 0 0 ; linear
i1 + 10 0.1 10 0.25 0 0 ; 25% drive
i1 + 10 0.1 10 0.75 0 0 ; 75% drive
i1 + 10 0.1 10 1 0 0 ; 100% drive
i1 + 10 0.1 10 0.25 1 2 ; table 1  25% drive 
i1 + 10 0.1 10 0.75 1 2 ; table 1   75%
i1 + 10 0.1 10 1 1 2 ; table 1   100%
</CsScore>
</CsoundSynthesizer>


Credits

Author: Victor Lazzarini
Feb 2021