信号与系统考研波形变换:关键点映射法三步画对x(-2t+1)
信号与系统考研里有一类题,看着基础,丢分率却高得离谱:给你一个原始波形 (x(t)),让你画出 (x(-2t+1)) 这种综合变换后的波形。很多同学不是不懂“尺度、时移、反转”三个概念,而是顺序一复杂就画错。有些时候是先平移还是先压缩,有些题目又带着负号需要反转,三步混在一起,画出来的图形要么左右颠倒,要么整体偏移了一个单位,白白丢掉一整道题的分数。
2024 年成都信息工程大学信号与系统科目第 2 大题第 1 小题,考的就是这个知识点:信号的尺度、时移、反转综合变换作图。这道题本身不复杂,但它把第一章最核心的三种基本运算组合在一起,非常能检验考生对“自变量变换”的理解到底停留在背口诀,还是真正掌握了图形背后的映射关系。
这篇文章不打算让你去背“先压缩再平移”还是“先平移再压缩”那套容易混的顺序,而是提供一套更稳的做法:关键点映射法。把每一步都变成简单的算术运算,不需要靠直觉猜方向,画完还能快速检验。下面我会把方法拆开讲,并用一道题型和难度与成信大 2.1 一致的典型题做完整演示。原题的具体波形以你手上的卷面为准,只要把示例中的函数替换成原题信号,步骤完全一样。
1. 这道题到底在考什么
先明确一个判断:信号变换作图题,在信号与系统考研中属于“性价比极高”的基础题型。它通常出现在选择题、填空题或大题的第一小问,难度不大,但一旦考到,绝大多数考生都能拿分。也正因为大家都觉得简单,反而容易因为粗心、顺序混乱、方向判断错误而丢分。
成都信息工程大学 2024 年这道 2.1 题,本质上考察的是连续时间信号的基本运算。这是信号与系统第一章“信号与系统概述”里的核心内容,属于整个学科的地基。很多同学第一章学得很快,觉得不过是“平移、压缩、反转”几个词,结果到了后面学卷积、傅里叶变换、拉普拉斯变换时,才发现自己连波形变换都不够熟练,做题速度被拖慢不少。
从考试角度看,这类题目主要考查三件事:
- 是否理解时移对波形位置的影响。
- 是否理解尺度变换对波形宽度的压缩和拉伸。
- 是否理解负号带来的反转,以及当多个变换叠加时,它们之间的相互影响。
换句话说,题目表面上是画图,实际上是在考“复合函数”的自变量关系。你如果只记住“左加右减”“压缩二倍”这些零散结论,遇到 (x(-2t+1)) 这种形式就会开始犹豫:负号会不会让压缩方向改变?这个常数 +1 到底该左移还是右移?移动量是 1 还是 0.5?
这些问题用“背口诀”的方式很难稳定答对。正确的思路是回到变换的本质:所有对波形的操作,都是对自变量 (t) 做了一次线性替换。理解了这一点,整道题就从“玄学画图”变成了“代数计算”。
这道题最适合哪类读者?
- 正在准备信号与系统考研,需要系统梳理第一章基础题型的同学。
- 学完信号与系统但波形变换不熟练,反复在“先平移还是先尺度”上出错的本科生。
- 需要给学弟学妹讲题,或者想找一套清晰教学思路的读者。
无论你属于哪一类,下面这个方法都能让你在做这类题时少走很多弯路。
2. 三种基本变换与常见的顺序陷阱
先快速回顾三种基本变换,因为后面所有综合变换,都是这三种变换的叠加。
2.1 时移:方向为什么容易记反
时移的表达式是:
[ x(t) \rightarrow x(t + b) ]
当 (b > 0) 时,波形向左移动 (b) 个单位;当 (b < 0) 时,波形向右移动 (|b|) 个单位。这就是很多人常说的“左加右减”。
但这里要注意,这个规律只在单独做时移时成立。一旦和尺度变换结合,很多人就会把“x(t+1) 左移 1”和“x(2t+1) 中常数项是 1,所以左移 1”搞混。事实上,在 (x(2t+1)) 里,常数项 1 对应的移动量并不是 1,而是 (\frac{1}{2})。
原因很简单:真正对波形位置起决定作用的,是当整个自变量等于多少时,信号取到某个特征值。比如原始信号在 (t=0) 处有一个峰值,那么 (x(2t+1)) 的峰值出现在 (2t+1=0),也就是 (t=-0.5) 处。这时候移动量是 0.5,而不是 1。
很多同学第一次意识到这一点时都会觉得“那左加右减不是没用了吗”。其实不是没用,而是需要先把表达式整理成标准形式,才能套方向判断。
2.2 尺度:压缩还是拉伸
尺度变换的表达式是:
[ x(t) \rightarrow x(at) ]
当 (|a| > 1) 时,波形在时间轴上被压缩到原来的 (\frac{1}{|a|});当 (0 < |a| < 1) 时,波形被拉伸到原来的 (\frac{1}{|a|}) 倍。
这里最容易犯的错误是:把“压缩两倍”理解成“图形缩小到原来的一半,所以横坐标都乘 0.5”还是“横坐标都除以 0.5”。正确的理解是,如果一个特征点原来在 (t_0),变换后它在新的时间轴上满足 (a t' = t_0),即:
[ t' = \frac{t_0}{a} ]
所以 (x(2t)) 就是把原来在 (t=1) 处的特征点移动到 (t=0.5) 处,宽度变为原来的一半。这个“除以系数”的关系,在后面综合变换里会反复用到。
2.3 反转:负号出现在哪里
反转的表达式是:
[ x(t) \rightarrow x(-t) ]
效果是把波形关于纵轴做镜像折叠。原来在 (t=1) 处的点会跑到 (t=-1) 处,原来在 (t=-2) 处的点会跑到 (t=2) 处。
反转单独出现时很好理解,但一旦与尺度变换结合,例如 (x(-2t)),不少同学会疑惑:是先把波形关于纵轴反转再压缩,还是先压缩再反转?
其实两种顺序结果一样。因为反转和尺度都是对自变量进行线性变换,它们之间是可交换的。换句话说,(x(-2t)) 既可以理解为“先压缩二倍得到 (x(2t)),再反转得到 (x(-2t))”,也可以理解为“先反转得到 (x(-t)),再压缩二倍”。最终波形完全一致。
真正容易出问题的是反转与“时移”结合,因为时移和尺度不是总能交换的。
2.4 综合变换的顺序问题
现在看综合形式:
[ y(t) = x(at + b) ]
以 (x(-2t+1)) 为例。很多同学会纠结:是先做反转压缩,再做时移;还是先做时移,再做反转压缩?两种路线都能画出正确答案,但中间步骤的“移动量”完全不同。
路线 A:先做尺度反转,再做时移。
先把 (x(-2t+1)) 改写成:
[ x(-2t+1) = x\left(-2\left(t - \frac{1}{2}\right)\right) ]
意思是,先由 (x(t)) 得到 (x(-2t)),然后整体右移 0.5。注意这里移动量是 0.5,不是 1。
路线 B:先做时移,再做尺度反转。
先由 (x(t)) 得到 (x(t+1)),再把自变量 (t) 替换成 (-2t),得到 (x(-2t+1))。这条路线里,初始时移量是 1,但由于之后做了尺度和反转,最终波形的位置需要通过解方程来确认。
两条路线都正确,但如果你没有完全理解每一步对自变量造成的影响,很容易在“移动方向”或“移动量”上出错。
更稳妥的办法,绕开顺序问题,直接通过关键点映射来画图。这就是下一节要讲的核心方法。
3. 关键点映射法:不背顺序也能画对
3.1 核心公式
设原始信号为 (x(t)),变换后信号为:
[ y(t) = x(at + b) ]
如果原始信号里某个关键点坐标为 ((t_0, x_0)),那么在变换后的信号中,这个点对应的新横坐标 (t') 满足:
[ a t' + b = t_0 ]
解得:
[ t' = \frac{t_0 - b}{a} ]
纵坐标保持不变,仍然是 (x_0)。
这就是关键点映射法的全部原理。它不关心“先平移还是先压缩”,只关心“原始位置 (t_0) 经过变换后跑到了哪里”。
3.2 操作步骤
具体操作可以分为五步:
第一步:确定原始信号的关键点。包括所有线段的端点、转折点、峰值点、零点、不连续点。对这些点逐一记录横坐标和纵坐标。
第二步:提取参数 (a) 和 (b)。把目标表达式写成 (x(at+b)) 的标准形式。例如 (x(-2t+1)),则 (a=-2, b=1)。
第三步:用公式 (t' = \frac{t_0 - b}{a}) 计算每个关键点的新横坐标。这一步是纯算术运算,基本不会错。
第四步:在新坐标系中依次标出映射后的点,横坐标用 (t'),纵坐标不变。
第五步:按照原信号中关键点的连接顺序,把新点连接起来。原信号是直线段就连直线段,原信号是曲线就按曲线趋势连接。
3.3 为什么纵坐标不用变
很多同学会问:变换后波形被压缩、反转、平移,为什么纵坐标完全不变?
因为 (y(t) = x(at+b)) 只改变了“自变量”的取值,并没有对信号的幅度做任何乘法操作。所谓压缩和拉伸,是波形在时间轴上的投影变窄或变宽,但每个特征点对应的函数值 (x_0) 是不变的。
如果题目里还出现了幅度系数,比如 (y(t) = 2x(-2t+1)),那么纵坐标要在关键点映射的基础上再乘 2。但在成信大这类基础作图题中,通常只考察自变量变换,纵坐标保持原值不变。
这个结论很重要,可以直接减少一半的计算量。
4. 典型例题精讲:以 (x(-2t+1)) 为例
这一节用一道典型题把完整过程走一遍。为了演示清晰,假设原始信号是一个三角脉冲:
[ x(t) = \begin{cases} 1 - |t|, & -1 \le t \le 1 \ 0, & \text{其他} \end{cases} ]
它的波形是一条在 (t=-1) 和 (t=1) 处为 0、在 (t=0) 处达到峰值 1 的等腰三角形。这道题与成信大 2.1 的题型一致,思路可以直接套用到原题。
目标:画出 (y(t) = x(-2t+1)) 的波形。
4.1 提取变换参数
对照标准形式 (x(at+b)),得到:
[ a = -2, \quad b = 1 ]
因为 (a) 是负数,所以信号会发生反转;因为 (|a|=2 > 1),所以信号会被压缩到原来宽度的一半。这两个判断先放在心里,后面用关键点计算来验证。
4.2 列出全部关键点
三角脉冲的关键点有 3 个:
- 左端点:((-1, 0))
- 峰值点:((0, 1))
- 右端点:((1, 0))
当然,如果你希望更严谨,可以在两端之外各取一个零值点,比如 ((-2,0)) 和 ((2,0)),但画图时只需要连接端点和峰值即可。
4.3 映射新横坐标
代入公式 (t' = \frac{t_0 - b}{a}),其中 (a=-2, b=1)。
第一个点 ((t_0=-1, x_0=0)):
[ t' = \frac{-1 - 1}{-2} = 1 ]
映射后为 ((1, 0))。
第二个点 ((t_0=0, x_0=1)):
[ t' = \frac{0 - 1}{-2} = 0.5 ]
映射后为 ((0.5, 1))。
第三个点 ((t_0=1, x_0=0)):
[ t' = \frac{1 - 1}{-2} = 0 ]
映射后为 ((0, 0))。
整理一下:
| 原信号关键点 | 对应新信号关键点 |
|---|---|
| ((-1, 0)) | ((1, 0)) |
| ((0, 1)) | ((0.5, 1)) |
| ((1, 0)) | ((0, 0)) |
这组结果说明什么?原来的三角形支撑区间是 ([-1, 1]),宽度为 2;变换后的支撑区间是 ([0, 1]),宽度为 1。正好压缩了一半,符合 (|a|=2) 的预期。同时,原来最右边的点 (t=1) 跑到了最左边 (t=0),原来最左边的点跑到最右边,这就是反转的体现。
4.4 先用支撑区间做整体检验
在连线之前,可以先做一个整体检验:原始信号的非零区间是 ([-1, 1]),也就是要求:
[ -1 \le -2t + 1 \le 1 ]
先解左边:
[ -2t + 1 \ge -1 \Rightarrow -2t \ge -2 \Rightarrow t \le 1 ]
再解右边:
[ -2t + 1 \le 1 \Rightarrow -2t \le 0 \Rightarrow t \ge 0 ]
所以变换后信号的非零区间是 ([0, 1])。宽度正好是 1,也就是原宽度 2 的一半。
这个检验非常快,建议每次画完都算一遍。如果支撑区间都不对,那后面的图形一定有问题。
4.5 两种路径对比
再回到前面讨论的“顺序”问题。现在有了关键点的结果,可以验证两种变换路径:
路径一:先做尺度反转。
由 (x(t)) 得到 (x(-2t))。此时支撑区间为 ([-0.5, 0.5]),峰值仍在 (t=0) 处。再把 (x(-2t)) 变成 (x(-2(t-0.5))),整体右移 0.5,得到支撑区间 ([0, 1]),峰值在 (t=0.5)。这与关键点映射结果一致。
路径二:先做时移。
由 (x(t)) 得到 (x(t+1)),支撑区间为 ([-2, 0]),峰值在 (t=-1)。再把自变量 (t) 替换成 (-2t),得到 (x(-2t+1))。此时原来的区间 ([-2, 0]) 被映射到:
[ -2 \le -2t \le 0 \Rightarrow 0 \le t \le 1 ]
峰值原来在 (t=-1),也就是 (-2t=-1),解得 (t=0.5)。结果同样一致。
两条路径都能走通,但路径二里“时移 1”最后在图形上体现为“峰值在 0.5”,这一步很容易让新手迷糊。关键点映射法之所以稳,就是因为它直接跳过这些中间路径,一步到位算出最终位置。
5. Python 画图验证
手算完成之后,再用 Python 画一遍,既可以验证结果,也能帮助建立“波形变换后的样子”的直观印象。这一节给出完整可复现代码。
5.1 环境准备
需要安装 Python 3 以及 numpy 和 matplotlib。如果还没有安装,可以执行:
pip install numpy matplotlib建议在 Jupyter Notebook 中运行,图会直接显示在内嵌画布里;在 VS Code 或 PyCharm 中运行也可以,会弹出独立窗口。
5.2 完整绘图代码
下面的代码定义原始三角脉冲信号,然后分别画出 (x(t))、(x(t+1))、(x(-2t)) 和 (x(-2t+1)) 四个波形,方便对比每一步的变化。
import numpy as np import matplotlib.pyplot as plt # 定义原始信号:三角脉冲 x(t) = 1 - |t|, -1 <= t <= 1 def tri_pulse(t): return np.where(np.abs(t) <= 1, 1.0 - np.abs(t), 0.0) # 生成高密度时间序列 t = np.linspace(-4, 4, 2000) # 四个待绘制的信号 signals = [ ("x(t)", tri_pulse(t)), ("x(t+1)", tri_pulse(t + 1)), ("x(-2t)", tri_pulse(-2 * t)), ("x(-2t+1)", tri_pulse(-2 * t + 1)), ] # 2x2 子图 fig, axes = plt.subplots(2, 2, figsize=(10, 6)) for ax, (title, y) in zip(axes.flatten(), signals): ax.plot(t, y, linewidth=2) ax.axhline(0, color='black', linewidth=0.5) ax.axvline(0, color='black', linewidth=0.5) ax.grid(True, linestyle='--', alpha=0.6) ax.set_title(title) ax.set_xlabel('t') ax.set_ylabel('x(t)') plt.tight_layout() plt.show()运行这段代码后,第二行第一列是 (x(-2t)),第二行第二列是 (x(-2t+1))。观察 (x(-2t)):支撑区间为 ([-0.5, 0.5]),峰值在 0 处;再看 (x(-2t+1)),支撑区间变为 ([0, 1]),峰值移动到 0.5。这就验证了手算结果。
5.3 关键点自动计算
如果你不想每次都盯着图数坐标,可以写一个小脚本,直接输出关键点的映射结果。
# 原始信号的关键点,格式为 (t0, x0) key_points = [(-1, 0), (0, 1), (1, 0)] # 变换参数:y(t) = x(at + b) a, b = -2, 1 print("原始关键点 -> 变换后关键点") for t0, val in key_points: t_new = (t0 - b) / a print(f"({t0}, {val}) -> ({t_new:.2f}, {val})")输出结果:
原始关键点 -> 变换后关键点 (-1, 0) -> (1.00, 0) (0, 1) -> (0.50, 1) (1, 0) -> (0.00, 0)这个脚本可以作为通用模板。以后遇到其他信号,只要修改key_points列表和a, b两个参数即可。
5.4 支撑区间校验
再写一段脚本,用来快速算变换后的支撑区间。
# 原始信号支撑区间 [L, R] L, R = -1, 1 # 变换参数 a, b = -2, 1 # 对新支撑区间端点做映射 x1 = (L - b) / a x2 = (R - b) / a new_L, new_R = min(x1, x2), max(x1, x2) print(f"原支撑区间: [{L}, {R}]") print(f"新支撑区间: [{new_L:.2f}, {new_R:.2f}]") print(f"原宽度: {R - L},新宽度: {new_R - new_L:.2f}")输出结果:
原支撑区间: [-1, 1] 新支撑区间: [0.00, 1.00] 原宽度: 2,新宽度: 1.005.5 怎样判断画对了
画完图或手算完之后,用三条标准快速自查:
- 支撑区间是否满足 (-1 \le at+b \le 1) 的推导结果。
- 峰值点是否满足 (at_p + b = 0),其中 (t_p) 是原信号峰值位置。例如本题 (t_p=0),则 (-2t+1=0 \Rightarrow t=0.5)。
- 关键点的纵坐标是否都与原信号一致。如果题目没有幅度缩放,纵坐标不应该发生任何变化。
三条都满足,基本可以确定图形正确。
6. 常见错误与排查方法
根据历年考生在信号变换作图题上的表现,下面这些问题出现频率最高,也最有代表性。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 画出来的图形左右颠倒了 | 忽略了 (a<0) 时的反转 | 检查 (a) 的符号 | 看到负号先做整体反转,再检查关键点位置 |
| 整体平移方向反了 | 混淆了 (x(t+b)) 在 (b>0) 时左移的规律 | 代入峰值点验证移动方向 | 用关键点映射法定位置,不依赖“左加右减” |
| 移动量算错 | 把 (x(2t+1)) 的移动量当成 1 | 将表达式改写成 (x(a(t+\frac{b}{a}))) | 先提取 (a),再判断移动量和方向 |
| 支撑区间宽度不对 | 压缩比例计算错误 | 用 (-1 \le at+b \le 1) 重新解不等式 | 新宽度 = 原宽度 ÷ |a| |
| 只画了峰值,遗漏端点 | 只关注了最高点 | 检查原信号所有拐点、端点、零点 | 把所有关键点全部列出并映射 |
| 曲线趋势连接错误 | 原信号是折线,映射后按曲线画 | 对比原信号线段顺序 | 保持原信号关键点的连接顺序不变 |
在这些错误里,最值得单独强调的就是“移动量算错”。很多同学看到 (x(-2t+1)),觉得常数项是 +1,图形应该左移 1。但结合关键点映射可以发现,原始峰值 (t=0) 映射到新位置是 (t=0.5),也就是右移了 0.5。真正决定移动方向和大小的,是 (t' = \frac{t_0-b}{a}) 这个关系,而不是简单地看常数项。
7. 考场答题规范与技巧
同样的知识点,为什么有人能拿满分,有人只能拿一半分?问题往往出在答题过程的呈现方式上。下面整理几个考场上的实用建议。
7.1 答题步骤模板
建议按照下面的格式书写,既清晰又能让阅卷老师一眼看到你的思路。
第一步,写出变换表达式并提取参数:
[ y(t) = x(-2t+1), \quad a=-2, \quad b=1 ]
第二步,列出原始信号关键点:
[ (-1, 0), \quad (0, 1), \quad (1, 0) ]
第三步,用公式计算映射后的点:
[ t' = \frac{t_0 - b}{a} = \frac{t_0 - 1}{-2} ]
第四步,在新坐标轴上标点连线。
7.2 给分点在哪里
从阅卷角度看,这类作图题的给分点通常包括:
- 是否写出变换表达式和参数。
- 是否画出正确的支撑区间。
- 是否标出关键点的坐标。
- 最终波形形状是否正确。
哪怕最后波形画得不够完美,只要关键点标对了,通常也能拿到大部分步骤分。所以考场上一定不要空着不写,哪怕只算出支撑区间,也要标在图上。
7.3 特殊信号的处理
如果原始信号不是三角波,而是矩形脉冲、阶跃信号或冲激信号,关键点映射法依然适用,但要注意两点:
- 矩形脉冲:重点关注左右跳变点的位置,映射后保持跳变方向不变。
- 单位冲激:冲激的位置由 (a t' + b = 0) 解出,冲激强度不变。例如 (\delta(-2t+1) = \frac{1}{2}\delta(t-0.5)),这里涉及冲激的尺度性质,考研中常考,需要单独记忆。
7.4 考前一分钟检查
画完图形后,用一分钟做两个快速检查:
- 原信号宽度为 2,变换后宽度是否为 1?如果宽度没有变化,说明尺度变换没做对。
- 原信号峰值在 (t=0),变换后峰值是否在 (t=0.5)?如果位置不对,说明时移或反转方向有问题。
这两个检查只需要口算,但能挡住绝大多数低级失误。
8. 总结与后续建议
综合变换作图题,本质上是一道“用代数方法解决图形问题”的题目。不要依赖“先平移还是先压缩”的口诀,也不要靠直觉猜方向。掌握关键点映射法之后,这类题就从“需要空间想象力”变成了“带公式计算”,得分稳定性会明显提升。
把今天的方法浓缩成一句话:对 (y(t) = x(at+b)),原信号每个关键点 ((t_0, x_0)) 映射到新位置 ((\frac{t_0-b}{a}, x_0))。
如果你正在以成信大或其他院校的信号与系统考研真题为目标,建议把第一章所有涉及波形变换的题都集中刷一遍。每次做题都严格按“列关键点、套公式、标点连线、区间校验”四步走,不要跳步。练熟之后,这类题在考场上就是纯送分题。
下一步,可以继续关注卷积的图形化计算、傅里叶变换的尺度性质,以及冲激信号的尺度变换。这些内容都建立在波形变换的基础上,把这一题吃透,后面的学习会顺畅很多。
