Документация Engee

medfilt1

Страница в процессе разработки.

Одномерная медианная фильтрация.

Библиотека

EngeeDSP

Синтаксис

Вызов функции

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

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

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

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

    Аргументы nanflag и padding могут располагаться в любом месте после x в вызове функции.

Аргументы

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

# x — входной сигнал
вектор | матрица | N-мерный массив

Details

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

Типы данных

Float32, Float64

# n — порядок фильтра
3 (по умолчанию) | скаляр

Details

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

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

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

Типы данных

Float64

# dim — фильтруемое измерение
скаляр

Details

Фильтруемое измерение, заданное как положительный целый скаляр. По умолчанию функция работает с первым измерением многомерного x. В частности, если x — матрица, функция фильтрует ее столбцы так, что:

y(:,i) = medfilt1(x(:,i),n).

Типы данных

Float64

# nanflag — условие NaN
"includenan" (по умолчанию) | "omitnan"

Details

Условие NaN, заданное как "includenan" или "omitnan":

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

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

# padding — фильтрация граничных значений
"zeropad" (по умолчанию) | "truncate"

Details

Фильтрация граничных значений, задается как "zeropad" или "truncate":

  • "zeropad" считает сигнал равным нулю за пределами граничных значений.

  • "truncate" вычисляет медианы меньших сегментов по мере достижения границ сигнала.

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

# y — отфильтрованный сигнал
вектор | матрица | N-мерный массив

Details

Отфильтрованный сигнал, возвращаемый как вещественный вектор, матрица или многомерный массив. Размерность y такая же, как у x.

Типы данных

Float64

Примеры

Подавление шума с помощью медианной фильтрации

Details

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

import EngeeDSP.Functions: medfilt1

fs = 100
t = range(0, 1, step=1/fs)
x = sin.(2π * t * 3) .+ 0.25 * sin.(2π * t * 40)

y = medfilt1(x, 10)

p = plot(t, x, label="Original", linewidth=1.5)
plot!(p, t, y, label="Filtered", linewidth=2)


plot!(p, legend=:topright, framestyle=:box)

medfilt1 1

Литература

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