EngeeDSP.HampelFilter
Фильтрация выбросов с использованием идентификатора Хампеля.
| Библиотека |
|
Описание
Системный объект EngeeDSP.HampelFilter обнаруживает и удаляет выбросы во входном сигнале с помощью идентификатора Хампеля. Идентификатор Хампеля представляет собой устойчивую к выбросам разновидность статистического правила «трех сигм». Для каждого отсчета входного сигнала объект вычисляет медиану в окне, состоящем из текущего отсчета и соседних отсчетов с каждой стороны от него, где — длина окна, заданная в свойстве WindowLength. Объект также оценивает стандартное отклонение отсчета относительно медианы окна, используя медианное абсолютное отклонение. Если разность между отсчетом и медианой превышает пороговое значение, умноженное на стандартное отклонение, фильтр заменяет этот отсчет медианой. Дополнительную информацию см. в разделе Алгоритмы.
Чтобы отфильтровать входной сигнал с использованием идентификатора Хампеля, выполните следующие действия:
-
Создайте объект EngeeDSP.HampelFilter и установите его свойства.
-
Вызовите объект с аргументами, как если бы это была функция.
Чтобы узнать подробнее о том, как работать с системными объектами, см. Системные объекты 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 — матрица, каждый ее столбец рассматривается как независимый канал. Объект поддерживает многоканальные входные данные размером на , где — количество отсчетов в каждом кадре (или канале), а — количество каналов.
| Типы данных |
|
Выходные аргументы
#
y —
отфильтрованный выходной сигнал
вектор | матрица
Details
Отфильтрованный выходной сигнал, возвращаемый в виде вектора или матрицы.
| Типы данных |
|
#
isOutlier —
определение выбросов
вектор | матрица
Details
Логический массив, элементы которого указывают, является ли соответствующий элемент входного массива выбросом. Если элемент массива isOutlier имеет значение true, то соответствующий элемент входного массива является выбросом.
| Типы данных |
|
Свойства
#
WindowLength —
длина скользящего окна
Real number
Details
Длина скользящего окна, заданная как положительное нечетное скалярное целое число. Окно конечной длины перемещается по данным, а объект вычисляет медиану и медианное абсолютное отклонение данных внутри этого окна.
Значение по умолчанию — 11.
Дополнительно
Идентификатор Хампеля
Details
Идентификатор Хампеля — это разновидность статистического правила «трех сигм», устойчивая к выбросам.
Учитывая последовательность и скользящее окно длины , определим точечные оценки медианы и стандартного отклонения, используя:
-
Локальную медиану — ;
-
Стандартное отклонение — , где .
Величина известна как медианное абсолютное отклонение (Median Absolute Deviation, MAD).
Если отсчет таков, что
для заданного порогового значения , идентификатор Хампеля считает выбросом и заменяет его на . Если равно 0, то фильтр Хампеля ведет себя как обычный медианный фильтр.
Алгоритмы
Для заданного отсчета данных алгоритм:
-
Центрирует окно нечетной длины относительно текущего отсчета;
-
Вычисляет локальную медиану и стандартное отклонение для текущего окна данных;
-
Сравнивает текущий отсчет с , где — пороговое значение. Если , фильтр идентифицирует текущий отсчет как выброс и заменяет его медианным значением .
Рассмотрим кадр данных, который передается в фильтр Хампеля.
В этом примере фильтр Хампеля скользит по данным окном длиной . Пороговое значение фильтра равно . Для обеспечения полноты окна в начале кадра алгоритм фильтрации добавляет перед ним нулевых отсчетов. При вычислении первого выходного отсчета окно центрируется на отсчете с номером в расширенном кадре — в данном случае на третьем нуле. Фильтр вычисляет медиану, медианное абсолютное отклонение и стандартное отклонение для данных внутри локального окна.
-
Текущий отсчет: .
-
Окно данных: .
-
Локальная медиана: .
-
Медианное абсолютное отклонение: . Для этого окна данных .
-
Стандартное отклонение: = , где .
-
Текущий отсчет не подчиняется соотношению для обнаружения выбросов:
Таким образом, на выходе фильтра Хампеля формируется текущий входной отсчет .
Эта процедура повторяется для каждого последующего отсчета, пока алгоритм не отцентрирует окно на отсчете , обозначенном как End. Поскольку центрированное на последних отсчетах окно не может быть полным, эти отсчеты обрабатываются со следующим кадром входных данных.
Вот первый выходной кадр, сгенерированный фильтром Хампеля:
Седьмой отсчет 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]
Литература
-
Bodenham, Dean. Adaptive Filtering and Change Detection for Streaming Data. Ph.D. Thesis. Imperial College, London, 2012.
-
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.
-
Suomela, Jukka. Median Filtering Is Equivalent to Sorting, 2014.