Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

ECG 信号の外れ値を除去する手法

この例では、外れ値を除去するさまざまなフィルターを調べます。心電図 (ECG) 信号を入力として使用します。

はじめに

外れ値には厳密な定義がないため、外れ値を除去する手法にもさまざまな方法があります。

この例では、3 つの手法を検証します。

ECG 信号ソース

この例では、MIT-BIH Arrhythmia Database の ECG 信号を使用します。信号は 360 Hz でサンプリングされています。この信号はシフトとスケーリングにより、生の 12 ビット ADC 値から実際値に変換されています。

ECG 信号の詳細については、リアルタイム ECG QRS 検出の例を参照してください。

設定

まず、dsp.MatFileReader を使用して ECG 信号からストリームを作成します。次に、生の信号とフィルター処理された信号を可視化するスコープを作成します。

Fs = 360;
frameSize = 500;
fileName = 'ecgsig.mat';
winLen = 13; % Window length for the filters.

fileReader = dsp.MatFileReader('Filename',fileName, ...
    'VariableName','ecgsig','SamplesPerFrame',frameSize);
scope = timescope('SampleRate',Fs,'TimeSpanOverrunAction','Scroll', ...
    'TimeSpan',2,'YLimits',[-1.5 1.5],'ShowGrid',true, ...
    'NumInputPorts',2,'LayoutDimensions',[2 1]);
scope.ActiveDisplay = 1;
scope.Title = 'Raw Signal';
scope.ActiveDisplay = 2;
scope.Title = 'Filtered Signal';

移動平均フィルターによる外れ値の除去のパフォーマンス

ランニング平均フィルターでは、指定のウィンドウ長のランニング平均を計算します。この計算は、他の 2 つのフィルターに比べると比較的簡単です。ただし、信号と外れ値の両方が平滑化されます。そのため、ECG 信号のピークが元の振幅の約 3 分の 1 に平滑化されます。

movAvg = dsp.MovingAverage(winLen);
while ~isDone(fileReader)
    x = fileReader();
    y = movAvg(x);
    scope(x,y);
end

% Clean up
release(scope);

reset(fileReader);
reset(scope);

メディアン フィルターによる外れ値の除去のパフォーマンス

メディアン フィルターは、移動平均フィルターと比べると、外れ値に対して過敏ではないため適している場合があります。ただし、以下のスコープからわかるように、局所的中央値が変わらない信号において、極端な "ステップ" の原因となることがあります。そのため、フィルターのウィンドウ長については十分な検討が必要です。

medFilt = dsp.MedianFilter(winLen);
while ~isDone(fileReader)
    x = fileReader();
    y = medFilt(x);
    scope(x,y);
end

% Clean up
release(scope);

reset(fileReader);
reset(scope);

Hampel フィルターによる外れ値の除去のパフォーマンス

Hampel フィルターでは、追加のしきい値パラメーターを設定できます。下記では 1 に設定しており、局所的中央値から 1 標準偏差よりも離れているサンプルが外れ値として分類されます。しきい値とウィンドウ長はどちらも変更が可能で、元の信号を歪めることなく入力信号から外れ値を除去できます。

thres = 1;
hampFilt = dsp.HampelFilter(winLen,thres);
while ~isDone(fileReader)
    x = fileReader();
    y = hampFilt(x);
    scope(x,y);
end

% Clean up
release(scope);

reset(fileReader);
reset(scope);

まとめ

上記の 3 つのフィルターは、いずれも外れ値の除去に使用できます。フィルターのパフォーマンスには、外れ値のノイズ分布とウィンドウ長の両方が影響します。特定の応用事例で外れ値の除去に使用するフィルターを選択するときは、その点を考慮してください。

参照

[1] Goldberger AL, Amaral LAN, Glass L, Hausdorff JM, Ivanov PCh, Mark RG, Mietus JE, Moody GB, Peng C-K, Stanley HE. "PhysioBank, PhysioToolkit, and PhysioNet: Components of a New Research Resource for Complex Physiologic Signals." Circulation 101(23):e215-e220, 2000.

[3] Moody GB, Mark RG. "The impact of the MIT-BIH Arrhythmia Database." IEEE Eng in Med and Biol 20(3):45-50 (May-June 2001).