Jump to content

Contributions:NihonKohdenSource: Difference between revisions

From BCI2000 Wiki
Pbrunner (talk | contribs)
No edit summary
 
(31 intermediate revisions by 4 users not shown)
Line 1: Line 1:
[[File:NihonKohdenDevice.jpg|thumb|Nihon Kohden|400px]]
==Synopsis==
==Synopsis==
The Nihon Kohden JE-120A amplifier is a clinical monitoring system capable of acquiring EEG or ECoG signals from up to 256 channels.  
The Nihon Kohden JE-120A amplifier is a clinical monitoring system capable of acquiring EEG or ECoG signals from up to 256 channels.  
Line 14: Line 16:


Peter Brunner (brunner@neurotechcenter.org)
Peter Brunner (brunner@neurotechcenter.org)
Wadsworth Center - National Center for Adaptive Neurotechnologies
Washington University in St. Louis
 
Markus Adamek (adamek@neurotechcenter.org)
Washington University in St. Louis
 
Alexander Belsten (belsten@neurotechcenter.org)
Washington University in St. Louis


===Version History===
===Version History===
Version 1.0: November 2015
# Version 1.0 (r4913): November 2015 - Initial release.
* #
# Version 1.1 (r6245): March 2021 - Updated to support x64.


===Source Code Revisions===
===Source Code Revisions===
*Initial development: 4913
*Initial development: 4913
*Tested under: #
*Tested under: 6245
*Known to compile under: 4913
*Known to compile under: 6245
*Broken since: --
*Broken since: --


==Functional Description==
==Functional Description==
This setup requires the following components:
* '''JE-120A amplifier''':
* '''QI-123A LAN converter''':
The amplifier is a clinical monitoring system capable of acquiring EEG or ECoG signals from up to 256 channels. Paired with the QI-123A LAN converter box, this system can provide a research data stream in addition to the clinical data stream. The research data stream can be sampled at up to 2kHz for 256 channels, 5kHz for 128 channels or 10kHz for 64 channels.
* '''Input range''': ±3.2 mV or ±12.8 mV (selectable)
* '''Effective resolution''': 16 bit (97.65 nV/LSB) or 16 bit (390.62 nV/LSB) (selectable)
* '''Input impedance''': 200 MΩ
* '''Sampling Rates''': 100Hz, 200Hz, 500Hz, 1000Hz, 2000Hz, 5000Hz, 10000Hz
==Clinical Setup==
To enable the research data stream, enable "Use QI-124A ports" under the JE-120 settings.


[[File:NihonKohdenEnableResearchDataStream.png|900px|alt text]]


==Installation==
==Installation==
 
This source module is located in a private directory of BCI2000. To build the source, you must have the necessary credentials, enable <code>BUILD_PRIVATE</code> in CMake, and modify the CMakeLists.txt in the private and SignalSource directories to build to NihonKohdenSource.


==Parameters==
==Parameters==
* '''SourceCh''' total number of channels to be acquired from the source module or auto for all channels (256 channels)
* '''SourceCh''' total number of channels to be acquired from the source module or auto for all channels enabled in the Neuroworkbench
* '''SampleBlockSize''' number of samples acquired in each block or auto for default setting (1/10th of sampling rate)
* '''SampleBlockSize''' number of samples acquired in each block or auto for default setting (1/10th of sampling rate)
** '''NOTE:''' <span style="text-decoration: underline;">Only specific combinations of SampleBlockSize and SampleRate are valid!  See [[#Valid Operating Modes]]</span>
** '''NOTE:''' <span style="text-decoration: underline;">Only specific combinations of SampleBlockSize and SampleRate are valid!  See [[#Valid Operating Modes]]</span>
Line 41: Line 63:
* '''SourceChOffset''' auto for default settings (0 for each channel).
* '''SourceChOffset''' auto for default settings (0 for each channel).
* '''SourceChGain''' auto for default settings (1 for each channel).
* '''SourceChGain''' auto for default settings (1 for each channel).
* '''SourceChList''' list of channels that should be acquired or auto for all channels
* '''SourceChList''' list of channels that should be acquired or auto for all channels enabled in the Neuroworkbench
* '''SourceBufferSize'''
* '''SourceBufferSize'''


===Valid Operating Modes===
===Valid Operating Modes===
The NihonKohdenSource only accepts specific sampling rates. The number of channels acquire is limited at sampling rates of 5000 Hz and above. The following table shows all valid combinations of sample rate and maximum number of channels.  
The NihonKohdenSource only accepts specific sampling rates. The number of channels acquired is limited at sampling rates of 5000 Hz and above. The following table shows all valid combinations of sample rate and maximum number of channels.  


{| border="1"
{| border="1"
!Sample Rate
!SamplingRate
!Valid Sample Block Sizes
!Max SourceCh
!Aliasing Filter Cut-Off
|-
|-
|100 Samples per second
![samples/sec]
|256 Channels
![channels]
![Hz]
|-
|-
|200 Samples per second
|100
|256 Channels
|256  
|30 or 35
|-
|-
|500 Samples per second
|200
|256 Channels
|256  
|60 or 70
|-
|-
|1000 Samples per second
|500
|256 Channels
|256  
|120
|-
|-
|2000 Samples per second
|1000
|256 Channels
|256
|300
|-
|-
|5000 Samples per second
|2000
|128 Channels
|256
|600
|-
|-
|10000 Samples per second
|5000
|64 Channels
|128
|1200
|-
|10000  
|64  
|3000
|}
|}


Line 76: Line 110:


===State Variables===
===State Variables===
* '''DC01''' to '''DC16''' DC Input data
** Digital Range: 0 to 65535
** Analog Range: 0xFFFF(Max)-0x8000(0V)-0x0000(Min). (Signed.)
** 1LSB: 366.3uV
* '''SpO2'''
** Digital Range: 0 to 100
** 0 means 0%, 100 means 100%
* '''EtCO2'''
** Digital Range: 0 to 100
** 0 means 0mmHg, 100 means 100mmHg
* '''BP1''' to '''BP2'''
** not implemented
* '''DigitalMark1''' to '''DigitalMark2'''
** not implemented
==DC Input From Other Devices==
Analog data from a g.TRIGbox and parallel port can be obtained though the JE120A's DC inputs. A parallel port Y-splitter and a custom cable is necessary. Connection of the custom cables and Y-splitter is outlined in the image below.
[[File:Parrallel Ports to JE120A.jpg|700px|alt text]]
The outputs from the g.TRIGbox and parallel port to the DC input of the JE120A are defined below. Note that the g.TRIGbox trigger outputs are the TTL pins. See [[Contributions:ParallelPortFilter]] for information on how to set the outputs of a parallel port from BCI2000.
{| class="wikitable"
! JE120A
!
! g.TRIGbox
!
! Parallel Port
!
|-
| Pin No.
| Signal
| Pin No.
| Signal
| Pin No.
| Signal
|-
| 1
| DC01
| 2
| Output A
| -
| -
|-
| 2
| DC02
| 3
| Output B
| -
| -
|-
| 3
| DC03
| 4
| Output C
| -
| -
|-
| 4
| DC04
| 5
| Output D
| -
| -
|-
| 5
| DC05
| 8
| Encoded Output
| -
| -
|-
| 6
| DC06
| -
| -
| -
| -
|-
| 7
| DC07
| -
| -
| -
| -
|-
| 8
| DC08
| -
| -
| -
| -
|-
| 9
| DC09
| -
| -
| 2
| Data0
|-
| 10
| DC10
| -
| -
| 3
| Data1
|-
| 11
| DC11
| -
| -
| 4
| Data2
|-
| 12
| DC12
| -
| -
| 5
| Data3
|-
| 13
| DC13
| -
| -
| 6
| Data4
|-
| 14
| DC14
| -
| -
| 7
| Data5
|-
| 15
| DC15
| -
| -
| 8
| Data6
|-
| 16
| DC16
| -
| -
| 9
| Data7
|-
| 24
| GND
| 1
| GND
| 24
| GND
|}
==Certification Results==
The Nihon Kohden certification was performed to give a better understanding of the restraints that must be placed on the system when using this device. Certification success criteria was determined internally and without rigor, and reflects our experience with psychophysical experiments and the performance we expect to need for the system. More information about certification testing can be found on the [[User Reference:BCI2000Certification|certification wiki page]].
===PC Specifications===
*Lenovo Thinkpad E580 (https://www.lenovo.com/us/en/laptops/thinkpad/thinkpad-e-series/ThinkPad-E580/p/22TP2TEE580)
*Processor: Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz 2.7GHz
*Installed Ram: 8.00 GB
*Graphics Card: Intel(R) HD Graphics 620
*System Type: 64-bit operating system, x64-based processor
*BCI2000 compiled with MSVC2019 and Qt 5.15.2
*g.USBamp UB with driver version 3.16.00 installed
===Certification Tests Performed===
Certification testing varied number of channels (4, 8, 16) task (P3Spell (7x7 grid), P3Spell (1x1 grid), CursorTask, CursorTaskLow, and StimulusPresentation), and tested audio and video latency, for a total of 15 performed tasks.
===Success Criteria and Overall Results===
{|border="1"
|Name
|Actual Latency
|Success Criteria
|Result
|-
|Timestamp Latency Mean
|2.81 µs
|1 ms
|passed
|-
|Timestamp Latency STD
|2.75 ms
|5 ms
|passed
|-
|Processing Latency Mean
|35 ms
|20 ms
|failed
|-
|Processing Latency STD
|164 ms
|10 ms
|failed
|-
|Video Latency Mean
|66.9 ms
|65 ms
|failed
|-
|Video Latency STD
|6.31 ms
|20 ms
|passed
|-
|Audio Latency Mean
|76.2 ms
|65 ms
|failed
|-
|Audio Latency STD
|3.94 ms
|20 ms
|passed
|}
<!--
===Individual Task Breakdown===
<div style="border:black 1px solid;width:1000px;height:600px;overflow:auto;">
Overall result: 0/15 tasks passed, 15/15 tasks failed, 15 tasks are missing data
global 2021-03-04T16:21:40
could not evaluate all 10 requirements:
  AmpLatency.mean() < time("7ms")  missing or invalid data
  AmpLatency.sdev() < time("2ms")  missing or invalid data
  TimestampLatency.mean() < time("1ms")  passed
  TimestampLatency.sdev() < time("1ms")  failed
  ProcessingLatency.mean() < time("20ms")  failed
  ProcessingLatency.sdev() < time("10ms")  failed
  VideoLatency.mean() < time("65ms")  failed
  VideoLatency.sdev() < time("20ms")  passed
  AudioLatency.mean() < time("65ms")  missing or invalid data
  AudioLatency.sdev() < time("20ms")  missing or invalid data
  AmpLatency -- interval between block begin, and amp digital out signal change:
  n=0, <x>=nan±nan
  TimestampLatency -- clock skew between sample clock, and SourceTime time stamp:
  n=3417, <x>=299µs±2.86ms
  ProcessingLatency -- time interval between block received, and stimulus triggered:
  n=654, <x>=32.7ms±151ms
  PresentationLatency -- time interval between stimulus trigger, and video memory change:
  n=679, <x>=11.3ms±11ms
  AudioPresentationLatency -- time interval between audio buffering, and estimated audio output:
  n=nan, <x>=nan±nan
  VideoLatency -- time interval between stimulus trigger, and video signal change detected:
  n=596, <x>=66.6ms±6.19ms
  AudioLatency -- time interval between stimulus trigger, and audio signal detected:
  n=nan, <x>=nan±nan
C:/BCI2000.x64/data/Certification_nihon_final/CursorTask_1000_16ch_100ms001/CursorTask_1000_16ch_100msS001R01.dat 2021-03-04T13:54:29
could not evaluate all 10 requirements:
  AmpLatency.mean() < time("7ms")  missing or invalid data
  AmpLatency.sdev() < time("2ms")  missing or invalid data
  TimestampLatency.mean() < time("1ms")  passed
  TimestampLatency.sdev() < time("1ms")  failed
  ProcessingLatency.mean() < time("20ms")  passed
  ProcessingLatency.sdev() < time("10ms")  passed
  VideoLatency.mean() < time("65ms")  failed
  VideoLatency.sdev() < time("20ms")  passed
  AudioLatency.mean() < time("65ms")  missing or invalid data
  AudioLatency.sdev() < time("20ms")  missing or invalid data
  AmpLatency -- interval between block begin, and amp digital out signal change:
  n=nan, <x>=nan±nan
  TimestampLatency -- clock skew between sample clock, and SourceTime time stamp:
  n=219, <x>=-2.54ms±2.22ms
  ProcessingLatency -- time interval between block received, and stimulus triggered:
  n=49, <x>=4.18ms±2.01ms
  PresentationLatency -- time interval between stimulus trigger, and video memory change:
  n=50, <x>=8.1ms±5.14ms
  AudioPresentationLatency -- time interval between audio buffering, and estimated audio output:
  n=nan, <x>=nan±nan
  VideoLatency -- time interval between stimulus trigger, and video signal change detected:
  n=49, <x>=68.9ms±4.24ms
  AudioLatency -- time interval between stimulus trigger, and audio signal detected:
  n=nan, <x>=nan±nan
C:/BCI2000.x64/data/Certification_nihon_final/CursorTask_1000_4ch_100ms001/CursorTask_1000_4ch_100msS001R01.dat 2021-03-04T13:52:40
could not evaluate all 10 requirements:
  AmpLatency.mean() < time("7ms")  missing or invalid data
  AmpLatency.sdev() < time("2ms")  missing or invalid data
  TimestampLatency.mean() < time("1ms")  failed
  TimestampLatency.sdev() < time("1ms")  failed
  ProcessingLatency.mean() < time("20ms")  passed
  ProcessingLatency.sdev() < time("10ms")  passed
  VideoLatency.mean() < time("65ms")  passed
  VideoLatency.sdev() < time("20ms")  passed
  AudioLatency.mean() < time("65ms")  missing or invalid data
  AudioLatency.sdev() < time("20ms")  missing or invalid data
  AmpLatency -- interval between block begin, and amp digital out signal change:
  n=nan, <x>=nan±nan
  TimestampLatency -- clock skew between sample clock, and SourceTime time stamp:
  n=215, <x>=1.83ms±2.73ms
  ProcessingLatency -- time interval between block received, and stimulus triggered:
  n=50, <x>=5.34ms±2.74ms
  PresentationLatency -- time interval between stimulus trigger, and video memory change:
  n=50, <x>=6.84ms±17.5ms
  AudioPresentationLatency -- time interval between audio buffering, and estimated audio output:
  n=nan, <x>=nan±nan
  VideoLatency -- time interval between stimulus trigger, and video signal change detected:
  n=49, <x>=64.8ms±4.47ms
  AudioLatency -- time interval between stimulus trigger, and audio signal detected:
  n=nan, <x>=nan±nan
C:/BCI2000.x64/data/Certification_nihon_final/CursorTask_1000_8ch_100ms001/CursorTask_1000_8ch_100msS001R01.dat 2021-03-04T13:53:44
could not evaluate all 10 requirements:
  AmpLatency.mean() < time("7ms")  missing or invalid data
  AmpLatency.sdev() < time("2ms")  missing or invalid data
  TimestampLatency.mean() < time("1ms")  passed
  TimestampLatency.sdev() < time("1ms")  failed
  ProcessingLatency.mean() < time("20ms")  passed
  ProcessingLatency.sdev() < time("10ms")  passed
  VideoLatency.mean() < time("65ms")  passed
  VideoLatency.sdev() < time("20ms")  passed
  AudioLatency.mean() < time("65ms")  missing or invalid data
  AudioLatency.sdev() < time("20ms")  missing or invalid data
  AmpLatency -- interval between block begin, and amp digital out signal change:
  n=nan, <x>=nan±nan
  TimestampLatency -- clock skew between sample clock, and SourceTime time stamp:
  n=219, <x>=804µs±2.37ms
  ProcessingLatency -- time interval between block received, and stimulus triggered:
  n=50, <x>=5.44ms±2.59ms
  PresentationLatency -- time interval between stimulus trigger, and video memory change:
  n=50, <x>=4.1ms±19ms
  AudioPresentationLatency -- time interval between audio buffering, and estimated audio output:
  n=nan, <x>=nan±nan
  VideoLatency -- time interval between stimulus trigger, and video signal change detected:
  n=49, <x>=64.3ms±5.8ms
  AudioLatency -- time interval between stimulus trigger, and audio signal detected:
  n=nan, <x>=nan±nan
C:/BCI2000.x64/data/Certification_nihon_final/CursorTaskLow_1000_16ch_100ms001/CursorTaskLow_1000_16ch_100msS001R01.dat 2021-03-04T13:56:29
could not evaluate all 10 requirements:
  AmpLatency.mean() < time("7ms")  missing or invalid data
  AmpLatency.sdev() < time("2ms")  missing or invalid data
  TimestampLatency.mean() < time("1ms")  failed
  TimestampLatency.sdev() < time("1ms")  failed
  ProcessingLatency.mean() < time("20ms")  passed
  ProcessingLatency.sdev() < time("10ms")  passed
  VideoLatency.mean() < time("65ms")  passed
  VideoLatency.sdev() < time("20ms")  passed
  AudioLatency.mean() < time("65ms")  missing or invalid data
  AudioLatency.sdev() < time("20ms")  missing or invalid data
  AmpLatency -- interval between block begin, and amp digital out signal change:
  n=nan, <x>=nan±nan
  TimestampLatency -- clock skew between sample clock, and SourceTime time stamp:
  n=220, <x>=2.39ms±2.65ms
  ProcessingLatency -- time interval between block received, and stimulus triggered:
  n=50, <x>=9.09ms±3.08ms
  PresentationLatency -- time interval between stimulus trigger, and video memory change:
  n=50, <x>=7.1ms±5.17ms
  AudioPresentationLatency -- time interval between audio buffering, and estimated audio output:
  n=nan, <x>=nan±nan
  VideoLatency -- time interval between stimulus trigger, and video signal change detected:
  n=49, <x>=61.9ms±2.85ms
  AudioLatency -- time interval between stimulus trigger, and audio signal detected:
  n=nan, <x>=nan±nan
C:/BCI2000.x64/data/Certification_nihon_final/CursorTaskLow_1000_4ch_100ms001/CursorTaskLow_1000_4ch_100msS001R01.dat 2021-03-04T13:55:08
could not evaluate all 10 requirements:
  AmpLatency.mean() < time("7ms")  missing or invalid data
  AmpLatency.sdev() < time("2ms")  missing or invalid data
  TimestampLatency.mean() < time("1ms")  failed
  TimestampLatency.sdev() < time("1ms")  failed
  ProcessingLatency.mean() < time("20ms")  passed
  ProcessingLatency.sdev() < time("10ms")  passed
  VideoLatency.mean() < time("65ms")  passed
  VideoLatency.sdev() < time("20ms")  passed
  AudioLatency.mean() < time("65ms")  missing or invalid data
  AudioLatency.sdev() < time("20ms")  missing or invalid data
  AmpLatency -- interval between block begin, and amp digital out signal change:
  n=nan, <x>=nan±nan
  TimestampLatency -- clock skew between sample clock, and SourceTime time stamp:
  n=219, <x>=2.08ms±2.78ms
  ProcessingLatency -- time interval between block received, and stimulus triggered:
  n=50, <x>=5.86ms±2.78ms
  PresentationLatency -- time interval between stimulus trigger, and video memory change:
  n=50, <x>=9.32ms±3.79ms
  AudioPresentationLatency -- time interval between audio buffering, and estimated audio output:
  n=nan, <x>=nan±nan
  VideoLatency -- time interval between stimulus trigger, and video signal change detected:
  n=49, <x>=64.1ms±2.39ms
  AudioLatency -- time interval between stimulus trigger, and audio signal detected:
  n=nan, <x>=nan±nan
C:/BCI2000.x64/data/Certification_nihon_final/CursorTaskLow_1000_8ch_100ms001/CursorTaskLow_1000_8ch_100msS001R01.dat 2021-03-04T13:55:45
could not evaluate all 10 requirements:
  AmpLatency.mean() < time("7ms")  missing or invalid data
  AmpLatency.sdev() < time("2ms")  missing or invalid data
  TimestampLatency.mean() < time("1ms")  failed
  TimestampLatency.sdev() < time("1ms")  failed
  ProcessingLatency.mean() < time("20ms")  passed
  ProcessingLatency.sdev() < time("10ms")  passed
  VideoLatency.mean() < time("65ms")  failed
  VideoLatency.sdev() < time("20ms")  passed
  AudioLatency.mean() < time("65ms")  missing or invalid data
  AudioLatency.sdev() < time("20ms")  missing or invalid data
  AmpLatency -- interval between block begin, and amp digital out signal change:
  n=nan, <x>=nan±nan
  TimestampLatency -- clock skew between sample clock, and SourceTime time stamp:
  n=220, <x>=3.46ms±2.48ms
  ProcessingLatency -- time interval between block received, and stimulus triggered:
  n=50, <x>=8.04ms±2.55ms
  PresentationLatency -- time interval between stimulus trigger, and video memory change:
  n=50, <x>=12.9ms±7.38ms
  AudioPresentationLatency -- time interval between audio buffering, and estimated audio output:
  n=nan, <x>=nan±nan
  VideoLatency -- time interval between stimulus trigger, and video signal change detected:
  n=49, <x>=65.2ms±5.02ms
  AudioLatency -- time interval between stimulus trigger, and audio signal detected:
  n=nan, <x>=nan±nan
C:/BCI2000.x64/data/Certification_nihon_final/P3Spell_1000_16ch_100ms001/P3Spell_1000_16ch_100msS001R01.dat 2021-03-04T13:50:11
could not evaluate all 10 requirements:
  AmpLatency.mean() < time("7ms")  missing or invalid data
  AmpLatency.sdev() < time("2ms")  missing or invalid data
  TimestampLatency.mean() < time("1ms")  passed
  TimestampLatency.sdev() < time("1ms")  failed
  ProcessingLatency.mean() < time("20ms")  failed
  ProcessingLatency.sdev() < time("10ms")  failed
  VideoLatency.mean() < time("65ms")  passed
  VideoLatency.sdev() < time("20ms")  passed
  AudioLatency.mean() < time("65ms")  missing or invalid data
  AudioLatency.sdev() < time("20ms")  missing or invalid data
  AmpLatency -- interval between block begin, and amp digital out signal change:
  n=nan, <x>=nan±nan
  TimestampLatency -- clock skew between sample clock, and SourceTime time stamp:
  n=291, <x>=-2.07ms±1.79ms
  ProcessingLatency -- time interval between block received, and stimulus triggered:
  n=16, <x>=389ms±645ms
  PresentationLatency -- time interval between stimulus trigger, and video memory change:
  n=20, <x>=28ms±5.56ms
  AudioPresentationLatency -- time interval between audio buffering, and estimated audio output:
  n=nan, <x>=nan±nan
  VideoLatency -- time interval between stimulus trigger, and video signal change detected:
  n=1, <x>=45.9ms±0
  AudioLatency -- time interval between stimulus trigger, and audio signal detected:
  n=nan, <x>=nan±nan
C:/BCI2000.x64/data/Certification_nihon_final/P3Spell_1000_4ch_100ms001/P3Spell_1000_4ch_100msS001R01.dat 2021-03-04T13:48:40
could not evaluate all 10 requirements:
  AmpLatency.mean() < time("7ms")  missing or invalid data
  AmpLatency.sdev() < time("2ms")  missing or invalid data
  TimestampLatency.mean() < time("1ms")  passed
  TimestampLatency.sdev() < time("1ms")  failed
  ProcessingLatency.mean() < time("20ms")  passed
  ProcessingLatency.sdev() < time("10ms")  passed
  VideoLatency.mean() < time("65ms")  failed
  VideoLatency.sdev() < time("20ms")  passed
  AudioLatency.mean() < time("65ms")  missing or invalid data
  AudioLatency.sdev() < time("20ms")  missing or invalid data
  AmpLatency -- interval between block begin, and amp digital out signal change:
  n=nan, <x>=nan±nan
  TimestampLatency -- clock skew between sample clock, and SourceTime time stamp:
  n=290, <x>=-59.1µs±1.98ms
  ProcessingLatency -- time interval between block received, and stimulus triggered:
  n=18, <x>=2.85ms±1.75ms
  PresentationLatency -- time interval between stimulus trigger, and video memory change:
  n=20, <x>=27.1ms±5.46ms
  AudioPresentationLatency -- time interval between audio buffering, and estimated audio output:
  n=nan, <x>=nan±nan
  VideoLatency -- time interval between stimulus trigger, and video signal change detected:
  n=4, <x>=85.2ms±2.19ms
  AudioLatency -- time interval between stimulus trigger, and audio signal detected:
  n=nan, <x>=nan±nan
C:/BCI2000.x64/data/Certification_nihon_final/P3Spell_1000_8ch_100ms001/P3Spell_1000_8ch_100msS001R01.dat 2021-03-04T13:49:26
could not evaluate all 10 requirements:
  AmpLatency.mean() < time("7ms")  missing or invalid data
  AmpLatency.sdev() < time("2ms")  missing or invalid data
  TimestampLatency.mean() < time("1ms")  passed
  TimestampLatency.sdev() < time("1ms")  failed
  ProcessingLatency.mean() < time("20ms")  failed
  ProcessingLatency.sdev() < time("10ms")  failed
  VideoLatency.mean() < time("65ms")  failed
  VideoLatency.sdev() < time("20ms")  passed
  AudioLatency.mean() < time("65ms")  missing or invalid data
  AudioLatency.sdev() < time("20ms")  missing or invalid data
  AmpLatency -- interval between block begin, and amp digital out signal change:
  n=nan, <x>=nan±nan
  TimestampLatency -- clock skew between sample clock, and SourceTime time stamp:
  n=291, <x>=-1.26ms±1.26ms
  ProcessingLatency -- time interval between block received, and stimulus triggered:
  n=16, <x>=102ms±387ms
  PresentationLatency -- time interval between stimulus trigger, and video memory change:
  n=20, <x>=28ms±7.5ms
  AudioPresentationLatency -- time interval between audio buffering, and estimated audio output:
  n=nan, <x>=nan±nan
  VideoLatency -- time interval between stimulus trigger, and video signal change detected:
  n=15, <x>=86.1ms±4.06ms
  AudioLatency -- time interval between stimulus trigger, and audio signal detected:
  n=nan, <x>=nan±nan
C:/BCI2000.x64/data/Certification_nihon_final/P3SpellSingle_1000_16ch_100ms001/P3SpellSingle_1000_16ch_100msS001R01.dat 2021-03-04T13:52:06
could not evaluate all 10 requirements:
  AmpLatency.mean() < time("7ms")  missing or invalid data
  AmpLatency.sdev() < time("2ms")  missing or invalid data
  TimestampLatency.mean() < time("1ms")  passed
  TimestampLatency.sdev() < time("1ms")  failed
  ProcessingLatency.mean() < time("20ms")  passed
  ProcessingLatency.sdev() < time("10ms")  passed
  VideoLatency.mean() < time("65ms")  failed
  VideoLatency.sdev() < time("20ms")  passed
  AudioLatency.mean() < time("65ms")  missing or invalid data
  AudioLatency.sdev() < time("20ms")  missing or invalid data
  AmpLatency -- interval between block begin, and amp digital out signal change:
  n=nan, <x>=nan±nan
  TimestampLatency -- clock skew between sample clock, and SourceTime time stamp:
  n=131, <x>=-227µs±1.11ms
  ProcessingLatency -- time interval between block received, and stimulus triggered:
  n=39, <x>=3.11ms±947µs
  PresentationLatency -- time interval between stimulus trigger, and video memory change:
  n=40, <x>=9.68ms±8.75ms
  AudioPresentationLatency -- time interval between audio buffering, and estimated audio output:
  n=nan, <x>=nan±nan
  VideoLatency -- time interval between stimulus trigger, and video signal change detected:
  n=40, <x>=67ms±6.66ms
  AudioLatency -- time interval between stimulus trigger, and audio signal detected:
  n=nan, <x>=nan±nan
C:/BCI2000.x64/data/Certification_nihon_final/P3SpellSingle_1000_4ch_100ms001/P3SpellSingle_1000_4ch_100msS001R01.dat 2021-03-04T13:51:02
could not evaluate all 10 requirements:
  AmpLatency.mean() < time("7ms")  missing or invalid data
  AmpLatency.sdev() < time("2ms")  missing or invalid data
  TimestampLatency.mean() < time("1ms")  passed
  TimestampLatency.sdev() < time("1ms")  failed
  ProcessingLatency.mean() < time("20ms")  failed
  ProcessingLatency.sdev() < time("10ms")  failed
  VideoLatency.mean() < time("65ms")  failed
  VideoLatency.sdev() < time("20ms")  passed
  AudioLatency.mean() < time("65ms")  missing or invalid data
  AudioLatency.sdev() < time("20ms")  missing or invalid data
  AmpLatency -- interval between block begin, and amp digital out signal change:
  n=nan, <x>=nan±nan
  TimestampLatency -- clock skew between sample clock, and SourceTime time stamp:
  n=131, <x>=-1.21ms±1.79ms
  ProcessingLatency -- time interval between block received, and stimulus triggered:
  n=36, <x>=51.8ms±111ms
  PresentationLatency -- time interval between stimulus trigger, and video memory change:
  n=40, <x>=15.5ms±7.06ms
  AudioPresentationLatency -- time interval between audio buffering, and estimated audio output:
  n=nan, <x>=nan±nan
  VideoLatency -- time interval between stimulus trigger, and video signal change detected:
  n=6, <x>=70.7ms±927µs
  AudioLatency -- time interval between stimulus trigger, and audio signal detected:
  n=nan, <x>=nan±nan
C:/BCI2000.x64/data/Certification_nihon_final/P3SpellSingle_1000_8ch_100ms001/P3SpellSingle_1000_8ch_100msS001R01.dat 2021-03-04T13:51:36
could not evaluate all 10 requirements:
  AmpLatency.mean() < time("7ms")  missing or invalid data
  AmpLatency.sdev() < time("2ms")  missing or invalid data
  TimestampLatency.mean() < time("1ms")  passed
  TimestampLatency.sdev() < time("1ms")  failed
  ProcessingLatency.mean() < time("20ms")  passed
  ProcessingLatency.sdev() < time("10ms")  passed
  VideoLatency.mean() < time("65ms")  failed
  VideoLatency.sdev() < time("20ms")  passed
  AudioLatency.mean() < time("65ms")  missing or invalid data
  AudioLatency.sdev() < time("20ms")  missing or invalid data
  AmpLatency -- interval between block begin, and amp digital out signal change:
  n=nan, <x>=nan±nan
  TimestampLatency -- clock skew between sample clock, and SourceTime time stamp:
  n=132, <x>=137µs±1.25ms
  ProcessingLatency -- time interval between block received, and stimulus triggered:
  n=39, <x>=3.39ms±1.34ms
  PresentationLatency -- time interval between stimulus trigger, and video memory change:
  n=40, <x>=8.05ms±7.17ms
  AudioPresentationLatency -- time interval between audio buffering, and estimated audio output:
  n=nan, <x>=nan±nan
  VideoLatency -- time interval between stimulus trigger, and video signal change detected:
  n=40, <x>=67ms±6.31ms
  AudioLatency -- time interval between stimulus trigger, and audio signal detected:
  n=nan, <x>=nan±nan
C:/BCI2000.x64/data/Certification_nihon_final/StimulusPresentationAV_1000_16ch_100ms001/StimulusPresentationAV_1000_16ch_100msS001R01.dat 2021-03-04T13:57:58
could not evaluate all 10 requirements:
  AmpLatency.mean() < time("7ms")  missing or invalid data
  AmpLatency.sdev() < time("2ms")  missing or invalid data
  TimestampLatency.mean() < time("1ms")  failed
  TimestampLatency.sdev() < time("1ms")  failed
  ProcessingLatency.mean() < time("20ms")  passed
  ProcessingLatency.sdev() < time("10ms")  passed
  VideoLatency.mean() < time("65ms")  failed
  VideoLatency.sdev() < time("20ms")  passed
  AudioLatency.mean() < time("65ms")  failed
  AudioLatency.sdev() < time("20ms")  passed
  AmpLatency -- interval between block begin, and amp digital out signal change:
  n=nan, <x>=nan±nan
  TimestampLatency -- clock skew between sample clock, and SourceTime time stamp:
  n=209, <x>=1.77ms±2.55ms
  ProcessingLatency -- time interval between block received, and stimulus triggered:
  n=48, <x>=5.23ms±2.3ms
  PresentationLatency -- time interval between stimulus trigger, and video memory change:
  n=49, <x>=12.5ms±7.65ms
  AudioPresentationLatency -- time interval between audio buffering, and estimated audio output:
  n=49, <x>=39.7ms±2.34ms
  VideoLatency -- time interval between stimulus trigger, and video signal change detected:
  n=49, <x>=66.5ms±4.88ms
  AudioLatency -- time interval between stimulus trigger, and audio signal detected:
  n=49, <x>=75.4ms±2.29ms
C:/BCI2000.x64/data/Certification_nihon_final/StimulusPresentationAV_1000_4ch_100ms001/StimulusPresentationAV_1000_4ch_100msS001R01.dat 2021-03-04T13:56:59
could not evaluate all 10 requirements:
  AmpLatency.mean() < time("7ms")  missing or invalid data
  AmpLatency.sdev() < time("2ms")  missing or invalid data
  TimestampLatency.mean() < time("1ms")  passed
  TimestampLatency.sdev() < time("1ms")  failed
  ProcessingLatency.mean() < time("20ms")  failed
  ProcessingLatency.sdev() < time("10ms")  failed
  VideoLatency.mean() < time("65ms")  failed
  VideoLatency.sdev() < time("20ms")  passed
  AudioLatency.mean() < time("65ms")  failed
  AudioLatency.sdev() < time("20ms")  passed
  AmpLatency -- interval between block begin, and amp digital out signal change:
  n=nan, <x>=nan±nan
  TimestampLatency -- clock skew between sample clock, and SourceTime time stamp:
  n=210, <x>=926µs±2.31ms
  ProcessingLatency -- time interval between block received, and stimulus triggered:
  n=46, <x>=29.8ms±97.7ms
  PresentationLatency -- time interval between stimulus trigger, and video memory change:
  n=50, <x>=12.6ms±6.24ms
  AudioPresentationLatency -- time interval between audio buffering, and estimated audio output:
  n=50, <x>=40ms±2.58ms
  VideoLatency -- time interval between stimulus trigger, and video signal change detected:
  n=49, <x>=67.3ms±2.79ms
  AudioLatency -- time interval between stimulus trigger, and audio signal detected:
  n=50, <x>=72.6ms±2.4ms
C:/BCI2000.x64/data/Certification_nihon_final/StimulusPresentationAV_1000_8ch_100ms001/StimulusPresentationAV_1000_8ch_100msS001R01.dat 2021-03-04T13:57:28
could not evaluate all 10 requirements:
  AmpLatency.mean() < time("7ms")  missing or invalid data
  AmpLatency.sdev() < time("2ms")  missing or invalid data
  TimestampLatency.mean() < time("1ms")  passed
  TimestampLatency.sdev() < time("1ms")  failed
  ProcessingLatency.mean() < time("20ms")  failed
  ProcessingLatency.sdev() < time("10ms")  failed
  VideoLatency.mean() < time("65ms")  failed
  VideoLatency.sdev() < time("20ms")  passed
  AudioLatency.mean() < time("65ms")  failed
  AudioLatency.sdev() < time("20ms")  passed
  AmpLatency -- interval between block begin, and amp digital out signal change:
  n=nan, <x>=nan±nan
  TimestampLatency -- clock skew between sample clock, and SourceTime time stamp:
  n=210, <x>=-2.46ms±2.29ms
  ProcessingLatency -- time interval between block received, and stimulus triggered:
  n=47, <x>=162ms±194ms
  PresentationLatency -- time interval between stimulus trigger, and video memory change:
  n=50, <x>=10.2ms±7.56ms
  AudioPresentationLatency -- time interval between audio buffering, and estimated audio output:
  n=50, <x>=41.7ms±2.48ms
  VideoLatency -- time interval between stimulus trigger, and video signal change detected:
  n=49, <x>=69ms±4.73ms
  AudioLatency -- time interval between stimulus trigger, and audio signal detected:
  n=50, <x>=81.2ms±3.09ms
</div>
-->


==See also==
==See also==

Latest revision as of 21:37, 3 September 2024

Nihon Kohden

Synopsis

The Nihon Kohden JE-120A amplifier is a clinical monitoring system capable of acquiring EEG or ECoG signals from up to 256 channels. Paired with the QI-123A LAN converter box, this system can provide a research data stream in addition to the clinical data stream. The research data stream can be sampled at up to 2kHz for 256 channels, 5kHz for 128 channels or 10kHz for 64 channels.

Location

http://www.bci2000.org/svn/trunk/src/private/SignalSource/NihonKohdenSource

Versioning

Authors

Griffin Milsap (griffin.milsap@gmail.com) Johns Hopkins University

Peter Brunner (brunner@neurotechcenter.org) Washington University in St. Louis

Markus Adamek (adamek@neurotechcenter.org) Washington University in St. Louis

Alexander Belsten (belsten@neurotechcenter.org) Washington University in St. Louis

Version History

  1. Version 1.0 (r4913): November 2015 - Initial release.
  2. Version 1.1 (r6245): March 2021 - Updated to support x64.

Source Code Revisions

  • Initial development: 4913
  • Tested under: 6245
  • Known to compile under: 6245
  • Broken since: --

Functional Description

This setup requires the following components:

  • JE-120A amplifier:
  • QI-123A LAN converter:

The amplifier is a clinical monitoring system capable of acquiring EEG or ECoG signals from up to 256 channels. Paired with the QI-123A LAN converter box, this system can provide a research data stream in addition to the clinical data stream. The research data stream can be sampled at up to 2kHz for 256 channels, 5kHz for 128 channels or 10kHz for 64 channels.

  • Input range: ±3.2 mV or ±12.8 mV (selectable)
  • Effective resolution: 16 bit (97.65 nV/LSB) or 16 bit (390.62 nV/LSB) (selectable)
  • Input impedance: 200 MΩ
  • Sampling Rates: 100Hz, 200Hz, 500Hz, 1000Hz, 2000Hz, 5000Hz, 10000Hz

Clinical Setup

To enable the research data stream, enable "Use QI-124A ports" under the JE-120 settings.

alt text

Installation

This source module is located in a private directory of BCI2000. To build the source, you must have the necessary credentials, enable BUILD_PRIVATE in CMake, and modify the CMakeLists.txt in the private and SignalSource directories to build to NihonKohdenSource.

Parameters

  • SourceCh total number of channels to be acquired from the source module or auto for all channels enabled in the Neuroworkbench
  • SampleBlockSize number of samples acquired in each block or auto for default setting (1/10th of sampling rate)
  • SampleRate determines the rate at which the device samples data.
  • ChannelNames is a convenience parameter. Name channels here and they can be referenced by these names later.
  • SourceChOffset auto for default settings (0 for each channel).
  • SourceChGain auto for default settings (1 for each channel).
  • SourceChList list of channels that should be acquired or auto for all channels enabled in the Neuroworkbench
  • SourceBufferSize

Valid Operating Modes

The NihonKohdenSource only accepts specific sampling rates. The number of channels acquired is limited at sampling rates of 5000 Hz and above. The following table shows all valid combinations of sample rate and maximum number of channels.

SamplingRate Max SourceCh Aliasing Filter Cut-Off
[samples/sec] [channels] [Hz]
100 256 30 or 35
200 256 60 or 70
500 256 120
1000 256 300
2000 256 600
5000 128 1200
10000 64 3000

Valid Operating Modes

State Variables

  • DC01 to DC16 DC Input data
    • Digital Range: 0 to 65535
    • Analog Range: 0xFFFF(Max)-0x8000(0V)-0x0000(Min). (Signed.)
    • 1LSB: 366.3uV
  • SpO2
    • Digital Range: 0 to 100
    • 0 means 0%, 100 means 100%
  • EtCO2
    • Digital Range: 0 to 100
    • 0 means 0mmHg, 100 means 100mmHg
  • BP1 to BP2
    • not implemented
  • DigitalMark1 to DigitalMark2
    • not implemented

DC Input From Other Devices

Analog data from a g.TRIGbox and parallel port can be obtained though the JE120A's DC inputs. A parallel port Y-splitter and a custom cable is necessary. Connection of the custom cables and Y-splitter is outlined in the image below.

alt text

The outputs from the g.TRIGbox and parallel port to the DC input of the JE120A are defined below. Note that the g.TRIGbox trigger outputs are the TTL pins. See Contributions:ParallelPortFilter for information on how to set the outputs of a parallel port from BCI2000.

JE120A g.TRIGbox Parallel Port
Pin No. Signal Pin No. Signal Pin No. Signal
1 DC01 2 Output A - -
2 DC02 3 Output B - -
3 DC03 4 Output C - -
4 DC04 5 Output D - -
5 DC05 8 Encoded Output - -
6 DC06 - - - -
7 DC07 - - - -
8 DC08 - - - -
9 DC09 - - 2 Data0
10 DC10 - - 3 Data1
11 DC11 - - 4 Data2
12 DC12 - - 5 Data3
13 DC13 - - 6 Data4
14 DC14 - - 7 Data5
15 DC15 - - 8 Data6
16 DC16 - - 9 Data7
24 GND 1 GND 24 GND

Certification Results

The Nihon Kohden certification was performed to give a better understanding of the restraints that must be placed on the system when using this device. Certification success criteria was determined internally and without rigor, and reflects our experience with psychophysical experiments and the performance we expect to need for the system. More information about certification testing can be found on the certification wiki page.

PC Specifications

Certification Tests Performed

Certification testing varied number of channels (4, 8, 16) task (P3Spell (7x7 grid), P3Spell (1x1 grid), CursorTask, CursorTaskLow, and StimulusPresentation), and tested audio and video latency, for a total of 15 performed tasks.

Success Criteria and Overall Results

Name Actual Latency Success Criteria Result
Timestamp Latency Mean 2.81 µs 1 ms passed
Timestamp Latency STD 2.75 ms 5 ms passed
Processing Latency Mean 35 ms 20 ms failed
Processing Latency STD 164 ms 10 ms failed
Video Latency Mean 66.9 ms 65 ms failed
Video Latency STD 6.31 ms 20 ms passed
Audio Latency Mean 76.2 ms 65 ms failed
Audio Latency STD 3.94 ms 20 ms passed


See also

User Reference:Filters, Contributions:ADCs