======================
(野村さんへのメモ)
図の出典は以下です。それぞれ適当なようにトレースして下さい。
図1-3-1〜図1-3-8
	「はじめて学ぶディジタル・フィルタと高速フーリエ変換」
	(三上直樹著, CQ出版, 2005)
図1-3-9
	これはオリジナル(実際に実験したスクリーンショット)です
図1-3-10〜図1-3-12
	キーワードをGoogle画像検索して出て来た海外の画像(ソース不明)を日本語化
図1-3-13
	これはオリジナル(実際に実験したスクリーンショット)です
======================

■第4部　マイコンでトライ！ 生体情報の信号処理の基礎■

第1章　生体情報のディジタル信号処理

1-3 生体信号処理のアルゴリズム

ここでは、第2章での具体的な筋電信号の情報処理システム製作例の前に、一般的な信号処理の概要について整理します。デジタル音声信号処理でもデジタル画像信号処理でも、もちろん生体信号情報処理でも、アナログのデータをサンプリング(離散化)してデジタイズ(量子化)してデジタルデータ化し、サンプリング周期ごとに刻々と情報を演算処理していく、という本質はまったく変わらないものです。特に本節の前半では、筆者もおおいに参考にしている文献として、
	「はじめて学ぶディジタル・フィルタと高速フーリエ変換」
	(三上直樹著, CQ出版, 2005)
から図表(図1-3-1〜図1-3-8)を引用紹介しつつ、定性的にデジタル信号処理の概要を整理して、その中で生体信号情報処理に特有のポイントを指摘していきます。詳しくは、ぜひ上記の文献を参照して下さい。

◆デジタル信号処理の概要

ここでは生体信号に関するデジタル信号処理に注目しているので、システムの入力はアナログ信号をセンサで計測したものとなり、デジタル信号処理はそのA/D変換のサンプリング周期ごとに演算します。図1-3-1は、本節で紹介する、いろいろなデジタル信号処理のアルゴリズムを表すブロック図に登場する「要素」の一覧です。乗算、加算、減算は全て符号付き浮動小数点演算を表しています。「単位遅延素子」というのは、A/D変換のサンプリング周期(演算スロット)分の「遅れ」のことですので、ここに入力されたデータがいったん保持されて、次回の演算スロットで読み出される「メモリ」、という事になります。

(図1-3-1　デジタル信号処理の「要素」)

◆移動平均(積分)

図1-3-2のブロック図は、「移動平均」という、生体信号の情報処理では必ずと言っていいほど使われる信号処理アルゴリズムです。図のように、入力データx[n]がM個の「単位遅延素子」に次々に入っていきながら、この各段の遅延出力とともに全て加算されて、最後に「M+1」で除算する、つまり入力と合わせて計「M+1」個のデータの平均をとる処理です。次章2-4の筆者のシステムの解説では、例えば「20段の移動平均」と言う場合、入力された最新値を入れて計20個分を累算してから20で除算しています(この言い方だと図1-3-2は「[M+1]段の移動平均」です)が、本質的には同じことです。

(図1-3-2　移動平均(積分)のアルゴリズム)

図1-3-2のグラフのように、移動平均はたった1段でも「ローパスフィルタ(LPF)」の特性がありますが、多段になった場合には、より急峻なLPF特性となり、数学的には「積分」演算に相当します。これは信号処理としては、高域の変動成分を抑える、あるいは変動成分を「平滑」する、という機能として有効です。mbedマイコンのプログラムとして実装した実例については、実験により検討した次章2-4を参照して下さい。

◆差分(微分)

図1-3-3のブロック図は、「差分」ないし「微分」処理のもっともシンプルな例です。これは入力された最新データに対して、「1つ前のデータを減算する」という、まさに「差」をとったものですが、周波数特性のグラフを見ると、直流成分のカットされた「ハイパスフィルタ(HPF)」の性質があります。事実、前回値と今回値が同じ、つまりその瞬間に変動しない「直流」だった場合には、差分はゼロとなります。生体信号の情報処理においては、時間的に「変動」する成分に着目する事が多いので、このように差分(微分)処理によって変動成分を強調することもあります。

(図1-3-3　差分(微分)のアルゴリズム)

◆共振器(ピーク強調、レゾナンスフィルタ)

図1-3-4のブロック図は、「共振器」、あるいは「レゾナンス(共鳴)フィルタ」と呼ばれる、ピーク周波数付近を鋭く強調するデジタルフィルタのアルゴリズムです。ここではたった2段の遅延データを、図に指定された計算式(→詳しくは上記文献を参照)に従ったゲイン(符号付き浮動小数点値の増幅度。マイナスの場合もあり)で乗算して累算し、その結果がフィードバックループとして戻っています。

(図1-3-4 共振器のアルゴリズム)

ピーク周波数を狙って何度もその周波数成分が繰り返し強調することで、「Q値」(共鳴の度合いを示す指数)を急峻にできますが、あまり持ち上げると動作が不安定(→発振)になります。筆者は個人的に、生体信号の情報処理において、生体から出て来る情報に対してというよりも、生体にこのような共鳴状態をフィードバックさせるとちょっと面白い事が出来そうな気がしています。

◆ノッチフィルタ

図1-3-5のブロック図は、「ノッチフィルタ」、あるいはバンドストップフィルタ、バンドエリミネートフィルタなどと呼ばれるデジタルフィルタです。要するに上のレゾナンスフィルタの逆特性で、急峻なカーブで「谷底」を作って、特定の周波数成分だけをカットするものです。大部分の周波数成分はそのまま通過するので、あまり約に立たないようなイメージがありますが、実はこのノッチフィルタが、上述の移動平均と並んで、生体信号の情報処理、特に本稿でテーマとする筋電信号においては重要となります。

(図1-3-5　ノッチフィルタのアルゴリズム)

ここでカットしたい成分は、関東で50Hz、富士川を渡って関西では60Hzの、電源ハムのノイズ成分です。筋電センサなどの生体信号はとても微弱ですので、電源ラインのハムノイズの成分は生体信号よりもずっと大きなレベルで混入する場合が多く、アナログでは実現困難な急峻なノッチ特性はデジタル信号処理が主役となります。なお、50Hz/60Hzだけでなく、歪んだ整数倍の成分(100Hz/120Hz、150Hz/180Hz、200Hz/240Hzあたり)のノッチフィルタを多段に連ねることもあります。

◆デジタルフィルタ(FIR・IIR)

ここまで紹介したシンプルなアルゴリズムのデジタルフィルタの上級に、高性能な多数のデジタルフィルタがありますが、本稿では深入りしませんので、詳しくは上記文献を参照して下さい。図1-3-6は、FIR(有限インパルス応答)フィルタと呼ばれる一群のデジタルフィルタのごく一部のアルゴリズムの例、図1-3-7は、IIR(無限インパルス応答)フィルタと呼ばれる一群のデジタルフィルタのごく一部のアルゴリズムの例です。

(図1-3-6　FIR型デジタルフィルタのアルゴリズム)

(図1-3-7　IIR型デジタルフィルタのアルゴリズム)

おおまかに言えば、図1-3-6のFIRフィルタでは刻々と遅延データを線形演算して結果を出していくのに対して、図1-3-7のIIRフィルタでは刻々の演算結果がフィードバックループとして戻って入力データに加算される構造となります。個々の乗算器に設定されるゲイン値(定数)を計算してくれるフィルタ設計ソフトも普及しているので(上記の参考文献のCQサイトでも提供)、これを係数テーブルとしてシステムに組み込んでデジタルフィルタを実現することになります。

◆FFTとスペクトル分析

デジタル信号処理アルゴリズムの最後の例としては、フーリエ分析による周波数解析があります。特に、FFT(高速フーリエ変換)の演算アルゴリズムはDSPやマイコンに実装するのに適していて、図1-3-8のような独特の演算処理手順(v)を行うことで、効率的にリアルタイム信号処理を実現できます。筋電情報のような生体信号は時間とともに変動するので、定常的なFFTでなく、時間的に移動する「ウインドウ」関数で滑らかに切り出した一定時間のデータを「短時間FFT(SFFT)」によって分析します。

(図1-3-8　FFTのためのバタフライ演算のアルゴリズム)

オープンソースの時代となって、色々なFFTプログラムがWeb上で公開されているので、スペクトル分析を活用する敷居も下がってきました。本稿でメインに取り上げる筋電信号は、心電や脳波ほど周波数解析が簡単ではないのですが、「生体メッセージのパターン認識」の領域では、筆者も過去の研究(→2-6のAppendix5)から大きな可能性を感じています。第2章の2-6節でも、mbedマイコンによるFFTの実装を試みています。

◆パワー検出(検波+平滑)

生体の筋電信号は、個々には神経繊維のインパルス信号が集まったものなので、信号全体の「パワー」を検出することで、文字通り、筋肉の「力」の状態を得ることができます。例えば図1-3-9は、実際に筋電センサで検出した筆者の筋電信号(上)を、次章2-4で実装したmbedのプログラムでパワー検出した(下)ものです。これはアナログ時代から定番の、「振幅変調(AM)信号の復調」、すなわち「検波/整流」→「平滑」という処理になります。信号処理アルゴリズムとしては「検波+平滑」とは「包絡線(エンベロープ)を得る」処理であり、mbedマイコンのプログラムとして、次章2-4で実験とともに実装しています。

(図1-3-9 筋電信号(上)とパワー検出波形(下))

◆ニューラルネットワーク、遺伝的アルゴリズム、独立成分分析

ここで紹介する3つのアルゴリズムは、デジタル信号処理に関連して応用できるコンピュータ科学の成果として、それぞれ1つの大きな領域を形成しています。共通するのは、単に生体信号を「分析」するというよりも、生体信号から得られたパラメータ(物理的・生物学的・生理学的な意味は不明確)から、トータルとして生体から何らかの「意味」を抽出したい、という広義の「バターン認識」への応用可能性です。心電でも脳波でも本質的に同じことが言えますが、筋電を対象とした例は第2章の最後に紹介します。ここでは、生体信号の情報処理への有効性という視点から、簡単に紹介しておきましょう。

・ニューラルネットワーク(ANN : artificial neural network)

脳内の神経回路網をモデルにした人工ニューラルネットワークの歴史は長く、筆者がC言語で記述した図1-3-10のような3層パーセプトロンのモデル(入力/出力ノード各8ビット整数値、隠れ層12ノード実数値)を、ノートパソコン上で2週間ほどかけて誤差逆伝播法（バックプロパゲーション）で「学習」した実験は25年前のことです。その後も、リカレントニューラルネットとかカオスニューロンとか、新しいアイデアの宝庫ですが、現在のマイコンの性能であれば、リアルタイムに多数のパラメータを学習していくシステムが実現できる可能性に期待しています。筆者のニューラルネットの印象は、学習していない(予期していない)入力に対して、何となく「良さげ」な結果を返してくれる、良好なリアルタイム補間システムとしての有効性です。

(図1-3-10　ニューラルネットワークのブロック例)

・遺伝的アルゴリズム(GA : genetic algorithm)

遺伝子の「選択（淘汰）」・「交叉（組み換え）」・「突然変異」という図1-3-11のようなシンプルなルールだけで、巨大・複雑な探索空間から最適な解が得られる、というGAのアイデアは、アルゴリズムの実装が簡単なために大ブームとなりました。遺伝的アルゴリズムの各世代をサンプリングのステップと見なして生体信号の情報処理に活用するには、まだちょっとシステムの能力が不足する気がします。現状はあくまでオフラインのGAによりパラメータ探索のシミュレーションを行って、結果をデシジョンテーブルとしてデータ化して参照する(例えば筋電情報による義手の制御)、という使い方は有効でしょう。

(図1-3-11　遺伝的アルゴリズムの例)

・独立成分分析(ICA : independent component analysis)

多くの信号がミックスされている信号から、複数の(統計的に)独立な成分を分離して抽出しよう、という手法で、パターン認識の中でもブラインド信号分離(分離すべき情報が未知)の高度なアルゴリズムです。筋電信号とは、多数の神経繊維インパルス信号がミックスされている生体信号なので、多チャンネルの筋電センサからの信号をICAによってリアルタイムにパターン認識する、というアプローチは、実際に医療・福祉の領域で研究されてきました。図1-3-12は、「ICA」でGoogle画像検索したら出て来た「心電」「脳波」の応用例ですが、いかにも生体情報処理に使えそうな印象があります。

(図1-3-12　独立成分分析の応用例)

◆ノイズ除去(アーティファクト)

生体信号処理に特有の用語「アーティファクト」には、狭義には「電極と皮膚との接触状態が変化するために起きる基線変動」ということになりますが、広義には、電源ハムノイズ、静電気放電(サージ)ノイズなど、突発的なノイズ信号を全て含めている文献もあります。ここで「生体信号処理のアルゴリズム」として取り上げる「ノイズ除去」はおもに前者のことで、身体が動くことで電極がズレるケース、皮膚表面の化学変化で電極の電気的状態が変動するケース、極端には電極ケーブルが振動で断線するケースなど、事前にあまりパターンを予測できないものです。もし義手の制御に使っているとすれば、異常なデータで誤動作させないために、安全な側に素早く退避(フェイルセーフ)する必要があります。

(図1-3-13　筋電センサ信号のアーティファクトの例)

図1-3-13は、第2章で紹介する筋電センサの信号を筆者が実験している様子で、腕に巻いたベルトの下に、2チャンネル(各3枚)の筋電信号電極が並んでいます。正常であれば右上のように、上下2チャンネルの筋電信号は、力を入れた時には両方とも波形が大きくなります。ところが右下の筋電波形では、上のチャンネルだけ途中まで何も出ていません。近くの筋電信号電極同士では起きえないので、これは腕に力を入れた「動き」によって電極の接触状態が悪くなって、ノイズ以外の信号が途絶えている(アーティファクト)状態です。生体信号の情報処理では、このような現象をなんらかの経験則ルール化して、ノイズ除去のアルゴリズムとしていく事もとても重要なのです。

