medfilt1

1-D медианную фильтрацию

Описание

y = medfilt1(x) применяет одномерный медианный фильтр третьего порядка к вектору входа , x. Функция рассматривает сигнал как 0 за пределами конечных точек. Выход, y, имеет ту же длину, что и x.

пример

y = medfilt1(x,n) применяет nодномерный медианный фильтр I порядка для x.

y = medfilt1(x,n,blksz,dim) или y = medfilt1(x,n,[],dim) задает размерность, dim, вдоль которого действует фильтр. blksz требуется для обратной совместимости и игнорируется.

пример

y = medfilt1(___,nanflag,padding) задает, как NaN значения обрабатываются по каждому сегменту, используя любые входные параметры из предыдущих синтаксисов. Этот синтаксис также задает padding, тип фильтрации, выполняемой на ребрах сигнала.

nanflag и padding может появиться где угодно после x в вызове функции.

Примеры

свернуть все

Сгенерируйте синусоидальный сигнал, дискретизированный в течение 1 секунды при 100 Гц. Добавьте синусоиду более высокой частоты, чтобы симулировать шум.

fs = 100;
t = 0:1/fs:1;
x = sin(2*pi*t*3)+0.25*sin(2*pi*t*40);

Используйте средний фильтр 10-го порядка, чтобы сглаживать сигнал. Постройте график результата.

y = medfilt1(x,10);

plot(t,x,t,y)
legend('Original','Filtered')
legend('boxoff')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original, Filtered.

Сгенерируйте двухканальный сигнал, состоящий из синусоидов разных частот. Разместите шипы в случайных местах. Используйте NaNs, чтобы добавлять отсутствующие выборки случайным образом. Сбросьте генератор случайных чисел для воспроизводимых результатов. Постройте график сигнала.

rng('default')

n = 59;
x = sin(pi./[15 10]'*(1:n)+pi/3)';

spk = randi(2*n,9,1);
x(spk) = x(spk)*2;
x(randi(2*n,6,1)) = NaN;

plot(x)

Figure contains an axes. The axes contains 2 objects of type line.

Пропустите сигнал, используя medfilt1 с настройками по умолчанию. Постройте график фильтрованного сигнала. По умолчанию фильтр присваивает NaN медиане любого сегмента с отсутствующими выборками.

y = medfilt1(x);
plot(y)

Figure contains an axes. The axes contains 2 objects of type line.

Транспонируйте исходный сигнал. Повторите фильтрацию, указав, что функция работает вдоль строк. Исключить отсутствующие выборки при вычислении медиан. Если вы оставляете второй аргумент пустым, то medfilt1 использует порядок фильтра по умолчанию 3.

y = medfilt1(x',[],[],2,'omitnan');
plot(y')

Figure contains an axes. The axes contains 2 objects of type line.

Функция не может назначить значение сегменту, который содержит только NaNs. Увеличьте длину сегмента, чтобы устранить эту проблему. Изменение также удаляет выбросы более тщательно.

y = medfilt1(x,4,'omitnan');
plot(y)

Figure contains an axes. The axes contains 2 objects of type line.

Заполнение нуля по умолчанию результатов в функции, занижая значения сигналов в ребра. Уменьшите этот эффект, используя уменьшающиеся окна, чтобы вычислить медианы в концах.

y = medfilt1(x,4,'omitnan','truncate');
plot(y)

Figure contains an axes. The axes contains 2 objects of type line.

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

свернуть все

Входной сигнал, заданный как действительный вектор, матрица или N -D массив.

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

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

  • Когда n нечетно, y(k) - медиана x(k-(n-1)/2:k+(n-1)/2).

  • Когда n является четным, y(k) - медиана x(k-n/2:k+(n/2)-1). В этом случае medfilt1 сортирует числа и принимает среднее значение двух средних элементов отсортированного списка.

Пример: Если n = 11, затем y(k) - медиана x(k-5:k+5).

Пример: Если n = 12, затем y(k) - медиана x(k-6:k+5).

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

Размерность для фильтрации, заданная как положительный целочисленный скаляр По умолчанию medfilt1 действует по первой нежесткой размерности x. В частности, если x является матрицей, функция фильтрует свои столбцы так, чтобы y(:,i) = medfilt1(x(:,i),n).

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

NaN условие, заданное как 'includenan' или 'omitnan'.

  • 'includenan' - Возвращает отфильтрованный сигнал так, чтобы медиана любого сегмента, содержащего NaNs также NaN.

  • 'omitnan' - Возвращает отфильтрованный сигнал так, чтобы медиана любого сегмента, содержащего NaNs - медиана не- NaN значения. Если все элементы массива сегмента NaNs, результатом является NaN.

Фильтрация конечных точек, заданная как 'zeropad' или 'truncate'.

  • 'zeropad' - Рассматривает сигнал как нуль за пределами конечных точек.

  • 'truncate' - Вычисляет медианы небольших сегментов, когда он достигает ребер сигнала.

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

свернуть все

Отфильтрованный сигнал, возвращенный как действительный вектор, матрица или N массив -D. y - тот же размер, что и x

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

Совет

Если у вас есть лицензия на программное обеспечение Image Processing Toolbox™, вы можете использовать medfilt2 (Image Processing Toolbox) функция для выполнения двумерной медианной фильтрации.

Ссылки

[1] Pratt, William K. Digital Image Processing. 4th Ed. Hoboken, NJ: John Wiley & Sons, 2007.

См. также

| | | |

Представлено до R2006a