NTH / M3 · Interactive companion

Neuromodulation & stimulation

How a cortical prosthesis turns numbers into neuronal firing. Three live playgrounds — one biphasic pulse, one Utah-array configuration table, one real-time stimulator with safety chips and a live charge-rate readout — let you build intuition before (or alongside) the notebook.

Lead: AntonioNotebook: Colabpart of the NTH bootcamp plan
M1
Camera + CV
M2
Gaze
M3 · here
Stimulation
M4
Phosphenes
M5
Decoding

01What is neuromodulation

Neuromodulation is the act of choosing stimulation parameters that push neuronal firing in a chosen direction. The two main levers are amplitude modulation (more current per pulse recruits more tissue around the electrode — the radius of activated fibres grows roughly as √(I/K)) and frequency modulation (more pulses per second means the recruited neurons are driven harder — but only up to the refractory ceiling: an axon can fire at most once per ~1 ms absolute and ~5 ms relative refractory period, so above ~200–300 Hz the per-pulse recruitment probability falls off and the driven firing rate plateaus or even drops). Higher stim frequency is therefore not the same as a higher firing rate — only a higher opportunity to fire. Everything else — pulse width, interphase gap, number of pulses — shapes the train under those two levers.

02The five pulse parameters

For a conventional rectangular, charge-balanced, biphasic pulse train on a single electrode, five numbers cover the geometry. Click the tabs below to isolate each one and see its effect. Real systems also vary pulse shape (asymmetric biphasic, triphasic, slow charge-recovery), waveform (non-rectangular ramps), and train period — the start-to-start interval between trains, which we expose in the simulator below.

amplitude modulation

Amplitude

Current delivered per phase, in microamperes. Higher amplitude recruits more cortical tissue around the electrode. Together with pulse width it sets the charge per pulse.

strategy: amplitude modulation. modulates: recruited tissue / firing probability.

cathodic phase anodic phase baseline / interphase
80 µA 170 µs 40 µs 300 Hz 50
charge / phase: 0.014 µC · train: 75 ms

03Configure a Utah array

Research and early-clinical cortical arrays today drive anywhere from a handful to a few hundred electrodes — the Utah array used here has 96 shanks on a 10×10 grid; future high-density systems aim for thousands. Pick electrodes on the 10×10 array, tune the draft train in the middle, Add to list to commit them with their own parameters. Click a row to bring it back into the draft for editing.

10 x 10 Utah array
0 selected · 0 configured

click toggles an electrode · drag paints (first electrode's state decides whether the drag selects or deselects)

Draft train 0 electrodes ready
80 µA 170 µs 40 µs 300 Hz 50
select electrodes first
Configured electrodes
nothing configured yet · pick electrodes, tune the draft, then add

04Run the stimulator

Once channels are configured, the Neurolight session walks through configureconnectstimdisconnect. Press Stim to fire one finite trial (reps trains, each repeated every train period milliseconds, so trains of different lengths stay phase-locked) and watch the four live panels update in real time. All four can be read at a glance: where firing is happening (array), when it happens (carousel), how safe the parameters are (current limit + Shannon-k), and how fast charge is being delivered (peak current per channel + instant charge-rate trace).

idle 00:00.000 Surprise me ↑
Array activity spatial · live idle
Stimulator output temporal · channels × time configure to allocate channels
Safety & charge summary A = 2000 µm2 per electrode
charge / phase
amp × pw
charge density
Q / area
Shannon k
limit 1.85
duty cycle
2·pw·fr
avg current
amp × duty
instant charge rate
0.00 µC/s
now · sum of channels
Instant charge-rate trace analytic, all channels 0.00 µC/s
400 ms
1
1.0 s
Stimulator log
--:--.---stimulator idle · press Connect to begin

05Self-check

Predict the answer first, then verify with the sliders or the live panels above.

Q1. You halve the amplitude (pulse width and electrode unchanged). By how much does the Shannon factor k drop?

The charge per phase Q = amp × pw halves. Because the electrode area is unchanged, the charge density Qd = Q / area halves too. So both log terms in k = log10(Q) + log10(Qd) shrink by log10(0.5) ≈ −0.301, and the total drop is 2 × 0.301 ≈ 0.60. Note the distinction: Q itself drops by a factor of two (linear), while k drops by ~0.60 (additive, in log space).

Q2. If you double frequency without touching amplitude, which changes — how many neurons are recruited per pulse, or how often each recruited neuron fires?

How often each recruited neuron fires. Recruitment is set per pulse by amplitude (the current radius around the electrode — the √(I/K) thing from §01); the same neurons get recruited each time, regardless of frequency. What frequency changes is the rate at which those same neurons get re-recruited, up to the refractory ceiling. In a cortical prosthesis this translates to phosphene brightness, not phosphene size.

Q3. With reps = 1, the train period control has no effect on the trial. Why does the simulator still display it?

So the per-channel readouts stay coherent when other channels have reps > 1, or when you sweep reps. The train period (start-to-start interval between trains) is what keeps trains of different lengths phase-locked across channels: with reps = 1 nothing repeats, so the period has nowhere to apply, but the moment reps rises the scheduler needs it. Keeping the control visible (rather than hiding it conditionally) is a UX call — the safety calc itself is duty-cycle driven and depends only on pulse width and frequency.

Q4. Your Surprise-me run sets one channel to amp = 150 µA, pw = 300 µs. The simulated electrode has area A = 2000 µm² = 2 × 10−5 cm² (also visible in the Safety panel header). Is that channel inside the Shannon limit?

Q = 150 µA × 300 µs = 45000 µA·µs = 0.045 µC (recall 1 µA·µs = 1 pC, so 45000 pC = 0.045 µC). Qd = 0.045 µC / 2×10−5 cm² = 2250 µC/cm². k = log10(0.045) + log10(2250) ≈ −1.347 + 3.352 = 2.005. That is above the classic 1.85 line, so the simulator flags it. But read that as a caution, not a verdict: the 1.85 cutoff is Shannon's conservative fit to large surface electrodes (see the callout in §01), and a 2000 µm² intracortical site is a very different regime. The honest answer is “k ≈ 2.0 — in the aggressive corner of the space, worth a second look.”

06Where to next

On to M4 — phosphenes — where these stimulation parameters become a perceived image. The notebook is an optional, self-guided way to revisit this material in Python.

Next module: M4 — Phosphene simulation, where the stimulation parameters you just tuned become a perceived image.

07Tools & references

The tools, papers, and APIs this module is built on.

  • paper Shannon, R.V. (1992), A model of safe levels for electrical stimulation, IEEE Transactions on Biomedical Engineering 39(4):424–426. doi:10.1109/10.126616 — origin of the k ≤ 1.85 charge / charge-density rule.
  • review Cogan, S.F. (2008), Neural stimulation and recording electrodes, Annual Review of Biomedical Engineering 10:275–309. doi:10.1146/annurev.bioeng.10.061807.160518.
  • review Cogan, Ludwig, Welle & Takmakov (2016), Tissue damage thresholds during therapeutic electrical stimulation, Journal of Neural Engineering 13(2):021001. doi:10.1088/1741-2560/13/2/021001 — why microelectrode safety limits are electrode-, waveform-, and duty-cycle-dependent rather than a single universal cutoff.
  • tool The stimulator panel is a mock modelled on real research stimulation APIs (e.g. Ripple Neuro systems); the parameters and the configure → connect → stim → disconnect lifecycle mirror a real device manual.

Further reading — vision-restoration field