SpikeCoder: A Network-Based Spike Acquisition System

SpikeCoder Source Code Package (30MB zip file)

Schematic for 5-ch Analog, 16-bit Digital Input Interface for DSP Port (26MB zip file)

A Screen Capture of SpikeCoder.app
(Click on the image for a full-size version, 81 kbytes)

SpikeCoder is a neural action potential data acquisition system that I built for neurophysiological experiments, based on a NeXT computer. For experimental neurophysiologists, acquiring neural data from the brain is one of the most challenging aspect of desiging a system.

Although there are several commercial multi-channel data acquisition systems, they either force you to use their pre-packaged system during experiments, give you sorted spike pulses out on TTL level signal lines (which you have to feed into another real-time recording system, which is silly), or you will only get to the data after measurements are completed (no real-time access). I wanted a system that would give me a real-time data stream of time-stamped and waveform-discriminated spikes while all the action potentials are coming in from the brain. In other words, I wanted a real-time data stream from the brain, which I can read as if I am reading from a file, ... almost: reading from a network socket is close enough to my definition of a file. None of the systems on the market met this criteria. Therefore, I had to build one.

The SpikeCoder system includes hardware with a custom 5-channel simultaneous-sampling A/D converter + 16-bit digital input channel. It receives amplified signals from up to 5 micro-electrode channels simultaneously and classifies spike waveforms into a maximum of 5 different classes on each channel in real-time. Classified spike waveforms are time-stamped with the resolution of 40 microsecond and displayed on oscilloscope objects (in storage/non-storage modes). Trigger pulses from a PC-based stimulus generator and any other digital events are recorded via the 16-bit digital input port, and time-stamped with the same clock. The program achieves this timing resolution by the use of a DSP (digital signal processing) processor, a 25MHz Motorola DSP56001.

Time-stamped spikes and digital input events may be transmitted to an experiment control and analysis program running on another computer (client) over the network. The client computer is thus able to obtain and analyze the data in real-time (with some pipe-line delay). The client-server architecture is employed to allow the maximum flexibility in the experimental system configuration -- any decent computer by any manufacturer may function as a client of this program. The client machine does not really have to run anything in hard real-time. It needs only to have enough throughput to receive and process a continuous stream of incoming events. Thus, we can use platforms with a pre-emptive multi-tasking OS such as Unix, NT, and Rhapsody for Macs. Because of this client-server design, no provision is made for saving the data directly by SpikeCoder itself. The client computer may elect to receive spike waveform data (all waveforms or a desired fraction of waveforms depending on storage availabilty), in addition to the time code. The data are sent via a TCP/IP (Transmission Control Protocol/Internet Protocol) connection, which is the most widely supported networking standard currently available on all computers.

Spike waveform discrimination is based currently on a simple scheme that relies on a set of constraints (little triangles) which waveforms must satisfy in the voltage-time domain. It is not automatic. The experimenter must set up and adjust positions of constraints such that different spike waveforms satisfy different sets of constraints. For example, to satisfy an up triangle constraint, a waveform must go above the tip of the triangle. For a down triangle, it must go below the arrow tip. A waveform must satisfy all constraints of the same color for it to be accepted into the class defined by the constraint set. Any number of constraints may be added by a drag-and-drop action from a palette in the Constraints Panel. All of these user actions via the GUI are also sent in the data stream to the client.

Ohzawa lab home page