lorenz
Prev | Orchestra Opcodes and Operators | Next

## lorenz

lorenz — Implements the Lorenz system of equations.

## Description

Implements the Lorenz system of equations. The Lorenz system is a chaotic-dynamic system which was originally used to simulate the motion of a particle in convection currents and simplified weather systems. Small differences in initial conditions rapidly lead to diverging values. This is sometimes expressed as the butterfly effect. If a butterfly flaps its wings in Australia, it will have an effect on the weather in Alaska. This system is one of the milestones in the development of chaos theory. It is useful as a chaotic audio source or as a low frequency modulation source.

## Syntax

    ax, ay, az lorenz ksv, krv, kbv, kh, ix, iy, iz, iskip [, iskipinit]

## Initialization

ix, iy, iz -- the initial coordinates of the particle.

iskip -- used to skip generated values. If iskip is set to 5, only every fifth value generated is output. This is useful in generating higher pitched tones.

iskipinit (optional, default=0) -- if non zero skip the initialisation of the filter. (New in Csound version 4.23f13 and 5.0)

## Performance

ksv -- the Prandtl number or sigma

krv -- the Rayleigh number

kbv -- the ratio of the length and width of the box in which the convection currents are generated

kh -- the step size used in approximating the differential equation. This can be used to control the pitch of the systems. Values of .1-.001 are typical.

The equations are approximated as follows:

x = x + h*(s*(y - x))
y = y + h*(-x*z + r*x - y)
z = z + h*(x*y - b*z)

The historical values of these parameters are:

ks = 10
kr = 28
kb = 8/3

| Note
This algorithm uses internal non linear feedback loops which causes audio result to depend on the orchestra sampling rate. For example, if you develop a project with sr=48000Hz and if you want to produce an audio CD from it, you should record a file with sr=48000Hz and then downsample the file to 44100Hz using the src_conv utility.

## Examples

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

Example 501. Example of the lorenz 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
    ; Audio out   Audio in
    -odac           -iadc    ;;;RT audio I/O
    ; For Non-realtime ouput leave only the line below:
    ; -o lorenz.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>

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

    ; Instrument #1 - a lorenz system in 3D space.
    instr 1
      ; Create a basic tone.
      kamp init 25000
      kcps init 1000
      ifn = 1
      asnd oscil kamp, kcps, ifn

      ; Figure out its X, Y, Z coordinates.
      ksv init 10
      krv init 28
      kbv init 2.667
      kh init 0.0003
      ix = 0.6
      iy = 0.6
      iz = 0.6
      iskip = 1
      ax1, ay1, az1 lorenz ksv, krv, kbv, kh, ix, iy, iz, iskip

      ; Place the basic tone within 3D space.
      kx downsamp ax1
      ky downsamp ay1
      kz downsamp az1
      idist = 1
      ift = 0
      imode = 1
      imdel = 1.018853416
      iovr = 2
      aw2, ax2, ay2, az2 spat3d asnd, kx, ky, kz, idist, \
                                ift, imode, imdel, iovr

      ; Convert the 3D sound to stereo.
      aleft = aw2 + ay2
      aright = aw2 - ay2

      outs aleft, aright
    endin

    </CsInstruments>
    <CsScore>

    ; Table #1 a sine wave.
    f 1 0 16384 10 1

    ; Play Instrument #1 for 5 seconds.
    i 1 0 5
    e

    </CsScore>
    </CsoundSynthesizer>

## Credits

Author: Hans Mikelson
February 1999

New in Csound version 3.53

Note added by François Pinot, August 2009

Prev | Up | Next
loopxseg | Home | lorisread