dsp.MedianFilter

Описание

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

Вычислить движущуюся медиану входа:

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

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

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

Создание

Описание

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

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

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

Синтаксис

Описание

пример

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

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

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

Ввод данных в виде вектора или матрицы. Если x является матрицей, каждый столбец обработан как независимый канал. Движущаяся медиана вычисляется вдоль каждого канала. Объект принимает многоканальные входные параметры, то есть, m-by-n входные параметры размера, где 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  = 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 = '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 столбца данных с каждым столбцом, содержащим 7 140 выборок. Эти три столбца представляют Ось X, Ось Y и данные оси Z из датчика движения гироскопа. Выберите формат кадра 714 выборок так, чтобы каждый столбец данных содержал 10 систем координат. dsp.MedianFilter Системный объект использует длину окна 10. Создайте dsp.TimeScope возразите, чтобы просмотреть отфильтрованный выход.

reader = dsp.MatFileReader('SamplesPerFrame',714,'Filename','LSM9DS1gyroData73.mat',...
    'VariableName','data');
medFilt = dsp.MedianFilter(10);
scope = dsp.TimeScope('NumInputPorts',1,'SampleRate',119,'YLimits',[-300 300],...
    'ChannelNames',{'Input','Filtered Output'},'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.

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

Введенный в R2017b