medfilt1
|
Страница в процессе разработки. |
Одномерная медианная фильтрация.
| Библиотека |
|
Аргументы
Входные аргументы
#
x —
входной сигнал
вектор | матрица | N-мерный массив
Details
Входной сигнал, заданный как вещественный вектор, матрица или многомерный массив.
| Типы данных |
|
#
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). В этом случае функция сортирует числа и вычисляет среднее арифметическое двух средних элементов отсортированного списка.
| Типы данных |
|
#
nanflag —
условие NaN
"includenan" (по умолчанию) | "omitnan"
Details
Условие NaN, заданное как "includenan" или "omitnan":
-
"includenan"возвращает отфильтрованный сигнал таким образом, что медиана любого сегмента, содержащегоNaN, также равнаNaN. -
"omitnan"возвращает отфильтрованный сигнал таким образом, что медиана любого сегмента, содержащегоNaN, равна медиане значений, отличных отNaN. Если все элементы сегмента являютсяNaN, результатом будетNaN.
#
padding —
фильтрация граничных значений
"zeropad" (по умолчанию) | "truncate"
Details
Фильтрация граничных значений, задается как "zeropad" или "truncate":
-
"zeropad"считает сигнал равным нулю за пределами граничных значений. -
"truncate"вычисляет медианы меньших сегментов по мере достижения границ сигнала.
Примеры
Подавление шума с помощью медианной фильтрации
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)
