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

pulstran

Последовательность импульсов.

Библиотека

EngeeDSP

Синтаксис

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

  • y = pulstran(t,d,func) — генерирует последовательность импульсов на основе выборок непрерывной функции func.

  • y = pulstran(t,d,func,fs) — использует частоту дискретизации fs.

  • y = pulstran(t,d,p) — генерирует последовательность импульсов, которая является суммой нескольких задержанных интерполяций прототипного импульса в векторе p.

  • y = pulstran(___,intfunc) — определяет альтернативные методы интерполяции. Список доступных методов см. на странице функции interp1. Аргумент intfunc можно использовать с любым из приведенных выше вариантов входного синтаксиса.

Аргументы

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

# t — значения времени
вектор

Details

Значения времени, при которых вычисляется аргумент func, заданные в виде вектора.

# d — смещение
вектор-строка | матрица из двух столбцов

Details

Смещение, удаленное из значений вектора t, заданное как вещественный вектор. Можно применить необязательный коэффициент усиления к каждой отложенной оценке, указав аргумент d как матрицу из двух столбцов со смещением, определенным в столбце 1, и соответствующим коэффициентом усиления в столбце 2. Если d задан как вектор-строка, значения интерпретируются только как задержки.

# func — непрерывная функция
"rectpuls" | "gauspuls" | "tripuls"

Details

Непрерывная функция, используемая для генерации последовательности импульсов на основе ее выборок, заданных как "rectpuls", "gauspuls" или "tripuls".

# p — прототип импульса
вектор

Details

Функция прототипа, заданная как вектор. Интервал p задается как [0,(length(p)−1)/fs], а ее выборки за пределами этого интервала тождественно равны нулю. По умолчанию для генерации задержек используется линейная интерполяция.

# fs — частота дискретизации
1 (по умолчанию) | вещественный скаляр

Details

Частота дискретизации в Гц, заданная как вещественный скаляр.

# intfunc — метод интерполяции
"linear" (по умолчанию) | "nearest" | "next" | "previous" | "pchip" | "cubic" | "v5cubic" | "makima" | "spline"

Details

Метод интерполяции, заданный как один из вариантов, представленных в таблице.

Метод Описание Непрерывность Комментарии

"linear"

Линейная интерполяция. Интерполированное значение в точке запроса основано на линейной интерполяции значений в соседних точках сетки в каждом соответствующем измерении. Это метод интерполяции по умолчанию.

  • Требуется не менее 2 точек

  • Требует больше памяти и времени вычислений, чем интерполяция по методу ближайшего соседа

"nearest"

Интерполяция по методу ближайшего соседа. Интерполированное значение в точке запроса — это значение в ближайшей точке сетки выборки.

Прерывистый

  • Требуется не менее 2 точек

  • Небольшие требования к памяти

  • Самое быстрое время вычислений

"next"

Интерполяция до следующего соседа. Интерполированное значение в точке запроса — это значение в следующей точке сетки выборки.

Прерывистый

  • Требуется не менее 2 точек

  • Такие же требования к памяти и время вычислений, как у "nearest"

"previous"

Интерполяция по предыдущему соседу. Интерполированное значение в точке запроса — это значение в предыдущей точке сетки выборки.

Прерывистый

  • Требуется не менее 2 точек

  • Такие же требования к памяти и время вычислений, как у "nearest"

"pchip" или "cubic"

Кусочно-кубическая интерполяция с сохранением формы. Интерполированное значение в точке запроса основано на кусочно-кубической интерполяции значений в соседних точках сетки с сохранением формы.

  • Требуется не менее 4 точек

  • Требует больше памяти и времени вычислений, чем "linear"

"v5cubic"

Кубическая свертка, используемая в Engee.

Точки должны быть равномерно распределены

"makima"

Модифицированная интерполяция Акимы по кубическим многочленам Эрмита. Интерполированное значение в точке запроса основано на кусочно-линейной функции многочленов степени не выше третьей. Формула Акимы модифицирована для предотвращения выбросов.

  • Требуется не менее 2 точек

  • Создает меньше волнистости, чем "spline", но не сглаживает так агрессивно, как "pchip"

  • Вычисления требуют больше ресурсов, чем "pchip", но обычно меньше, чем "spline"

  • Требования к памяти аналогичны "spline"

"spline"

Сплайн-интерполяция с использованием условий «not-a-knot». Интерполированное значение в точке запроса основано на кубической интерполяции значений в соседних точках сетки в каждом соответствующем измерении.

  • Требуется не менее 4 точек, при наличии 2 или 3 точек применяется линейная или квадратичная интерполяция соответственно

  • Требует больше памяти и времени вычислений, чем "pchip"

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

# 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)

pulstran 1

Асимметричный пилообразный сигнал

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)

pulstran 2

Изменение метода интерполяции с помощью пользовательского импульса

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 3

Используем функцию 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")

pulstran 4