pulstran
Последовательность импульсов.
| Библиотека |
|
Аргументы
Входные аргументы
#
d —
смещение
вектор-строка | матрица из двух столбцов
Details
Смещение, удаленное из значений вектора t, заданное как вещественный вектор. Можно применить необязательный коэффициент усиления к каждой отложенной оценке, указав аргумент d как матрицу из двух столбцов со смещением, определенным в столбце 1, и соответствующим коэффициентом усиления в столбце 2. Если d задан как вектор-строка, значения интерпретируются только как задержки.
#
func —
непрерывная функция
"rectpuls" | "gauspuls" | "tripuls"
Details
Непрерывная функция, используемая для генерации последовательности импульсов на основе ее выборок, заданных как "rectpuls", "gauspuls" или "tripuls".
#
fs —
частота дискретизации
1 (по умолчанию) | вещественный скаляр
Details
Частота дискретизации в Гц, заданная как вещественный скаляр.
#
intfunc —
метод интерполяции
"linear" (по умолчанию) | "nearest" | "next" | "previous" | "pchip" | "cubic" | "v5cubic" | "makima" | "spline"
Details
Метод интерполяции, заданный как один из вариантов, представленных в таблице.
| Метод | Описание | Непрерывность | Комментарии |
|---|---|---|---|
|
Линейная интерполяция. Интерполированное значение в точке запроса основано на линейной интерполяции значений в соседних точках сетки в каждом соответствующем измерении. Это метод интерполяции по умолчанию. |
|
|
|
Интерполяция по методу ближайшего соседа. Интерполированное значение в точке запроса — это значение в ближайшей точке сетки выборки. |
Прерывистый |
|
|
Интерполяция до следующего соседа. Интерполированное значение в точке запроса — это значение в следующей точке сетки выборки. |
Прерывистый |
|
|
Интерполяция по предыдущему соседу. Интерполированное значение в точке запроса — это значение в предыдущей точке сетки выборки. |
Прерывистый |
|
|
Кусочно-кубическая интерполяция с сохранением формы. Интерполированное значение в точке запроса основано на кусочно-кубической интерполяции значений в соседних точках сетки с сохранением формы. |
|
|
|
Кубическая свертка, используемая в Engee. |
|
Точки должны быть равномерно распределены |
|
Модифицированная интерполяция Акимы по кубическим многочленам Эрмита. Интерполированное значение в точке запроса основано на кусочно-линейной функции многочленов степени не выше третьей. Формула Акимы модифицирована для предотвращения выбросов. |
|
|
|
Сплайн-интерполяция с использованием условий «not-a-knot». Интерполированное значение в точке запроса основано на кубической интерполяции значений в соседних точках сетки в каждом соответствующем измерении. |
|
|
Выходные аргументы
#
y —
последовательность импульсов
вектор
Details
Последовательность импульсов, сгенерированная функцией, возвращаемая в виде вектора.
Примеры
Периодический прямоугольный импульс
Details
В этом примере генерируется последовательность импульсов с использованием стандартного прямоугольного импульса единичной ширины. Частота повторения составляет 0.5 Гц, длительность сигнала — 60 с, а частота дискретизации — 1 кГц. Коэффициент усиления — синусоида с частотой 0.05 Гц.
import EngeeDSP.Functions: pulstran, rectpuls
t = 0:1/1e3:60
d = [0:2:60 sin.(2π*0.05*(0:2:60))]
y = pulstran(t, d, rectpuls)
plot(t, y, xlabel="Time (s)", ylabel="Waveform", legend=false)
Асимметричный пилообразный сигнал
Details
В этом примере генерируется асимметричный пилообразный сигнал с частотой повторения 3 Гц. Ширина пилообразного сигнала составляет 0.2 с, а коэффициент сдвига — 1. Длительность сигнала составляет 1 с, а частота дискретизации — 1 кГц. Построим график последовательности импульсов.
import EngeeDSP.Functions: tripuls, pulstran
fs = 1e3
t = 0:1/1e3:1
d = 0:1/3:1
x = tripuls(t, 0.2, -1)
y = pulstran(t, d, x, fs)
plot(t, y, xlabel="Time (s)", ylabel="Waveform", legend=false)
Изменение метода интерполяции с помощью пользовательского импульса
Details
Напишем функцию, генерирующую пользовательский экспоненциально затухающий пилообразный сигнал частотой 0.25 Гц. Генерирующая функция имеет второй входной аргумент, который задает одно значение частоты пилообразного сигнала и коэффициент затухания. Отобразим сгенерированный импульс с частотой дискретизации 0.1 кГц в течение 1 секунды, с частотой и коэффициентом затухания, равными 50.
import EngeeDSP.Functions: sawtooth
fnx = (x, fn) -> sawtooth.(2π * fn * 0.25 * x) .* exp.(-2 * fn * x.^2)
fs = 100
t = 0:1/fs:1
pp = fnx(t, 50)
plot(t, pp, legend=false)
Используем функцию pulstran для генерации последовательности пользовательских импульсов. Последовательность дискретизируется с частотой 0.1 кГц в течение 125 секунд. Импульсы появляются каждые 25 секунд и имеют экспоненциально уменьшающуюся амплитуду.
Укажем сгенерированный импульс в качестве прототипа. Сгенерируем три последовательности импульсов, используя стандартный метод линейной интерполяции, интерполяцию по ближайшему соседу и кусочно-кубическую интерполяцию. Сравним последовательности импульсов на одном графике.
import EngeeDSP.Functions: pulstran
d = [0:25:125 exp.(-0.015*(0:25:125))]
ffs = 100
tp = 0:1/ffs:125
fnx = (x, fn) -> sawtooth.(2π * fn * 0.25 * x) .* exp.(-2 * fn * x.^2)
pp = fnx(tp, 50)
r = pulstran(tp, d, pp)
y = pulstran(tp, d, pp, "nearest")
q = pulstran(tp, d, pp, "pchip")
plot(tp, r, label="Linear", xlims=(0, 125))
plot!(tp, y, label="Nearest neighbor")
plot!(tp, q, label="Piecewise cubic")