符号化規則 全ての記述は、図1に示すようにタイプ(タグT)、データ長(L)、値(V)で記述します。これらの定義は親定義(全てのチャネルに有効)とチャネル毎の定義(子定義)ができます。
図1 TLV構成
タグは、1オクテットおよび複数オクテット(チャネル定義のみ)で記述されます。タグは図2で示されるように、タグ番号、P/C(プリミティブ、コンテンツ)とクラスで記述します。MFERでは、3つのレベルがあり、基本レベルはレベル1、拡張レベルはレベル2および補助レベルはレベル3があります。
- レベル1:基本的な記述をします
- レベル2:拡張レベルとして記述しますが、MFER以外の上位のプロとコールなどで記述できる場合は上位プロトコルで記述してください
- レベル3:MFERで記述も可能ですが、その利用はきわめて限定して記述されることを期待しています。できるだけ上位プロトコル等外部の環境で記述利用してください。
- プライベートレベル:特殊な研究などの目的で利用することができます。
図2 タグ構成
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
Class |
P/C |
Tag Number |
0 |
0 |
0 |
レベル1 |
1 |
0 |
1 |
レベル2 |
1 |
0 |
レベル3 |
1 |
1 |
プライベート |
チャネル毎に定義(子定義)する場合は図3のようにチャネル番号を指定して記述します。
図3 チャネル属性定義の構成
タグ |
データ部 |
定義グループ |
3Fh |
チャネル番号 |
定義全体 |
チャネル属性定義 |
チャネル定義 |
・・・ |
チャネル定義 |
T |
L |
V |
T |
L |
V |
T |
L |
V |
データ長は、値部が127オクテット長以下の場合は、1オクテットで記述します。
図4 データ長 (127オクテット長以下)
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
データ長 |
128オクテット長以上の場合は、図5に示すようにデータ長数に引き続いてデータ長を記述します。
図5 128オクテット長以上のデータ長(3オクテットで示される場合)
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
1 |
データ長オクテット数 |
最上位データ長 |
第2位データ長 |
第3位データ長 |
データ長オクテット数を80Hで指定すると、無限長指定ななります。無限長指定は終了データ(End-of-Contents)というタグとデータ長がともに0が2つ続くことにより記述が終了します。
図6 無限長指定(チャネル定義のみ可)
タグ(3F)+チャンネル番号 |
データ長(80H) |
・・・・ |
・・・・ |
・・・・ |
End-of-contents (00,00) |
定義のリセット
データ長を00で指定すると、指定されたタグで示された状態がリセットされます。親定義部で指定すると指定したタグの内容はデフォルト値(初期値)になります。子定義で使用されると親定義されている値か、親定義がされていない場合はデフォルト値になります。
MWF_WAV(1E) 波形データ
後の章で説明されるようなヘッダによって記述された条件で波形データは記録されています。
MWF_WAV
|
データ長 |
備考 |
31 |
1Fh |
波形データ数×データ型による長さ |
フレームデータ記述によって説明される長さ |
定義の解釈、範囲、優先の原則
-
デフォルト値(初期値)
本規約は全ての定義に対して初期値が定められていて、該当する定義が行われるまで、初期値が適用されます
-
多重定義
全ての定義において、多数回定義(重複定義)を行うことが可能できます。重複定義を行った場合、以前に定義されている内容を上書き(オーバライド)されるものと、イベント定義のように定義自身が多数回定義しても全て有用な場合があります
【例】サンプリング周波数を250Hzに設定したときは、それ以前の初期値である1KHzに上書き定義となる
【例】イベントが複数発生した場合、定義順に解釈されます
-
定義順解釈と後定義優先
各定義は、定義順序に解釈されます。もし関連する定義がある場合は、その定義する前に関連する定義が行われていなければなりません
【例】各チャネルの定義を行う前にチャネル数の定義を行う必要があります
【例】リトルエンディアンで利用する前に、リトルエンディアン指定が必要です(初期値はビッグエンディアン)
-
チャネル属性定義
該当するチャネルの属性を定義する前にチャネル数の定義は行われなければならなりません。チャネル数の定義が行われるとそれ以前の定義は、初期値を含めた親定義にリセットされます
-
親定義(全定義)と子定義(チャネル毎定義)
親定義は全てのチャネルに有効です。子定義は、該当チャネルのみ有効でその定義は親定義をオーバライドします。しかし、後で親定義を行った場合、後定義のルールによって該当するチャネルの内容はオーバライドされますので注意してください
【例】親定義(全定義)でEEGとして定義し、1チャネルだけECGとして子定義(局所定義)する場合
-
定義のリセット
該当項目の定義において、データ長が0で指定された場合(値が無い)は、初期値にもどります。チャネル定義により指定した場合は、デフォルト定義を含めた親定義を継承します。チャネル数の定義が行われた場合、チャネル属性で定義されていた内容は全てデフォルト定義を含めた親定義にリセットされます
-
未定義の無視
該当定義に必要な関連する定義がその定義が行われる以前に定義されていない場合、その定義は無視されます
【例】子定義により、該当チャネルに定義を行う以前に、チャネル数が定義されていないとき、該当チャネルの定義は無視されます
-
定義の継承
各定義が再定義されない限りフレームをまたがって有効範囲で継承されます。例外として、データポインタは更新されながら継承されます
【例】本規約全てでリトルエンディアンで使用される場合、一度リトルエンディアン定義を行えばフレームに関係なく全領域において有効です
【例】親定義(全定義)で定義された内容は、各チャネル定義でオーバライドされない限り継承されますので、共通項目は親定義で一度定義すれば良い
-
定義及びデータの有効性
データ提供側で定義されたデータが、受取側で利用可能かどうかは受取側の機能によります。従って、データ提供側で定義されたデータにより受取側が処理できない内容が含まれている場合、受取側がデータ全てを棄却しても良いし、処理可能な範囲で利用しても良い
|