每位学习“信号与系统”的同学,遇到“已知 f(t) 的波形,求 f(1-2t) 或 f(-2t+1) 并作图”这类题目时,多少都会紧张一下。原因倒不是题目本身有多难,而是三种基本运算——尺度变换、时移、反转——叠加在一起后,大家经常搞不清楚“先平移还是先压缩”“反转之后区间怎么算”。2024 年成都信息工程大学信号与系统真题第 2.1 题考查的正是这类综合变换作图。本文以该类高频题型为例,把从数学推导到波形绘制的完整流程拆开讲清楚,适合考研复习、期末备考以及正在学习信号与系统课程的同学参考。
1. 背景与核心概念
1.1 什么是信号的尺度、时移、反转综合变换
在信号与系统中,我们经常需要根据已知信号 f(t) 的波形,画出经过自变量变换后的信号波形。最常见的基本变换有三种:
- 时移:f(t) → f(t - t₀),表示波形在时间轴上整体平移。
- 反转:f(t) → f(-t),表示波形关于纵轴做镜像翻转。
- 尺度变换:f(t) → f(at),表示波形在时间轴上被压缩或扩展。
当题目要求画出 f(1 - 2t)、f(-2t + 1)、f(3t + 2) 这类信号时,实际上就是同时使用了上述两种甚至三种运算。这类题的难点不在于单个变换,而在于多个变换的复合顺序:顺序不同,中间过程的波形不同,但最终结果必须一致。
1.2 为什么综合变换题总有人做错
很多同学在初学阶段会凭“感觉”作图:看到系数 2 就认为是压缩,看到 +1 就认为是左移。但实际操作时,经常会得到完全错误的波形。根本原因可以总结为三点。
第一,对“谁在变”理解不深。 y(t) = f(1 - 2t) 中,真正的时间变量是 t,而 1 - 2t 是整个表达式替换掉了原函数 f 的自变量。我们不是直接平移 f(t),而是把 t 这个变量先做了反转、尺度、时移后再送入 f。
第二,分不清“先平移再压缩”和“先压缩再平移”的区别。以 f(1 - 2t) 为例,它可以写成 f[-2(t - 1/2)],也可以写成 f[-(2t - 1)]。不同写法对应不同的作图顺序,但最终图像是同一个。很多同学只记住零散的“左加右减、压缩扩展”口诀,却没有掌握统一的自变量替换方法。
第三,关键点坐标算错。波形图本质上是由一些关键点(端点、折点、跳变点)连接而成的。只要这些点的横坐标计算正确,波形形状就不会错。但同学们往往忽略“新的横坐标求解”这一步,直接靠肉眼推测,自然容易出错。
1.3 本文要解决什么问题
本文围绕“已知 f(t) 波形,求 f(1 - 2t) 并作图”这类题型,梳理一套完整的求解方法。这套方法不仅适用于本例题,也适用于任意形如 f(at + b) 的信号变换。文章会先讲清楚三种基本变换的本质,再给出可复用的“关键点法”,最后用 2024 年成都信息工程大学 2.1 这类的真题题型做完整演示,并附上 Python 数值验证代码。
2. 环境准备与工具说明
2.1 手写作图需要的工具
考试和作业场景下,我们通常不需要任何软件,只需要:
- 草稿纸和铅笔;
- 直尺(用于画坐标轴和坐标网格);
- 一块好用的橡皮。
虽然工具简单,但做题时建议养成“先推导、后作图”的习惯。不要上来就画波形,而是先把关键点的坐标变换关系写清楚,再动笔连线。
2.2 用 Python 做数值验证的环境
如果希望在课后验证自己的手绘结果是否正确,可以使用 Python 配合 NumPy 和 Matplotlib 画图。推荐环境如下:
- 操作系统:Windows / macOS / Linux 均可;
- Python:建议 3.8 及以上版本;
- 第三方库:numpy、matplotlib。
版本需要根据你的项目实际情况调整,本文示例以常见环境为例,重点演示配置思路。如果你本机还没安装相关库,可以在命令行执行:
pip install numpy matplotlib2.3 示例项目结构
本文的 Python 验证部分只需要一个脚本文件,项目结构非常简单:
signal_transform/ ├── plot_signal.py # 绘制 f(t) 与 f(1-2t) 的对比图 └── requirements.txt # 依赖说明,可选如果你只是在 Jupyter Notebook 中运行,那连项目结构都不需要,直接在一个 cell 中写代码即可。下面我们在第 4 节给出完整可运行的 Python 脚本。
3. 核心方法:关键点法求解信号变换
3.1 关键点法的基本思想
“关键点法”的思路非常简单:
- 找到原信号 f(t) 波形上的所有关键横坐标,例如折点、端点、跳变点;
- 代入变换关系式,求出这些关键点在新信号中的横坐标;
- 保持每个关键点对应的函数值不变,在新坐标系中重新连线。
为什么关键点法有效?因为绝大多数信号与系统课程中的作图题,给出的都是分段折线信号。这类信号可以完全由少数几个关键点确定。只要关键点的位置准确,折线连接后波形自然正确。
例如原信号 f(t) 的关键点为 t = -1, 0, 1, 2,要画 y(t) = f(1 - 2t),只需要求解方程:
1 - 2t = -1 1 - 2t = 0 1 - 2t = 1 1 - 2t = 2得到新的横坐标,再把原函数值一一对应地搬过来即可。
3.2 三种基本变换的本质
在运用关键点法之前,必须先理解三种基本变换的本质。
先看时移。 y(t) = f(t - t₀) 表示把 f(t) 的波形整体向右平移 t₀ 个单位(t₀ > 0 时)。这里的“右移”是相对于 t 轴而言的,验证方法很简单:原信号在 t = 0 处的值,会移动到 t = t₀ 处,因为令 t - t₀ = 0,解得 t = t₀。
再看反转。 y(t) = f(-t) 表示把 f(t) 的波形关于纵轴翻转。原信号在 t = 1 处的值,会移动到 t = -1 处,因此左右完全镜像。
最后看尺度变换。 y(t) = f(at) 的压缩或扩展取决于 |a| 的大小:
- |a| > 1 时,波形在时间轴上被压缩;
- 0 < |a| < 1 时,波形在时间轴上被扩展;
- a < 0 时,除了压缩/扩展,还伴随反转。
举一个最小例子:若 f(t) 是一个在 [0, 2] 上的三角波,那么 f(2t) 的波形会压缩在 [0, 1] 上;而 f(t/2) 的波形会扩展到 [0, 4] 上。
3.3 综合变换的统一推导方式
对于 y(t) = f(1 - 2t),可以令中间变量 u = 1 - 2t。此时 y(t) = f(u)。反解出:
u = 1 - 2t t = (1 - u) / 2利用这个关系式,原信号 u 的每一个关键点都可以映射到新坐标 t。例如原信号在 u = -1 处取值 0,代入 t = (1 - u)/2 得到 t = 1,说明新信号在 t = 1 处取值为 0。
这种“代入反解”的方式是求解所有信号变换题的通用方法。它不依赖“先平移还是先压缩”的直觉,只要会解一元一次方程,就能算对所有关键点。
3.4 区间端点与跳变点的处理
如果原信号包含矩形脉冲或阶跃跳变,那么除了折点,还要关注跳变点的位置。跳变点同样使用上述反解公式求新坐标,但要注意:
- 函数值保持原样时,跳变方向不变;
- 如果两个关键点在新坐标下发生了顺序颠倒(例如原信号从左到右是 A、B、C,新信号从左到右变成 C、B、A),说明整体波形发生了反转,连线顺序也要跟着反转;
- 跳变点如果被压缩到同一点,需要单独判断是否出现重叠。
4. 完整实战:以 2024 年成都信息工程大学 2.1 题题型为例
4.1 题目条件与波形
2024 年成都信息工程大学信号与系统真题第 2.1 题考查的就是尺度、时移、反转综合变换作图,具体风格为:已知信号 f(t) 的波形,画出 f(1 - 2t) 的波形。这里我们采用与该题型完全一致的同构题作为演示。
已知 f(t) 的波形如图 1 所示(用 ASCII 简图表示):
f(t) 1 | ________ | / \ 0 |_____/ \_____ +----+----+----+----+----> t -1 0 1 2 3对应的分段函数表达式为:
⎧ t + 1, -1 ≤ t < 0 f(t) = ⎨ 1, 0 ≤ t ≤ 1 ⎩ -t + 2, 1 < t ≤ 2也就是说,原信号 f(t) 是一个上升段、平顶段、下降段组成的折线波形,定义在 t ∈ [-1, 2] 上。关键点为:
| 关键点编号 | 横坐标 u | 函数值 f(u) |
|---|---|---|
| A | -1 | 0 |
| B | 0 | 1 |
| C | 1 | 1 |
| D | 2 | 0 |
现在要求画出 y(t) = f(1 - 2t) 的波形。为了与手写步骤对应,下面同时给出两条等价作图路径。
4.2 路径一:先反转、再尺度、后时移
路径一的思路是把 f(1 - 2t) 改写成 f[-2(t - 1/2)]。从内向外拆解:
f(t) → f(-t) → f(-2t) → f(-2(t - 1/2))第一步:反转。 f(t) → f(-t)。
原信号定义域 [-1, 2],反转后定义域变为 [-2, 1]。上升段变为下降段,下降段变为上升段。关键点坐标变为:
| 原坐标 u | 新坐标 -u | 函数值 |
|---|---|---|
| -1 | 1 | 0 |
| 0 | 0 | 1 |
| 1 | -1 | 1 |
| 2 | -2 | 0 |
第二步:尺度压缩。 f(-t) → f(-2t)。
横坐标整体除以 2(注意这里是针对自变量 t 的压缩,系数绝对值 2 表示波形压缩为原来的一半)。定义域由 [-2, 1] 变为 [-1, 0.5]。关键点坐标变为:
| 上一步坐标 v | 新坐标 v/2 | 函数值 |
|---|---|---|
| 1 | 0.5 | 0 |
| 0 | 0 | 1 |
| -1 | -0.5 | 1 |
| -2 | -1 | 0 |
第三步:时移。 f(-2t) → f(-2(t - 1/2))。
这里要特别小心: f(-2(t - 1/2)) = f(-2t + 1),所以需要对自变量整体加上 1/2,等价于波形向右平移 1/2 个单位。定义域由 [-1, 0.5] 变为 [-0.5, 1]。关键点坐标最终变为:
| 上一步坐标 w | 新坐标 w + 0.5 | 函数值 |
|---|---|---|
| 0.5 | 1 | 0 |
| 0 | 0.5 | 1 |
| -0.5 | 0 | 1 |
| -1 | -0.5 | 0 |
因此最终 y(t) = f(1 - 2t) 的定义域为 t ∈ [-0.5, 1],波形从 (-0.5, 0) 上升,经过 (0, 1) 和 (0.5, 1) 的平顶,再下降到 (1, 0)。
4.3 路径二:先时移、再尺度、后反转
路径二的思路是把 f(1 - 2t) 改写成 f[-(2t - 1)]。从内向外拆解:
f(t) → f(t - 1) → f(2t - 1) → f(1 - 2t)第一步:时移。 f(t) → f(t - 1)。
原信号整体右移 1 个单位,定义域由 [-1, 2] 变为 [0, 3]。关键点坐标变为:
| 原坐标 u | 新坐标 u + 1 | 函数值 |
|---|---|---|
| -1 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 2 | 1 |
| 2 | 3 | 0 |
第二步:尺度压缩并反转(即整体乘以 2 再取负)。 f(t - 1) → f(2t - 1)。
为什么是“乘以 2 再取负”?因为 f(1 - 2t) = f(-(2t - 1)),而 f(2t - 1) 是原始信号自变量乘以 2 后平移 -1 的结果。这一步是先把上一步的坐标乘以 2,再整体反转。
上一步的关键点为 t = 0, 1, 2, 3。先做尺度乘以 2:坐标变为 0, 2, 4, 6;再做反转取负:坐标变为 0, -2, -4, -6。此时得到的信号是 f(-2t) 还是 f(-2t?) 需要仔细核验。
实际上,更严谨的拆法是:
f(t) → f(2t) → f(2t - 1) → f(1 - 2t)但这样拆解时, f(2t - 1) 变成 f(1 - 2t) 的过程是“自变量取负并加 1”,同样容易混淆。为了减少中间过程的认知负担,这里推荐使用 4.2 节的路径一,或者直接使用下一小节的关键点法。
4.4 关键点法直接求解
如果觉得分步作图太绕,可以直接使用关键点法,一步到位。
目标:已知 f(u) 的关键点为 u = -1, 0, 1, 2,求 y(t) = f(1 - 2t)。
令:
u = 1 - 2t t = (1 - u) / 2逐个代入:
| 原关键点 u | 原函数值 f(u) | 新坐标 t = (1-u)/2 |
|---|---|---|
| -1 | 0 | (1+1)/2 = 1 |
| 0 | 1 | (1-0)/2 = 0.5 |
| 1 | 1 | (1-1)/2 = 0 |
| 2 | 0 | (1-2)/2 = -0.5 |
将新坐标从小到大排列:
| 新坐标 t | 函数值 |
|---|---|
| -0.5 | 0 |
| 0 | 1 |
| 0.5 | 1 |
| 1 | 0 |
可以看到,新波形在 t ∈ [-0.5, 1] 上有定义,从左到右依次经过 (-0.5, 0) → (0, 1) → (0.5, 1) → (1, 0)。这恰好是原信号先反转、再压缩 2 倍的结果。手绘波形如下:
y(t) = f(1-2t) 1 | _______ | / \ 0 |__/ \___ +----+----+----+----+----> t -0.5 0 0.5 1 1.5需要特别提醒的是:这里“新坐标从小到大排列”这一步很关键。因为 u = 1 - 2t 是 t 的减函数,所以原信号从左到右的 A、B、C、D 点,对应到新信号中会变成从右到左的 D、C、B、A 点。如果忽略排序,就会把波形画反。
4.5 用 Python 绘制验证
为了验证手绘结果,我们可以用 Python 画出 f(t) 和 y(t) = f(1 - 2t) 的对比图。完整代码如下:
# 文件路径:signal_transform/plot_signal.py import numpy as np import matplotlib.pyplot as plt # 定义原始信号 f(t) def f(t): # 默认输出 0,避免区间外出现意外值 out = np.zeros_like(t) # 上升段:-1 <= t < 0 cond1 = (t >= -1) & (t < 0) # 平顶段:0 <= t <= 1 cond2 = (t >= 0) & (t <= 1) # 下降段:1 < t <= 2 cond3 = (t > 1) & (t <= 2) out = np.where(cond1, t + 1, out) out = np.where(cond2, 1.0, out) out = np.where(cond3, -t + 2, out) return out # 生成时间轴 t = np.linspace(-2, 3, 2000) # 原始信号 y_orig = f(t) # 变换后的信号 y(t) = f(1 - 2t) y_new = f(1 - 2 * t) # 绘图 plt.figure(figsize=(10, 4)) plt.subplot(1, 2, 1) plt.plot(t, y_orig, linewidth=2) plt.title('Original Signal $f(t)$') plt.xlabel('t') plt.ylabel('f(t)') plt.grid(True) plt.axhline(0, color='black', linewidth=0.8) plt.axvline(0, color='black', linewidth=0.8) plt.xlim(-2, 3) plt.ylim(-0.2, 1.5) plt.subplot(1, 2, 2) plt.plot(t, y_new, linewidth=2, color='red') plt.title('Transformed Signal $f(1-2t)$') plt.xlabel('t') plt.ylabel('y(t)') plt.grid(True) plt.axhline(0, color='black', linewidth=0.8) plt.axvline(0, color='black', linewidth=0.8) plt.xlim(-2, 3) plt.ylim(-0.2, 1.5) plt.tight_layout() plt.show()运行这段代码后,会得到两个子图。左图是原始信号 f(t),右图是变换后的 f(1 - 2t)。右图中可以看到,波形定义域变为 [-0.5, 1],且从左到右先上升、再平顶、后下降,与手绘结果完全一致。
4.6 结果说明与验证
除了画图,我们还可以选取几个特殊点做数值验证,确保变换关系无误。
验证点 1:t = 0。
y(0) = f(1 - 2×0) = f(1) = 1验证点 2:t = 0.75。
y(0.75) = f(1 - 1.5) = f(-0.5) = -0.5 + 1 = 0.5验证点 3:t = 1。
y(1) = f(1 - 2) = f(-1) = 0验证点 4:t = -0.5。
y(-0.5) = f(1 - 2×(-0.5)) = f(2) = 0这些特殊点与前面表格中的关键点完全吻合。由此可以确定,关键点法的计算结果是正确的。
5. 常见错误与排查思路
5.1 最容易错的三个地方
综合变换作图题的错误通常集中在三个环节。
第一,时移方向搞反。很多人看到 f(1 - 2t) 中的 +1,就认为波形应该左移。实际上,如果写成 f[-2(t - 1/2)],可以看到对 t 而言是减 1/2,对应右移 1/2 个单位。不要只看括号内常数项的符号,要统一写成 f[a(t - t₀)] 的形式后再判断。
第二,先平移再压缩时,平移量没有跟着缩放。例如从 f(t) 到 f(2t - 1),如果一开始先平移 1 个单位,再压缩 2 倍,得到的是 f(2(t - 1)) = f(2t - 2),这并不等于 f(2t - 1)。正确的拆法是先压缩成 f(2t),再右移 1/2 个单位,得到 f(2(t - 1/2)) = f(2t - 1)。
第三,忘了反转会导致关键点排序变化。当变换关系式中 t 的系数为负时,原信号从左到右的关键点在新信号中会从右到左排列。很多同学在关键点法中算出了所有新坐标,但没有重新排序,直接按原顺序连线:把本应出现在右侧的点画到了左侧,最后整体镜像错误。
5.2 错误现象与修正对照表
下面给出几种常见错误现象、可能原因和解决思路。
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 波形左右颠倒 | 忽视了负系数引起的反转 | 计算出新坐标后按横坐标从小到大重新排序 |
| 定义域范围不对 | 时移和尺度变换顺序搞混 | 将式子统一写成 f[a(t - t₀)] 的形式再作图 |
| 平顶段宽度错误 | 只压缩没平移,或只平移没压缩 | 用关键点法逐个代入,求每个关键点的新坐标 |
| 函数值对不上 | 代入时把 u 和 t 搞混 | 明确 y(t)=f(u),u=g(t),先求反函数 t=g⁻¹(u) |
| 端点刚好落下但折点错误 | 漏掉了某个转折点 | 检查原波形所有折点,并确认定义域边界 |
5.3 手写作图自检清单
做完一道题后,推荐按下面的清单检查:
- 是否列出了原信号的所有关键点(端点、折点、跳变点)?
- 是否将每个关键点代入反解公式,求出了新横坐标?
- 是否将新横坐标从小到大重新排序?
- 是否保留了每个关键点对应的函数值?
- 最终定义域是否与题目要求一致?
- 是否用 1 到 2 个特殊点做了代数验证?
- 是否检查了平顶段、上升段、下降段的方向与斜率?
6. 最佳实践与考试技巧
6.1 做题流程固定化
在考场上不要临时发挥,建议把信号变换作图题固定为四步流程。
第一步,写变换关系。先把要求的信号写成 y(t) = f(at + b) 的形式,例如 f(1 - 2t) 对应 a = -2,b = 1。
第二步,列关键点表。把原信号所有关键点的横坐标 u 和函数值 f(u) 列出来。
第三步,反解新坐标。利用 u = at + b,得到 t = (u - b)/a,逐个计算新横坐标。
第四步,排序连线。将新坐标从小到大排序,保持函数值不变,依次连线。如果原信号有跳变,用实心点和空心点分别标记起点和终点。
6.2 用代数检验代替图像直觉
图像直觉在初学时很有用,但也很容易误导。更可靠的做法是“代数检验”。
以 f(1 - 2t) 为例,任意取几个简单 t 值,比如 t = 0、t = 0.5、t = 1,计算对应的函数值,再观察手绘图中的位置是否匹配。只要特殊点对上,波形大体就不会错。
当遇到复杂信号时,甚至可以在草稿纸上列一张“点对点”映射表:
| t | 1 - 2t | f(1 - 2t) |
|---|---|---|
| -0.5 | 2 | 0 |
| 0 | 1 | 1 |
| 0.5 | 0 | 1 |
| 1 | -1 | 0 |
这种表格既能辅助作图,也能作为验证手段,比单纯靠“压缩、平移”的直觉可靠得多。
6.3 考研与期末备考的针对性建议
对于 2024 年成都信息工程大学这类“信号与系统”真题,综合变换作图通常不会单独考,而是与后续章节结合。例如:
- 与卷积结合:求两个信号的卷积时,需要先对其中一个信号做反转和平移,这本质上就是综合变换。
- 与傅里叶变换性质结合:尺度变换性质、时移性质在频域中对应着频谱的压缩与相位旋转,理解时域波形变换有助于记住频域性质。
- 与系统响应结合:输入信号经过 LTI 系统后的零状态响应,经常涉及信号的反转和时移。
因此建议备考时不要孤立地背“左加右减”,而是把变换放到系统框图中理解:自变量替换的本质是改变信号的时间尺度与观察起点。
6.4 工程信号处理中的对应意义
或许有同学会问:“这类题除了考试,工程里真的有用吗?”其实非常有意义。在雷达、通信、音频处理中,信号经常需要做时间尺度变换。例如:
- 音频变速不变调处理:本质上是时域尺度变换与频域修正的组合;
- 雷达回波的多普勒效应:回波信号相对于发射信号存在时间压缩或扩展,对应尺度变换;
- 通信系统中的码元同步:接收端需要估计发送端信号的时移量,本质是时移处理;
- 图像缩放与翻转:虽然对象是二维图像,但每一行的处理思路和一维信号的尺度、反转完全一致。
理解了这些工程背景,再看“已知 f(t) 画 f(-2t+1)”这类题,就不会觉得它只是纯数学游戏了。
7. 总结与学习路线
本文以“2024 年成都信息工程大学信号与系统真题 2.1”类题型为例,完整梳理了信号的尺度、时移、反转综合变换作图方法。核心要点如下:
- 三种基本变换中,时移改变观察起点,尺度改变时间轴比例,反转改变时间轴方向;
- 综合变换统一使用“关键点法”,把原信号关键点代入反解公式求新坐标,再排序连线;
- 遇到 f(1 - 2t) 这类表达式时,不要凭直觉判断平移方向,建议先改写成 f[-2(t - 1/2)] 的形式;
- 新横坐标计算完成后,必须从小到大重新排序,否则容易忽略反转导致的左右镜像;
- 手绘完成后,选取特殊点做代数验证,是避免低级错误最有效的方法。
下一步可以继续学习的内容包括:
- 卷积的图形化计算,其中信号反转和平移将频繁出现;
- 傅里叶变换的时移性质和尺度变换性质,建立时域与频域的对应关系;
- LTI 系统的时域分析,理解单位冲激响应与零状态响应之间的卷积关系;
- 采样定理与离散时间信号,体会连续时间尺度变换在离散系统中的对应形式。
实际做题时,优先关注三点风险:一是变换顺序,二是关键点排序,三是端点函数值的闭合性。把这三点处理好,这类题基本不会丢分。建议找教材中的中等难度习题,每天练习 3 到 5 道,熟练后可以尝试用 Python 画出原信号和变换信号进行对照,逐步建立可靠的图形直觉和代数验证能力。