MATLABで学ぶ生体信号処理
弓絵 著

コロナ

社

博士（工学） 小野

コロナ社

まえがき

本書は，C 言語などのプログラミングの基礎を学習した経験のある大学生，大学院生や，新たに生体信号処理研究をはじめようとする研究者のために，生体信号処理（特に脳波・心電図・筋電図・fNIRS の解析）という観点から数値解析ソフトウェア MATLAB の使い方を実践的に解説したものです。医学系研究者など，プログラミングの知識がない方でもMATLAB で（研究に必要な）どんな処理ができるのかが理解できるよう，多数の例を挙げ，ダウンロード可能な生体信号データを提供して，自習形式で MATLAB プログラミングの基礎が身に付くよう配慮しました。

社

脳波や心電図，筋電図など，生体上の一つまたは複数の測定部位からデータを取得する生
体信号はしばしば「測定点×時系列」の 2 次元の行列（数値データの配列）として記録されます。MATLAB はこうした行列データの演算を，すでに用意された関数を使って直感的，ロナかつ効率的に行えるという利点があります。2000 年代の初頭から現在にかけて，MATLAB上で動作する機能的 MRI・脳波・心電図データの解析ソフトウェアが数多く一般に公開されてきており，工学者だけでなく，生命科学，医学，心理学などの研究者が MATLAB を用いて生体信号の収集や，データ処理を行うようになってきています。こうした生体信号解析用の MATLAB ソフトウェアの多くはグラフィカルユーザーインターフェース（GUI）を提供

コ

しているため，論文等で内容を理解したうえで，マニュアルに沿ってデータを入力し，クリックをしていくと解析結果にたどり着くことはできます。しかし研究を進めていく中で，これらのソフトウェアで提供されている個別の機能を目的に合わせて変更したり，拡張したりする必要も出てきます。そのためには MATLAB プログラミングの知識が必要になりますが，一般的な MATLAB の参考書はソフトウェアの多岐にわたる関数を網羅的に紹介するだ
けにとどまるものが多く，生体信号の解析で多用される周波数解析や加算平均処理，フィルタ，平滑化，統計解析といった具体的なニーズに沿って MATLAB 関数やプログラム手法を解説した書籍はありませんでした。この本は，筆者が自分の研究室の学生や共同研究者と研究を進めていくにあたって使用している生体信号処理の MATLAB プログラムをもとに，各生体信号処理のプロセスをなるべく一般化して示したものです。研究室単位でのゼミ形式での講義にも活用できるよう，内容を目的別の章に区切って学習できるようにもしてあります。
MATLAB を触るのがはじめてという方は，1 章と 2 章に沿ってまず独習してみてくださ

ii

まえがきい。大学の授業などで MATLAB を使ったことがあり，操作はだいたいわかるという方は，3章以降の内容から，各自の目的に沿ったものを参照してください。なお，本書で用いたコンピュータの OS は Windows 7（64bit），MATLAB のバージョンは MATLAB R2017b（1 〜 3 章）と MATLAB R2014a（4 章以降）となっています。MATLAB は年に 2 回のアップデートを行っており，4 章以降で用いたバージョンは少々古いですが，上記に挙げた生体信号解析用の MATLAB ソフトウェアの中には特定の Windows のバージョンとソフトウェアのバージョンの組み合わせのみしか受け付けないものがあり（詳しくは 1 . 2 節〔 2 〕参照），筆者の研究環境が上記のようになっているためです。サンプルプログラムは，MATLAB のバージョンの違いによらず正常な動作が得られるよう留意してありますが，もし読者の皆さんがお気付きの点がありましたら，著者の研究室アドレス HSMElab@gmail.com までメールにてお知らせいただければありがたいです。
本書が多くの学生さん，研究者の助けになれば幸いです。

著

コロ
ナ社

2018 年 8 月

MATLAB は MathWorks, Inc. の登録商標です。本書では，MATLAB およびその他の製品名に TM，® マークは明記しておりません。
本書を発行するにあたって，記載内容に誤りがないように可能な限り注意を払いましたが，本書の内容を適用した結果生じたこと，また，適用できなかったことに関して，著者，出版社とも一切の責任は負いませんのでご了承ください。

者目次

1 章 はじめに：MATLAB を使う準備
1 . 1 「MATLAB」とは？

11.2

3

MATLAB の入手とインストール

2 章 MATLAB の基本操作
脳波データサンプル（EEGsample）について

5

2.2

データの読み込みと確認

62.3

脳波波形の図示

2.4

解析プログラム（m ファイル）の作成

2.5

データ，プログラム，図の保存

ロ
ナ社

2.1

2 章で学習した MATLAB コマンド一覧

816
21
22

3 章 自発脳波データの周波数解析
脳波の原理と計測方法

24

3.2

自発脳波の種類と信号処理

30

3.3

MATLAB による自発脳波のフーリエ変換

31

3.4

スペクトル解析を応用した自発脳波解析の手順

35

コ

3.1

3 章で学習した MATLAB コマンド一覧

42

4 章 誘発脳波データの加算平均処理4.1

誘発脳波の種類と評価項目

44

4.2

MATLAB による誘発脳波の加算平均処理

47

4 章で学習した MATLAB コマンド一覧

58

5 章 心電図と心拍変動解析
5.1

心電図の原理と計測方法

59

iv目

次

5.2

心電図の医学および生体工学における用途

61

5.3

MATLAB による心拍変動解析

65

5 章で学習した MATLAB コマンド一覧

81

6章 筋電図の解析
6.1

筋電図の原理と計測方法

83

6.2

MATLAB による筋電図の信号処理

85

6 章で学習した MATLAB コマンド一覧

100

7 章 fNIRS データの解析
fNIRS の原理と計測方法

101

7.2

MATLAB による fNIRS データの信号処理

108

7 章で学習した MATLAB コマンド一覧

社

7.1

124

8 章 MATLAB による統計処理
平均値，中央値の差の検定

8.2

相8.3

標本サイズと検出力検定

155

8 章で学習した MATLAB コマンド一覧

157付

160

関解析

コ録ロナ

8.1

125154A.1

EEGLAB のインストール

160

A.2

加算平均回数と S / N161

A.3

SPM のインストール

162

引用・参考文献

163

索165

引

1章

はじめに：MATLAB を使う準備

本章では MATLAB をはじめて使う方を対象にして，MATLAB の基礎知識と入手方法を説明します。MATLAB の初心者だが急いで使いたいという方は，1 . 1 節を飛ばしても結構です。

「MATLAB」とは？

社

1.1〔 1 〕 MATLAB は数値計算に特化したプログラミング言語

MATLAB（matrix labora-tory）は，米国の MathWorks 社が開発，販売している数値解析ソフトウェアの名称です。

ロナ

このソフトウェアの中で使うプログラミング言語のことも同様に MATLAB と呼ばれます（例：「この解析コードは MATLAB で書いた」）。
「matrix laboratory」を和訳すると「行列実験室」ということになりますが，ほかのプログラミング言語に対する MATLAB の一番の強みが，行列やベクトルの演算を直感的に行えるという点です。例えば C 言語で二つのベクトルの内積を計算するプログラムを書くには，①配列を宣言してベクトルの数値を入力，②コ答えを入れる変数を用意，③ for ループを使って二つのベクトルの対応する数値を掛け算しては足し合わせる，という作業をすべて書き出す必要があります。しかし MATLAB では
この内積の計算をつぎのようにわずか 2 行で実行できます。
>> A = [1,2];B = [0,3];>> C = A*B'
C =6>> C = dot(A,B)
C =6>>% 二つの行ベクトル A，B の定義% 方法 1：C は A と B の転置の積% 方法 2：内積を求める関数 dot を使用

2 通りの方法で内積を求めてみました。
「>>」からはじまる部分が，ユーザーが入力する部分，「>>」のない部分が，MATLAB からの出力です。方法 1 は，内積は x 座標同士，y 座標同士を掛け合わせて足す作業なので，行ベクトル A と，行ベクトル B を転置した列ベクトル（ベクトルまたは行列にシングルクォーテーション「'」を付けると転置されます）を掛2

1.

はじめに：MATLAB を使う準備

け算すれば求められます。MATLAB では，変数の型の宣言も必要なく，あらかじめ配列の大きさを指定しておく必要もありません。さらに MATLAB では，数値計算に使われるほとんどの関数が組み込み関数としてあらかじめ用意されているため，単純な演算についてはユーザーが関数を書く必要はなく，そのまま実行できるようになっています。例えば方法 2の C = dot(A,B) は，「ベクトル A とベクトル B の内積を計算してベクトル C に代入する」という関数です。MATLAB には，内積，外積といった基本的な数値計算だけでなく，生体信号に重畳する交流ノイズやドリフト（基線のゆらぎ）を調べたり除去したりするためのフーリエ変換や周波数フィルタなどの組み込み関数も用意されています。MATLAB を使うことによって，複雑な生体信号の処理プログラムを短時間で効率的に書くことができます。
本書では，おもに上の例で示したような文字ベースの MATLAB プログラミング（キャラクターユーザーインターフェース：CUI）を用いて，脳波，心電図，筋電図，fNIRS データの基本的な解析方法と統計処理について，2 〜 8 章まで説明をしていきます。
C 言語に慣れている読者には，社〔 2 〕 MATLAB とほかのプログラミング言語との違い対話的に計算が進む〔 1 〕の例を不思議に感じた方もおられるかもしれません。MATLAB はインタプリタ形式のプログラミング言語であるため，MATLAB に入力されたコマンドはロナ「Enter」キーが押されるごとに実行されます。また，エディター等で記述された命令の集合（プログラム）もまとめてコンパイルされるのではなく，実行するとプログラムの 1 番上の行 か ら 最 後 に 向 か っ て 1 行 ず つ 解 釈 し な が ら 実 行 さ れ ま す。 こ の 形 式 は BASIC やJavaScript，Python などと同じです。行列や配列の書き方に慣れる必要はありますが，文法は C 言語に近いので，大学の授業で C 言語，C＋＋言語か上に挙げたプログラミング言語のコどれかを学習したことがある人にとっては，すぐに慣れることができるはずです。一方で，
MATLAB はプログラムを 1 行ずつ解釈，実行するために，実行速度はコンパイル形式のプログラムよりも遅くなるという欠点があります。オンライン処理など，より高速な信号処理を求められる場合には，MathWorks 社が提供している「MATLAB Coder」を用いて MATLABのプログラムを C＋＋言語に変換し，実行することも可能です。汎用性の高い C＋＋言語に変換することによって，スマートフォンアプリに自作のプログラムを組み込むことなども可能になります。
〔 3 〕 MATLAB の拡張機能

MATLAB のもう一つの特徴は，〔 1 〕の例に挙げた CUIのプログラムをいくつか組み合わせて，グラフィカルユーザーインターフェース（GUI）を用いた対話的なソフトウェアを簡易に作成できることです。GUI とは，大多数の読者が現在使っている Windows や Mac のように，画面にウィンドウやボタン，アイコンなどが表示されて，それらをクリックするなどの動作で直感的に作業を行うインターフェースのことです。MATLAB ではこうした GUI のソフトウェアを「GUIDE」機能を使って作成することが1.2

MATLAB の入手とインストール

3

できます。さらに，これらの GUI プログラムに「MATLAB Compiler」を適用することでプ
ログラムパッケージ（C 言語でいうところのコンパイル済みのプログラム（ . exe ファイル））を作成すると，MATLAB をインストールしていない PC でもプログラムを実行できるようになり，例えば MATLAB を持っていない共同研究者に解析ソフトを提供するといったことも簡単になります。さらに，MATLAB に組み込まれているシミュレーションツールボックス「Simulink」を用いることで，システムのシミュレーションや，ブレインコンピュータインターフェースなどのリアルタイム制御環境を構築することも可能です。これらの拡張機能についての詳細な説明はまた別の機会に譲りますが，研究の初心者から企業の開発者まで，MATLAB はユーザーのプログラミング技能や目的に応じた多様な解析・開発手段を提供しているといえるでしょう。

MATLAB の入手とインストール〔 1 〕 MATLAB の入手

社

1.2

MATLAB の入手方法には何通りかの方法がありますが，読者が学生であれば，まず所属している教育機関が MathWorks 社と包括ライセンスを結んでいロナ

るかどうか調べてみてください。包括ライセンスとは，教育機関が MathWorks 社と契約を結び，その教育機関に所属する学生や教員一人一人が MathWorks 社と個別に購入契約を結ぶことなしに，MATLAB を研究室や個人の PC にダウンロードして使うことができるライセンス形態です。契約の内容にもよりますが，MATLAB 本体と MATLAB ツールボックス（ある 内 容 に 特 化 し た MATLAB 関 数 の パ ッ ケ ー ジ の こ と。 目 的 ご と に，Image Processing

コToolbox，Signal Processing Toolbox などの名称が付いて，本体とは別売りされている）のほぼすべてを無料で使用できることがほとんどです。
所属している教育機関で包括ライセンス契約がない場合には，個人で MATLAB を購入することになります。MathWorks 社の「Pricing and Licensing」ページ1）†へ移動し（図 1 . 1），左側のメニューから「Student」を選ぶと価格が表示されます。購入者が学生ではない場合
は「Standard（会社での開発業務などの商業用途）」，「Education（教員やポスドクなど学位授与機関に在籍している研究者用途）」，「Home（個人的な使用用途）」のいずれかを選んで購入します。学生向けのパッケージは価格的に優遇されています。
まだどのぐらい MATLAB を活用するかわからないので，購入にはいまいち踏み切れないという方には，30 日間 MATLAB を無料で使用できる「評価版」をダウンロードして使うという方法もあります2）。同じページに，所属している教育機関が包括ライセンス契約を結ん†

肩付数字は巻末の引用・参考文献番号を表す。

41.

はじめに：MATLAB を使う準備

図 1.1MATLAB の購入画面（金額部分は変動があるため画像処理しています）〔 2 〕 MATLAB のインストール社

でいるか調べることのできるフォームもあります。
教育機関経由でも，MathWorks 社からの直接購入でも，基本的には MathWorks 社のホームページにログインし，アカウントを作成した後，ロナ

MATLAB を各自の PC にダウンロードしてインストールすることになります。インストールの方法は，MathWorks 社のホームページに詳しく解説されているので（例：MathWorks ア
カウントを使用する製品のインストール3）），一度目を通してから作業するとよいでしょう。
ここで注意することとしては，もしあらかじめ研究で使用する MATLAB のプログラムが決まっている場合には，MATLAB のバージョンとそのプログラムとの互換性を確かめておコくことです。MATLAB は年に 2 回，最新バージョンを提供しており，年度に「a，b」を付けて「R2018a」「R2018b」といった名称で呼んでいます。例えば，fMRI などの脳機能画像4）を用いた研究に statistical parametric mapping（SPM）を使っている場合，SPM のバージョンによって使用できる MATLAB のバージョンに制限があります。例えば 2018 年現在で最新版の「SPM12」を使用する場合には，最新バージョンの MATLAB である「R2018a」に対応していますが，もし一つ前のバージョンである「SPM8」を利用する場合には，MATLAB が対応しているのは「R2015a」までとなっています。ユーザーが作成した関数だけを使って解析をする場合には，バージョンアップのたびに便利な関数が増えていることが多いので，最新版をダウンロードされることをおすすめします。
さて，無事 MATLAB を使用する環境が整ったでしょうか。2 章からは，実際のサンプルデータ†を使って，MATLAB による生体信号処理を紹介していきます。
†サンプルデータは本書の書籍詳細ページからダウンロードできます。
www.coronasha.co.jp/np/isbn/9784339072457/

2章

MATLAB の基本操作

本章では，サンプルの脳波データを例にとり，MATLAB 上で生体信号データを読み込み，表示，保存する方法から，データの図示，一連の処理をプログラムとして作成，実行する方法について説明します。また過去に C 言語等のほかのプログラミング言語を学習したことのある方のために，MATLAB とそのほかの言語を用いたプログラミングの作法の違いについても説明してあります。まず一通り手を動かして，使い方を覚えてみてください。なお，本章で使用する MATLAB コマンドは「chapter2scripts.m」† にまとめてあり脳波データサンプル（EEGsample）について

ロ
ナ

2.1

社ますので参考にしてください。

MATLAB をインストールした PC には，「マイドキュメント」内に「MATLAB」というフォルダーができています。まず，サンプルデータの「EEGsample」を，フォルダーごとこのMATLAB フォルダー内へコピーしてください。ハードディスクが C ドライブの場合，一般的な場所は

コC:¥Users¥［ユーザー名］¥Documents¥MATLABとなります。この脳波データは 2 ～ 4 章まで使います。データの詳細を以下の表 2 . 1，表2 . 2 に示します。

表 2.1
脳波計

オーストリア g.tec 社製：g.USBamp，g.GAMMAbox

電極位置

脳波 10-20 法配置における Fz，Cz，P3，Pz，P4，PO7，Oz，PO8 の8 チャンネル

サンプリング（標本化）周波数†

脳波データの詳細

256 Hzフィルタ

ハイパスフィルタ：0 . 5 Hz，ローパスフィルタ：30 Hz，ノッチ（交流遮断）フィルタ：50 Hz

被験者

健常成人（21 歳男性）

サンプルデータは本書の書籍詳細ページからダウンロードできます。
www.coronasha.co.jp/np/isbn/9784339072457/

引

【い・う】

【た】

一元配置分散分析
133
一般化線形モデル
107, 108
移動平均処理88
ウィルコクソン順位和検定（マンホイットニー U 検定）132
ウィルコクソン符号付き順位検定
130

対応のない二元配置分散分析
体性感覚誘発電位
多元配置分散分析
多重比較法
脱酸素化ヘモグロビン

中央周波数
聴覚誘発電位
聴性脳幹反応加算平均処理43, 52, 114（脳波の）加算平均処理
105（fNIRS の）加算平均処理
105
関 数
19

トポグラフィマップ
トリガ
ドリフト除去

ロ
ナ

99101
82
140

【す・せ・そ】随伴陰性変動スピアマンの順位相関
整流・平滑化
セル配列
潜 時（誘発脳波の）潜時
相関関係
相関係数

4615485132944154
1543948112

【な・の】

生データ
波括弧｛ ｝
脳波（EEG）
ノンパラメトリック検定

291324127【は】コ

酸素化ヘモグロビン
102
視覚誘発電位45
時間周波数解析74
事象関連電位
29
自発脳波
29
四分位範囲
140
神経筋接合部（神経終板）
83
心電図
59
心拍変動
59, 63（誘発脳波の）振幅
46

ミスマッチ陰性電位
無相関検定
モークリーの球面性

箱ひげ図
パラメトリック検定
パワースペクトル
反復測定モデルを考慮した
一元配置分散分析

14012731136【ひ・ふ】
ピアソンの積率相関光トポグラフィ
フリードマン検定
ブレインコンピュータ
インターフェース
ブロックデザイン

45
154
138

【ゆ】
96, 97
4545

【と】

【き・く】

【さ・し】

【み・む・も】【ち】【か】筋シナジー仮説
近赤外分光法
筋電図
クラスカル・ワリス検定

14345
142
133
102

（fNIRS の）ベースライン処理
114
79
ポアンカレプロット

社

索

154
101
142
28, 47
105

【へ・ほ】
平滑化
112
平均周波数
96, 97
ベースライン46
ベースライン処理
47, 53（脳波の）ベースライン処理 114

誘発電位
誘発脳波

29
29, 44【れ・ろ】
連続ウェーブレット変換
ローパスフィルタ

4188

【A・C】
AR モデル
77
area under the curve（AUC） 116
average rectified value（ARV）
法85
85
csv 形式

【F・G】
F 検定
fNIRS
GLM

131101107【H・I】
heart rate variability
HF
HRF（血流動態反応関数）
IEMG
interquartile range（IQR）

5964
117
85140

【L・M】
LF
MATLABmaximal voluntary
contraction（MVC）
modified Lambert-Beer law

64185105

【N・P】
N170
P300

4545

索引
48

P300 speller

【R・S】
RMS
root mean square（RMS）法

91
85

コマンド

【A】
31, 4278, 81
15, 22
143, 159
134, 158
78, 8179, 81abs
aic
annotation
anovananova1
araxis

【B・C】

【D・E】

68, 8180, 81
16, 23137, 158
134, 157
147, 159コ

diffdisp
edit
epsilonerrorbar
exist

【F】
fft
figurefiltfilt
findfindpeaks63
28

【その他】
95%IEMG

89, 100
137, 158
37, 4270, 81
14, 2290, 100
142, 159

fir1
fitrm
fix
floor
for … end
freqz
friedman【I・K】
importdata
interp1
ismemberkruskalwallis

31, 428, 22
89, 100
36, 4267, 8186, 100
72, 8151, 58140, 159【L】
legendlengthlillietest
load

ロ
ナ

134, 157
140, 1587, 22
94, 100
21, 2340, 4275, 81
119, 124
154, 159
97, 100bar
boxplot
cd
cell2matclear
colorbar
contourf
conv
corr
cumsum

RR 間隔
S/N社

166

vartest2
vertcatxlabelxlim

80, 818, 2278, 81

54, 58132, 157
137, 158
121, 124

155, 159
21, 23130, 157
118, 124
70, 81
12, 2236, 42【T】

137, 158
40, 4240, 4240, 4291, 100
135, 158【R】
randperm
ranksumranovaregress【S】
sampsizepwr
save
signrank
spm_hrf
std
subplot
sum

table
text
title
topoplotttest
ttest2【N・P】
num2strplot
pyulear52, 5870, 81, 91, 100
52, 58repmatrms
round

38, 429, 22129, 157
7, 22

【M】

mauchlymax
mean
minmodmultcompare%MVC
85, 95
1/f ゆらぎ（ピンクノイズ） 79
1 標本 t 検定
130
2 標本 t 検定
131137, 158
97, 100
11, 2240, 42130, 157
39, 42, 131, 157【V・X】
131, 157
143, 159
11, 2212, 22【Y・Z】
11, 2212, 22, 66, 81
37, 42ylabel
ylim
zeros

【その他】
コロン「:」
セミコロン「;」チルダ「~」
ドット「.」
パーセント「%」

8851, 5832
11

―― 著 者 略 歴 ――
2000 年
2001 年
2002 年
2003 年
2004 年

ロナ社

2005 年
2006 年
2010 年
2011 年2017 年2017 年

早稲田大学理工学部電気電子情報工学科卒業
早稲田大学大学院理工学研究科修士課程修了（電気工学専攻）
早稲田大学人間総合研究センター助手
日本学術振興会特別研究員
早稲田大学大学院理工学研究科博士課程修了（電気工学専攻）
博士（工学）
早稲田大学総合研究機構先端バイオ研究所講師
神奈川歯科大学講師
神奈川歯科大学准教授
明治大学准教授
米国イェール大学客員准教授
明治大学教授現在に至る

MATLAB で学ぶ生体信号処理

コIntroduction to Biosignal Processing with MATLAB
2018 年 10 月 15 日

検印省略

Ⓒ Yumie Ono 2018

初版第 1 刷発行
著者
発 行 者
印 刷 所
製 本 所

★
おのゆみえ小野弓
絵
株式会社
コ ロ ナ 社
代 表 者
牛 来 真 也新日本印刷株式会社
有限会社
愛千製本所

112-0011
東京都文京区千石 4-46-10
発 行 所
株式会社 コ ロ ナ 社
CORONA PUBLISHING CO., LTD.
Tokyo Japan
振替 00140−8−14844・電話（03）3941−3131（代）
ホームページ http://www.coronasha.co.jp

ISBN 978-4-339-07245-7 C3047 Printed in Japan（三上）＜出版者著作権管理機構 委託出版物＞
本書の無断複製は著作権法上での例外を除き禁じられています。複製される場合は，そのつど事前に，出版者著作権管理機構（電話 03 ─ 3513 ─ 6969，FAX 03 ─ 3513 ─ 6979，e-mail: info@jcopy.or.jp）の許諾を得てください。

本書のコピー，スキャン，デジタル化等の無断複製・転載は著作権法上での例外を除き禁じられています。
購入者以外の第三者による本書の電子データ化及び電子書籍化は，いかなる場合も認めていません。
落丁・乱丁はお取替えいたします。