dsp.HampelFilter

Фильтруйте выбросы с помощью идентификатора Хампеля

Описание

The dsp.HampelFilter Система object™ обнаруживает и удаляет выбросы входного сигнала с помощью идентификатора Хампеля. Этот Идентификатор Хампеля является изменением правила статистики с тремя сигмами, которое устойчиво к выбросам. Для каждой выборки входного сигнала объект вычисляет медиану окна, состоящего из текущей выборки и Len12 смежные выборки с каждой стороны токовой выборки. Len - длина окна, заданная вами через WindowLength свойство. Объект также оценивает стандартное отклонение каждой выборки относительно ее медианы окна с помощью медианного абсолютного отклонения. Если выборка отличается от медианы больше, чем порог, умноженный на стандартное отклонение, фильтр заменяет выборку на медиану. Для получения дополнительной информации см. «Алгоритмы».

Для фильтрации входного сигнала с помощью идентификатора Хампеля:

  1. Создайте dsp.HampelFilter Объекту и установите его свойства.

  2. Вызывайте объект с аргументами, как будто это функция.

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

hampFilt = dsp.HampelFilter возвращает объект фильтра Hampel, hampFilt, с использованием свойств по умолчанию.

пример

hampFilt = dsp.HampelFilter(Len) устанавливает WindowLength свойство к Len.

hampFilt = dsp.HampelFilter(Len, Lim) устанавливает WindowLength свойство к Len и Threshold свойство к Lim.

Пример: hampFilt = dsp.HampelFilter(11,2);

hampFilt = dsp.HampelFilter(Name,Value) задает свойства используя Name,Value пар. Неопределенные свойства имеют значения по умолчанию.

Свойства

расширить все

Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и release функция разблокирует их.

Если свойство настраивается, можно изменить его значение в любой момент.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.

Если свойство указано как настраиваемое, то можно изменить его значение даже при блокировке объекта.

Длина скользящего окна, заданная как положительное нечетное скалярное целое число. Окно конечной длины скользит по данным, и объект вычисляет медианное и медианное абсолютное отклонение данных в окне.

Типы данных: single | double

Порог для определения выбросов, заданное как положительный действительный скаляр. Для получения информации о том, как это свойство используется для обнаружения выбросов, см. Алгоритмы.

Настраиваемый: Да

Типы данных: single | double

Использование

Описание

пример

y = hampFilt(x) обнаруживает и удаляет выбросы каждого канала входного сигнала, x, независимо с течением времени с использованием фильтра Хэмпеля.

[y,isOutlier] = hampFilt(x) возвращает логический массив, isOutlier, в котором каждый true элемент указывает, что соответствующий элемент во входе является выбросами. isOutlier - тот же размер, что и входной и выходной векторы.

Входные параметры

расширить все

Вход данных, заданный как вектор или матрица. Объект принимает многоканальные входы, то есть m входные входы -by n size, где m ≥ 1 и n > 1. m - количество выборок в каждой системе координат (канале), а n - количество каналов. Объект также принимает входы переменного размера. После того, как объект заблокирован, можно изменить размер каждого входного канала, но вы не можете изменить количество каналов.

Типы данных: single | double

Выходные аргументы

расширить все

Отфильтрованные данные, возвращенные в виде вектора или матрицы.

Типы данных: single | double

Логический массив, элементы которого указывают, является ли соответствующий элемент массива входа выбросов. Если элемент в isOutlier является trueсоответствующий элемент массива входа является выбросами.

Типы данных: logical

Функции объекта

Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj, используйте следующий синтаксис:

release(obj)

расширить все

stepЗапуск алгоритма системного объекта
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта

Примеры

свернуть все

Фильтруйте высокочастотный шум от сигнала шумовой синусоиды с помощью фильтра Хэмпеля. Сравните эффективность фильтра Хэмпеля с медианным фильтром.

Инициализация

Настройка dsp.HampelFilter и a dsp.MedianFilter объект. Эти объекты используют метод раздвижного окна с длиной окна 7. Создайте временные возможности для просмотра выхода.

Fs = 1000;
hampFilt = dsp.HampelFilter(7);
medFilt = dsp.MedianFilter(7);
scope  = timescope('SampleRate',Fs, ...
    'TimeSpanOverrunAction','Scroll', ...
    'TimeSpanSource','Property',...
    'TimeSpan',1,'ShowGrid',true, ...
    'LayoutDimensions',[3 1], ...
    'NumInputPorts',3);
scope.ActiveDisplay = 1;
scope.Title = 'Signal + Noise';
scope.YLimits = [-1 3];
scope.ActiveDisplay = 2;
scope.Title = 'Hampel Filter Output (Window Length = 7)';
scope.YLimits = [-1 1];
scope.ActiveDisplay = 3;
scope.Title = 'Median Filter Output (Window Length = 7)';
scope.YLimits = [-1 1];

Фильтрация шумного Sine wave с помощью окна длины 7

Сгенерируйте сигнал шумной синусоиды с частотой 10 Гц. Примените фильтр Хэмпела и медианный объект фильтра к сигналу. Просмотр выхода по временным возможностям.

FrameLength = 256;
sine = dsp.SineWave('SampleRate',Fs,'Frequency',10,...
    'SamplesPerFrame',FrameLength);

for i = 1:500
    hfn = 3 * (rand(FrameLength,1) < 0.02);
    x = sine() + 1e-2 * randn(FrameLength,1) + hfn;
    y1 = hampFilt(x);
    y2 = medFilt(x);
    scope(x,y1,y2);
end
release(scope)

Оба фильтра удаляют высокочастотный шум. Однако при увеличении длины окна предпочтительным является фильтр Хэмпеля. В отличие от медианного фильтра, фильтр Хэмпеля сохраняет форму синусоиды даже с большими длинами окон.

Фильтрация шумного Sine wave с помощью окна длины 37

Увеличьте длину окна обоих фильтров до 37. Фильтрация шумной синусоиды и просмотр отфильтрованного выхода на временных возможностях. Чтобы изменить длину окна фильтров, необходимо отпустить объекты фильтра в начале цикла обработки.

release(hampFilt);
release(medFilt);
hampFilt.WindowLength = 37;
medFilt.WindowLength = 37;
scope.ActiveDisplay = 1;
scope.Title = 'Signal + Noise';
scope.ActiveDisplay = 2;
scope.Title = 'Hampel Filter Output (Window Length = 37)';
scope.ActiveDisplay = 3;
scope.Title = 'Median Filter Output (Window Length = 37)';
for i = 1:500
    hfn = 3 * (rand(FrameLength,1) < 0.02);
    x = sine() + 1e-2 * randn(FrameLength,1) + hfn;
    y1 = hampFilt(x);
    y2 = medFilt(x);
    scope(x,y1,y2);
end
release(scope)

Медианный фильтр уплощает гребни и впадины синусоиды из-за медианной операции над большим окном данных. Фильтр Хэмпела сохраняет форму сигнала, в дополнение к удалению выбросов.

Удалите высокочастотные выбросы из потокового сигнала с помощью dsp.HampelFilter Системные object™.

Используйте dsp.MatFileReader Системный объект для чтения файла MAT гироскопа. Файл содержит три столбца данных, причем каждый столбец содержит 7140 выборки. Три столбца представляют данные о оси X, оси Y и оси Z от датчика движения гироскопа. Выберите формат кадра 714 выборок, чтобы каждый столбец данных содержал 10 системы координат. The dsp.HampelFilter Системный объект использует длину окна 11. Создайте timescope объект для просмотра отфильтрованных выходов.

reader = dsp.MatFileReader('SamplesPerFrame',714,'Filename','LSM9DSHampelgyroData73.mat', ...
    'VariableName','data');
hampFilt = dsp.HampelFilter(11);
scope = timescope('NumInputPorts',1,'SampleRate',119,'YLimits',[-300 300], ...
    'ChannelNames',{'Input','Filtered Output'},...
    'TimeSpanSource','Property','TimeSpan',60,'ShowLegend',true);

Фильтрация данных гироскопа с помощью dsp.HampelFilter Системный объект. Просмотрите отфильтрованные данные по оси Z в Time Scope.

for i = 1:10
    gyroData = reader();
    filteredData = hampFilt(gyroData);
    scope([gyroData(:,3),filteredData(:,3)]);
end

Фильтр Хэмпела удаляет все выбросы и сохраняет форму сигнала.

Подробнее о

расширить все

Алгоритмы

Для заданной выборки данных, xs, алгоритм:

  • Центрирует окно нечетной длины в текущей выборке.

  • Вычисляет локальную медиану, mi и стандартное отклонение, σi, над активным окном данных.

  • Сравнивает текущую выборку с × σi, где - пороговое значение. Если |xsmi|>nσ×σiфильтр идентифицирует текущую выборку, xs, как выбросы и заменяют ее медианным значением, mi.

Рассмотрим систему координат данных, которая передается в фильтр Хэмпеля.

В этом примере фильтр Hampel скользит по данным окном длины 5 (Len). Фильтр имеет порог значение 2 (). Чтобы иметь полное окно в начале системы координат, алгоритм фильтра готовит систему координат с Len - 1 нулями. Чтобы вычислить первую выборку выхода, окно центрируется на [Len12+1]th выборка в добавленной системе координат, третий нуль в этом случае. Фильтр вычисляет медиану, среднее абсолютное отклонение и стандартное отклонение по данным в локальном окне.

  • Текущая выборка: xs = 0.

  • Окно данных: win = [0 0 0 0 1].

  • Локальная медиана: mi = медиана ([0 0 0 0 1]) = 0.

  • Срединное абсолютное отклонение: madi=median(|xikmi|,,|xi+kmi|). Для этого окна данных, mad=median(|00|,,|10|)=0.

  • Стандартное отклонение: σi = κ × madi = 0, где κ=12erfc1(1/2)1.4826.

  • Текущая выборка xs = 0 не подчиняется отношению для определения выбросов.

    [|xsmi|=0]>[(nσ×σi)=0]

    Поэтому фильтр Хэмпела выводит текущую входную выборку, xs = 0.

Повторите эту процедуру для каждой последующей выборки, пока алгоритм не центрирует окно на [EndLen12]th выборка, отмеченный как End. Потому что окно с центром на последнем Len12 выборки не могут быть полными, эти выборки обрабатываются следующей системой координат входных данных.

Вот первый выходной кадр, который генерирует фильтр Хэмпеля:

Седьмая выборка добавленного входного кадра 23 является выбросами. Фильтр Хэмпела заменяет эту выборку медианой над локальным окном [4 9 23 8 12].

Ссылки

[1] Боденем, Дин. «Адаптивная фильтрация и обнаружение изменений для потоковых данных». PH.D. Дипломная работа. Имперский колледж, Лондон, 2012.

[2] Лю, Ханьсун, Сириш Шах и Вэй Цзян. «Оперативное определение выбросов и очистка данных». Компьютеры и химическая техника. Том 28, 2004 марта, с. 1635-1647.

Расширенные возможности

.

См. также

Функции

Объекты

Блоки

Введенный в R2017a