このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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).