
EEG Processor Users Manual

変更履歴
2007/08/10 ver 0.1A (Sako)
第一版
2007/08/23 ver 0.1B (Sako)
BDFファイルロード時のBDF_SPEC構造体にfigure_info構造体フィールドを追加した。


1. 概要	5
1-1. はじめに	5
1-1-1. 対象読者	5
1-1-2. EEG_Toolkit	5
1-2. 環境	5
1-3. 何ができるか	5
2. チュートリアル	6
2-1. 準備	6
2-1-1. 環境の確認	6
2-1-2. チュートリアルの実行	6
2-2. BDFからチャネルデータを取り出す	6
2-2-1. 概要	6
2-2-2. 実行	6
2-2-3. 入力	7
2-2-4. 成果物	7
2-2-5. 注意事項	7
2-3. チャネルデータから、EEGデータを抽出する	8
2-3-1. 概要	8
2-3-2. 実行	8
2-3-3. 入力	8
2-3-4. 成果物	8
2-4. トリガ情報を取得する	9
2-4-1. 処理モード	9
2-4-2. 留意事項	9
2-4-3. 自動でトリガ情報を取得する	9
2-4-4. 半自動でトリガ情報を取得する	10
2-4-5. 手動でトリガ情報を取得する	11
2-5. トリガ情報を基にEEGデータを分割する	11
2-5-1. 概要	11
2-5-2. 実行	11
2-5-3. 入力	12
2-5-4. 成果物	12
3. 関数詳細	13
3-1. vb_make_msrmnt_data	13
3-1-1. 概要	13
3-1-2. 引数	13
3-1-3. 戻り値	14
3-2. vb_mark_trigger	15
3-2-1. 概要	15
3-2-2. 引数	15
3-2-3. 戻り値	15

1. 
概要
1-1. はじめに
この文書では、VBMEGが提供するEEGデータ処理プログラムの使い方について解説します。
1-1-1. 対象読者
BDFファイルを持つEEGユーザが対象です。
1-1-2. EEG_Toolkit
以下の文書中では、このEEGデータ処理プログラムをEEGプロセッサと呼びます。
1-2. 環境
現状の実装で想定している環境は、次の通りです。
* BIOSEMI社のEEG測定器によるBDF形式ファイルを入力ファイルとする
* MATLAB6.5以上
1-3. 何ができるか
EEGプロセッサは、次の処理をすることができます。
1) BDFファイルから、チャネル毎のデータファイルを作成する
2) 対象となるチャネル、サンプルを指定してEEGデータを抽出する
3) トリガ情報を取得する(自動または手動)
4) トリガ情報を基に、EEGデータを分割する
2. 
チュートリアル
サンプルデータを用いて、典型的な使い方を実行してみましょう。
2-1. 準備
2-1-1. 環境の確認
チュートリアルの実行に先立ち、以下の環境を確認します。
* vbmegパスを通します(vbmeg関数を使用しているため)
* 以下に置いてあるサンプルデータを使用します
/home/cbi-data/sakot/eeg/sample_data/
* チュートリアルは次のテストプログラムを実行します
$VBMEG/script/vb_eeg_tutorial.m
このプログラムが存在することを確認します
パラメータ設定例は、このテストプログラムの記述を参考にしてください。パラメータ設定については後述します。
2-1-2. チュートリアルの実行
チュートリアルの実行は、MATLABコンソールからコマンドを入力することで行います。
(例)「コード1で実行する」
% vb_eeg_tutorial(1)
2-2. BDFからチャネルデータを取り出す
2-2-1. 概要
処理内容は次の通りです。
1) BDFファイルを読む
2) チャネルデータファイルを作成する
3) EEG-MATファイルを作成する
2-2-2. 実行
コード1で実行します。
% vb_eeg_tutorial(1)
2-2-2-1. 実行主体
内部ではvb_make_msrmnt_data関数が呼ばれます。vb_make_msrmnt_data関数については後述します。
2-2-3. 入力
2-2-3-1. 追加情報(2007/08/23)
bdf_spec.figure_info を新規に追加しました。
これは従来の”digit_file” および “face_file” に代わるもので、それぞれのファイルから取得していたパラメータを直接指定することができます。これにより、ファイルがなくても動かすことができるようになりました。この構造体の仕様は次のとおりです。
* .SensorPosition : センサー位置座標 [Nsensor x 3] (digit_file)
* .CoordType : コードタイプ<文字列> (例) “SPM_Right_m” 等 (digit_file)
* ChannelLabel : チャネルラベル <文字列のセル配列> {NChannel x 1} (digit_file)
* .Vcenter : 中心座標 [1 x 3] (face_file)
2-2-3-2. ファイル
* bdf_spec.bdf_file = BDFファイル(.bdf) : (sample) sample_mrmt.bdf
* bdf_spec.digit_file = DIGITIZERファイル(.digit.mat) : (sample) sample_mrmt.digit.mat
* bdf_spec.face_file = FACEファイル(.face.mat) : (sample) sample_mrmt.face.mat
2-2-3-3. パラメータ
* bdf_spec.device = [] (default)
* bdf_spec.primary_path = ‘../test_dir/test’
* bdf_spec.label_type = [] (default)
* bdf_spec.eeginfo_version = [] (default)
* ch_spec = [] (チャネルデータファイルの読み込みは行わない)
2-2-4. 成果物
カレントディレクトリ以下の’test_dir’ディレクトリに、以下のデータが作成されます。
* test.primary.eeg.mat (初期EEG-MATファイル)
* test_${channel_label}.ch.dat
2-2-5. 注意事項
2-2-5-1. チャネルラベル
センサの位置情報は、DIGITファイルが保持しています。一方、各センサの測定データはBDFファイルが保持しています。センサのことをチャネルとも呼びます。それぞれのファイルで、それぞれのチャネルに名前が付けられています。これを「チャネルラベル」と言います。
EEGプロセッサでは、DIGITファイルに記録されているチャネルラベルとBDFファイルに記録されているチャネルラベルとを照会することにより、位置情報と測定データとを統合します。DIGITファイルのチャネルラベルとBDFファイルのチャネルラベルとが一致しない場合には、位置座標として無効値が入ります。
2007/08/10現在、このチュートリアルが提供しているデータは、チャネルラベルが不一致のものであるため、成果物に含まれる座標値が正しくありません。とりあえず正しい座標値を入れるためには、Matlabデバッガを使い、次のように操作します。
* vb_read_bdf_save_ch_bin.m(L.97)、inner_rearrange_channel_label関数の呼び出し箇所にブレイクポイントを張る
* Matlabコンソール(Command Window)で次のように入力する
* > ChannelLabel_hardware(1:64) = ChannelLabel_standard’;
2-3. チャネルデータから、EEGデータを抽出する
2-3-1. 概要
処理内容は次の通りです。
1) 初期EEG-MATファイルを読む
2) チャネルデータファイルからEEGデータを抽出する
3) EEG-MATファイルを作成する
2-3-2. 実行
テストコード2で実行します。
% vb_eeg_tutorial(2)
2-3-2-1. 実行主体
内部ではvb_make_msrmnt_data関数が呼ばれます。vb_make_msrmnt_data関数については後述します。
2-3-3. 入力
2-3-3-1. ファイル
* 初期EEG-MATファイル(EEGinfo構造体をロードして使用する)
2-3-3-2. パラメータ
* ch_spec.old_info = 初期EEG-MATファイル(.primary.eeg.mat)からロードしたEEGinfo構造体
./test_dir/test.primary.eeg.mat
1) ch_spec.output_file = 出力されるEEG-MATファイル
2) ch_spec.to_read_swt = [] (default)
3) ch_spec.ch_list = [] (default)
4) ch_spec.time_from = [] (default)
* ch_spec.time_to = [] (default)
* bdf_spec = [] (BDFファイル読み込み処理をスキップする)
ch_specの初期設定では、全チャネルの全サンプルデータを読み出します。
2-3-4. 成果物
カレントディレクトリ以下の’test_dir’ディレクトリに、以下のデータが作成されます。
* test.eeg.mat
2-4. トリガ情報を取得する
取得したEEGデータから、トリガ情報を抽出、取得することができます。
2-4-1. 処理モード
この処理には大きく次の三つのモードがあります。
1) (自動) 自動でトリガチャネル(トリガ情報出力チャネル)を認識し、トリガポイントを取得する
2) (半自動) ユーザが指定したトリガチャネルからトリガポイントを取得する
3) (手動) トリガチャネルに依らず、ユーザの目視によりトリガポイントを取得する
内部ではvb_mark_trigger関数が呼ばれます。vb_mark_trigger関数については後述します。
2-4-2. 留意事項
2-4-2-1. トリガとするサンプル
一つのトリガ信号は数ミリ秒の幅を持っています。どの時点のサンプルを以て「トリガ」とするかを決めなければいけません。
デフォルトでは「開始サンプル番号」が適用されています。
開始サンプル番号以外には、終了サンプル番号、全サンプル番号が用意されていますが、現在、切替用ユーザインタフェイスを備えていません。変更する場合は、プログラムを一部書き換える(１行だけですが)必要があります。
2-4-2-2. GUI操作概要
指定したEEGデータのeeg_data('A1','B2', 'GSR1')をプロットしたfigureが表示されます。
X軸がサンプル、Y軸がEEG値です。
[RANGE]/[LINE]ボタンを[LINE]にするとマウスクリックでトリガをポイントすることができます。トリガラインを再クリックすると削除できます。
[SAVE]ボタンでトリガリストを保存することができます。
2-4-3. 自動でトリガ情報を取得する
2-4-3-1. 概要
処理内容は次の通りです。
4) 指定されたチャネルのEEGデータをプロットする
5) EEGinfoヘッダを読んで、自動でトリガチャネルを認識する
6) トリガチャネルからトリガポイント情報を取得する
7) 取得したトリガポイントにラインを引く
8) トリガリストファイルを作成する(手動)
2-4-3-2. 実行手順
1) コード3で実行します。
% vb_eeg_tutorial(3)
2) 指定したEEGデータのeeg_data('A1','B2','GSR1')をプロットしたfigureが表示されます。X軸がサンプル、Y軸がEEG値です。
3) そのグラフの上に、垂直線(X値一定)でトリガの線が引かれます。
4) [SAVE]ボタンをクリックして、トリガ情報を保存します。保存ファイルを’./test_dir/trigger_list.mat’としてください。
2-4-3-3. 入力
* measurement_file = EEG-MATファイル("./test_dir/test.eeg.mat" c.f. 2-3-4.)
* target_list = {'A1', 'B2', 'GSR1'}
* to_read_swt = ON
* output_file = [] (unused)
* auto_info.auto_detect = ON
2-4-3-4. 成果物
カレントディレクトリ以下の’test_dir’ディレクトリに、以下のデータが作成されます
trigger_list.mat (トリガリストファイル)
2-4-4. 半自動でトリガ情報を取得する
2-4-4-1. 概要
処理内容は次の通りです。
5) 指定されたチャネルのEEGデータをプロットする
6) 指定されたトリガチャネルを読み、トリガポイント情報を取得する
7) 取得したトリガポイントにラインを引く
8) トリガリストファイルを作成する(手動)
2-4-4-2. 実行
コード4で実行します。
% vb_eeg_tutorial(4)
トリガマーク用のGUIが表示されます。
2-4-4-3. 入力
* measurement_file = EEG-MATファイル("./test_dir/test.eeg.mat" c.f. 2-3-4.)
* target_list = {'A1', 'B2', 'GSR1'}
* to_read_swt = ON
* output_file = [] (unused)
* auto_info.auto_detect = OFF
* auto_info.trigger_channel = 'Status'
2-4-4-4. 成果物
カレントディレクトリ以下の’test_dir’ディレクトリに、以下のデータが作成されます
(トリガリストファイル)
2-4-5. 手動でトリガ情報を取得する
2-4-5-1. 概要
処理内容は次の通りです。
9) 指定されたチャネルのEEGデータをプロットする
10) 手作業でトリガポイントをクリックし、ラインを引く
11) トリガリストファイルを作成する(手動)
2-4-5-2. 実行
コード5で実行します。
% vb_eeg_tutorial(5)
トリガマーク用のGUIが表示されます。
2-4-5-3. 入力
* measurement_file = EEG-MATファイル("./test_dir/test.eeg.mat" c.f. 2-3-4.)
* target_list = {'A1', 'B2', 'GSR1'}
* to_read_swt = ON
* output_file = [] (unused)
* auto_info.auto_detect = OFF
* auto_info.trigger_channel = []
2-4-5-4. 成果物
カレントディレクトリ以下の’test_dir’ディレクトリに、以下のデータが作成されます
(トリガリストファイル)
2-5. トリガ情報を基にEEGデータを分割する
2-5-1. 概要
処理内容は次の通りです。
1) ベースとなるEEGデータを読む
2) トリガポイント、プレトリガ、ポストトリガ情報から、トライアル単位にデータを分割する
3) 分割して取り出したデータを、新規ファイルとしてEEG-MATファイルに保存する
  % output : .\test_dir\test_segmented.eeg.mat
  %
  % --------------------------------------------------------------------- %
2-5-2. 実行
コード6で実行します。
% vb_eeg_tutorial(6)
    <spec>
      : 切り出す幅は trial_specの二つのフィールド
      :   pre_trigger(トリガ前)
      :   post_trigger(トリガ後)
      : で指定できます。
      : 切り出す時間幅を指定できる segmented_ti (time interval)フィールド
      : も用意してあります。
2-5-3. 入力
2-5-3-1. ファイル
* EEG-MATファイル (./test_dir/test.eeg.mat) EEGinfoをロードする
* トリガリストファイル (./test_dir/trigger_list.mat ? c.f. 2-4-3-4) trigger_listをロードする
2-5-3-2. パラメータ
ch_specにtrial_spec構造体を渡します。
* bdf_spec = [] (BDFファイル読み込み処理はスキップする)
* BASE_EEG_FILE = [BASE_DIR filesep TEST_PREFIX '.eeg.mat']
* load(BASE_EEG_FILE, 'EEGinfo')
* ch_spec.old_info = EEGinfo
* ch_spec.output_file = './test_dir/test_segmented.eeg.mat'
* ch_spec.to_read_swt = OFF
* ch_spec.ch_list = []
* ch_spec.time_from = []
* ch_spec.time_to = []
* trial_spec.trigger_list = trigger_sample_list
* trial_spec.pre_trigger = 100
* trial_spec.post_trigger = 500
* trial_spec.segmented_ti = []
* trial_spec.segment_rule = 1
* ch_spec.trial_spec = trial_spec
2-5-4. 成果物
カレントディレクトリ以下の’test_dir’ディレクトリに、以下のデータが作成されます
test_segmented.eeg.mat
このファイルに保存されている eeg_dataデータは、各チャネル毎に、サンプル数が601(トリガ前100、トリガ後500)、トライアル数186個のデータに分割されています。
3. 関数詳細
3-1. vb_make_msrmnt_data
3-1-1. 概要
vb_make_msrmnt_data関数は、大きく二つの処理を担当します。
1) BDFファイルを読んでチャネルデータファイルを作成する
2) チャネルデータファイルから、指定チャネル、指定サンプルのデータを抽出する
3-1-2. 引数
3-1-2-1. read_bdf_spec
BDFファイルを読む処理の仕様を定義する構造体。これがemptyの場合は、BDFファイルを読む処理がスキップされる。フィールドは次の通り。
* .	bdf_file : BDFファイル(.bdf)
* .digit_file : DIGITIZERファイル(.digit.mat)
* .face_file : FACEファイル(.face.mat)
* .device : デバイス文字列、初期値は’BIOSEMI’
* .primary_path : 初期EEG-MATファイルおよびチャネルデータのパス＋プレフィクス
(例) ‘./test_dir/test’ ならば、./test_dir/test.primary.eeg.mat ファイルと、./test_dir/test_${チャネルラベル}.ch.datファイルができる
* .label_type : 使用するラベルタイプ、現在使用されていません
* .eeginfo_version : EEGinfo構造体のバージョン、現在、有効活用されていません
3-1-2-2. read_ch_spec
チャネルデータファイルを読む処理の仕様を定義する構造体。これがemptyの場合は、チャネルデータファイルを読む処理がスキップされる。フィールドは次の通り。
* .old_info : 基礎となるEEGinfo構造体
* .output_file : 出力EEG-MATファイル
* .to_read_swt : 読取スイッチ、ch_listフィールドで渡されるチャネルリストが読取なのか無視なのかを指定するスイッチ、boolean、trueならばch_listは読取チャネルリスト
* .ch_list : チャネルラベル文字列を羅列したリスト
* .time_from : 読み取る開始サンプル番号
* .time_to : 読み取る終了サンプル番号
* .trial_spec : トライアル分割時に分割仕様を規定する構造体、フィールドは次の通り
* .pre_trigger : トリガ前サンプル数 (A)
* .post_trigger : トリガ後サンプル数 (B)
* .segmented_ti : セグメント時間長 (C)
* .segment_rule : セグメントルール(1 or 2 or 3)
切り出すデータのサンプル数は(A)(B)(C)の三つのうち二つが与えられていることが必要。
セグメントルールでは、三つが与えられた場合に適用されるルールを指定する。
1) (A)と(B)
2) (A)と(C)
3) (B)と(C)
3-1-3. 戻り値
* MSRMNTfile : 更新されたファイル名
* MSRMNTinfo : 更新された情報構造体(EEGinfo)
3-2. 
vb_mark_trigger
3-2-1. 概要
トリガを取得する際に用いる関数です。測定データとトリガポイントを表示・操作できるGUIを起動します。
3-2-2. 引数
* msrmnt_file : 測定ファイルを指定します、通常はEEG-MAT(.eeg.mat)ファイルです
* target_list : 表示する測定データのチャネルラベルを文字列を羅列して指定します
* to_read_swt : target_listで指定されるチャネルを読み取るのか無視するのかを指定するboolean値です、trueならば読み取ります
* output_file : 現在使用されていません
* auto_info : トリガを自動的にポイントする際の仕様を規定する構造体です、フィールドは次の通りです
* .auto_detect : 自動取得スイッチです、ON or OFF
* .trigger_channel : トリガ情報が出力されたチャネルを指定します。
* .trigger_file : トリガ情報MATファイルを指定します
* .how : トリガ取得方法を以下の文字列で指定します、指定されない場合は他のフィールド指定状況から判断します
‘FULL’: 自動
‘SEMI’: 半自動
‘FILE’: トリガ情報MATファイル
‘MANUAL’ : 手動
3-2-3. 戻り値
戻り値はありません。
