Документация Engee

EngeeDSP.HampelFilter

Фильтрация выбросов с использованием идентификатора Хампеля.

Библиотека

EngeeDSP

Описание

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

Чтобы отфильтровать входной сигнал с использованием идентификатора Хампеля, выполните следующие действия:

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

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

Чтобы узнать подробнее о том, как работать с системными объектами, см. Системные объекты Engee.

Синтаксис

Создание

  • hampFilt = EngeeDSP.HampelFilter() — возвращает системный объект фильтра Хампеля hampFilt с использованием свойств по умолчанию.

  • hampFilt = EngeeDSP.HampelFilter(Len) — возвращает системный объект фильтра Хампеля hampFilt, у которого для свойства WindowLength установлено значение Len.

  • hampFilt = EngeeDSP.HampelFilter(Len,Lim) — возвращает системный объект фильтра Хампеля hampFilt, у которого для свойства WindowLength установлено значение Len, а для свойства Threshold — значение Lim.

  • hampFilt = EngeeDSP.HampelFilter(Name=Value) — возвращает системный объект фильтра Хампеля hampFilt с заданными свойствами в виде пары Name=Value, где Name — имя свойства, а Value — соответствующее значение. Можно указать несколько пар «имя-значение», порядок пар не имеет значения. Неуказанные свойства сохраняют свои значения по умолчанию.

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

  • y,isOutlier = hampFilt(x) — обнаруживает и удаляет выбросы в каждом канале входного сигнала x, обрабатывая их независимо во времени с помощью фильтра Хампеля, результат возвращает в y. Также возвращает логический массив isOutlier, в котором значение true указывает на то, что соответствующий элемент входного сигнала является выбросом. Массив isOutlier имеет тот же размер, что и входной и выходной сигналы.

Аргументы

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

# x — входной сигнал
вектор | матрица

Details

Входной сигнал, заданный как вектор или матрица. Если x — матрица, каждый ее столбец рассматривается как независимый канал. Объект поддерживает многоканальные входные данные размером на , где — количество отсчетов в каждом кадре (или канале), а — количество каналов.

Типы данных

Float32, Float64

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

# y — отфильтрованный выходной сигнал
вектор | матрица

Details

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

Типы данных

Float32, Float64

# isOutlier — определение выбросов
вектор | матрица

Details

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

Типы данных

Bool

Свойства

# Threshold — пороговое значение обнаружения выбросов
Вещественное число

Details

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

Значение по умолчанию — 3.

# WindowLength — длина скользящего окна
Вещественное число

Details

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

Значение по умолчанию — 11.

Методы

Общие для всех системных объектов

step!

Запустить алгоритм работы системного объекта

release!

Разрешить изменение значения свойства системного объекта

reset!

Сброс внутренних состояний системного объекта

Дополнительно

Идентификатор Хампеля

Details

Идентификатор Хампеля — это разновидность статистического правила «трех сигм», устойчивая к выбросам.

Учитывая последовательность и скользящее окно длины , определим точечные оценки медианы и стандартного отклонения, используя:

  • Локальную медиану — ;

  • Стандартное отклонение — , где .

Величина известна как медианное абсолютное отклонение (Median Absolute Deviation, MAD).

Если отсчет таков, что

для заданного порогового значения , идентификатор Хампеля считает выбросом и заменяет его на . Если равно 0, то фильтр Хампеля ведет себя как обычный медианный фильтр.

Алгоритмы

so hampel filtr 1 ru

Для заданного отсчета данных алгоритм:

  • Центрирует окно нечетной длины относительно текущего отсчета;

  • Вычисляет локальную медиану и стандартное отклонение для текущего окна данных;

  • Сравнивает текущий отсчет с , где — пороговое значение. Если , фильтр идентифицирует текущий отсчет как выброс и заменяет его медианным значением .

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

so hampel filtr 2

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

so hampel filtr 3 ru

  • Текущий отсчет: .

  • Окно данных: .

  • Локальная медиана: .

  • Медианное абсолютное отклонение: . Для этого окна данных .

  • Стандартное отклонение: = , где .

  • Текущий отсчет не подчиняется соотношению для обнаружения выбросов:

    Таким образом, на выходе фильтра Хампеля формируется текущий входной отсчет .

Эта процедура повторяется для каждого последующего отсчета, пока алгоритм не отцентрирует окно на отсчете , обозначенном как End. Поскольку центрированное на последних отсчетах окно не может быть полным, эти отсчеты обрабатываются со следующим кадром входных данных.

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

so hampel filtr 4 ru

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

using EngeeDSP

hampFilt = EngeeDSP.HampelFilter(WindowLength=5,Threshold=2)

x=[1, 2, 4, 9, 23, 8, 12, 4, 2]
println("x: ",x)

y,isOutlier=hampFilt(x)

println("y: ",y)
x: [1, 2, 4, 9, 23, 8, 12, 4, 2]
y: [0.0, 0.0, 1.0, 2.0, 4.0, 9.0, 9.0, 8.0, 12.0]

Литература

  1. Bodenham, Dean. Adaptive Filtering and Change Detection for Streaming Data. Ph.D. Thesis. Imperial College, London, 2012.

  2. Liu, Hancong, Sirish Shah, and Wei Jiang. On-line outlier detection and data cleaning. Computers and Chemical Engineering. Vol. 28, March 2004, pp. 1635–1647.

  3. Suomela, Jukka. Median Filtering Is Equivalent to Sorting, 2014.