心電図 QRS 検出シミュレーター 戻る
医工学・信号処理

心電図 QRS 検出シミュレーター

心電図波形から R 波(QRS 群の頂点)を取り出す古典手法 Pan-Tompkins アルゴリズムを、ブラウザ上で可視化します。心拍数・サンプリング周波数・ノイズレベル・帯域・しきい値を変えると、検出感度・PPV・処理遅延がその場で更新され、ホルター心電計やウェアラブル機器の設計感覚がつかめます。

パラメータ設定
心拍数 HR
BPM
毎分の拍動回数。30〜200 で安静〜運動時相当
サンプリング Fs
Hz
ADC のサンプリング周波数。診断用は 500 Hz 以上が標準
ノイズレベル
%
信号振幅に対する加算ノイズの比。電源ハム・EMG 相当
バンドパス下限 fL
Hz
バンドパス上限 fH
Hz
QRS の主要周波数 5〜15 Hz が標準
移動窓幅 MWI
ms
二乗信号の移動平均窓。150 ms が標準(QRS 幅 80〜120 ms より少し広い)
しきい値係数
適応しきい値 NPK + factor·(SPK − NPK) の係数
計算結果
RR 間隔 (ms)
サンプル/拍
検出遅延 (ms)
信号対雑音比 SNR (dB)
感度 (%)
陽性的中率 PPV (%)
ECG 波形と Pan-Tompkins パイプライン

上段:合成 ECG(P-QRS-T + ノイズ)。下段:バンドパス→微分→二乗→MWI 出力。赤点が R 波検出位置、点線が適応しきい値。

ECG 生信号 vs 処理済み信号
検出感度・PPV の SNR 依存性
理論・主要公式

$$y[n] = x[n] * h_{BP}[n] * h_{D}[n],\qquad I[n] = \frac{1}{N}\sum_{k=0}^{N-1}y^{2}[n-k]$$

h_BP:バンドパス、h_D:微分フィルタ、N:窓幅サンプル数。MWI 出力 I[n] が適応しきい値を超えたとき R 波として検出する。

$$\mathrm{THRESHOLD} = \mathrm{NPK} + f\cdot(\mathrm{SPK} - \mathrm{NPK})$$

SPK:信号ピーク移動平均、NPK:雑音ピーク移動平均、f:しきい値係数。検出ごとに SPK/NPK を更新する適応型しきい値。

$$\mathrm{SNR}_{\mathrm{dB}} = 20\log_{10}\!\left(\frac{A_{\mathrm{signal}}}{A_{\mathrm{noise}}}\right),\qquad t_{\mathrm{lat}} \approx t_{BP} + t_{D} + \tfrac{N}{2 F_{s}}$$

SNR は信号と雑音の振幅比(dB)。検出遅延 t_lat はバンドパス・微分・MWI の群遅延の和。Fs:サンプリング周波数。

心電図 (ECG) の QRS 検出 — Pan-Tompkins アルゴリズム

🙋
心電計って心臓の電気の波を測ってるんですよね?あの「ピッ、ピッ」って音って、波形のどこを検出してるんですか?
🎓
そう、検出してるのは「R 波」、波形でいちばんとがった山だね。1 拍ごとに P 波(心房の脱分極)→ QRS 群(心室の脱分極)→ T 波(再分極)と並ぶんだけど、その中で QRS の頂点 = R 波が最大で形が安定してる。だから心拍数を測るときも、不整脈を判定するときも、まず「R 波がどこにあるか」を見つけるのが全ての出発点なんだよ。
🙋
でも実際の心電図ってグニャグニャしてるし、筋肉の電位とか電源のハムとか混ざってますよね?単純に「いちばん高いところ」って閾値で切るんじゃダメなんですか?
🎓
いいところを突くね。固定しきい値だと、ちょっと体動した瞬間にノイズの山を R 波と誤検出するし、逆に心電図の電極が外れかかって振幅が落ちると今度は本物の R 波を取りこぼす。そこで 1985 年に Pan と Tompkins が発表したのが、(1) バンドパス → (2) 微分 → (3) 二乗 → (4) 移動平均統合 → (5) 適応しきい値、の 5 段パイプラインだよ。MIT-BIH という標準データベースで感度 99.3% を出した、今でも教科書に必ず載る古典手法なんだ。
🙋
5 段それぞれに意味があるんですか?特に「微分してから二乗」って何のためですか?
🎓
全部に理由があるよ。まずバンドパス 5〜15 Hz は QRS のスペクトルピーク帯。P 波・T 波(低周波)と筋電・電源ハム(高周波)を同時に削れる。次に微分は「波形の傾き」を取り出す処理で、R 波の急峻な立ち上がりだけが大きな値になる。二乗は符号をそろえてエネルギー化するため、しかも値が非線形に強調される。最後に移動平均統合(MWI、150 ms 窓)でエネルギーを 1 つの山にまとめると、しきい値を当てやすい平滑な波形ができる、というわけだね。
🙋
右の「感度」と「PPV」って何が違うんですか?両方とも 99% で出てます。
🎓
感度 = 本物の R 波のうち検出できた割合(取りこぼしの少なさ)、PPV = 検出したものに本物が含まれる割合(誤検出の少なさ)だよ。しきい値係数を下げると検出が増えるから感度↑だけど、ノイズも拾うので PPV↓。逆に上げると PPV↑で感度↓。両方とも 99% 以上を目指すのが目標で、Pan-Tompkins 標準パラメータならノイズ 10% 程度の臨床信号でその水準が出る。ICU や運動中の高ノイズ環境では、係数を 0.5〜0.6 まで上げて誤検出を抑える運用が多いんだ。
🙋
「検出遅延 91 ms」って表示されてますけど、これってリアルタイム性に影響しますよね?
🎓
するね。バンドパスと微分の FIR 群遅延、それに MWI 窓の半分(150 ms なら 75 ms)が累積して、R 波が立った瞬間から検出イベントが出るまで 80〜100 ms くらいズレる。だから AED(自動体外式除細動器)やペースメーカみたいに「即時にショックを出す/同期する」用途では、この遅延を見越して窓幅を 100 ms に短くしたり、別の即応型検出器を併用したりするんだ。ホルター心電計の事後解析なら遅延は気にしない、と用途で割り切るのが現場のやり方だよ。

よくある質問

Pan-Tompkins は 1985 年に Jiapu Pan と Willis J. Tompkins が発表した、心電図波形から QRS 群(R 波)をリアルタイムで検出する古典的アルゴリズムです。バンドパスフィルタ(5-15 Hz)→ 微分 → 二乗 → 移動平均統合(MWI)→ 適応しきい値、の 5 段パイプラインで構成され、MIT-BIH 不整脈データベース上で感度 99.3% を達成しました。実装が軽く、ホルター心電計やウェアラブル機器の組込みファームウェアで現在も広く使われています。
QRS 群のスペクトルピークは 10 Hz 付近にあり、5〜15 Hz の帯域に最大のエネルギーが集中します。一方、P 波・T 波は 1〜7 Hz、筋電(EMG)ノイズは 20 Hz 以上、商用電源ハムは 50/60 Hz に乗ります。5〜15 Hz の通過帯域に絞ることで QRS 以外の心電成分とノイズを同時に抑え、R 波だけが目立つ信号に整形できます。下限を下げると T 波が混入して誤検出が増え、上限を上げると EMG ノイズで PPV が落ちます。
標準的な値は 150 ms です。これは成人の QRS 持続時間(通常 80〜120 ms)よりやや長く、二乗後のエネルギーを 1 つの山にまとめるのに最適化されています。窓を短くするとピークが二瘤化して 1 拍を 2 拍と誤検出し、長くすると隣接拍を 1 つの山に統合してしまい高心拍時に検出漏れが起きます。小児や頻脈の解析では 100 ms 前後、QRS 幅広拍(脚ブロック等)では 200 ms まで広げると安定します。
Pan-Tompkins では信号ピーク平均 SPK と雑音ピーク平均 NPK を逐次更新し、THRESHOLD = NPK + factor·(SPK − NPK) で動的なしきい値を作ります。factor を小さく(0.2〜0.3)すると感度が上がりますが、ノイズで誤検出(false positive)が増えて PPV が落ちます。0.4 前後が標準で、ICU の高ノイズ環境では 0.5〜0.6、ウェアラブルの静止時記録では 0.25 まで下げる実装もあります。本ツールでは factor を下げると感度が上がり PPV が下がる挙動が再現されます。

実世界での応用

ホルター心電計(24 時間モニタ):外来検査で 24〜48 時間の長時間記録を行い、不整脈や ST 変化を検出します。Pan-Tompkins はこの分野の業界標準で、Mortara や日本光電などの市販装置のフロントエンド検出にもベースとして採用されています。1 日約 10 万拍の R 波検出が必要なため、感度 99%・PPV 99% でも 1,000 拍の見落とし/誤検出が出る計算で、検出精度が直接診断品質に効く領域です。

ICU 連続生体モニタ・テレメトリ:集中治療室のベッドサイドモニタは心拍数とアラームの基礎情報を Pan-Tompkins 系の検出器で生成します。患者の体動や除細動器・電気メスとの干渉が多いため、しきい値係数を高めに設定し、誤検出(false alarm)を抑える運用が普通です。アラーム疲労(alarm fatigue)対策として、複数誘導の検出結果を融合するマルチリード Pan-Tompkins も普及してきました。

ウェアラブル心電計・スマートウォッチ:Apple Watch・Fitbit・OMRON HeartGuide などのコンシューマ機器も、内部では Pan-Tompkins を簡略化した検出器を使うケースが多いです。乾電極・短時間記録・体動ノイズが課題なので、バンドパス上限を 20〜25 Hz に広げ、しきい値を頻繁に再学習することで対応します。本ツールでノイズ 30〜40% に上げると、ウェアラブル相当の挑戦的な条件での感度・PPV 低下が再現できます。

ICD・ペースメーカの感知ロジック:植込み型除細動器(ICD)は心室細動(VF)を 5〜10 秒以内に検出してショックを出す必要があります。検出遅延が直接救命率に効くため、Pan-Tompkins より単純な微分+しきい値の組み合わせ+ R-R 間隔解析を併用し、トータル遅延を 3 秒以内に抑える設計が一般的です。本シミュレーターで MWI 窓を 50 ms まで短くすると、ICD 用の高速検出に近い遅延(〜25 ms)が体感できます。

よくある誤解と注意点

最大の落とし穴が、「感度 99% なら十分」と数字を一括りにすることです。臨床現場では「24 時間の記録で見逃した不整脈が何拍か」「false alarm が看護師の何回の呼び出しに繋がるか」が問題で、感度 99% でもホルター 1 日で 1,000 拍の見落としが出ます。さらに、見落とすのが心室期外収縮(PVC)か、心室細動(VF)かで臨床的重大度が桁違いに違います。アルゴリズム評価では「QRS 検出精度」だけでなく、「危険な不整脈を取りこぼさない感度」をサブクラスごとに集計する必要があります。

次に、「サンプリング周波数を上げれば検出精度も上がる」と短絡すること。診断用 ECG は IEC 60601-2-25 で 500 Hz 以上が推奨されますが、それを 2000 Hz まで上げても Pan-Tompkins の検出精度はほぼ頭打ちです。むしろ Fs を上げると微分後の高周波ノイズが目立ち、バンドパス上限の設計がシビアになります。低消費電力が要求されるウェアラブルでは 250 Hz でも臨床的に十分な感度が出るため、「Fs は QRS スペクトル(〜40 Hz)の 8〜10 倍あれば足りる」と割り切る設計判断が正解です。

最後に、「Pan-Tompkins は完璧、機械学習に置き換えれば改善する」という二項対立。最近の CNN/LSTM ベースの QRS 検出器は MIT-BIH で感度 99.9% を出しますが、推論コスト・電力・モデル更新の責任問題・FDA 規制対応のすべてで Pan-Tompkins より重くなります。実装現場では「Pan-Tompkins で 99% を取り、難しい症例だけ深層学習で再検出する」というハイブリッド構成が増えています。古典手法を理解せずに ML へジャンプする前に、まずバンドパス帯域・MWI 窓・しきい値係数の 3 つを正しく設定できる必要があります。

使い方ガイド

  1. 心拍数(60~180 bpm)とサンプリング周波数(100~1000 Hz)を設定し、標準的な心電図波形を生成します
  2. ノイズレベル(0~50 dB)を調整して、筋電図ノイズや商用周波数干渉(50/60 Hz)の影響を模擬します
  3. バンドパス帯域(5~100 Hz)と移動窓幅を変更し、Pan-Tompkins処理パイプライン全体を通して R 波検出精度の変化を観察します
  4. 感度(%)と陽性的中率 PPV(%)の実時間変化を監視し、最適なパラメータ組合せを探索します

具体的な計算例

心拍数 72 bpm、サンプリング周波数 250 Hz の場合、RR間隔は 833 ms となり、サンプル数は約 208 点です。ノイズレベル 25 dB、バンドパス帯域 5~40 Hz を適用すると、SNR は約 18 dB に改善され、感度 98.5%、PPV 97.2% を達成します。一方、ノイズ 40 dB で同一の帯域設定では SNR は 11 dB に低下し、感度 92.1%、PPV 89.6% に減少します。検出遅延は移動窓幅 200 ms で約 45 ms となります。

実務での注意点