dsp.HampelFilter

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

Описание

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, независимо в зависимости от времени с помощью фильтра Hampel.

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

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

развернуть все

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

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

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

развернуть все

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

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

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

Типы данных: логический

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

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

release(obj)

развернуть все

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

Примеры

свернуть все

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

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

Настройте dsp.HampelFilter и 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 Гц. Примените фильтр Hampel и средний объект фильтра к сигналу. Просмотрите вывод на осциллографе времени.

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)

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

Отфильтруйте шумный 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)

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

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

Используйте dsp.MatFileReader Системный объект, чтобы считать файл MAT гироскопа. Файл содержит три столбца данных с каждым столбцом, содержащим 7 140 выборок. Эти три столбца представляют ось X, ось Y и данные оси z из датчика движения гироскопа. Выберите формат кадра 714 выборок так, чтобы каждый столбец данных содержал 10 систем координат. 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

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

Больше о

развернуть все

Алгоритмы

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

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

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

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

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

В этом примере фильтр 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]

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

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

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

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

Ссылки

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

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

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

Смотрите также

Функции

Объекты

Блоки

Введенный в R2017a