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

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

Введение

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

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

Источник сигнала ECG

Сигнал ECG, используемый в этом примере, взят из Базы данных Аритмии MIT-BIH. Сигнал производится на уровне 360 Гц. Сигнал был смещен и масштабировался, чтобы преобразовать его от необработанных 12-битных значений ADC до реальных значений.

Для получения дополнительной информации о сигналах ECG смотрите пример ECG В реальном времени Обнаружение QRS.

Настройка

Во-первых, создайте поток из сигнала 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';

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

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

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

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

Заключение

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

Ссылки

Голдбергер ЭЛ, LAN Amaral, Стекло L, Гаусдорф ДЖМ, Иванов PCh, Марк РГ, Mietus JE, Капризный Гбайт, Пенг C-K, Стэнли ХЭ. "PhysioBank, PhysioToolkit и PhysioNet: Компоненты Нового Ресурса Исследования для Комплексных Физиологических Сигналов". Циркуляция 101 (23): e215-e220, 2000. http://circ.ahajournals.org/cgi/content/full/101/23/e215

Капризный Гбайт, Марк РГ. "Удар Базы данных Аритмии MIT-BIH". Инженер IEEE в Медиане и Biol 20 (3):45-50 (мочь-июнь 2001).