exponenta event banner

hampel

Удаление отклонений с использованием идентификатора Hampel

Описание

пример

y = hampel(x) применяет фильтр Хампеля к входному вектору, x, для обнаружения и удаления отклонений. Для каждого образца x, функция вычисляет медиану окна, состоящего из выборки и ее шести окружающих выборок, по три на сторону. Он также оценивает стандартное отклонение каждого образца относительно его оконной медианы, используя среднее абсолютное отклонение. Если образец отличается от медианы более чем на три стандартных отклонения, он заменяется медианой. Если x является матрицей, то hampel обрабатывает каждый столбец x как самостоятельный канал.

y = hampel(x,k) определяет количество соседей, k, с обеих сторон каждого образца x в окне измерения. k по умолчанию - 3.

пример

y = hampel(x,k,nsigma) определяет количество стандартных отклонений, nsigma, по которому выборка x должна отличаться от локальной медианы для замены на медиану. nsigma по умолчанию - 3.

пример

[y,j] = hampel(___) также возвращает логическую матрицу, которая является истинной в местоположениях всех точек, определенных как отклонения. Этот синтаксис принимает любой из входных аргументов из предыдущих синтаксисов.

пример

[y,j,xmedian,xsigma] = hampel(___) также возвращает локальные медианы и оценочные стандартные отклонения для каждого элемента x.

hampel(___) без выходных аргументов строит график отфильтрованного сигнала и аннотирует удаляемые отклонения.

Примеры

свернуть все

Создайте 100 выборок синусоидального сигнала. Заменить шестой и двадцатый образцы шипами.

x = sin(2*pi*(0:99)/100);
x(6) = 2;
x(20) = -2;

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

[y,i,xmedian,xsigma] = hampel(x);

Постройте график отфильтрованного сигнала и аннотируйте отклонения.

n = 1:length(x);
plot(n,x)
hold on
plot(n,xmedian-3*xsigma,n,xmedian+3*xsigma)
plot(find(i),x(i),'sk')
hold off
legend('Original signal','Lower limit','Upper limit','Outliers')

Figure contains an axes. The axes contains 4 objects of type line. These objects represent Original signal, Lower limit, Upper limit, Outliers.

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

hampel(x,1)

Figure contains an axes. The axes contains 3 objects of type line. These objects represent original signal, filtered signal, outliers.

Формирование двухканального сигнала, состоящего из синусоид различных частот. Размещайте шипы в случайных местах. Используйте NaNs для случайного добавления отсутствующих образцов. Сбросьте генератор случайных чисел для воспроизводимых результатов. Постройте график сигнала.

rng('default')

n = 59;
x = sin(pi./[15 10]'*(1:n)+pi/3)';

spk = randi(2*n,9,1);
x(spk) = x(spk)*2;
x(randi(2*n,6,1)) = NaN;

plot(x)

Figure contains an axes. The axes contains 2 objects of type line.

Фильтрация сигнала с помощью hampel с настройками по умолчанию.

y = hampel(x);
plot(y)

Figure contains an axes. The axes contains 2 objects of type line.

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

y = hampel(x,4,2);
plot(y)

Figure contains an axes. The axes contains 2 objects of type line.

Вывод рабочей медианы для каждого канала. Наложите медианы на график сигнала.

[y,j,xmd,xsd] = hampel(x,4,2);
plot(x)
hold on
plot(xmd,'--')

Figure contains an axes. The axes contains 4 objects of type line.

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

rng('default')

t = 0:60;
x = sin(pi./[10;2]*t)'+randn(numel(t),2);

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

k = 4;
nsig = 2;

[y,h] = hampel(x,k,nsig);

Постройте график каждого канала сигнала в своем наборе осей. Нарисуйте исходный сигнал, отфильтрованный сигнал и отклонения. Аннотировать расположения отклонений.

for k = 1:2
    hk = h(:,k);
    ax = subplot(2,1,k);
    plot(t,x(:,k))
    hold on
    plot(t,y(:,k))
    plot(t(hk),x(hk,k),'*')
    hold off
    ax.XTick = t(hk);
end

Figure contains 2 axes. Axes 1 contains 3 objects of type line. Axes 2 contains 3 objects of type line.

Создайте 100 выборок синусоидального сигнала. Заменить шестой и двадцатый образцы шипами.

n = 1:100;
x = sin(2*pi*n/100);
x(6) = 2;
x(20) = -2;

Использовать hampel для вычисления локальной медианы и расчетного стандартного отклонения для каждой выборки. Используйте значения по умолчанию для входных параметров:

  • Размер окна - 2 × 3 + 1 = 7.

  • Точки, отличающиеся от их оконной медианы более чем на три стандартных отклонения, считаются отклонениями.

Постройте график результата.

[y,i,xmedian,xsigma] = hampel(x);

plot(n,x)
hold on
plot(n,[1;1]*xmedian+3*[-1;1]*xsigma)
plot(find(i),x(i),'sk')
hold off
legend('Signal','Lower','Upper','Outliers')

Figure contains an axes. The axes contains 4 objects of type line. These objects represent Signal, Lower, Upper, Outliers.

Повторите расчет, используя размер окна 2 × 10 + 1 = 21 и два стандартных отклонения в качестве критерия для определения отклонений.

sds = 2;
adj = 10;
[y,i,xmedian,xsigma] = hampel(x,adj,sds);

plot(n,x)
hold on
plot(n,[1;1]*xmedian+sds*[-1;1]*xsigma)
plot(find(i),x(i),'sk')
hold off
legend('Signal','Lower','Upper','Outliers')

Figure contains an axes. The axes contains 4 objects of type line. These objects represent Signal, Lower, Upper, Outliers.

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

свернуть все

Входной сигнал, заданный как вектор или матрица. Если x является матрицей, то hampel обрабатывает каждый столбец x как самостоятельный канал.

Пример: cos(pi/4*(0:159))+randn(1,160) - одноканальный строково-векторный сигнал.

Пример: cos(pi./[4;2]*(0:159))'+randn(160,2) является двухканальным сигналом.

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

Число соседей по обе стороны образца xs, указанное как целочисленный скаляр. Выборки вблизи краев сигнала, которые имеют менее k образцы с одной стороны сравнивают с медианой меньшего окна.

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

Количество стандартных отклонений, на которое выборка x должен отличаться от своей локальной медианы, чтобы считаться отклонением. Определить nsigma как действительный скаляр. Функция оценивает стандартное отклонение, измеряя местное среднее абсолютное отклонение (MAD) фактором κ = 12erf−1 (1/2) ≈1.4826.

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

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

свернуть все

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

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

Индекс отклонения, возвращаемый как вектор или матрица того же размера, что и x.

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

Локальные медианы, возвращаемые как вектор или матрица того же размера, что и x.

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

Расчетные стандартные отклонения, возвращаемые в виде вектора или матрицы того же размера, что и x.

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

Подробнее

свернуть все

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

Идентификатор Хампеля - это разновидность правила статистики с тремя сигмами, которая надежна против отклонений.

Учитывая последовательность x1, x2, x3, ... , xn и скользящее окно длиной k, определите медиану точка-точка и оценки стандартного отклонения, используя:

  • Локальная медиана - mi = медиана (xi k, xi k + 1, xi k + 2,..., xi,..., xi + k − 2, xi + k − 1, xi + k)

  • Среднеквадратическое отклонение - starti = αmedian (| xi k mi |,..., | xi + k mi |), где start= = 12erf − 1 (1/2) ≈1.4826

Величина starti/startизвестна известна как среднее абсолютное отклонение (MAD).

Если образец xi таков, что

| xi mi | > n

для данного порога nstart, то идентификатор Хампеля объявляет xi отклонением и заменяет его mi.

Рядом с конечными точками последовательности функция усекает окно, используемое для вычисления mi и starti:

  • i < k + 1

    mi = медиана (x1, x2, x3,..., xi,..., xi + k 2, xi + k − 1, xi + k)

    (| x1 m1 |,..., | xi + k − mi |)

  • i > n - k

    mi = медиана (xi k, xi k + 1, xi k + 2,..., xi,..., xn − 2, xn − 1, xn)

    (| xi k mi |,..., | xn − mn |)

Ссылки

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

См. также

| | | | | | | | (инструментарий статистики и машинного обучения)

Представлен в R2015b