C·10

总技巧:拆输入,平移叠加

About 7 min

前面每一节都在算"一个输入和一个 hh 的 convolution"。这时不要对整个输入做一次大积分,而是把输入拆成几块,只算一个基本块的响应,剩下的全靠平移和相加。拆信号的方法(每个跳变加一个阶跃、每个斜率变化加一个斜坡)在第 6 章部分讲过(6·02)。

总技巧
  1. 把输入写成基本块之和:Ak δ(t−tk)A_k\,\delta(t-t_k)、Ak u(t−tk)A_k\,u(t-t_k)、Ak r(t−tk)A_k\,r(t-t_k)(r=t u(t)r = t\,u(t) 是斜坡)或 Ak P(t−tk)A_k\,P(t-t_k)(PP 是一个脉冲)。
  2. 只算一个基本块的响应:impulse → hh;阶跃 → s=u∗hs = u * h(step response,即 hh 的 running integral);斜坡 → r∗hr * h;脉冲 → Q=P∗hQ = P * h。
  3. 每一块的响应 = AkA_k × 基本响应晚 tkt_k。
  4. 全部相加,再按 tt 分段化简。

理由只有两条:time-invariant(输入的一块晚 tkt_k,它的响应也晚 tkt_k)和 linear(各块的响应相加、乘系数)。用 convolution 的语言说,就是分配律加平移规则(C·09)。

下面三个例子用同一个系统:1 秒的滑动平均 (moving average),h(t)=u(t)−u(t−1)h(t) = u(t) - u(t-1),也就是 y(t)=∫t−1tx(λ) dλy(t) = \int_{t-1}^{t} x(\lambda)\,d\lambda:输出 = 输入在过去 1 秒里的面积。它的两个基本响应只需算一次(都是 running integral):

1 2 3 1 0 t u(t) s(t)
阶跃的响应 s=u∗hs = u * h:先升 1 秒,然后平在 1。
1 2 3 1 2 0 t r(t) R(t)
斜坡的响应 R=r∗hR = r * h:先是抛物线 t2/2t^2/2,t>1t \gt 1 后是直线 t−12t - \tfrac12(比 rr 晚半秒)。

A. 阶梯输入:每个台阶 = 一个阶跃

例题

例 1 四级阶梯

输入 x(t)x(t):0–1 高 1,1–2 高 3,2–4 高 2,之后为 0(下面第 ① 张图)。求滑动平均的输出 y(t)y(t)。

1 2 3 4 5 1 2 3 0 t x(t) +1 +2 −1 −2
① 读跳变:x=u(t)+2u(t−1)−u(t−2)−2u(t−4)x = u(t) + 2u(t-1) - u(t-2) - 2u(t-4)。
1 2 3 4 5 -2 -1 1 2 0 t 2s(t−1) s(t) −s(t−2) −2s(t−4)
② 每个阶跃 Aku(t−tk)A_k u(t-t_k) → Ak s(t−tk)A_k\,s(t-t_k):橙色正、紫色负。
1 2 3 4 5 1 2 3 0 t y x
③ 四条相加 = yy(青色)。每个台阶变成一段 1 秒长的斜坡。

算式。四个阶跃各给一个缩放、平移的 ss;s(t−tk)s(t-t_k) 在 tkt_k 到 tk+1t_k + 1 之间是 t−tkt - t_k,之后是 1:

y=s(t)+2s(t−1)−s(t−2)−2s(t−4)\begin{aligned} y &= s(t) + 2s(t-1) \\ &\quad - s(t-2) - 2s(t-4) \end{aligned}

分段(每一段把"正在上升"的项和"已经平了"的项加起来):y=ty = t(0–1),2t−12t - 1(1–2),5−t5 - t(2–3),22(3–4),10−2t10 - 2t(4–5),之后为 0。

检查

直接用"过去 1 秒的面积":t=2.5t = 2.5 时窗口 [1.5, 2.5][1.5,\ 2.5] 里有 0.5 秒高 3、0.5 秒高 2,面积 2.5;式子 5−2.5=2.55 - 2.5 = 2.5 ✓。面积:xx 面积 1+3+4=81 + 3 + 4 = 8,hh 面积 1,yy 面积 0.5+2+2.5+2+1=80.5 + 2 + 2.5 + 2 + 1 = 8 ✓。换一种拆法(每秒一个脉冲,Q=P∗hQ = P * h 是 0 到 2、峰值 1 的三角形):y=Q+3Q(t−1)+2Q(t−2)+2Q(t−3)y = Q + 3Q(t-1) + 2Q(t-2) + 2Q(t-3),t=2.5t = 2.5 时 0+1.5+1+0=2.50 + 1.5 + 1 + 0 = 2.5 ✓。

B. 有斜边的输入:每个斜率变化 = 一个斜坡

例题

例 2 梯形输入

输入是梯形:0–1 从 0 升到 1,1–2 平在 1,2–3 降回 0。求滑动平均的输出。

1 2 3 4 5 1 0 t x(t) +r −r −r +r
① 读斜率变化:x=r(t)−r(t−1)−r(t−2)+r(t−3)x = r(t) - r(t-1) - r(t-2) + r(t-3)。
1 2 3 4 5 -2 2 4 0 t
② 每个斜坡 Akr(t−tk)A_k r(t-t_k) → AkR(t−tk)A_k R(t-t_k):橙色是 R(t)R(t)、R(t−3)R(t-3),紫色是 −R(t−1)-R(t-1)、−R(t−2)-R(t-2)。
1 2 3 4 5 .5 1 0 t x y
③ 相加:四条直线部分互相抵消,只剩 0 到 4 的一个圆滑的鼓包。

算式。斜率在 0 处 0 → 1(+r+r),1 处 1 → 0(−r-r),2 处 0 → −1(−r-r),3 处 −1 → 0(+r+r)。每个斜坡给一个缩放、平移的 RR:

y=R(t)−R(t−1)−R(t−2)+R(t−3)\begin{aligned} y &= R(t) - R(t-1) \\ &\quad - R(t-2) + R(t-3) \end{aligned}

分段。R(t−tk)R(t-t_k) 在 tkt_k 到 tk+1t_k + 1 之间是 (t−tk)2/2(t-t_k)^2/2,之后是 t−tk−12t - t_k - \tfrac12。逐段相加:

y={t2/2,0<t<1t−12−(t−1)22,1<t<21−(t−2)22,2<t<372−t+(t−3)22,3<t<4y = \begin{cases} t^2/2, & 0\lt t\lt 1 \\ t - \tfrac12 - \tfrac{(t-1)^2}{2}, & 1\lt t\lt 2 \\ 1 - \tfrac{(t-2)^2}{2}, & 2\lt t\lt 3 \\ \tfrac72 - t + \tfrac{(t-3)^2}{2}, & 3\lt t\lt 4 \end{cases}
检查

连续:t=1t = 1:12\tfrac12 和 12\tfrac12;t=2t = 2:1 和 1;t=3t = 3:12\tfrac12 和 12\tfrac12;t=4t = 4:0 ✓。t>4t \gt 4:四个直线部分 (t−12)−(t−32)−(t−52)+(t−72)=0(t-\tfrac12) - (t-\tfrac32) - (t-\tfrac52) + (t - \tfrac72) = 0 ✓。峰值 y(2)=1y(2) = 1:窗口 [1,2][1, 2] 正好盖住平顶。面积:2×1=22 \times 1 = 2;四段 16+56+56+16=2\tfrac16 + \tfrac56 + \tfrac56 + \tfrac16 = 2 ✓。

输入的四个折角在输出里都被磨圆了:斜坡经过滑动平均变成"抛物线接直线"。

C. 反过来:想要某个输出,输入该是什么

例题

例 3 由目标输出反推输入

想让同一个滑动平均的输出是:0 到 2 秒从 0 线性升到 2,保持 2 到 t=4t = 4,再用 1 秒线性降到 0(下面第 ① 张图)。输入应该是什么?

思路。A 里看到:一个高 AkA_k 的台阶 Aku(t−tk)A_k u(t-t_k) 在输出里产生"从 tkt_k 开始、斜率 AkA_k、持续 1 秒的斜坡,然后平"。所以猜输入是阶梯 x=∑Aku(t−tk)x = \sum A_k u(t-t_k),从左往右用 linear 反推系数:

  • 0<t<10\lt t\lt 1:目标斜率 1,只有 t=0t = 0 的台阶在升 → A0=1A_0 = 1。
  • 1<t<21\lt t\lt 2:目标斜率还是 1,可 t=0t = 0 那块已经平了 → 在 t=1t = 1 再加 A1=1A_1 = 1。
  • 2<t<42\lt t\lt 4:目标是平的,前两块都已平,y=A0+A1=2y = A_0 + A_1 = 2 ✓,不用加。
  • 4<t<54\lt t\lt 5:目标斜率 −2 → 在 t=4t = 4 加 A4=−2A_4 = -2。之后 y=1+1−2=0y = 1 + 1 - 2 = 0 ✓。
1 2 3 4 5 1 2 0 t 目标 y
① 目标:斜率 1(0–2)、0(2–4)、−2(4–5)。
1 2 3 4 5 -2 1 2 0 t s(t) s(t−1) −2s(t−4)
② 每个斜率变化用一个缩放、平移的 ss 来拼;三条相加(青色)= 目标。
1 2 3 4 5 1 2 0 t x(t)
③ 读出输入:x=u(t)+u(t−1)−2u(t−4)x = u(t) + u(t-1) - 2u(t-4)。
x=u(t)+u(t−1)−2u(t−4)x = u(t) + u(t-1) - 2u(t-4)

即 0–1 高 1,1–4 高 2,之后为 0。

检查(正向算一遍)

y=s(t)+s(t−1)−2s(t−4)y = s(t) + s(t-1) - 2s(t-4):0–1 为 tt;1–2 为 1+(t−1)=t1 + (t-1) = t;2–4 为 2;4–5 为 2−2(t−4)=10−2t2 - 2(t-4) = 10 - 2t;之后 0 ✓。

滑动平均的一条规律

y(t)=∫t−1txy(t) = \int_{t-1}^t x 对 tt 求导:y′(t)=x(t)−x(t−1)y'(t) = x(t) - x(t-1),即"刚进窗口的减去刚出窗口的"。所以输入的每个台阶都在输出里变成一段 1 秒长的斜坡(A、C),而且输入不取负值时,输出从 2 降到 0 至少要 1 秒。