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

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

Введение

Свёртка — одна из фундаментальных операций цифровой обработки сигналов. Она описывает отклик линейной стационарной системы на произвольное входное воздействие и широко применяется при анализе фильтров, моделировании каналов связи, обработке изображений и в задачах автоматического управления.

Математически операция свёртки для непрерывных сигналов записывается как интеграл:

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

Смысл операции состоит в следующем: одна из последовательностей зеркально отражается, сдвигается относительно другой, поэлементно перемножается с ней, а результаты перемножения суммируются. Сдвиг повторяется на каждом шаге до тех пор, пока последовательности не перестанут перекрываться.

В данном примере рассматривается численная реализация свёртки двух сигналов в среде Julia:

  • импульсная характеристика - линейно убывающая функция на интервале с;

  • входной сигнал - прямоугольный импульс единичной амплитуды на интервале с.

Цель работы - продемонстрировать пошаговое выполнение дискретной свёртки, корректно учесть шаг дискретизации и визуализировать исходные сигналы вместе с результатом.

Исходные данные

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

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

Операция свёртки

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

In [ ]:
yt = dt .* EngeeDSP.Functions.conv(ft, gt) # применение операции свёртки
ytx = dt .* (1:length(yt)) .+ first(t2)
Out[0]:
-1.99:0.01:4.01

Ожидаемый результат — трапециевидный выходной сигнал: нарастание на участке перекрытия последовательностей, плоская вершина и симметричный спад. Такая форма закономерна: свёртка прямоугольного импульса с линейно убывающей функцией даёт кусочно-линейный отклик.

Визуализация

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

In [ ]:
# графики импульсной характеристики, входного и выходного сигнала
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)
Out[0]:

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

Заключение

В данном примере реализована дискретная свёртка двух последовательностей. Выходной сигнал получил трапециевидную форму, что подтверждает корректность алгоритма и учёт шага дискретизации. Пример показывает, как из простых сигналов формируется более сложный отклик системы. Свёртка широко применяется на практике: в цифровых фильтрах, при передаче сигналов по каналам связи, в радиолокации, обработке изображений и звука, в медицинской диагностике, системах управления и в свёрточных нейросетях.

В Engee для таких задач есть библиотека EngeeDSP с готовыми функциями свёртки, фильтрации и спектрального анализа. Это позволяет сосредоточиться на логике алгоритма, не реализуя вычисления вручную. Использование EngeeDSP.Functions.conv в скрипте это подтверждает. Данный пример может служить общей иллюстрацией свёртки и отправной точкой для более сложных задач обработки сигналов в Engee.