Методы удаления выбросов с потоковыми сигналами ECG

В этом примере исследуются различные фильтры удаления выбросов и используется сигнал электрокардиограммы (ЭКГ) в качестве входных данных.

Введение

Существует много различных методов удаления выбросов, потому что жесткое определение выброса не существует.

Три метода, исследованные в этом примере:

Источник сигнала ЭКГ

Сигнал ЭКГ, используемый в этом примере, берётся из базы данных аритмии MIT-BIH. Дискретизация сигнала производится на частоте 360 Гц. Сигнал был сдвинут и масштабирован, чтобы преобразовать его из необработанных 12-битных значений АЦП в реальные значения.

Для получения дополнительной информации о сигналах ЭКГ, пожалуйста, смотрите пример Real-Time ECG QRS Detection.

Setup

Сначала создайте поток из сигнала ECG с помощью dsp. MatFileReader. Затем создайте возможности, чтобы визуализировать необработанные и отфильтрованные сигналы.

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,'TimeSpanSource','property', ...
    'TimeSpan',2,'YLimits',[-1.5 1.5], ...
    'LayoutDimensions',[2 1]);
scope.ActiveDisplay = 1;
scope.Title = 'Raw Signal';
scope.ActiveDisplay = 2;
scope.Title = 'Filtered Signal';

Эффективность удаления выбросов фильтра скользящего среднего

Фильтр скользящего среднего вычисляет среднее пробега на указанной длине окна. Это относительно простое вычисление по сравнению с двумя другими фильтрами. Однако это сгладит и сигнал, и выбросы. Это заставляет пик в сигнале ЭКГ сглаживаться примерно до трети от его исходной величины.

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 Filter имеет дополнительный пороговый параметр, который можно задать. Ниже установлено значение единицы, что означает, что любая выборка, которая является более чем одним стандартным отклонением от локальной медианы, будет классифицирована как выбросы. И порог, и длина окна могут быть изменены, чтобы удалить выбросы из входного сигнала, не искажая исходный сигнал.

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);

Заключение

Все три вышеуказанных фильтра могут использоваться для удаления выбросов. Шумовое распределение выбросов и длина окна оба влияют на эффективность фильтра. Это должно быть принято во факторе при выборе фильтра для удаления выбросов в определенном приложении.

Ссылки

Goldberger AL, Amaral LAN, Glass L, Hausdorff JM, Ivanov PCh, Mark RG, Mietus JE, Moody GB, Peng C-K, Stanley HE. PhysioBank, PhysioToolkit и PhysioNet: компоненты нового исследовательского ресурса комплексных физиологических сигналов. Тираж 101 (23): e215-e220, 2000. http://circ.ahajournals.org/cgi/content/full/101/23/e215

Moody GB, Mark RG. «влияние базы данных аритмии MIT-BIH». IEEE Eng in Med and Biol 20 (3): 45-50 (май-июнь 2001).