Stochastic & Neuromorphic Computing  /  Explore  /  Spike-domain DSP

Spike-domain DSP
filter without leaving the spikes

Conventional signal processing on an event stream forces a detour: decode the spikes to floating-point numbers, run the filter, re-encode. Each hop costs energy and latency. SC-NeuroCore does the arithmetic in the spike domain itself — FIR and IIR filters, an FFT and power spectrum, a wavelet decomposition — so a spike train goes in and a spike train comes out, and the datapath stays binary all the way to the FPGA. The clearest of them is a leaky integrator, which you can drive below.

The leaky-integrator (IIR) filter

The simplest recursive spike filter is a membrane. It keeps a running state, decays it a little each timestep, adds a gain for every incoming spike, and emits an output spike whenever the state crosses threshold — then resets. That single line of dynamics is an infinite-impulse-response low-pass filter and a coincidence detector at once: isolated input spikes leak away before they matter, but a burst arriving close together stacks up past threshold and fires. It is the same integrate-and-fire rule the neuron pages use, doing signal processing.

$$s_t = \lambda\,s_{t-1} + g\,x_t, \qquad y_t = \big[\,s_t \ge \vartheta\,\big], \qquad s_t \leftarrow 0 \ \text{if it fired}$$
Live — a spike train in, a filtered spike train out
input spikes: output spikes: output / input rate:

Raise the decay toward 1 and the integrator holds its charge longer, so it responds to slower structure and passes more — a lower-frequency filter. Raise the threshold and only tight bursts survive, thinning the output — the filter becomes a stricter coincidence detector. The state line shows the accumulation between the two rasters; every time it touches the dashed threshold it emits an output spike and drops back to zero. No value ever leaves the integer/spike domain.

The rest of the toolkit

The IIR filter is one of a small family of spike-domain operators, each the event-driven counterpart of a standard DSP block.

FIR filter — weighted delayed sum

A finite-impulse-response filter forms a weighted sum of the last $K$ input spikes and thresholds it: $y_t = \big[\sum_k c_k\,x_{t-k} \ge \vartheta\big]$. With a matched set of tap weights it becomes a spike-domain matched filter or convolution — the spike_convolve helper is exactly this with your kernel as the taps.

FFT & power spectrum

To find rhythms in a spike train, a sliding window first turns it into an instantaneous firing rate, and the FFT of that rate gives the frequency content; squaring the magnitude gives the power spectral density. It is how you ask “is this channel oscillating, and at what frequency?” — the rate estimate stays integer-domain, the transform is standard.

Wavelet decomposition — multi-scale bands

Cascaded moving-average filters at doubling window sizes split a spike train into a set of frequency bands — a fast, integer-only wavelet-style decomposition that separates fine, fast structure from slow trends, each returned as its own spike representation.

Where it fits

Spike-domain DSP is what lets a sensor pipeline stay event-driven end to end. An event camera or a neuromorphic microphone already speaks spikes; filtering, spectral analysis and feature extraction in the same representation means no decode-refilter-encode round trip before the spiking network that consumes them — the energy argument of the rest of the site, applied to the front-end signal path.

Evidence boundary: the demo runs the library's exact leaky-integrator (IIR) recurrence in your browser — decay, add-per-spike, threshold, reset. The FIR, FFT, and wavelet operators are described from their implementations; the spectral path converts to an instantaneous rate before a standard FFT, so it is not purely combinational like the FIR/IIR. No throughput figures are quoted.