decimate
Децимация — уменьшение частоты дискретизации в целое число раз.
Библиотека |
|
Аргументы
Входные аргументы
#
x —
входной сигнал
вектор
Details
Входной сигнал в виде вектора.
Типы данных |
|
#
r —
коэффициент децимации
скаляр
Details
Коэффициент децимации, заданный как целое положительное число. Для получения лучших результатов при r
больше 13
, разделите r
на меньшие множители и вызовите decimate
несколько раз.
Типы данных |
|
#
n —
порядок фильтрации
скаляр
Details
Порядок фильтрации, указанный как положительное целое число. Для БИХ-фильтра не рекомендуется использовать порядок фильтрации выше 13
из-за числовой нестабильности. В таких случаях функция выводит предупреждение.
Типы данных |
|
Выходные аргументы
# y — сигнал с уменьшенной частотой дискретизации
Details
Сигнал с уменьшенной частотой дискретизации.
Типы данных |
|
Примеры
Децимация сигнала
Details
Сгенерируем синусоидальный сигнал с частотой дискретизации 4
кГц. Уменьшим частоту дискретизации в четыре раза.
import EngeeDSP.Functions: decimate
t = 0:1/4e3:1
x = sin.(2*pi*30*t) + sin.(2*pi*60*t)
y = decimate(x, 4)
Изобразим графики исходного и сигнала с уменьшенной частотой дискретизации.
p1 = plot(0:120, x[1:121],
seriestype = :stem,
marker = :circle,
markersize = 3,
xlabel = "Sample Number",
ylabel = "Original",
grid = true,
legend = false)
p2 = plot(0:30, y[1:31],
seriestype = :stem,
marker = :circle,
markersize = 3,
xlabel = "Sample Number",
ylabel = "Decimated",
grid = true,
legend = false)
plot(p1, p2, layout = (2, 1))
Децимация сигнала с использованием фильтра Чебышева
Details
Сгенерируем сигнал из двух синусоид. Уменьшим частоту дискретизации в 13 раз, используя фильтр Чебышева пятого порядка. Построим графики исходного и выходного сигналов.
import EngeeDSP.Functions: decimate
r = 13
n = 16:365
lx = length(n)
x = sin.(2*pi*n/153) + cos.(2*pi*n/127)
y = decimate(x, r, 5)
plot(0:lx-1, x,
seriestype=:scatter,
marker=:circle,
label="Original",
framestyle=:origin,
grid = true)
plot!(lx-1:-r:0, reverse(y),
seriestype=:scatter,
marker=:circle,
color=:red,
markersize=4,
label="Decimated",
grid = true)
xlabel!("Sample number")
ylabel!("Signal")
Децимация сигнала с использованием КИХ фильтра
Details
Сгенерируем синусоидальный сигнал с частотой дискретизации 4
кГц. Уменьшим частоту дискретизации в четыре раза.
Сгенерируем сигнал из двух синусоид. Уменьшим частоту дискретизации в 13 раз, используя КИХ фильтр. Построим графики исходного и выходного сигналов.
import EngeeDSP.Functions: decimate
r = 13
n = 16:365
lx = length(n)
x = sin.(2*pi*n/153) + cos.(2*pi*n/127)
y = decimate(x, r, 82, "fir")
plot(0:lx-1, x,
seriestype=:scatter,
marker=:circle,
label="Original",
framestyle=:origin,
grid=true)
plot!(0:r:lx-1, y,
seriestype=:scatter,
marker=:circle,
color=:red,
markersize=4,
label="Decimated",
grid=true)
xlabel!("Sample number")
ylabel!("Signal")
Алгоритмы
Децимация уменьшает первоначальную частоту дискретизации последовательности до более низкой. Это противоположность интерполяции. Функция decimate
применяет к входному сигналу низкочастотную фильтрацию для защиты от наложения спектров (алиасинга) и выполняет прореживание результата. Функция использует алгоритмы прореживания 8.2 и 8.3 из [1].
-
decimate
создает фильтр нижних частот. По умолчанию используется БИХ фильтр Чебышева I. Этот фильтр имеет нормированную частоту среза, равную0.8/r
, и пульсацию полосы пропускания, равную0.05
дБ. Иногда указанный порядок фильтрации приводит к искажению полосы пропускания из-за ошибок округления, накопленных в результате сверток, необходимых для создания передаточной функции. Функцияdecimate
производит автоматическое уменьшение порядка фильтрации, когда искажение приводит к тому, что амплитудная характеристика на частоте среза отличается от пульсаций более чем на10-6
.При выборе опции
"fir"
функцияdecimate
использует функциюfir1
для проектирования КИХ-фильтра нижних частот с частотой среза1/r
. -
При использовании КИХ-фильтра, функция
decimate
фильтрует входную последовательность только в одном направлении. Это экономит память и полезно для работы с длинными последовательностями. В случае БИХ-фильтра, функцияdecimate
применяет фильтр в прямом и обратном направлениях, используяfiltfilt
для устранения фазовых искажений. По сути, этот процесс удваивает порядок фильтрации. В обоих случаях функция минимизирует переходные эффекты на обоих концах сигнала за счет согласования условий конечной точки. -
И, наконец, функция
decimate
выполняет повторную выборку данных, выбирая всеr
-е точки внутри отфильтрованного сигнала. В последовательности повторной дискретизации (y),y(end)
соответствуетx(end)
когда используется БИХ-фильтр, иy(1)
соответствуетx(1)
при использовании КИХ-фильтра.