exponenta event banner

dsp. MedianFilter

Описание

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 на n, где m ≥ 1, и n > 1. m - число выборок в каждом кадре (или канале), а n - число каналов.

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

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

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

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

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

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

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

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

release(obj)

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

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

Примеры

свернуть все

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

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

Настройка 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);

Фильтрация шумной синусоидальной волны

Генерация шумного синусоидального сигнала с частотой 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 кадров. 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