求解卷积数值
01 求解卷积
在第四次作业中,有一个求解卷积数值的题目。 两个参与卷积的信号 f1,f2 的波形给出了。 分别求卷积结果在 0,负一,1,3 处的取值。 如果选择 f1 进行反褶平移, 这是卷积时间 t 等于 0 时刻 对应 f1 的位置, 这是 t 等于 1 时对应 f1 所在的位置。 t 等于 负一时对应 f1 所在的位置; t 等于 3 时,对应 f1 的位置。 下面分别求解 这几个位置时对应的卷积结果。
▲ 图1.1 卷积数值计算
一、卷积结果
首先考察卷积在 t 等于 0 时刻 对应的卷积结果。 此时 f1 中心在原点, 它的右边乘积积分 为0.5; 它的左边乘积积分 等于 1。 将它们加在一起为卷积结果,等于1.5。 下面考察 t 等于 负一 对应的卷积结果, 这是 f1 所在的位置, 左右两部分积分结果都是 1, 对应卷积结果等于 2。 下面考察 t 等于 1 时对应的卷积结果, 此时 f1 的中心位于 1, 它的左右积分分别是处 0.5 负 0.5。 因此对应的卷积结果等于 0。 最后,考察 t 等于 3 时对应的卷积结果。 卷积结果为 负 0.5。 至此, 我们获得了四个特殊点的卷积值。 这是这道题目的答案。
▲ 图1.1.1 计算结果
下面通过Python编程, 计算卷积波形图。 在这个数值计算的图中, 可以找到对应的结果。 它们与前面计算所得到的数值是相等的。
▲ 图1.1.2 数值计算过程
※ 总 结 ※
本文对第四次作业中的一道有趣的求解卷积的习题进行了讨论。 利用卷积的图解方法可以比较容易获得对应卷积结果的数值。
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY -- by Dr. ZhuoQing 2023-03-31
#
# Note:
#============================================================
from headm import *
from tsmodule.tsdraw import *
pltgif = PlotGIF()
def G(t, startn, endn):
return heaviside(t-startn,0)-heaviside(t-endn,0)
def Gt(t, center, width):
startn = center-width/2
endn = startn + width
return heaviside(t-startn,0.5)-heaviside(t-endn,0.5)
t = linspace(-3.5, 5, 10000)
ratio = (max(t)-min(t))/len(t)
f2 = 2*G(t,-2,0) + G(t, 0,1) - G(t, 1, 3)
ddim = linspace(-3.5, 5, 100)
rdim = []
for d in ddim:
tt = t-d
f1 = -tt*G(tt,-1,0) + tt*G(tt,0,1)
r = sum([v1*v2 for v1,v2 in zip(f2,f1)])*ratio
rdim.append(r)
# sn = int(3.5/(max(t)-min(t))*len(t))
# f = convolve(f1,f2)[sn:sn+len(t)]*ratio
plt.clf()
plt.plot(t, f1, lw=1, label='f1(t)')
plt.plot(t, f2, lw=1, label="f2(t)")
# plt.plot(t, f, lw=3, label="f(t)")
plt.plot(ddim[:len(rdim)], rdim, lw=3, label='Convolve')
plt.arrow(-4, 0.0, 9.5, 0, shape="full", lw=0.2, length_includes_head=True, head_width=0.075)
plt.arrow(0, -1.1, 0, 3.8, shape="full", lw=0.2, length_includes_head=True, head_width=0.075)
plt.axis([min(t)-0.5,max(t)+0.5, -1.5, 3])
plt.xlabel("t")
plt.ylabel("f(t)")
plt.legend(loc="upper right")
plt.tight_layout()
plt.draw()
plt.pause(.1)
pltgif.append(plt)
#------------------------------------------------------------
pltgif.save()
printf('\a')
#------------------------------------------------------------
# END OF FILE : TEST1.PY
#============================================================
■ 相关文献链接:
● 相关图表链接: