生体信号解析シミュレーター 戻る
生体医工学

生体信号解析シミュレーター(ECG/EEG)

心拍数・ノイズレベル・フィルタカットオフを調整して、ECG波形・RR間隔・周波数スペクトルをリアルタイムで可視化します。

ECG波形の主要成分
P波: 心房脱分極 (0.1s)
QRS群: 心室脱分極 (0.08s)
T波: 心室再分極 (0.2s)

心拍数: $HR = \dfrac{60}{RR[\text{s}]}$
心拍数 (HR)
72 BPM
RR間隔
833 ms
QRS幅
80 ms
SNR (推定)

生体信号解析(ECG)とは

🧑‍🎓
このシミュレーターで出てくる「QRS波」って何ですか?心電図の山みたいな形ですが。
🎓
ざっくり言うと、心臓の心室が収縮するときの電気的活動だよ。一番目立つ山だから、心拍数を数える基準になるんだ。このシミュレーターの「心拍数」スライダーを動かすと、このQRS波の間隔が変わって、波形が速くなったり遅くなったりするよ。試してみて。
🧑‍🎓
え、そうなんですか!じゃあ「ノイズレベル」を上げると、波形がガタガタになるのは、実際にどんなノイズを再現してるんですか?
🎓
実務で多いのは、体の動きによる「基線変動」や、筋肉の収縮による「筋電図ノイズ」、コンセントからの「電源ノイズ(50/60Hz)」だね。シミュレーターでノイズを最大にすると、本物の信号が埋もれちゃうのがわかる。だから次の「フィルタカットオフ」調整が重要になるんだ。
🧑‍🎓
「フィルタカットオフ」を変えると、右の周波数スペクトルの形が変わるけど、あれはどう見ればいいんですか?
🎓
良いところに気づいたね!スペクトルのピークがQRS波の基本周波数だ。ノイズを強くすると高周波や低周波に余計な成分が増えるだろ?フィルタでそれをカットすると、スペクトルがスッキリして、元の綺麗な心電図に近づく。実際の医療現場でも、この周波数解析をしてノイズ源を特定するんだ。

物理モデルと主要な数式

ECG信号は、周期的な波形と様々なノイズの合成としてモデル化できます。ここでは、基本的なQRS波形を模擬する関数とノイズを加えた合成信号を考えます。

$$ s(t) = A_{qrs}\cdot \exp\left(-\frac{(t - t_{r})^2}{2\sigma^2}\right) \cdot \sin(2\pi f_{qrs}t) + \sum_{i}n_i(t) $$

$s(t)$: 観測される合成信号、$A_{qrs}$: QRS波の振幅、$t_{r}$: R波のタイミング、$\sigma$: 波形の広がり、$f_{qrs}$: QRS波の基本周波数、$n_i(t)$: 各種ノイズ成分(基線変動、筋電図ノイズ、電源ノイズなど)。

心拍数 (HR) は、連続するR波の間隔(RR間隔)から計算されます。心拍変動 (HRV) 解析の基礎となる重要な関係式です。

$$ HR = \frac{60}{RR} $$

$HR$: 心拍数 (bpm, beats per minute)、$RR$: RR間隔 (秒)。例えば、RR間隔が1.0秒なら心拍数は60bpm、0.8秒なら75bpmとなります。自律神経の状態によってこの間隔は微妙に変動します。

実世界での応用

不整脈のスクリーニング:24時間ホルター心電図で取得した長時間のECGデータを解析し、期外収縮や心房細動などの不整脈を自動検出します。シミュレーターで学ぶQRS検出アルゴリズムがその中核技術です。

睡眠時無呼吸症候群の評価:睡眠中の心拍変動(HRV)と呼吸に伴う基線変動を分析することで、無呼吸イベントを間接的に推定します。ノイズの中から特定の生理学的信号を抽出する技術が応用されています。

ウェアラブルデバイスの心拍モニタリング:スマートウォッチやリストバンド型デバイスでは、動きによる大きなノイズ(モーションアーチファクト)が混入します。シミュレーターで試せるような適応フィルタや信号処理技術が、正確な心拍数測定を実現します。

手術中モニタリング:手術室では、電気メスなど強力なノイズ源が存在します。患者の生命徴候を継続的に監視するため、リアルタイムでノイズを除去し、QRS波を確実に検出する堅牢な信号処理が要求されます。

よくある誤解と注意点

まず、「ノイズを全部除去すれば完璧」と思いがちな点に注意だ。シミュレーターで「フィルタカットオフ」を強くかけすぎると、確かに波形は滑らかになる。しかし、実際の臨床現場では、波形の鋭い角(高周波成分)に重要な情報が含まれていることもある。例えば、心室性期外収縮の波形は幅が広くなるが、強すぎるフィルタで丸めてしまうと、この特徴を見逃すリスクがある。フィルタリングは「トレードオフ」の作業だと覚えておこう。

次に、「心拍数は一定」という前提。シミュレーターの心拍数スライダーは固定値を設定するが、生身の人間の心拍は常に変動している(心拍変動:HRV)。例えば、安静時でもRR間隔が0.85秒、0.92秒、0.88秒…と微妙に揺らいでいる。この変動そのものが自律神経のバロメータになる。解析時は、短時間の平均心拍数だけでなく、この変動幅にも注目することが重要だ。

最後に、「目立つ山が全てQRS波」という誤認。実際のECGには、アーチファクト(偽信号)が大きな山として現れることがある。例えば、電極のはがれによる基線の大振幅の揺れや、強い筋電ノイズだ。シミュレーターでノイズレベルを最大にすると、QRS波の上に別の山が乗る様子が再現できる。アルゴリズムでQRSを自動検出する際は、振幅だけでなく波形の形状や前後の文脈から総合的に判断する「ロジック」が必要になるんだ。

関連する工学分野

このシミュレーターの核である信号処理技術は、振動・音響工学と完全に地続きだ。ECGの周波数スペクトルを見る行為は、機械の振動データから異常音を特定する「FFT(高速フーリエ変換)分析」と本質的に同じ。例えば、回転機械の軸不整衡は特定の周波数にピークを作るが、それは心電図の電源ノイズ(50/60Hzピーク)を同定する手法と共通している。

また、制御工学のフィルタ設計理論がそのまま応用される。生体信号で使われるバンドパスフィルタは、ローパスとハイパスフィルタを組み合わせたものだが、これはフィードバック制御系で不要な周波数帯域の信号を除去する「ノッチフィルタ」や「ローパスフィルタ」の設計思想と同一だ。シミュレーターでカットオフ周波数を調整する感覚は、制御系の帯域幅を調整する感覚に直結する。

さらに材料・構造工学の非破壊検査にも通じるものがある。超音波探傷検査では、材料内部のきずからの反射波(信号)に様々なノイズが重畳する。この「真の信号」と「ノイズ」を分離し、きずの位置や大きさを推定する信号処理は、ノイズに埋もれた小さなP波やT波を検出する心電図解析と技術的に親戚と言える。

発展的な学習のために

まず次の一歩は、「時系列データとしての生体信号」を意識した解析に進むことだ。シミュレーターでは主に1心拍を見ているが、実際は長時間のデータを扱う。例えば、5分間のECGデータを配列として読み込み、R波の位置を全て検出してRR間隔の時系列を作る。そのデータに対して、標準偏差を計算する(SDNN:心拍変動の指標の一つ)といった具合だ。プログラミング環境(PythonのNumPy/SciPyなど)で実際にコードを書いてみるのが最も効果的だ。

数学的背景としては、線形代数と統計学の基礎が役に立つ。なぜなら、現代的な信号処理や機械学習を用いた解析の根底にあるからだ。例えば、主成分分析(PCA)は多次元の生体信号(多誘導ECGなど)からノイズを分離したり特徴を抽出するのに使われる。その理解には、共分散行列と固有値・固有ベクトルの知識が不可欠になる。

推奨する次の具体的なトピックは「ウェーブレット変換」だ。FFTが信号全体の周波数成分を教えてくれるのに対し、ウェーブレット変換は「時間と周波数の両方の情報」を同時に提供できる。これは、非定常な信号——例えば、突然発生する不整脈や、睡眠段階による脳波(EEG)の変化——を解析するのに強力な武器になる。シミュレーターで学んだフーリエ変換の次の発展形として、その考え方に触れてみよう。