clip

clip — Clips a signal to a predefined limit.

Description

Clips an a-rate signal to a predefined limit, in a soft manner, using one of three methods.

Syntax

ares clip asig, imeth, ilimit [, iarg]

Initialization

imeth -- selects the clipping method. The default is 0. The methods are:

  • 0 = Bram de Jong method (default)

  • 1 = sine clipping

  • 2 = tanh clipping

ilimit -- limiting value

iarg (optional, default=0.5) -- when imeth = 0, indicates the point at which clipping starts, in the range 0 - 1. Not used when imeth = 1 or imeth = 2. Default is 0.5.

Performance

asig -- a-rate input signal

The Bram de Jong method (imeth = 0) applies the algorithm (denoting ilimit as limit and iarg as a):

|x| >= 0 and |x| <= (limit*a):  f(x) = f(x)
|x| > (limit*a) and |x| <= limit:  f(x) = sign(x) * (limit*a+(x-limit*a)/(1+((x-limit*a)/(limit*(1-a)))2))
|x| > limit:  f(x) = sign(x) * (limit*(1+a))/2

The second method (imeth = 1) is the sine clip:

|x| < limit:  f(x) = limit * sin(π*x/(2*limit)),   |x| >= limit:  f(x) = limit * sign(x)

The third method (imeth = 2) is the tanh clip:

|x| < limit:  f(x) = limit * tanh(x/limit)/tanh(1),   |x| >= limit:  f(x) = limit * sign(x)

[Note] Note

Method 1 appears to be non-functional at release of Csound version 4.07.

Examples

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

Example 122. Example of the clip 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     ;;;RT audio out
;-iadc    ;;;uncomment -iadc if RT audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o clip.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

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

instr 1	; white noise

arnd rand 1	; full amlitude
; Clip the noisy waveform's amplitude to 0.5
a1 clip arnd, 2, 0.5
   outs a1, a1

endin

instr 2	; white noise

arnd rand 1	; full amlitude
; Clip the noisy waveform's amplitude to 0.1
a1 clip arnd, 2, 0.1
   outs a1, a1

endin

</CsInstruments>
<CsScore>

; Play Instrument #1 for one second.
i 1 0 1
; Play Instrument #2 for one second.
i 2 1 1
e

</CsScore>
</CsoundSynthesizer>


Credits

Author: John ffitch
University of Bath, Codemist Ltd.
Bath, UK
August, 2000

New in Csound version 4.07

September 2009: Thanks to a note from Paolo Dell'Osso, corrected the formula.