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)при использовании КИХ-фильтра.