dsp. HampelFilter

Отфильтруйте использование выбросов идентификатор Hampel

Описание

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

Отфильтровать входной сигнал с помощью идентификатора Hampel:

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

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Синтаксис

hampFilt = dsp.HampelFilter
hampFilt = dsp.HampelFilter(Len)
hampFilt = dsp.HampelFilter(Len, Lim)
hampFilt = dsp.HampelFilter(Name,Value)

Описание

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 Используя Системные объекты (MATLAB).

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

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

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

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

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

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

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

Синтаксис

y = hampFilt(x)
[y,isOutlier] = hampFilt(x)

Описание

пример

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  = dsp.TimeScope('SampleRate',Fs, ...
    'TimeSpanOverrunAction','Scroll', ...
    'TimeSpan',1,'ShowGrid',true, ...
    'YLimits',[-3 3], ...
    'LayoutDimensions',[3 1], ...
    'NumInputPorts',3);
scope.ActiveDisplay = 1;
scope.Title = 'Signal + Noise';
scope.ActiveDisplay = 2;
scope.Title = 'Hampel Filter Output (Window Length = 7)';
scope.ActiveDisplay = 3;
scope.Title = 'Median Filter Output (Window Length = 7)';

Отфильтруйте шумную синусоиду Используя окно длины 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

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

Отфильтруйте шумную синусоиду Используя окно длины 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

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

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

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

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

Отфильтруйте данные о гироскопе с помощью Системного объекта dsp.HampelFilter. Просмотрите отфильтрованные данные оси z в Осциллографе Времени.

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=медиана(|xikmi|,,|xi+kmi|). Для этого окна данных, mad=медиана(|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

Для просмотра документации необходимо авторизоваться на сайте