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.
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
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.
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.
click toggles an electrode · drag paints (first electrode's state decides whether the drag selects or deselects)
04Run the stimulator
Once channels are configured, the Neurolight session walks through configure → connect → stim → disconnect. 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).
Stimulator log
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.85charge / 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
- overview docs/vision-restoration-field.md — programs by tissue (retina · LGN · V1), with links to each company / consortium. The configure-array workflow you just used mirrors the V1 cortical-implant cohorts most directly.
- paper Fernández, Alfaro, Soto-Sánchez, et al. (2021), Visual percepts evoked with an intracortical 96-channel microelectrode array inserted in human occipital cortex, J. Clinical Investigation 131(23):e151331. doi:10.1172/JCI151331 — the human Utah-array cohort whose pulse-parameter ranges this module's defaults sit inside.
- paper Granley & Beyeler (2021), A computational model of phosphene appearance for epiretinal prostheses, IEEE EMBC. doi:10.1109/EMBC46164.2021.9629663 — how pulse-amplitude / width / frequency map to perceived size and brightness; the parameter space M4 picks up from here.
- program CORTIVIS (Fernández / UMH Elche) — active first-in-human cortical-implant trial; the configure → connect → stim lifecycle of this module is modelled on the bedside protocol.