C·10总技巧:拆输入,平移叠加
About 7 min
前面每一节都在算"一个输入和一个 h 的 convolution"。这时不要对整个输入做一次大积分,而是把输入拆成几块,只算一个基本块的响应,剩下的全靠平移和相加。拆信号的方法(每个跳变加一个阶跃、每个斜率变化加一个斜坡)在第 6 章部分讲过(6·02)。
总技巧
- 把输入写成基本块之和:Akδ(t−tk)、Aku(t−tk)、Akr(t−tk)(r=tu(t) 是斜坡)或 AkP(t−tk)(P 是一个脉冲)。
- 只算一个基本块的响应:impulse → h;阶跃 → s=u∗h(step response,即 h 的 running integral);斜坡 → r∗h;脉冲 → Q=P∗h。
- 每一块的响应 = Ak × 基本响应晚 tk。
- 全部相加,再按 t 分段化简。
理由只有两条:time-invariant(输入的一块晚 tk,它的响应也晚 tk)和 linear(各块的响应相加、乘系数)。用 convolution 的语言说,就是分配律加平移规则(C·09)。
下面三个例子用同一个系统:1 秒的滑动平均 (moving average),h(t)=u(t)−u(t−1),也就是 y(t)=∫t−1tx(λ)dλ:输出 = 输入在过去 1 秒里的面积。它的两个基本响应只需算一次(都是 running integral):
阶跃的响应 s=u∗h:先升 1 秒,然后平在 1。斜坡的响应 R=r∗h:先是抛物线 t2/2,t>1 后是直线 t−21(比 r 晚半秒)。
A. 阶梯输入:每个台阶 = 一个阶跃
例题例 1 四级阶梯
输入 x(t):0–1 高 1,1–2 高 3,2–4 高 2,之后为 0(下面第 ① 张图)。求滑动平均的输出 y(t)。
① 读跳变:x=u(t)+2u(t−1)−u(t−2)−2u(t−4)。② 每个阶跃 Aku(t−tk) → Aks(t−tk):橙色正、紫色负。③ 四条相加 = y(青色)。每个台阶变成一段 1 秒长的斜坡。
算式。四个阶跃各给一个缩放、平移的 s;s(t−tk) 在 tk 到 tk+1 之间是 t−tk,之后是 1:
y=s(t)+2s(t−1)−s(t−2)−2s(t−4)
分段(每一段把"正在上升"的项和"已经平了"的项加起来):y=t(0–1),2t−1(1–2),5−t(2–3),2(3–4),10−2t(4–5),之后为 0。
检查
直接用"过去 1 秒的面积":t=2.5 时窗口 [1.5, 2.5] 里有 0.5 秒高 3、0.5 秒高 2,面积 2.5;式子 5−2.5=2.5 ✓。面积:x 面积 1+3+4=8,h 面积 1,y 面积 0.5+2+2.5+2+1=8 ✓。换一种拆法(每秒一个脉冲,Q=P∗h 是 0 到 2、峰值 1 的三角形):y=Q+3Q(t−1)+2Q(t−2)+2Q(t−3),t=2.5 时 0+1.5+1+0=2.5 ✓。
B. 有斜边的输入:每个斜率变化 = 一个斜坡
例题例 2 梯形输入
输入是梯形:0–1 从 0 升到 1,1–2 平在 1,2–3 降回 0。求滑动平均的输出。
① 读斜率变化:x=r(t)−r(t−1)−r(t−2)+r(t−3)。② 每个斜坡 Akr(t−tk) → AkR(t−tk):橙色是 R(t)、R(t−3),紫色是 −R(t−1)、−R(t−2)。③ 相加:四条直线部分互相抵消,只剩 0 到 4 的一个圆滑的鼓包。
算式。斜率在 0 处 0 → 1(+r),1 处 1 → 0(−r),2 处 0 → −1(−r),3 处 −1 → 0(+r)。每个斜坡给一个缩放、平移的 R:
y=R(t)−R(t−1)−R(t−2)+R(t−3)
分段。R(t−tk) 在 tk 到 tk+1 之间是 (t−tk)2/2,之后是 t−tk−21。逐段相加:
y=⎩⎨⎧t2/2,t−21−2(t−1)2,1−2(t−2)2,27−t+2(t−3)2,0<t<11<t<22<t<33<t<4
检查
连续:t=1:21 和 21;t=2:1 和 1;t=3:21 和 21;t=4:0 ✓。t>4:四个直线部分 (t−21)−(t−23)−(t−25)+(t−27)=0 ✓。峰值 y(2)=1:窗口 [1,2] 正好盖住平顶。面积:2×1=2;四段 61+65+65+61=2 ✓。
输入的四个折角在输出里都被磨圆了:斜坡经过滑动平均变成"抛物线接直线"。
C. 反过来:想要某个输出,输入该是什么
例题例 3 由目标输出反推输入
想让同一个滑动平均的输出是:0 到 2 秒从 0 线性升到 2,保持 2 到 t=4,再用 1 秒线性降到 0(下面第 ① 张图)。输入应该是什么?
思路。A 里看到:一个高 Ak 的台阶 Aku(t−tk) 在输出里产生"从 tk 开始、斜率 Ak、持续 1 秒的斜坡,然后平"。所以猜输入是阶梯 x=∑Aku(t−tk),从左往右用 linear 反推系数:
- 0<t<1:目标斜率 1,只有 t=0 的台阶在升 → A0=1。
- 1<t<2:目标斜率还是 1,可 t=0 那块已经平了 → 在 t=1 再加 A1=1。
- 2<t<4:目标是平的,前两块都已平,y=A0+A1=2 ✓,不用加。
- 4<t<5:目标斜率 −2 → 在 t=4 加 A4=−2。之后 y=1+1−2=0 ✓。
① 目标:斜率 1(0–2)、0(2–4)、−2(4–5)。② 每个斜率变化用一个缩放、平移的 s 来拼;三条相加(青色)= 目标。③ 读出输入: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):0–1 为 t;1–2 为 1+(t−1)=t;2–4 为 2;4–5 为 2−2(t−4)=10−2t;之后 0 ✓。
滑动平均的一条规律
y(t)=∫t−1tx 对 t 求导:y′(t)=x(t)−x(t−1),即"刚进窗口的减去刚出窗口的"。所以输入的每个台阶都在输出里变成一段 1 秒长的斜坡(A、C),而且输入不取负值时,输出从 2 降到 0 至少要 1 秒。