Сообщество Engee

Свёртка сигналов

Автор
avatar-artpgchartpgch
Notebook

Данный алгоритм выполняет операцию свёртки двух последовательностей. Имея временной сдвиг, одна последовательность поэлементно перемножается с зеркально отражённой другой, элементы результата перемножения складываются между собой. Затем первая последовательность сдвигается на один отсчёт при каждой итерации. Операция суммирования поэлементного перемножения повторяется до окончания взаимного сдвига последовательностей.

Импортируем необходимые пакеты:

Pkg.add("DSP")
Pkg.add("Plots")
using DSP, Plots

Инициализируем временную область, импульсную характеристику, и функцию входного сигнала:

dt = 0.01 # временной шаг
t1 = 0:dt:2 
ft = 2 .- t1 # импульсеая характеристика
t2 = -2:dt:2 
gt = 3 .* ones(length(t2)) # входной сигнал

Применим операцию свёртки к импульсной характеристике и входному сигналу:

yt = dt .* conv(ft, gt) # применение операции свёртки
ytx = dt .* (1:length(yt)) .+ first(t2)

Построим графики импульсной характеристики, входного и выходного сигнала:

# графики импульсной характеристики, входного и выходного сигнала
p1 = plot(t1, ft, color=:red, linewidth=3, title="Импульсная характеристика", xlabel="", ylabel="Амплитуда", grid=true, xlim=(-2, 2), legend=false)
p2 = plot(t2, gt, color=:green, linewidth=3, title="Входной сигнал", xlabel="время, с", ylabel="Амплитуда", grid=true, ylim=(0, 3.5), legend=false)
p3 = plot(ytx, yt, color=:blue, linewidth=3, title="Выходной сигнал", xlabel="время, с", ylabel="Амплитуда", grid=true, legend=false)
plot(p1, p2, p3)

Операция дискретной свёртки выполнена.