dsp.MedianFilter

Описание

The dsp.MedianFilter Система object™ вычисляет движущуюся медиану входного сигнала вдоль каждого канала, независимо с течением времени. Объект использует метод скользящего окна, чтобы вычислить движущуюся медиану. В этом способе окно заданной длины перемещается по каждому каналу, выборка за выборкой, и объект вычисляет медиану данных в окне. Для получения дополнительной информации см. «Алгоритмы».

Чтобы вычислить скользящую медиану входа:

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

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

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

medFilt = dsp.MedianFilter возвращает медианный объект фильтра, medFilt, с использованием свойств по умолчанию.

пример

medFilt = dsp.MedianFilter(Len) устанавливает WindowLength свойство к Len.

medFilt = dsp.MedianFilter(Name,Value) задает WindowLength свойство с использованием Name,Value пара.

Пример:

movMin = dsp.MedianFilter('WindowLength',5);

Свойства

расширить все

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

Если свойство настраивается, можно изменить его значение в любой момент.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.

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

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

Синтаксис

Описание

пример

y = medFilt(x) вычисляет движущуюся медиану входного сигнала, x, с использованием метода раздвижного окна.

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

расширить все

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

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

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

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

расширить все

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

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

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

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

release(obj)

расширить все

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

Примеры

свернуть все

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

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

Настройка dsp.MedianFilter объект, medFilt, и dsp.MovingAverage объект, movavgWin. Эти объекты используют метод раздвижного окна с длиной окна 7. Создайте временные возможности для просмотра выхода.

Fs = 1000;
medFilt = dsp.MedianFilter(7);
movavgWin = dsp.MovingAverage(7);
scope  = timescope('SampleRate',Fs,...
    'TimeSpanSource','Property',...
    '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 = 'Moving Average Output (Window Length = 7)';
scope.ActiveDisplay = 3;
scope.Title = 'Median Filter Output (Window Length = 7)';

FrameLength = 256;
count = 1;
sine = dsp.SineWave('SampleRate',Fs,'Frequency',10,...
    'SamplesPerFrame',FrameLength);

Фильтрация шумного Sine wave

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

for i = 1:500
    hfn = 3 * (rand(FrameLength,1) < 0.02);
    x = sine() + 1e-2 * randn(FrameLength,1) + hfn;
    y1 = movavgWin(x);
    y2 = medFilt(x);
    scope(x,y1,y2);
end

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

В этом примере показано, как удалить высокочастотные выбросы из потокового сигнала с помощью dsp.MedianFilter Системный объект?.

Используйте dsp.MatFileReader Системный объект для чтения файла MAT гироскопа. Файл MAT гироскопа содержит 3 столбца данных, причем каждый столбец содержит 7140 выборок. Три столбца представляют данные о оси X, оси Y и оси Z от датчика движения гироскопа. Выберите формат кадра 714 выборок, чтобы каждый столбец данных содержал 10 системы координат. The dsp.MedianFilter Системный объект использует длину окна 10. Создайте timescope объект для просмотра отфильтрованных выходов.

reader = dsp.MatFileReader('SamplesPerFrame',714,'Filename','LSM9DS1gyroData73.mat',...
    'VariableName','data');
medFilt = dsp.MedianFilter(10);
scope = timescope('NumInputPorts',1,'SampleRate',119,'YLimits',[-300 300],...
    'ChannelNames',{'Input','Filtered Output'},...
    'TimeSpanSource','Property','TimeSpan',60,'ShowLegend',true);

Фильтрация данных гироскопа с помощью dsp.MedianFilter Системный объект. Просмотрите отфильтрованные данные по оси Z в временных возможностях.

for i = 1:10
    gyroData = reader();
    filteredData = medFilt(gyroData);
    scope([gyroData(:,3),filteredData(:,3)]);
end

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

Алгоритмы

расширить все

Ссылки

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

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

.
Введенный в R2016b