这次我们来看一道典型的信号与系统考研题:信号的奇偶分解绘图。题目来源是“小马哥960题”系列里的 2025 年成都信息工程大学真题 2.2。
这类题在成信大这类学校的专业课试卷里出现频率很高,分值不大,但非常考基本功。它不要求你背复杂公式,而是要求你真正理解“偶分量 + 奇分量 = 原信号”这个分解关系,并且能把分解后的两条曲线画对、画完整。很多同学平时刷题只盯着傅里叶变换、卷积,遇到这种“画图题”反而容易丢分。
这篇文章我会从三个方面展开:先讲清楚奇偶分解的数学定义和几何意义;再给一套可用于手绘的分步画法;最后用 Python 和 MATLAB 各写一段完整代码,把任意分段线性信号拆成偶分量和奇分量,直接画出对比图。如果你正在刷 960 题,或者目标是成都信息工程大学 0854 电子与信息类专业课,建议把文末的易错点清单看完再动手画。
1. 核心能力速览:这类题到底在考什么
在展开方法之前,先给一个速览表,方便你判断这个知识点值不值得投入时间。
| 考察维度 | 说明 |
|---|---|
| 题目类型 | 信号运算与波形变换,属基础题 |
| 核心知识点 | 偶分量、奇分量定义,翻转运算,波形加减 |
| 常见出题方式 | 给出一个分段信号波形,要求画出偶分量、奇分量波形 |
| 手绘难度 | 中等偏低,但容易在边界点和阶跃点处出错 |
| 计算量 | 小,不需要复杂积分,主要是几何折叠 |
| 常用工具 | 手绘 / Python / MATLAB 辅助验证 |
| 答题建议用时 | 5 到 8 分钟 |
| 考试价值 | 帮助建立信号分解思维,对后续傅里叶变换学习有直接作用 |
这里需要先说明一点:由于不同版本的真题扫描件清晰度不同,网上能搜到的“2025 成信大 2.2 题”原图可能略有差异。本文下面采用一个具有代表性的分段线性信号作为示例,完整演示“奇偶分解 + 绘图验证”的全流程。遇到真题原图时,把你手里的参数代进去,方法完全一致。
2. 适用场景与信号分析价值
奇偶分解这个知识点,表面上是“画两条曲线”,实际上它贯穿了信号与系统后半本书的思考方式。一个实信号 f(t) 可以唯一分解为:
f(t) = f_e(t) + f_o(t)
其中偶分量 f_e(t) 和奇分量 f_o(t) 的定义是:
f_e(t) = [f(t) + f(-t)] / 2
f_o(t) = [f(t) - f(-t)] / 2
从几何意义上看,偶分量关于纵轴对称,奇分量关于原点对称。这个分解的物理意义在于:很多系统分析工具会分别处理对称成分。比如三角傅里叶级数中,偶函数只含余弦项,奇函数只含正弦项;实信号的频谱实部来自偶分量,虚部来自奇分量。也就是说,你现在画的两条曲线,直接对应将来傅里叶变换里的“余弦部分”和“正弦部分”。
所以这个知识点的适用场景不光是应付考试,它还是理解“信号在对称性维度上如何拆解”的第一课。尤其对于要考成信大这类学校的同学来说,专业课里信号与系统占 150 分,这类基础画图题属于“送分题”和“拉分题”的分界线。送分是因为方法固定,拉分是因为粗心出错的人很多。
不适合什么场景呢?如果你只想背公式、不想理解波形翻转的关系,那这道题确实可以死记硬背,但后面学到周期信号傅里叶级数、非周期信号傅里叶变换时,你会发现偶分量和奇分量反复出现,到那时再补就费劲了。因此建议把它当作一次“练手”的机会。
3. 奇偶分解手绘方法:一套可以稳定复制的分步流程
手绘奇偶分解,最忌讳看到波形后凭感觉乱画。下面给出一套我建议的流程,能够保证你面对任何分段线性信号都按同一个套路走。
3.1 第一步:画出 f(-t),即原信号的翻转信号
先把原信号 f(t) 以纵轴为轴翻转,得到 f(-t)。这一步是后面所有操作的基础。翻转时要注意:
- 原来在 t 大于 0 区间上的波形,会翻到 t 小于 0 区间;
- 原来在 t 小于 0 区间上的波形,会翻到 t 大于 0 区间;
- 阶跃点、跳变点也要跟着翻转。比如 f(t) 在 t=1 处有一个断点,那么 f(-t) 会在 t=-1 处出现同样的断点。
如果在试卷上不方便画出 f(-t),可以在草稿纸上画,标好关键点的纵坐标。
3.2 第二步:计算 f_e(t) = [f(t) + f(-t)] / 2
把原信号和翻转信号在同一个 t 坐标系下逐点相加,再除以 2。实际操作时不要真的“逐点”去做,而是分段处理:
- 找出所有分界点,包括原信号的折点、断点,以及翻转后新增的对称折点;
- 在每个区间内判断 f(t) 和 f(-t) 是否是直线段;
- 如果两段都是直线,相加除以 2 后仍然是直线,所以只需要计算区间端点的值再连起来。
这一步最需要注意的是:分段区间要以“原折点和翻转折点一起”来确定,而不是只按原信号的折点来。
3.3 第三步:计算 f_o(t) = [f(t) - f(-t)] / 2
和第二步完全同样的流程,只是把加法换成减法再除以 2。
由于 f(t) 和 f(-t) 会在某些区间上完全重合,它们的差可能为 0,所以奇分量会在某些区间出现在横轴上,这是正常现象。同样,如果原信号本身就是偶函数,那么奇分量为 0;如果原信号本身就是奇函数,那么偶分量为 0。但考试通常不会考这么极端的特例。
3.4 第四步:用 f_e + f_o 验证原信号
这一步很关键。如果你画完两条曲线后不确定自己有没有画对,就在关键点上做加法验证:
f_e(t0) + f_o(t0) 必须等于 f(t0)。
逐一检查 t 等于 -2、-1、0、1、2 等分界点,能快速发现画错的位置。
4. 示例信号:一个典型的分段线性波形
为了演示完整流程,这里构造一个典型的分段信号 f(t):
| 区间 | 表达式 |
|---|---|
| t < -1 | 0 |
| -1 ≤ t ≤ 0 | t + 1 |
| 0 < t ≤ 1 | -t + 1 |
| t > 1 | 0 |
简单说,这是一个在 [-1, 0] 上从 0 上升到 1,在 [0, 1] 上从 1 下降到 0 的三角波。它在 t=0 处取得最大值 1,左右两侧对称。注意这并不是一个偶函数,因为它只在一个有限区间内非零,它的翻转信号 f(-t) 会落在不同的区间分布上,所以它确实可以拆出一个非零的偶分量和一个非零的奇分量。
不少同学看到这个波形会误以为“三角形本身就对称,所以偶分量就是它自己,奇分量为 0”。这是错的。三角波本身对称,指的是在正时间轴和负时间轴上的“形状”相似,但如果波形只存在于 t>0 一侧,翻转后位置就对不上,奇分量不为 0。
下面我们用数学方法分别算出偶分量和奇分量。先求 f(t) + f(-t)。
f(-t) 的表达式为:
| 区间 | 表达式 |
|---|---|
| t < -1 | 0(因为 -t > 1) |
| -1 ≤ t ≤ 0 | t + 1 ?需要重新推导 |
其实严格写比较繁琐。更直观的办法是:f(-t) 的图像是把原波形沿纵轴翻转。原三角波在 [-1, 0] 上升,在 [0, 1] 下降;翻转后在 [0, 1] 上升,在 [-1, 0] 下降。也就是说 f(-t) 在 [-1, 0] 上是 -t + 1,在 [0, 1] 上是 t + 1。
然后做加法除以 2:
在 [-1, 0] 区间上:
f(t) + f(-t) = (t + 1) + (-t + 1) = 2,所以 f_e(t) = 1。
在 [0, 1] 区间上:
f(t) + f(-t) = (-t + 1) + (t + 1) = 2,所以 f_e(t) = 1。
因此偶分量在 [-1, 1] 上恒等于 1,其他区域为 0。这就是一个高度为 1 的门信号,偶对称。
再求奇分量:
在 [-1, 0] 区间上:
f(t) - f(-t) = (t + 1) - (-t + 1) = 2t,所以 f_o(t) = t。
在 [0, 1] 区间上:
f(t) - f(-t) = (-t + 1) - (t + 1) = -2t,所以 f_o(t) = -t。
因此在 [-1, 1] 上,奇分量是一个从 -1 到 1 再回到 -1 的折线,且在 t=0 处为 0,关于原点对称。
最终验证:
f_e(t) + f_o(t) 在 [-1, 0] 上等于 1 + t = t + 1,和原信号一致;在 [0, 1] 上等于 1 - t = -t + 1,和原信号一致。分解正确。
手工绘制时,你只需要记住两个关键结果:偶分量是一个门信号,奇分量是一个分段折线。接下来我们用代码自动完成这一过程,方便你检查任何自己手绘的结果。
5. Python 实现:对任意分段信号做奇偶分解并绘图
如果你平时做习题时不方便手绘验证,或者想批量检验 960 题里的多道画图题,可以用一段短小的 Python 脚本完成奇偶分解。这里用 NumPy 构造信号,用 Matplotlib 绘图。
import numpy as np import matplotlib.pyplot as plt # 构造示例信号 f(t) def signal_f(t): t = np.asarray(t, dtype=float) # 默认全 0,然后按区间填充 y = np.zeros_like(t) mask1 = (t >= -1) & (t <= 0) mask2 = (t > 0) & (t <= 1) y[mask1] = t[mask1] + 1.0 y[mask2] = -t[mask2] + 1.0 return y # 定义采样时间轴 t = np.linspace(-3, 3, 2001) # 原信号 f = signal_f(t) # 翻转信号 f(-t) f_neg = signal_f(-t) # 偶分量 fe = (f + f_neg) / 2.0 # 奇分量 fo = (f - f_neg) / 2.0 # 验证:偶分量 + 奇分量 应等于原信号 restore = fe + fo print("最大重建误差:", np.max(np.abs(restore - f))) # 绘图 plt.figure(figsize=(10, 6)) plt.subplot(2, 2, 1) plt.plot(t, f, linewidth=2) plt.title("Original Signal f(t)") plt.grid(True) plt.subplot(2, 2, 2) plt.plot(t, f_neg, linewidth=2) plt.title("Flipped Signal f(-t)") plt.grid(True) plt.subplot(2, 2, 3) plt.plot(t, fe, linewidth=2, color="green") plt.title("Even Component fe(t)") plt.grid(True) plt.subplot(2, 2, 4) plt.plot(t, fo, linewidth=2, color="red") plt.title("Odd Component fo(t)") plt.grid(True) plt.tight_layout() plt.show()重要说明:这里用 2001 个采样点画图,本质上是在离散时间轴上近似连续信号。如果你要验证手绘的“边界点”取值,可以直接取 t=0、t=1 等精确数值计算,而不是从图中读数。运行上面代码后,你会看到四张子图:原信号、翻转信号、偶分量、奇分量,并输出重建误差接近 0,说明分解正确。
6. MATLAB 实现:更适合考研复习对照验证
很多考研同学电脑上装的第一个工具是 MATLAB,下面的代码和 Python 版本思路完全一致,运行起来更轻量。
clear; clc; t = linspace(-3, 3, 2001); % 构造原信号 f(t) f = zeros(size(t)); idx1 = (t >= -1) & (t <= 0); idx2 = (t > 0) & (t <= 1); f(idx1) = t(idx1) + 1; f(idx2) = -t(idx2) + 1; % 翻转信号 f_neg = interp1(t, f, -t, 'linear', 0); % 偶分量与奇分量 fe = (f + f_neg) / 2; fo = (f - f_neg) / 2; % 验证 restore = fe + fo; fprintf('最大重建误差: %e\n', max(abs(restore - f))); % 绘图 subplot(2, 2, 1); plot(t, f, 'LineWidth', 2); title('Original Signal f(t)'); grid on; subplot(2, 2, 2); plot(t, f_neg, 'LineWidth', 2); title('Flipped Signal f(-t)'); grid on; subplot(2, 2, 3); plot(t, fe, 'LineWidth', 2); title('Even Component fe(t)'); grid on; subplot(2, 2, 4); plot(t, fo, 'LineWidth', 2); title('Odd Component fo(t)'); grid on;这里用interp1对翻转后的时间轴做线性插值,是为了让采样对齐。如果原信号本身是线性分段信号,插值不会引入明显误差。输出重建误差之后,你可以把 MATLAB 生成的图和你自己手绘的结果做对比。
7. 成信大真题常见变式与扩展
2025 年成都信息工程大学第 2.2 题考查的是奇偶分解绘图,但同一考点在不同年份、不同学校会出现多种变式。建议把这几种都练一遍。
7.1 变式一:阶跃信号与门信号组合
把原信号换成由单位阶跃和门信号叠加构成的波形,分解结果可能会出现常数偶分量,奇分量则可能是带正负跳变的折线。这类题比纯三角波更容易在跳变点处出错。
7.2 变式二:离散时间信号的奇偶分解
离散信号 x[n] 的偶分量和奇分量定义为:
x_e[n] = (x[n] + x[-n]) / 2
x_o[n] = (x[n] - x[-n]) / 2
离散情况下不用画曲线,而是画“棒棒图”。要注意 n=0 点必须单独计算,因为它不涉及翻转配对。
7.3 变式三:连续时间信号的冲激与冲激偶
如果原信号包含单位冲激 δ(t) 或冲激偶 δ'(t),分解要特别注意冲激的位置和面积。偶分量中冲激保持不变,奇分量中冲激偶的符号与位置需要仔细处理。这类题通常出现在选择题或填空题里。
7.4 变式四:判断给定分量是否合法
有些年份不直接要求画图,而是给出 f_e(t) 和 f_o(t),要求判断它们是否能构成某个因果信号 f(t)。这种题核心思路是:任何信号都唯一对应一组偶分量和奇分量,反过来也成立,你只需要验证 f_e(t) 是否为偶函数、f_o(t) 是否为奇函数即可。
7.5 变式五:与傅里叶变换结合
成信大的真题有时候会在同一道大题里先要求画偶分量和奇分量,再利用奇偶性简化傅里叶变换的计算。这是一个更高阶的考法,建议复习完傅里叶变换性质后再回头做这类综合题。到那时你会更明白,现在画的两条曲线,本质上就是在为“实偶信号对应实偶频谱”这个性质做铺垫。
8. 考研答题规范与评分要点
在考场上,这道题的画图步骤是拿分的重点,但很多同学因为卷面不规范丢分。下面整理一份可以作为自查清单的表格。
| 检查项 | 说明 | 是否常见踩坑点 |
|---|---|---|
| 坐标轴标注 | 每条曲线都要标清 t 轴和纵轴,并注明函数名 | 是,漏标函数名最常见 |
| 关键点取值 | 折点、断点、零点要标出具体纵坐标 | 是,考试时只看点不看形状 |
| 分界点处理 | 端点开闭要统一,不要出现区间定义自相矛盾 | 是,容易在 t=0 处出错 |
| 偶分量对称性 | 检查 f_e(t) 是否关于纵轴对称 | 是 |
| 奇分量对称性 | 检查 f_o(t) 是否关于原点对称 | 是 |
| 验证相加 | 在关键点上用 f_e + f_o 验证 f(t) | 是,但需要平时养成习惯 |
| 卷面整洁 | 用直尺画线,不要徒手画折线 | 是,电脑阅卷时影响辨识度 |
| 时间控制 | 5 到 8 分钟内完成,不要在一幅图上花超过 15 分钟 | 否 |
尤其注意:如果题目里没有要求,最好不要额外画 f(-t),而是把 f(-t) 放在草稿纸上。试卷上只需要最终分解结果和必要的推导说明。有些阅卷老师看到多余的曲线反而会混淆。
9. 常见错误与排查方法
下面这组高频错误,基本覆盖了这类画图题的主要失分点。
| 错误现象 | 可能原因 | 排查方法 | 纠正方式 |
|---|---|---|---|
| 偶分量不是偶函数 | f(-t) 画错 | 取 t=1 和 t=-1 分别代入验证 | 重新翻转原信号,检查每个折点 |
| 奇分量关于原点不对称 | 减法相减后除以 2 时漏了某一段 | 检查每个分段区间的端点值 | 按分界点逐段计算,不要跳段 |
| 最大重建误差不为 0 | 离散采样点数太少或插值方式不对 | 减少步长,改用线性插值 | 增加采样点数量再运行 |
| MATLAB 中翻转信号出现 NaN | 时间轴范围不够,插值区间外无定义 | 检查 t 的范围是否覆盖原信号支撑区间 | 扩大 t 的范围或对插值外部补 0 |
| 手绘图只在 t>0 画曲线 | 忽略了 f(-t) 在正半轴的贡献 | 检查偶分量在负半轴是否有值 | 按对称性补齐另一半 |
| t=0 处取值算错 | 对 t=0 是否属于哪个区间有歧义 | 单独计算 t=0 时的 f(0) | 定义中明确区间端点归属 |
MATLAB 里用interp1时需要注意的是:翻转信号的时间轴 -t 的范围和原始 t 一致,但如果 t 没有覆盖到原信号的完整定义域,翻转后就会出现超出插值范围的问题。解决办法就是把 t 的下界设得足够负,比如从 -3 开始,确保信号的支撑区间完全落在观测窗口内。
10. 如何用“小马哥960题”刷好这类画图题
“小马哥960题”是一套覆盖信号与系统各章节的题库,里面像“奇偶分解绘图”这样的题目几乎每个学校真题里都有对应。刷这一类题时,不要只满足于“看答案明白了”,更有效的做法是:
- 第一轮:拿到题先不翻答案,自己按第 3 节的分步流程画;
- 第二轮:用 Python 或 MATLAB 代码验证手绘图的关键点是否一致;
- 第三轮:把错题整理成一个“波形变换类”专项,定期回看。
如果在第二轮里发现代码运行结果和手绘结果不一致,先不要怀疑代码,优先检查你的手绘图。因为代码本质上是用数值计算执行了定义公式,只要采样足够密,几乎不会出错。真正容易错的是人工分段时的漏段。
对于时间紧张的同学,可以把“先画翻转信号 f(-t)”这一步作为默认动作。一道题你只要能画出 f(-t),后面偶分量和奇分量就是两行算术。
11. 总结与下一步
这次我们重点拆解了“信号的奇偶分解绘图”这一类题,并以 2025 年成都信息工程大学 2.2 题为背景,给出了从定义到手绘再到代码验证的完整流程。最值得记住的一点是:偶分量和奇分量不是两种独立信号,而是原信号在纵轴对称性上的两个投影,所有计算都是从 f(t) 和 f(-t) 两组波形做加减除以 2 得到的。
第 9 节的错误清单建议收藏备用,尤其是“偶分量不是偶函数”和“t=0 处取值算错”这两条,几乎每年都有人犯。
下一步如果你正在刷 960 题,建议把这套代码保存下来,遇到任何“画奇偶分量”的题都先跑一遍验证。等你能熟练用它检查手绘图之后,再去做傅里叶变换对称性质的专项练习,你会发现前面画的这些曲线,直接决定了你理解频谱实部虚部的速度。