AnyMath 文档
Notebook

AnyMath中的信号卷积

导言

卷积是数字信号处理的基本操作之一。 它描述了线性静止系统对任意输入影响的响应,广泛用于滤波器分析、通信信道建模、图像处理和自动控制任务。

在数学上,连续信号的卷积运算写成积分:

而对于离散序列作为总和:

运算的含义如下:对其中一个序列进行镜像,相对于另一个进行移位,与之逐元素相乘,并将乘法的结果求和。 在每个步骤重复移位,直到序列不再重叠。

在这个例子中,考虑了Julia环境中两个信号的卷积的数值实现。:

*脉冲响应 是区间上的线性递减函数 与;

*输入信号 -间隔中单个幅度的矩形脉冲 和。

工作的目的是演示离散卷积的逐步实现,正确考虑采样步骤并将原始信号与结果一起可视化。

初始数据

初始化时域、脉冲响应和输入信号函数:

In [ ]:
dt = 0.01 # 时间步长
t1 = 0:dt:2 
ft = 2 .- t1 # 脉冲响应
t2 = -2:dt:2 
gt = 3 .* ones(length(t2)) # 的输入信号

卷积运算

让我们将AnyMathDSP库中的卷积运算应用于脉冲响应和输入信号:

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]:

已经执行了离散卷积操作。

结论

在这个例子中,实现了两个序列的离散卷积。 输出信号具有梯形形状,这证实了算法的正确性并考虑了采样步骤。 该示例显示了如何从简单信号中形成更复杂的系统响应。 卷积在实践中得到了广泛的应用:在数字滤波器、通信信道上的信号传输、雷达、图像和声音处理、医疗诊断、控制系统和卷积神经网络中。

AnyMath拥有用于此类任务的AnyMathDSP库,具有卷积,滤波和光谱分析的现成功能。 这使您可以专注于算法的逻辑,而无需手动执行计算。 使用 EngeeDSP.Functions.conv 脚本证实了这一点。 这个例子可以作为卷积的一般说明,也可以作为AnyMath中更复杂信号处理任务的起点。