見出し画像

【脳波解析】インパルス応答/ フィルタリング

 本ページでは「Analyzing Neural Time Series Data Theory and Practice」(Mike X. Cohen and Jordan Grafman)のChapter14をベースに、インパルス応答及びフィルタリングについて、勉強していきます。

前回のノートはこちら↓

インパルス応答

 Wikipedia(2020/7/8時点)によると、

インパルス応答(英語: impulse response)とは、インパルスと呼ばれる非常に短い信号を入力したときのシステムの出力である。 インパルス反応とも。 インパルスとは、時間的幅が無限小で高さが無限大のパルスである。

超わかりやすい。インパルス応答は、有限インパルス応答(FIR)と無限インパルス応答(IIR)の2種類に分けることができます。一つの入力信号に対して有限の応答をするのがFIR、無限の応答をするのがIIRです。以下それぞれの特徴です。
・有限インパルス応答(FIR)
→ カーネルの長さ:長い
→ 速度:遅い
→ 安定性:高い
→ メカニズム:カーネルによりデータを増加
→ Butterworthフィルタが一般的に用いられる

・無限インパルス応答(IIR)
→ カーネルの長さ:短い
→ 速度:早い
→ 安定性:データに依存
→ メカニズム:データによりデータを増加

ということで、どっちを使えばいいのか?というと、一般的には、FIRの方がIIRより有用とされています。特に、安定性を求める場合にはFIR、計算コストを減らしたい時にはIIRを用いるといいでしょう。また、フィルタの次数が小さいと表現できるインパルス応答の自由度が小さくなることに気をつけてください。

様々なフィルタ

 一部の周波数帯を抽出したい時に使うフィルタリングを紹介します。
バンドパスフィルタ:特定周波数帯を抽出
バンドストップフィルタ:特定周波数帯を除去
ハイパスフィルタ:特定周波数よりも高い(ハイ)周波数を抽出(パス)
ローパスフィルタ:特定周波数よりも低い(ロー)周波数を抽出(パス)

フィルタの作り方

 モルレーウェーブレットのパワースペクトルはガウス曲線を描き、FIRはプラトー曲線(台形の曲線)が推奨されます。MatlabでFIRフィルターカーネルを作る場合、以下の2つのやり方が存在します。
1) 最小二乗法を利用(firls)
 これは、理想的な区分線形関数と"フィルターの振幅応答との間の重み付き積分二乗誤差を最小にすること"を目的としています。質の良いフィルタを作るのに重要で、手動で行われます。手順は、
①フィルターカーネルの長さの決定
→ 長さによって周波数解像度が決まります。
→ 長ければ時間がかかりますが、解像度は上がります。
→ 長さは最低見たい周波数のうち最も低い周波数の1サイクル分必要です。実際はには、2~5サイクル分が良いでしょう。
②レスポンスの形を決める周波数ベクトルの決定
こんな感じで決めます。

画像1

③フィルターを理想的な形に変形
→②で入力した分の数値を含んだベクトルを作成
→例えば、バンドパスフィルタとして、[0,0,1,1,0,0](除去したい周波数帯は0, 残したい部分は1)と書くことができます。

2) 線形位相を利用(fir1)
 fir1は“ウィンドウベースの標準的なローパス、バンドパス、ハイパス、バンドストップおよびマルチバンド構成に使用“することができます。firlsと異なり、自動で作ることができます。

 バンドパスの周波数帯において、プラトー曲線の幅が狭まるほど周波数分解能は上がりますが、時間分解能は下がるため、実際にはカーネルの10-25%が望ましいです。さらに、Transition zone(上図の②-③/④-⑤で表されている、斜めになってるところ)について 、幅が狭いほど周波数応答は高くなりますが、アーチファクトは発生しやすくなります。また、全てのトライアルを結合後にフィルタリング、分解すると、時間の節約になり、美しいコードを書くことができますが、エッジアーチファクトを発生させるリスクも考えられます。何にでも万能!すごい!みたいな世界線来ないんですかね。話を戻して、(fir1)や(fir1s)を用いて作成したフィルターはMatlabの機能(filtfilt)を実行することで、データに適用することができます。さらに、フィルタリングはウェーブレット畳み込みと同じような働きをします。

 ここまでFIRの話をしてきましたが、IIRフィルタについて、EEGデータに適用されるIIRフィルタの中で最も一般的なものはButterworth フィルタです。Butterworthフィルタを作る流れはFIRフィルタと類似していて、結果も同じようなものになります。


最後に、このノートにスキを押してくれると、とても嬉しい&更新のモチベが爆上がりします!ここまで読んでくださり、ありがとうございました。
<謝辞>
このnoteを書く上で、弊ラボの原あゆみさんにご協力いただきました。ありがとうございます。

この記事が気に入ったらサポートをしてみませんか?