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 84. 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>
; Audio out   Audio in    No messages
-odac           -iadc     -d     ;;;RT audio I/O
; -o clip.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

; Initialize the global variables.
sr = 44100
ksmps = 10
nchnls = 1

; Instrument #1.
instr 1
  ; Generate a noisy waveform.
  arnd rand 44100
  ; Clip the noisy waveform's amplitude to 20,000
  a1 clip arnd, 2, 20000

  out a1
endin

; Instrument #2.
instr 2
  ; Generate a noisy waveform.
  arnd rand 44100
  ; Clip the noisy waveform's amplitude to 10,000
  a1 clip arnd, 2, 10000

  out 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.