⇠ Back to the gallery

Morphed phase oscillators

Example of the implementation of a phase based Morphed oscillator. Here we see how to define a template (morphed) which uses the automatic derivation features of codyn to obtain the derivative (line 12) of a user defined function f (line 9).

Having defined the template, two oscillators are instantiated from it each defining their own shaping function f (line 23 and 31). The two oscillators are then phase coupled to bring them into phase.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
templates {
  node "morphed" {
    omega = "2 * pi"
       mu = "1"
    gamma = 1

    # User defined shaping function. This can be
    # overridden in realizations of this template
    f(theta) = "sin(theta)"

    p' = "omega"
    r' = "mu * f(p)' + gamma * (mu * f(p) - r)"
  }

  edge "coupling" {
    bias = 0
    weight = 1
    p' += "weight * sin(input.p - output.p - bias)"
  }
}

node "m1" : morphed {
  f(theta) = "cos(theta * 2 + 0.2 * pi) *
              (0.1 + sin(theta))"

  p = "rand(-pi, 0)"
  r = 6
}

node "m2" : morphed {
  f(theta) = "cos(theta * 2 + 0.2 * pi) *
              (0.1 + sin(theta)) + 0.5"

  p = "rand(0, pi)"
  r = -4
}

<bidirectional>
edge from "m1" to "m2" : coupling {
  weight = 0.5
}

⌦ Open in playground