The NatusADC filter acquires raw data in real-time from Natus Headboxes over UDP connection for signal processing and visualizations. The overview of the NatusADC working is shown in the image below.
NatusDataServer processes and sends signal from the device to the client application. A project named XLDataExportClient reads signals from the device and calls the NatusDataServer's functions to send the signal to the client. NatusClient is the client application within the BCI2000 that receives the signals and does the initial processing. NatusPackageInterface contains the implementation of data transfer protocol between serve/device and client and is used by NatusClient and NatusDataServer to communicate with each other over TCP and UDP. NatusDataServer and NatusPackageInterface are independent of the BCI2000 where as NatusClient relies on BCI2000.
The below image explains the context in which packet, blocks, samples and channels are used in this project. A packet may have one or block, a block may have one or more samples and a sample contains values for all the channels.
In theory, the module should work fine with all of the following Natus Headboxes.
- EEG128, EEG128FS
- Mobee32, Mobee32-02
- Connex/ Brain Monitor
- NeuroLink IP
- Bio-logic NetLink
- Bio-logic Traveler
Parameters common to all source modules are described under User Reference:DataIOFilter. In addition, the following parameters are supported:
The rate at which the device samples the data. The default value is the device's default sampling rate.
The number of samples per block the output signal, created by the client application(NatusADC), should have. The default value is 20
The number of blocks sent by the server/device in a single UDP Packet. The default value is 1.
The decimation factor. The factor by which to decimate/downsize the signal. The default value is 1. The SamplingRate is updated by dividing it by the DecimationFactor. Note: The SamplingRate should be an integral multiple of DecimationFactor.
The IPv4 address of the server/device.
The port number of the server/device which on which TCP runs. UDP port number is assumed to be 1 + TCP port number.
The number of channels to be acquired from the device. If this is set to auto, all the available channels from the device will be acquired.
SourceChGain should be left to auto. The default value is 0 for every channel.
SourceChOffset should be left to auto. The default value is 1 microVolt for every channel.
The list of channel numbers to be acquired from the device. The order of the numbers doesn't matter, i.e., '1 2 3 4' is same as '3 2 4 1'. Entering duplicate channels, eg. in '1 2 3 2' will result in an error. Entering an invalid channel number, i.e., a number greater than the maximum number of the channels will result in an error. If set to auto, all the device channels will be streamed.
The user-preferred channel names. If set to auto, the channel names will be retrieved from the device. If the device doesn't have any specific channel names, the channel names will be set to 0 to SourceCh - 1. If set manually, names should be given for each channel in SourceChList
Interpolated is represented by 1 bit. The device sends data in packets over UDP connection which is not a reliable connection and hence may result in loss of some packets. The lost packets between two packets received from the device are linearly interpolated from the aforementioned two packets. The Interpolated state value is 1 if the packet is interpolated or 0 if the packet is received from the device.
The module also contains a function called GetDecimationFactor to query the current Decimation Factor from the server/device.
More details from a programmer's perspective can be found here Programming_Reference:NatusADC