Contributions:BioPacLogger
Synopsis
The BioPacLogger module enables signal acquisition from BioPac MP160
Location
http://www.bci2000.org/svn/trunk/src/private/Extensions/BioPacLogger
Versioning
Authors
Huiling Huang (huiling@neurotechcenter.org)
Version History
- 2022-04-19: Initial public release by Huiling Huang (huiling@neurotechcenter.org)
Video Overview
Functional Description
Acquires data from BioPac MP160 system: 1)BN-RSPEC(respiration signal) 2)BN-PPGED(skin conductance measurement) 3)BN-EGG2(electrogastrogram) 4)BN-EMG2(Electromyography)
Integration into BCI2000
To enable the extension in your CMake configuration, enable EXTENSIONS_BIOPACLOGGER in the Extensions folder of the CMake GUI and then generate the BCI2000 Visual Studio solution in CMake. Next, open the solution with Visual Studio and rebuild the BCI2000FrameworkSigSrcModule. Then rebuild any signal source module with which you want to use the extension.
Once the extension is built into the source module, you can enable it by appending --BioPacLogger=1 to the source module start executable command in your batch file.
Hardware Set Up
Figure 1 shows all the necessary hardware from BioPac, Make sure that you have MP160 and wireless amplifier, power supply for MP 160, Ethernet USB adapter, and Ethernet cable which could connect your BioPac with BCI2000 PC. The hardware connection is simple(Figure 2). Using the Ethernet cable plug on MP 160 and the other side plug on the Ethernet USB adapter. Then connect the adapter to the BCI2000 PC. Alternatively, if your PC got an Ethernet port, you can directly connect the PC with MP 160 using an Ethernet cable.
-
Figure 1: BioPac hardware.
-
Figure 2: Hardware connection.
Calibration
For skin conductance measurements, we need to first calibrate the amplifier before data are acquired. After configuration setup, press “Set Config”, and a dialog will pop up. Then disconnect the leads to electrodes, press “Calibrate”.
How does the BCI2000 source signal synchronize the MP160 signal in real-time?
BCI2000 acquired the MP160 signal from a separate thread, which assigns samples by matching the timestamp between the source signal and the logger samples. BCI2000 does this assignment work within one BCI2000 block. The MP160 API does not return a timestamp for each sample, so we manually assign the timestamps to the MP160 samples after we get one block of samples from the API. This means the latency of the MP160 logger is one MP160 block duration plus the hardware buffer delay (roughly 25 ~27ms). That is MP160 latency = BioPacBlockSize/BioPacSamplingRate + (25~27ms).
Data loss
The duration is not identical for the MP160 to acquire every data block. Sometimes it is less than expected. So the start time we are assigning to the next block is a few milliseconds earlier than expected. So there is an overlap between the current and next block.(see figure 3 "overlap"). In this case, the later sample will cover the previous one. In reverse, there is a gap between the current and next block.(see figure 3 "gap"). During the gap, the sample keeps the previous value until it gets a new one.
-
Figure 3: why MP160 data loss happened.
Parameters
BioPacSourceCh
The number of active channels of MP160. This number must exactly match the number of wireless transmitters you are planning to connect to MP 160.
BioPacChList
The channel number list of connected channels, which must be in ascending order.
BioPacSourceChType
The list of the corresponding signal type matches the order of BioPacChList. So far, we have implemented respiration, EGG, EMG, and EDA signals, so only four signal types above are allowed.
BioPacEachChSampleNum
The number of samples in each channel to acquire from hardware API. For almost all cases, you can keep it as the default value of 200.
BioPacSamplingRate
The BioPac MP160 supports the following sampling rates: 0.1, 0.125, 0.2, 0.25, 0.4, 0.5, 0.625, 1, 1.25, 2, 2.5, 4, 5, 6.25, 10, 20, 25, 40, 50, 62.5, 100, 125, 200, 250, 400, 500, 625, 1000, 1250, 2000, 2500, 4000, 5000, 6250, 10000, 12500, 20000, 25000, 40000, 50000, 100000, 20000HZ. The maximum sampling rate for BN-RSPEC, BN-PPGED, BN-EGG2, and BN-EMG2 is 2000HZ. So in this case, the maximum sampling rate here is 2000HZ.
State and Event Variables
BioPac_chX is the signal from channel X. X is the channel number.
Data Scale
Different BioPac amplifiers have different signal ranges. Respiration ranges from negative 10 to 10 voltage; EDA ranges from 0 to 50 microsiemens; EMG and EGG range from negative 10 to 10 micro-voltage. These BioPac components will be stored as bci2000 events to be used for real-time feedback or evaluated after the experiment is complete.
| Signal Type | Signal Range | Signal Resolution |
|---|---|---|
| Respiration | [-10, 10] V | 13 bits |
| EDA | [0, 50] µS | 13 bits |
| EGG | [-10, 10] mV | 16 bits |
| EMG | [-10, 10] mV | 16 bits |
BCI2000 doesn’t record the data in voltages or microsiemens. We rescale the data to 32 unsigned integers. Below is the scale equation. min is the minimum value of data. max is the maximum value of data. For example, For EDA signal, min is 0, max is 50, for respiration, EGG, and EMG signal, min is negative 10, max is 10.
-
Figure 4: Data Scale Equation.



