PPG信号 & SpO₂ シミュレーター 戻る
医工学・生体信号

PPG信号 & SpO₂ シミュレーター — パルスオキシメトリー原理

指先に当てた赤色・赤外 LED の吸光比から、動脈血酸素飽和度 SpO₂ を推定するパルスオキシメトリーの原理を、PPG 生波形と校正曲線で可視化するツールです。灌流指数・体動アーチファクト・サンプリング周波数が信号品質と測定不確かさにどう効くかをリアルタイムに確認できます。

パラメータ設定
目標 SpO₂
%
設定した真の SpO₂ 値(健常人 95〜100%)
心拍数 HR
BPM
赤色 LED 波長
nm
標準は 660 nm。Hb と HbO₂ の吸収差が大きい
赤外 LED 波長
nm
標準は 940 nm。HbO₂ の吸収がやや大きい等吸光に近い帯
灌流指数 PI
%
AC/DC×100。健常で 1〜5%、低灌流で <0.5%
体動アーチファクト
%
PPG 波形に重畳する低周波雑音の振幅
サンプリング周波数 Fs
Hz
計算結果
R 比
SpO₂ 推定値 (%)
推定誤差 (%)
RR 間隔 (ms)
信号品質 SQI (%)
測定不確かさ (%)
指先断面 — PPG 信号アニメーション

指先を透過する赤色 LED(660nm)と赤外 LED(940nm)の光が、心拍に同期する血液量変動で吸収され、photodetector で AC + DC 波形として捉えられます。

PPG 生波形(赤色 + 赤外、AC 成分強調)
SpO₂ 校正曲線(R 比 vs SpO₂)
理論・主要公式

$$R = \frac{(AC/DC)_{\text{red}}}{(AC/DC)_{\text{IR}}}, \qquad SpO_{2} \approx 110 - 25\,R$$

R≈0.4〜0.5 で SpO₂≈100%、R≈1.0 で SpO₂≈85%。経験的校正カーブは機器毎に異なる(メーカーの実測値)。

$$SpO_{2} = \frac{\varepsilon_{Hb,\text{red}} - R\,\varepsilon_{Hb,\text{IR}}}{(\varepsilon_{Hb,\text{red}}-\varepsilon_{HbO_{2},\text{red}}) + R\,(\varepsilon_{HbO_{2},\text{IR}}-\varepsilon_{Hb,\text{IR}})}$$

本ツールではより厳密な Beer-Lambert 由来の式を採用し、SpO₂=98% 入力で R≈0.33、推定誤差≈0% となる吸光係数を使用しています。

$$SQI = \frac{PI}{5}\,\left(1-\frac{motion}{100}\right), \qquad U[\%] = 1 + \frac{1}{SQI} + 0.02\cdot motion$$

信号品質指標 SQI と測定不確かさ U の簡易モデル。低灌流・大体動で U が急増する。

フォトプレチスモグラフィー (PPG) 信号と SpO₂

🙋
Apple Watch とか病院のクリップ型のセンサーで「酸素飽和度 98%」って出ますよね。あれってどうやって測ってるんですか?指から血を取ってるわけじゃないですよね?
🎓
そう、まったく針を刺さない非侵襲計測なんだ。原理を一言で言うと「光の吸収を測っているだけ」。指先に赤色(660nm 付近)と赤外(940nm 付近)の2つの LED を当てて、反対側か同じ側にある photodetector で透過/反射光を拾う。心臓が拍動するたびに動脈血の量が増減するから、光の吸収もそのリズムで揺れる。この揺れの成分を「AC」、平らな成分を「DC」と呼んで、両波長の AC/DC の比 R をとると、酸化ヘモグロビン HbO₂ と還元ヘモグロビン Hb の吸収の違いから動脈血の酸素飽和度(SpO₂)が分かる、っていう仕組みだよ。
🙋
なんで「赤色」と「赤外」の2色なんですか?1色じゃダメなんですか?
🎓
いい質問。これは Beer-Lambert 則の話で、1色だと「ヘモグロビンの濃度」と「酸素化の割合」が一緒の式に混ざってしまって分けられないんだ。でも 660nm では Hb が HbO₂ より光を強く吸う、逆に 940nm では HbO₂ のほうがやや強く吸う、という性質がある。だから 2波長の AC/DC 比をとって割ると、濃度や経路長は約分で消えて「酸素化の割合」だけが残る。これがパルスオキシメトリーの肝で、未知数の数と式の数を 2 と 2 で釣り合わせている、と思うと CAE の感覚にも近いね。
🙋
左の灌流指数 PI を 2.5% から 0.5% まで下げると、信号品質が急に落ちて「警告」になりますね。PI ってそんなに大事なんですか?
🎓
めちゃくちゃ大事だよ。PI は AC/DC×100、つまり「全光量に対する拍動成分の割合」で、ここがそのまま信号対雑音比のもとになる。健常人の指先なら 1〜5% くらいだけど、冷えてる、ショック状態、血管収縮薬を使っている、みたいな状況だと 0.1% を切ることもある。AC が小さくなれば R の値もすぐ揺らぐから、SpO₂ の読みが「97 → 92 → 95」みたいに不安定になる。だから ICU では「指が冷たい患者には額や耳のセンサーに替える」「PI が低いままなら別の循環の問題を疑う」というふうに、PI 自体も大事な臨床情報として見ている。
🙋
体動アーチファクト ってのもありますよね。手を振ったりすると数値が暴れる、あれですか?
🎓
そう、ウェアラブルの最大の敵がそれ。指や手首を動かすと、皮膚と LED の距離が変わったり、静脈血まで動いて拍動っぽい大振幅のノイズが乗る。これが「動いてないときの脈動」と似た周波数帯に来ると、ピーク検出も R 計算も両方狂う。スマートウォッチが運動中の SpO₂ をなかなか出してくれないのは、SQI が閾値以下と判定して「読まない」を選んでいるから。本ツールでも体動 30% を超えるあたりから不確かさが急に立ち上がって、「測れていない」状態になるのが見えるはずだよ。
🙋
サンプリング周波数 Fs はどのくらいあれば足りるんですか?病院のモニタはやけに細かそうですが…
🎓
用途で決まる。SpO₂ と心拍だけなら 50〜100 Hz で十分で、本ツールのデフォルト 100 Hz もここに合わせてある。一方、PPG 波形そのものから血圧の傾向や HRV(心拍変動)を読みたいなら、第 5 高調波くらいまで残しておきたいので 250〜500 Hz が欲しい。だから ICU の高機能モニタは 500 Hz 級で取っていることが多い。Nyquist 的には HR/60 × 5 × 2 が下限で、HR=180 なら 30 Hz が最低ラインということになるね。

よくある質問

PPG は LED 光が指先など末梢組織を透過/反射する量を photodetector で測定し、心拍に伴って変動する血液量(AC 成分)と静的な吸収(DC 成分)を取り出す技術です。SpO₂(経皮的動脈血酸素飽和度)は、酸化ヘモグロビン HbO₂ と還元ヘモグロビン Hb の吸収係数が波長で異なることを利用し、赤色(≒660nm)と赤外(≒940nm)の AC/DC 比の比 R から推定します。すなわち SpO₂ は PPG 信号から派生する代表的なパラメータの一つです。
Pulse oximeter で用いる比は R = (AC/DC)_red / (AC/DC)_IR で、機器メーカーが実測キャリブレーションした経験式 SpO₂ ≈ 110 − 25R が最もよく知られています。本ツールでは、より厳密な Beer-Lambert ベースの式 SpO₂ = (ε_Hb,red − R·ε_Hb,IR) / (ε_Hb,red − ε_HbO2,red + R·(ε_HbO2,IR − ε_Hb,IR)) を用い、SpO₂=98% 入力で R≈0.33、推定誤差ほぼ 0% となる吸光係数(660/940nm)を採用しています。
PI(Perfusion Index)は AC/DC×100 で表される拍動成分の強さで、典型値は 1〜5% です。PI が小さいと AC 成分の SN 比が落ち、R の推定が不安定になります。体動アーチファクトは PPG 波形に低周波の大振幅変動を加え、AC のピーク検出を狂わせます。本ツールでは信号品質 SQI = PI/5 × (1 − motion/100)、不確かさ U[%] = 1 + 1/SQI + 0.02·motion[%] と単純化し、低灌流・体動下で SpO₂ の信頼性が低下する様子を可視化します。
PPG 波形は基本周波数(HR/60 Hz)に対し少なくとも 5 倍程度の高調波まで含むため、Nyquist 条件としては Fs ≥ 2·(HR/60·5) Hz が一つの目安です。HR=180 BPM では 30 Hz 以上、安全側で 100 Hz 程度を採るのが一般的です。連続測定や HRV(心拍変動)解析を行うなら 250〜500 Hz、ピーク検出のみなら 50〜100 Hz でも実用上問題ありません。本ツールではデフォルト 100 Hz で「Nyquist 条件 OK」の判定を出します。

実世界での応用

病院モニタ・ICU・手術室:パルスオキシメトリーは「第5のバイタル」と呼ばれ、心拍・呼吸・血圧・体温に並ぶ標準モニタリング項目です。全身麻酔中の酸素化監視、人工呼吸器の離脱判断、敗血症患者の早期警告(NEWS/qSOFA でも SpO₂ を採点項目とする)など、命に直結する場面で常時使われています。臨床用機器の精度仕様は典型的に Arms = 2%(SpO₂ 70〜100% 範囲で実測との二乗平均誤差 2% 以内)。

ウェアラブル健康機器:Apple Watch(Series 6 以降)、Fitbit、Garmin、Oura Ring などが PPG ベースで SpO₂・心拍・HRV・睡眠時無呼吸スクリーニングを提供しています。腕時計型は反射型 PPG(LED と photodetector が同じ面)で、皮膚との密着・体動・皮膚色の影響を強く受けるため、臨床機器より誤差は大きく、医療診断ではなく「健康トレンドの参考値」として位置づけられています。

新生児・小児医療:新生児の動脈管開存症スクリーニングや、未熟児の酸素療法管理では、上肢と下肢で同時に SpO₂ を測り「pre-ductal/post-ductal の差」を見るのが標準的なテクニックです。皮膚が薄く光の透過が良い反面、体重数 kg の体動・低灌流に弱く、専用の小型プローブと低 PI でも追従するアルゴリズムが要求されます。

COVID-19 在宅管理・遠隔医療:2020 年以降、軽症 COVID 患者の自宅療養で SpO₂ が「沈黙の低酸素症(silent hypoxia)」の検出指標として一般家庭にも普及しました。家庭用パルスオキシメータの売上は数十倍に伸び、遠隔診療プラットフォームと連携した SpO₂ 自動アラート(例:93% を下回ったら看護師に通知)の運用が標準化されました。

よくある誤解と注意点

まず最大の誤解が 「SpO₂ = 100% なら最良で安全」 という思い込みです。SpO₂ は酸素飽和度の上限が 100% で頭打ちになるため、酸素分圧 PaO₂ がさらに高くても見分けがつきません(酸素解離曲線の上端は平ら)。COPD や慢性 II 型呼吸不全では、過剰な酸素投与で CO₂ 排出が低下し意識障害を起こすため、目標 SpO₂ を 88〜92% に意図的に下げることもあります。SpO₂ は「高ければ高いほど良い」ではなく、患者背景に応じた目標値で運用するパラメータです。

次に 「ネイルポリッシュ・色素・末梢循環の影響」。濃い赤・青・黒のマニキュア、入れ墨、ヘナタトゥー、皮膚黄染(ビリルビン)などは LED 光の透過/反射スペクトルを歪め、SpO₂ を 1〜数%低く誤測します。皮膚色(メラニン量)も近年問題視されており、特に低 SpO₂ 領域では暗い肌色で「実際より高め」に出る系統誤差が複数の論文で報告されています(FDA は 2022 年に注意喚起)。臨床的に怪しい値が出たら、別指・耳介・額のセンサーへ変更、ABG(動脈血ガス)との照合が必要です。

最後に 「異常ヘモグロビンと CO 中毒」 です。一般のパルスオキシメータは Hb と HbO₂ の 2 種類しか区別できないため、メトヘモグロビン血症(MetHb)や一酸化炭素中毒(COHb)では、酸素を運べない異常 Hb を「HbO₂」と誤って数えてしまい、SpO₂ が偽に正常〜高値を示します。火災現場や工業ガス事故では、SpO₂ が 98% でも CO-oximeter(4〜8 波長型)で実測すると COHb=40% で実質的に重症低酸素ということがあります。SpO₂ 単独では「真の動脈酸素分圧」を保証できない点は CAE 出力と同様、入力の物理が崩れていれば結果は無意味、という教訓です。

使い方ガイド

  1. 赤色LED強度(630nm)と赤外LED強度(940nm)の吸光値をスライダーで設定し、動脈血酸化度に対応した信号比を入力します
  2. 心拍数(HR)と呼吸数(RR)のパラメータを調整し、PPG波形の周期性とR比(赤色/赤外の吸光比)を確認します
  3. 体動アーチファクトのレベルを0~100%で付加すると、信号品質指標(SQI)と測定不確かさがリアルタイムで変動し、SpO₂推定値のドリフトを観察できます

具体的な計算例

健康成人の動脈血酸素飽和度SpO₂=98%時、赤色LED透光値AC=0.8、赤外LED透光値AC=1.2となり、R比=0.67が得られます。このR値を標準較正曲線(R=0.4~1.0に対しSpO₂=100~75%)に代入すると推定SpO₂は約97%です。体動アーチファクトが20%加わると信号品質SQIは85%に低下し、測定不確かさは±2.1%に拡大します。一方、心拍数120bpm・呼吸数25回/分の患者では、RR間隔480msでPPG波形の呼吸性変動が顕著になり、灌流指数PI(AC/DC比)が0.8~1.2の範囲で変動します。

実務での注意点