
矩形脉冲与斜变信号的卷积是信号与系统课程里最典型的卷积计算题之一。这类题目表面上是在求一个积分实际上考察的是卷积定义、图形翻转、平移、重叠区间划分和分段积分的综合能力。2025年福州大学1.1这道题以矩形脉冲和斜变信号为对象正是为了检验这个基本功。下面用一个可复算的典型波形参数把图解法、解析推导、Python 数值验证和常见错误整理成一条完整的学习路径。如果你正在准备信号与系统期末考试或考研专业课这类题目通常会被安排在题库前几题。原因不是它简单而是它足够基础后续傅里叶变换、系统响应、滤波器和采样分析都会反复用到卷积思想。理解这道题价值不只是得到一段分段函数而是建立一套可复用的“卷积题分析流程”。1. 先理解矩形脉冲与斜变信号的卷积为什么重要1.1 什么是矩形脉冲和斜变信号矩形脉冲在信号与系统中通常用单位阶跃函数的差值表示$$ p(t)u(t)-u(t-T) $$它的波形是在 $0 \le t \le T$ 内取值为 1其余时间取值为 0。这里的 $T$ 是脉冲宽度也是信号仅有的非零支撑区长度。斜变信号表示信号随时间线性增长。最常见的一种写法是$$ r(t)t\left[u(t)-u(t-T)\right] $$即信号只在 $0 \le t \le T$ 内等于 $t$其余时间等于 0。如果斜变信号不限定区间写成 $r(t)t u(t)$那么它会在 $t \to \infty$ 时无限增长卷积结果往往会无界。考试题中为了得到有限支撑的分段结果通常会给一个有限时间范围。矩形脉冲的作用是提供一个“窗口”斜变信号的作用是提供一个随时间线性变化的量。把两者做卷积相当于让一个窗口在斜变信号上滑动并将窗口内的斜变部分不断累加。这个“滑动累加”的过程正是卷积的物理意义。1.2 卷积积分的数学定义和工程含义两个连续信号 $x(t)$ 和 $h(t)$ 的卷积定义为$$ y(t)\int_{-\infty}^{\infty} x(\tau)h(t-\tau),d\tau $$这里的积分变量是 $\tau$$t$ 是参数。$h(t-\tau)$ 表示将 $h(\tau)$ 先关于纵轴翻转成 $h(-\tau)$再向右平移 $t$。所以卷积计算的本质分四步翻转、平移、相乘、积分。在 LTI 系统分析中如果 $x(t)$ 是系统输入$h(t)$ 是系统的单位冲激响应那么 $y(t)$ 就是系统的零状态响应。因此卷积不是单纯的数学练习它是求解线性时不变系统输出的一条通用路径。矩形脉冲与斜变信号的卷积适合作为教学案例因为两者的支撑区间都非常清晰翻转和平移后可以精确判断重叠区域。只要能把分段边界找对积分本身并不难。1.3 图解法与解析法如何配合求解卷积有两种常用策略图解法画出 $x(\tau)$ 和 $h(t-\tau)$用 $t$ 控制平移量观察两个图形是否重叠以及重叠部分如何变化。解析法直接根据信号表达式求积分重点在于确定积分上下限。图解法更适合寻找分段边界解析法更适合得到最终公式。实际做题时建议先用图解法把 $t$ 的变化区间分好段再在每一段内套用解析积分。如果只盯着公式硬算很容易漏段如果只画图不积分又无法得到精确表达式。两者需要配合。2. 等宽矩形脉冲与斜变信号的完整推导2.1 选取一组可复算的波形参数为了得到简洁又完整的分段结果先取矩形脉冲和斜变信号的宽度相同。设$$ p(t)u(t)-u(t-T) $$$$ r(t)t\left[u(t)-u(t-T)\right] $$求$$ y(t)p(t)*r(t) $$按照卷积定义$$ y(t)\int_{-\infty}^{\infty} p(\tau)r(t-\tau),d\tau $$其中 $p(\tau)$ 只有在 $0 \le \tau \le T$ 时为 1。$r(t-\tau)$ 只有在 $0 \le t-\tau \le T$ 时等于 $t-\tau$也就是$$ t-T \le \tau \le t $$因此被积函数非零需要同时满足$$ 0 \le \tau \le T $$$$ t-T \le \tau \le t $$所有后续分段都来自这两个不等式交集的变化。2.2 图解法四步翻转、平移、相乘、积分在 $\tau$ 坐标系中$p(\tau)$ 是一个从 0 到 $T$ 的矩形高度为 1。$r(\tau)$ 是一条从 0 到 $T$ 的斜线在 $\tau0$ 处为 0在 $\tauT$ 处为 $T$。卷积时要固定 $p(\tau)$把 $r(\tau)$ 翻转成 $r(-\tau)$。$r(-\tau)$ 的形状是一条从 $0$ 到 $-T$ 的负斜率斜线。然后向右平移 $t$得到 $r(t-\tau)$。随着 $t$ 增大$r(t-\tau)$ 向右移动它和固定矩形之间的重叠区域也在变化。可以按 $t$ 的取值把过程划分成四个阶段$t0$$r(t-\tau)$ 的非零区间是 $[t-T, t]$完全位于 $\tau0$ 区域与 $[0,T]$ 没有交集卷积结果为 0。$0 \le t \le T$右边界 $t$ 进入矩形内部左边界 $t-T0$重叠区间是 $[0,t]$并且随 $t$ 增大而增大。$T \le t \le 2T$左边界 $t-T$ 进入矩形内部右边界 $tT$重叠区间是 $[t-T,T]$随 $t$ 增大而减小。$t2T$左边界 $t-TT$重叠区间为空卷积结果为 0。这四段就是图解法给出的最重要信息。分段确定后解析积分只是代入上下限的问题。2.3 分段积分与最终结果第一段当 $0 \le t \le T$ 时重叠区间是 $0 \le \tau \le t$因此$$ y_1(t)\int_{0}^{t} 1 \cdot (t-\tau),d\tau $$计算$$ y_1(t)\left[t\tau-\frac{\tau^2}{2}\right]_{0}^{t} \frac{t^2}{2} $$第二段当 $T \le t \le 2T$ 时重叠区间是 $t-T \le \tau \le T$因此$$ y_2(t)\int_{t-T}^{T} (t-\tau),d\tau $$计算$$ y_2(t)\left[t\tau-\frac{\tau^2}{2}\right]_{t-T}^{T} $$代入上下限并化简$$ y_2(t)Tt-\frac{t^2}{2} $$同时补上两端的零值完整结果为$$ y(t) \begin{cases} 0, t0 \[4pt] \dfrac{t^2}{2}, 0 \le t \le T \[8pt] Tt-\dfrac{t^2}{2}, T \le t \le 2T \[6pt] 0, t2T \end{cases} $$可以检查连接点。$tT$ 时第一段结果是 $T^2/2$第二段结果也是 $T^2/2$左右连续。$t0$ 和 $t2T$ 时结果都为 0整个波形没有跳变。从波形看$y(t)$ 先按抛物线上升在 $tT$ 处达到峰值 $T^2/2$再按抛物线下降到 0。总支撑区间是 $0$ 到 $2T$宽度等于两个信号支撑宽度之和。这一点符合一般规律两个有限支撑信号卷积后的支撑区宽度等于各自支撑宽度相加。2.4 幅度和斜率的系数变化如果题目把矩形脉冲幅度改为 $A$即 $p(t)A[u(t)-u(t-T)]$那么所有积分结果都乘以 $A$$$ y(t) \begin{cases} A\dfrac{t^2}{2}, 0 \le t \le T \[8pt] A\left(Tt-\dfrac{t^2}{2}\right), T \le t \le 2T \end{cases} $$如果斜变信号改为 $r(t)kt[u(t)-u(t-T)]$则结果再乘以 $k$。实际考试中经常出现这类参数变化关键是先写出信号表达式再做卷积不要背死公式。3. 用 Python 数值卷积验证分段结果3.1 为什么需要编程验证解析法得到分段公式后容易在某一个分段上出错尤其是边界判断。用一个独立于手算的数值方法交叉验证可以快速发现错误。Python 的 NumPy 和 Matplotlib 是信号与系统学习中最常用的工具这部分会给出一个最小可运行的验证脚本。数值验证的思路是把连续信号按很小的采样间隔离散化再用离散卷积近似连续卷积。只要采样间隔足够小结果就能在图形上非常接近解析解。3.2 连续卷积离散化的关键点NumPy 的np.convolve完成的是离散序列卷积$$ z[n]\sum_{k} x[k]h[n-k] $$连续卷积是积分离散卷积是求和。为了让数值结果和连续卷积一致需要对求和结果乘以采样间隔 $dt$$$ y(t) \approx dt \cdot \sum_{k} p(\tau_k)r(t-\tau_k) $$使用np.convolve(p, r, modefull)后还要注意输出序列对应的时间轴。离散卷积结果的下标 0 对应两个输入序列起始下标相加而真实时间需要根据采样起点重新构造。如果忽略时间轴偏移绘制出的波形会整体平移产生错误结论。3.3 验证代码下面代码使用 $T1$ 的等宽情形分别计算解析解、逐点数值积分和离散卷积结果。import numpy as np import matplotlib.pyplot as plt T 1.0 dt 0.001 # 时间轴范围要覆盖信号的支撑区和卷积结果的支撑区 t np.arange(-0.5, 2.5, dt) # 矩形脉冲 p(t) p ((t 0) (t T)).astype(float) # 斜变信号 r(t) r ((t 0) (t T)).astype(float) * t # 方法一离散卷积近似连续卷积 y_conv dt * np.convolve(p, r, modefull) t_conv t[0] t[0] np.arange(y_conv.size) * dt # 只取卷积结果非零区间附近的数据 mask (t_conv 0) (t_conv 2 * T) t_conv_valid t_conv[mask] y_conv_valid y_conv[mask] # 方法二按连续卷积定义逐点数值积分 t_out np.arange(0, 2 * T dt, dt) y_quad np.zeros_like(t_out) for i, t0 in enumerate(t_out): # r(t0 - tau) 的非零条件是 0 t0 - tau T r_shift np.where((t0 - t 0) (t0 - t T), t0 - t, 0.0) y_quad[i] np.trapz(p * r_shift, t) # 解析解 y_ana np.piecewise( t_out, [ t_out 0, (t_out 0) (t_out T), (t_out T) (t_out 2 * T), t_out 2 * T, ], [ 0.0, lambda x: x**2 / 2, lambda x: T * x - x**2 / 2, 0.0, ], ) # 绘图对比 plt.figure(figsize(8, 4)) plt.plot(t_out, y_ana, k-, linewidth2, labelanalytical) plt.plot(t_out, y_quad, r--, linewidth1.5, labelnumerical integral) plt.plot(t_conv_valid, y_conv_valid, b:, linewidth1.5, labeldiscrete convolve) plt.xlabel(t) plt.ylabel(y(t)) plt.legend() plt.grid(True) plt.show()运行这段代码后三条曲线会几乎重合。analytical是手算的分段公式numerical integral是用连续定义逐点积分discrete convolve是用np.convolve快速计算。三者一致说明分段公式和代码实现都没有问题。3.4 修改参数观察波形变化把代码中的T改为 2再运行一次。矩形脉冲和斜变信号都在 $0 \le t \le 2$ 内非零卷积结果的峰值变为 $2^2/22$支撑区变为 $0 \le t \le 4$。图形仍然是对称的两段抛物线。把矩形脉冲高度改为 2比如p 2.0 * ((t 0) (t T)).astype(float)峰值会变为原来的 2 倍。这说明幅度参数直接影响卷积结果的幅值但不会改变分段边界。这样的参数实验可以帮助理解卷积的线性性质。4. 常见错误、排查路径和检查清单4.1 高频错误与根因卷积题出错通常集中在以下几个位置。错误现象常见原因检查方式解决建议分段数量不对没有用图解法确定 $t$ 的临界点画出 $t0,T,2T$ 三个状态先固定一个信号翻转另一个再扫描 $t$积分上下限反了忘记了 $r(t-\tau)$ 对应的 $\tau$ 范围列出不等式 $0 \le t-\tau \le T$先解不等式再取交集翻转方向错误把 $p(\tau)$ 翻转为 $p(t-\tau)$ 而不是翻转斜变信号对照卷积定义重新写一遍卷积可交换但同一题内要固定一种翻转对象时间轴偏移错误离散卷积后直接使用原时间轴检查 $t_conv$ 公式用np.convolve后重新构造输出时间点数值结果与解析结果不在一个尺度离散卷积没有乘以 $dt$比较峰值是否接近 $T^2/2$连续卷积近似需要乘采样间隔4.2 从现象倒推问题如果程序画出的曲线和手算公式不一致不要急着改代码。建议按这个顺序检查。先看输入信号是否正确。p是否只在 $0$ 到 $T$ 内为 1r是否在支撑区内等于 $t$。再看离散卷积的时间轴是否偏移。然后看积分上下限是否把两个非零条件全部包含。最后看解析解的每个分段在连接点是否连续。以np.convolve为例如果输出曲线相对解析解整体向右偏移了一个采样间隔通常是时间轴构造错误。如果整个曲线幅值都扩大了几百倍通常是忘了乘以 $dt$。如果波形形状对但峰值点不在 $tT$需要检查矩形脉冲是否也参与了翻转。4.3 卷积题可复用检查清单每道卷积题都可以用下面清单复查[ ] 明确两个信号的支撑区间包括起点和终点。[ ] 写出卷积积分表达式确认翻转对象。[ ] 在草图上画出 $t0$、$t$ 在区间内、$t$ 在区间后三个典型状态。[ ] 找出所有重叠方式发生变化的临界 $t$ 值。[ ] 对每个分段写出积分上下限并代入解析积分。[ ] 检查每段在边界处是否连续。[ ] 检查当 $t \to \pm\infty$ 时结果是否趋于 0。[ ] 用数值卷积或随机采样验证至少一个非零点的数值。这个清单也适用于其他信号组合比如矩形脉冲与矩形脉冲、矩形脉冲与三角波、指数信号与阶跃信号等。5. 拓展不等宽情形、性质检查与复习建议5.1 不等宽时会出现线性上升段如果矩形脉冲和斜变信号宽度不同分段会更丰富。设矩形脉冲在 $0 \le t \le 2$ 内为 1斜变信号在 $0 \le t \le 3$ 内等于 $t$即$$ p(t)u(t)-u(t-2) $$$$ r(t)t\left[u(t)-u(t-3)\right] $$重叠条件为$$ 0 \le \tau \le 2 $$$$ t-3 \le \tau \le t $$分段结果为$$ y(t) \begin{cases} 0, t0 \[4pt] \dfrac{t^2}{2}, 0 \le t \le 2 \[8pt] 2t-2, 2 \le t \le 3 \[6pt] 2t\dfrac{5}{2}-\dfrac{t^2}{2}, 3 \le t \le 5 \[6pt] 0, t5 \end{cases} $$这个结果很有意思。中间一段 $2t-2$ 是一个线性上升段因为矩形脉冲已经完整地滑入斜变信号内部重叠面积随时间线性增加。前一段是二次上升后一段是二次下降。真实题目的分段数量和曲线形状完全由两个信号的支撑宽度关系决定。5.2 用卷积性质做交叉验证除了数值验证还可以用卷积的微积分性质辅助检查。设 $y(t)p(t)*r(t)$则$$ y(t)p(t)*r(t) $$对于 $r(t)t[u(t)-u(t-T)]$它的导数中包含一个矩形脉冲和一个位于 $tT$ 的负冲激因此 $y(t)$ 可以拆成矩形脉冲与矩形脉冲的卷积再减去一个平移的矩形脉冲。这样就能用“三角形脉冲”的形状来验证“抛物线拼接”是否正确。矩形脉冲与矩形脉冲的卷积是三角形脉冲这是信号与系统里非常经典的结果。掌握了这个关系后再看到斜变信号可以先考虑求导降阶把斜变信号变成阶跃或矩形信号。不过求导过程要小心冲激项建议在熟练掌握直接卷积之后再使用。5.3 从一道题到系统性复习路径这道题的价值在于建立一个标准流程。建议按下面的顺序继续练习矩形脉冲与矩形脉冲卷积理解三角波的形成。矩形脉冲与三角波卷积理解多段抛物线拼接。指数信号与阶跃信号卷积理解因果性和系统响应。矩形脉冲与斜变信号的不等宽情形练习更复杂的分段。利用卷积的交换律、结合律、分配律简化复合系统。在解题时不要只追求最终分段表达式还要能画出波形、判断峰值位置、说明各段含义。能独立完成这些才算真正掌握卷积求解。实际动手时建议把解析推导和 Python 绘图放在一起。解析能告诉你为什么分段程序能告诉你哪个分段画错了。两者互相印证是信号与系统复习中效率很高的方式。