by Dirk Brockmann

This explorable illustrates pattern formation in excitable media. The example explored here in a system of pulse-coupled oscillators that are arranged on a two-dimensional lattice and interact with their neighbors by delivering excitatory pulses to them and receiving them in return. This model is sometimes used to study synchronization and can capture the dynamics of activation in layers of neurons as well as the spatial patterns of signaling molecules that play a role in microbial aggregation processes.

Depending on the parameter values the system can exhibit spiral waves and target patterns, similar to the patterns observed in related explorables Cycledelic and Spin Wheels.

Press play and, while you wait for the pattern to emerge, keep on reading.

This is how it works

Each lattice site (pixel) hosts an oscillator. Each oscillator's state is described by a variable \(0\leq y(t)\leq 1\). We can think of this state variable as a charge level, like the battery of your cell phone that changes over time. \(y(t)=0\) means zero charge, \(y(t)=1\) maximum charge.

Each oscillator is continuously charged with a constant charge rate \(I\) and while it is charging some of the charge leaks at rate \(\alpha \). The oscillator's charge is then governed by the differential equation:

\[ \dot y = I - \alpha y. \]

The stationary state of this dynamical system is \(y^\star = I/\alpha\) when charge rate and leakage balance.


We turn this into a pulse oscillator by an additional ingredient. If the asymptotic state (dashed line in the diagram) is larger than the full charge (solid horizontal line), so \(y^\star>1\), and if we start at \(y(0)=0\) the charge curve (blue line) will eventually cross the maximum value \(y=1\). When this happens we say that the oscillator emits a pulse (red tick) and immediately resets its charge to \(y(0)=0\). The process of charging and firing then repeats indefinitely. When this is visualized over time the oscillator generates a spike-train with regular intervals. The frequency of spike emission increases with increasing charging rate \(I\). You can adjust the frequency with the corresponding slider.


When an oscillator receives a pulse from one of its neighbors its own charge gets kicked to a higher value and the oscillator's internal clock is advanced to the point in the future at which it would have attained that charge naturally. In a sense a pulse delivered from one oscillator to another, advances the receiving oscillator a bit in time.

You can control the magnitude of the spike with the Spike intensity slider.

Because oscillators interact locally they tend to advance each other in time, bringing their charge level closer together and eventually synchronizing. Why is this happening? One of the reasons for this behavior is the particular, convex shape of the charge curve. Because of this shape oscillators that are almost fully charged when they receive a pulse will advance in time more than those that receive a spike at low charge levels.

Oscillator Heterogeneity

With the remaining slider labeled Oscillator heterogeneity you can change the variability of the oscillators' charge rate \(I\). The default setting is no variability: all oscillators are identical. As you increase oscillator heterogeneity, the natural firing rate will differ between oscillators, making it harder for them to synchronize locally.


  • R. E. Mirollo and S. H. Strogatz, Synchronization of Pulse-Coupled Biological Oscillators, SIAM J. Appl. Math., 50(6), 1645–1662. (1989)

Related Explorables:

Ride my Kuramotocycle!

The Kuramoto model

Spin Wheels

Phase-coupled oscillators on a lattice

Hopfed Turingles

Pattern Formation in a simple reaction-diffusion system

Critically Inflammatory

A forrest fire model

If you ask your XY

The XY model of statistical mechanics

Barista's Secret

Percolation on a lattice