Skip to content

LLM Resources

Electrophysiology โ€‹

Plants generate real, measurable electrical signals. The distinction that matters:

EventTimescaleMeans
Action potentialsecondsSomething touched me โ€” a touch, a cold draft, a light change
Variation potentialminutesSomething is damaging me โ€” wounding, burning, herbivory
System potentialhoursA systemic state change
js
const plant = await createPlant( {
  sensor : { driver : 'electrode', transport : 'synthetic' },  // or serial, or push your own ADC
} )

const signal = await plant.listen( { seconds : 600 } )

signal.events[ 0 ]
// { type: { label: 'variation_potential', confidence: 0.7,
//           note: 'Slow graded event. Typically follows tissue damage.' },
//   durationS: 189.8, amplitude: -14.01, polarity: 'hyperpolarizing', snr: 17.5 }

plant:damaged fires when the plant signals it is being hurt.

Pure-JavaScript DSP, no native build โ€” it runs on a Pi and in a browser:

  • Zero-phase filters (low / high / band-pass), so an event never moves in time
  • Second-order biquad notch for 50/60 Hz mains hum, which is louder than the plant and whose removal is the difference between a readable trace and a sine wave
  • Radix-2 FFT, one-sided spectra, dominant frequency, band powers over physiological ranges
  • Time-domain features including skewness and kurtosis โ€” plant action potentials spike the kurtosis long before they move the mean
  • MAD-based spike detection: a few large spikes inflate the standard deviation enough to hide themselves, the median absolute deviation does not
  • Circadian analysis by autocorrelation. A weak or off-period rhythm is an early stress marker that appears before anything is visible.
js
import { analyzeTrace, circadianHealth } from 'smartplant/signals'

circadianHealth( series ).verdict
// "Strong rhythm but off-period (14h vs 24h) โ€” the light cycle may be inconsistent."

The synthetic transport generates physiologically shaped traces โ€” circadian drift, background noise, mains hum, and correctly shaped APs and VPs โ€” so the entire pipeline is testable and demonstrable with no electrode attached. stimulate( 'variation_potential' ) simulates a wound in software.