nlfilt

nlfilt — A filter with a non-linear effect.

Description

Implements the filter:


Y{n} =a Y{n-1} + b Y{n-2} + d Y^2{n-L} + X{n} - C 
      

described in Dobson and Fitch (ICMC'96)

Syntax

ares nlfilt ain, ka, kb, kd, kC, kL

Performance

  1. Non-linear effect. The range of parameters are:


      a = b = 0
      d = 0.8, 0.9, 0.7
      C = 0.4, 0.5, 0.6
      L = 20
                

    This affects the lower register most but there are audible effects over the whole range. We suggest that it may be useful for coloring drums, and for adding arbitrary highlights to notes.

  2. Low Pass with non-linear. The range of parameters are:


      a = 0.4
      b = 0.2
      d = 0.7
      C = 0.11
      L = 20, ... 200
                

    There are instability problems with this variant but the effect is more pronounced of the lower register, but is otherwise much like the pure comb. Short values of L can add attack to a sound.

  3. High Pass with non-linear. The range of parameters are:


      a = 0.35
      b = -0.3
      d = 0.95
      C = 0,2, ... 0.4
      L = 200
                

  4. High Pass with non-linear. The range of parameters are:


      a = 0.7
      b = -0.2, ... 0.5
      d = 0.9
      C = 0.12, ... 0.24
      L = 500, 10
                

    The high pass version is less likely to oscillate. It adds scintillation to medium-high registers. With a large delay L it is a little like a reverberation, while with small values there appear to be formant-like regions. There are arbitrary color changes and resonances as the pitch changes. Works well with individual notes.

[Warning] Warning

The "useful" ranges of parameters are not yet mapped.

Examples

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

Example 655. Example of the nlfilt opcode.

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

<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
-odac  ;;;realtime audio out
;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o nlfilt.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 32
nchnls = 2
0dbfs  = 1

instr 1	;unfiltered noise

asig rand .7
     outs asig, asig

endin

instr 2	;filtered noise

ka = p4
kb = p5
kd = p6
kC = p7
kL = p8
asig  rand .3
afilt nlfilt asig, ka, kb, kd, kC, kL
asig  clip afilt, 2, .9
      outs asig, asig

endin
</CsInstruments>
<CsScore>

i 1 0 2				; unfiltersd

;        a    b    d    C    L
i 2 2 2  0    0   0.8  0.5  20	; non-linear effect
i 2 + 2 .4   0.2  0.7  0.11 200	; low=paas with non-linear
i 2 + 2 0.35 -0.3 0.95 0.1  200	; high-pass with non-linear
i 2 + 2 0.7 -0.2  0.9  0.2  20 	; high-pass with non-linear

e
</CsScore>
</CsoundSynthesizer>


Credits

Author: John ffitch
University of Bath/Codemist Ltd.
Bath, UK
1997

New in version 3.44