
《信号与系统》这门课几乎是所有电子信息、通信、自动化专业学生绕不开的一道坎。很多人学到期中考试前后就开始怀疑自己上课听懂了作业看着答案也能看懂但一合上书做新题头脑一片空白。课程讲了几章了脑子里既没有公式体系也说不清楚到底学了什么。更严重的是卷积、傅里叶变换、拉普拉斯变换、Z变换一个个登场之后前面不懂的地方还没补上后面已经完全跟不上了。这里直接给一个判断信号与系统之所以学不懂不是因为数学推导太复杂而是因为你没有抓住这门课的两条主线——信号建模和系统建模。你没有意识到课本上绝大部分概念、公式、变换、性质都是为了解决两件事第一用一种统一的数学语言描述信号第二用一种统一的数学语言描述系统对信号的作用。一旦你想明白了这两条主线整门课的知识结构会瞬间清晰傅里叶变换不是一堆公式而是信号建模从时域切换到频域的一个工具。这篇文章会从“建模”的视角重新梳理信号与系统的知识体系帮助你建立整体框架然后给出每一部分的核心概念、学习重点、常见误区以及用 Python 进行可视化验证的完整示例。无论你是正在上课、准备考研还是工作中要补信号处理基础这篇文章都值得收藏。1. 学不懂信号与系统的真正原因在哪里如果只用一个词回答那就是“碎片化”。国内高校《信号与系统》课程通常按照章节推进先讲信号再讲系统然后讲时域分析、频域分析、复频域分析、Z 变换。教材每一章内部的逻辑是清楚的但章与章之间、概念与概念之间的联系往往靠学生自己去体会。很多老师的幻灯片是多年沉淀下来的每一页都很有内容但板书和 PPT 之间缺少一条“为什么某个工具会在某个地方出现”的故事线。从学生的学习反馈来看最容易出现的问题有三个。第一个问题是把“傅里叶变换”当成一个单纯的数学运算却没有问过它为什么出现在这门课里。如果只背公式那你会得到一堆正交积分、帕塞瓦尔定理、频移特性但它们和“系统分析”有什么关系你并不知道。第二个问题是没有分清“信号本身”和“系统对信号的影响”。一门课叫“信号与系统”但很多同学学到最后只知道信号可以分解成正弦函数的叠加却不太清楚“系统”在这门课里到底承担什么角色又是如何被数学描述的。第三个问题是最致命的试图用记忆公式来替代理解建模思想。信号与系统里确实有一批必须背的变换对、性质表、卷积公式但如果只背这些题目稍微变化一下比如把连续换离散、把非周期换周期就会立刻暴露理解不足。这三点归结成一句话你没有把“建模”当作这门课的灵魂。下面我们从建模角度重新讲一遍信号与系统。2. 两大建模主线信号建模与系统建模先给一个全课程的宏观图景。信号与系统研究的是“信号经过系统之后变成什么”这个问题。研究对象有两个信号它是信息的载体是时间的函数可以是一段语音、一张图像、一组传感器输出系统它是一个把输入信号映射为输出信号的“容器”比如一个滤波器、一个放大器、一个通信信道。所谓建模就是用数学语言把这两样东西描述清楚进而能够计算“输出等于什么”。信号建模要做的事情是用什么样的数学结构来描述信号一个任意波形怎么用最简单的“原子成分”表示我们熟悉的单位冲激信号、阶跃信号、正弦信号、指数信号就是一批“建模原子”而把任意信号分解成这些原子的叠加就是信号建模的核心操作。系统建模要做的事情是给定一个系统如何用一个数学规则描述它对输入信号做了什么系统的线性、时不变性、因果性、稳定性其实就是对“系统模型”性质的四条检查标准而输入输出关系的几种等价形式——微分方程、差分方程、冲激响应、频率响应、系统函数、零极点图就是同一个系统模型在不同域里的表现。这两条主线的交汇点就是用线性时不变系统Linear Time-Invariant System作为研究主体。因为它同时满足“叠加性”和“时不变性”所以只要知道系统对最基础的“分解原子”是怎么响应的就能求出它对任意复杂信号的响应。你可能会问现实中的系统哪有那么简单冶金炉的温控系统不是线性的通信信道也不是时不变的。这正是很多同学困惑的地方。但一个重要的判断是我们学习信号与系统不是因为它能精确描述所有真实系统而是因为它提供了一套分析问题的基准框架。退一步说大量实际系统在一定工作范围内都可以近似成 LTI 系统来处理。先把 LTI 分析透才有资格去研究非线性、时变系统。所以这条主线就是整个课程的地图先学信号建模再学系统建模最后把它们合起来解决“输入到输出”的整体问题。3. 信号建模如何用数学语言描述信号信号建模是整个课程的基石。如果这部分糊里糊涂后面所有变换域分析都站不住。3.1 信号怎么分类信号可以从不同角度切分。最常见的四个分类维度是连续时间信号与离散时间信号。连续时间信号的自变量是实数 t离散时间信号的自变量是整数 n。周期信号与非周期信号。连续信号的周期是 T满足 x(tT)x(t)离散信号的周期是 N满足 x[nN]x[n]。能量信号与功率信号。能量有限但平均功率为零的叫能量信号功率非零但能量无限大的叫功率信号。这一分类在后面帕塞瓦尔定理那里很有用。确定性信号与随机信号。课程以确定性为主随机信号一般放在“随机信号分析”课程里再深入。3.2 基本“建模原子”仔细翻教材就会注意到各种信号建模的操作大量围绕下面几个基础信号展开单位阶跃信号 u(t) 和 u[n]描述信号在某一时刻“启动”单位冲激信号 δ(t) 和 δ[n]描述信号在某个瞬间“爆发”是连续系统分析里最重要的原子实指数信号 e^{at}描述增长或衰减正弦信号与复指数信号 e^{jωt}描述振荡是傅里叶分析的原子抽样函数 Sa(t) 和 sinc 函数在采样定理和频域分析中高频出现。这里有一个课程很容易考到、但也很容易误解的点连续时间的单位冲激信号 δ(t) 并不是一个普通函数它在 t0 处有无限大强度但面积为 1。很多教材会从矩形脉冲取极限的角度去解释它。本质上δ(t) 不是用来“取值”的它是用来“抽样”的。它的意义在于任意一个信号 x(t) 都可以写成无穷多个冲激函数的加权积分x(t) ∫ x(τ)δ(t-τ)dτ 从 -∞ 到 ∞这个式子叫“筛选性质”更重要的它说明“所有信号都能由冲激信号组合而成”。这正是后面引入卷积的伏笔。3.3 信号的分解从连续波形到“原子叠加”信号建模最精髓的地方就是分解与叠加。第一种分解方式是把任意信号分解成无穷多个时移的冲激信号。因为是连续信号所以“无穷多个”会变成积分形式。这种方式对应时域分析最终引出卷积积分。第二种分解方式是把任意信号分解成不同频率的正弦/复指数信号。这就是傅里叶级数和傅里叶变换。周期信号用傅里叶级数离散频谱非周期信号用傅里叶变换连续频谱。这一操作把信号从时域搬到了频域也是信号建模从时域扩展到频域的关键一步。第三种分解方式是把任意信号分解成不同频率且带衰减或发散趋势的复指数信号。这就引出了拉普拉斯变换。拉普拉斯变换虽然是傅里叶变换的推广但它的核心贡献是让系统函数能描述瞬态过程和稳定性为系统建模提供了更强大的工具。从建模角度看这三种分解方式本身不是三个孤立知识点它们只是在回答同一个问题的不同切面“一个复杂信号能否拆成若干简单信号的组合如果可以拆法是什么”3.4 用 Python 感受一下信号建模理解信号建模最直观的方式是让眼睛看到。下面用 Python 画一个由多个正弦叠加出来的合成信号频谱就等于各频率分量的位置。import numpy as np import matplotlib.pyplot as plt fs 1000 # 采样率 t np.linspace(0, 1, fs) # 1秒时间轴 # 构造三个频率分量 f1, f2, f3 5, 50, 120 x (0.6 * np.sin(2 * np.pi * f1 * t) 0.3 * np.sin(2 * np.pi * f2 * t) 0.1 * np.sin(2 * np.pi * f3 * t)) # 绘制时域波形 plt.figure(figsize(10, 4)) plt.plot(t, x) plt.title(时域三个正弦分量叠加后的信号) plt.xlabel(时间 t/s) plt.ylabel(幅值) plt.grid(True) plt.show() # 计算并绘制频谱 X np.fft.fft(x) freqs np.fft.fftfreq(fs, 1/fs) plt.figure(figsize(10, 4)) plt.stem(freqs[:200], np.abs(X[:200]), basefmt ) plt.title(频域明显可见 5Hz、50Hz、120Hz 三条谱线) plt.xlabel(频率 f/Hz) plt.ylabel(幅度) plt.grid(True) plt.show()运行这段代码你会看到时域里是一条抖动的复杂波形而频域里只有三根清晰的谱线。时域看起来复杂的东西频域里可能非常简单。这就回答了“为什么要建模”不同的建模坐标可以让同一个信号呈现出完全不同的可读性。4. 系统建模如何用数学语言描述系统有了信号接下来要描述“信号经过系统以后变成什么”。这一步就是系统建模。4.1 系统是什么从输入到输出的映射系统可以理解为一个映射输入端给一个 x(t) 或 x[n]输出端得到 y(t) 或 y[n]。系统建模的任务就是用一种确定性的规则来刻画这个映射关系。课程中反复强调“线性”和“时不变”这两个性质是因为它们决定了系统能用什么样的数学工具分析线性输入叠加输出也叠加输入缩放输出也跟着缩放。时不变输入延迟多少输出也延迟多少系统本身的特性不随时间漂移。如果一个系统同时满足这两个性质它就是 LTI 系统。为什么 LTI 系统在整个信号处理领域地位极高因为它有一个黄金性质已知冲激响应 h(t)就能用卷积积分得到任意输入下的输出y(t) x(t) * h(t) ∫ x(τ)h(t-τ)dτ也就是说描述一套系统你不需要逐个记住无穷多种输入对应的输出只需要记住这个系统对“单位冲激”的响应。这是对系统建模最巨大的简化。4.2 标准系统模型有哪些同一套 LTI 系统在不同建模视角下有多种等价表达。教材里换着花样考察就是因为没有讲清楚它们之间的等价关系。微分方程 / 差分方程最底层的输入输出关系描述方式适合直接求解和物理建模。冲激响应 h(t) / 单位样值响应 h[n]时域上的系统“签名”。频率响应 H(jω)频域上的系统“签名”它是冲激响应的傅里叶变换。系统函数 H(s) / H(z)复频域上的系统“签名”它是冲激响应的拉普拉斯变换或 Z 变换。这四个表达本质上都在说同一件事只是换了坐标系。它们之间的转换关系其实就是信号建模里的时域、频域、复频域三种分解视角。很多同学只记每种表达的计算公式却忽略了它们之间的等号与桥梁。一旦你能在脑中自由切换“微分方程 ⇌ 冲激响应 ⇌ 系统函数”系统建模就不再是一个个断开的公式而是一张可以互相推导的网。4.3 系统性质判断模型建完之后的四道检查系统性质的判断是这门课的必考内容也是最容易掉坑的地方。判断依据不是靠直觉而是要看是否满足数学定义。线性性。检查系统对“叠加”和“缩放”的两条运算规则是否都保持。时不变性。把输入先延迟再通过系统和先把输入通过系统再延迟结果是否一样。因果性。系统当前输出是否只依赖当前与历史输入。若依赖未来输入则非因果。稳定性。有界输入是否一定产生有界输出即“BIBO 稳定”。对于 LTI 系统因果稳定的充分必要条件是冲激响应绝对可积。这里有一个高频错误看见系统表达式含非线性项比如 y(t)x²(t)就判断它非线性这没错但如果看到 y(t)x(2t)x(t)很多同学会误判成时不变实际上它是一个典型的时变系统因为输出里包含输入的时间压缩。判断系统性质必须回到定义不能“看着像”。4.4 用 Python 验证冲激响应与卷积下面用一个离散 LTI 系统示例演示冲激响应和卷积。我们用系统差分方程 y[n] 0.5y[n-1] x[n] 表示一个简单的一阶递归系统。import numpy as np import matplotlib.pyplot as plt def lti_system(x): 根据差分方程 y[n] 0.5*y[n-1] x[n] 计算输出 N len(x) y np.zeros(N) for n in range(1, N): y[n] 0.5 * y[n-1] x[n] return y # 输入为离散冲激序列 N 20 delta np.zeros(N) delta[0] 1 h lti_system(delta) print(冲激响应 h[n]:, np.round(h, 4)) # 输入为一个较短的方法脉冲用卷积验证 x_pulse np.array([1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) y_conv np.convolve(x_pulse, h)[:N] y_direct lti_system(x_pulse) plt.figure(figsize(10, 4)) plt.stem(range(N), y_direct, linefmtb-, markerfmtbo, basefmt , label直接求解) plt.stem(range(N), y_conv, linefmtr--, markerfmtrx, basefmt , label卷积结果) plt.legend() plt.title(LTI 系统直接求解 vs 卷积结果) plt.xlabel(n) plt.ylabel(y[n]) plt.grid(True) plt.show()如果两条曲线完全重合说明“已知冲激响应 卷积”的输出确实等于直接按差分方程组求解。这就是系统建模中“签名”思想最形象的验证。5. 从时域到频域再到复频域变换域建模工具全梳理讲到这一步你要对整门课有一个宏观判断信号与系统的分析工具其实是一条从时域到频域再到复频域的升级链。5.1 卷积时域中的系统运算卷积是信号与系统的第一个综合难点。它本身不是一种变换而是时域中描述 LTI 系统输入输出关系的一种积分/求和运算。卷积的物理意义比公式更重要任意输入信号都可以看成无穷多个时刻的冲激响应的叠加系统的总输出就是每个时刻的冲激响应按输入强度加权叠加的结果。一个常见的理解误区是“卷积就是翻转、平移、相乘、积分一系列操作”。从做题角度这没错但如果你脑子里只有操作步骤没有“每一个点都是历史输入加权的积累”这个动态图景那卷积对你的帮助就只停留在作业层面。更推荐的学习方法先用 Python 把卷积结果画出来亲眼看到输入脉冲经过系统后被“拉伸”成冲激响应的形状然后再去理解公式。有了画面公式就不再抽象。5.2 傅里叶级数与傅里叶变换频域建模傅里叶级数处理周期信号傅里叶变换处理非周期信号。它们的统一思想是把信号分解成不同频率的“频率原子”。周期信号的频谱是离散的只有基波的整数倍频率处有分量非周期信号的频谱是连续的每一个频率都有“密度”。这就是为什么周期信号 x(t) 用谱系数非周期信号用频谱密度函数 X(jω)。对很多初学者来说最难的一步是接受“周期信号可以用无穷项正弦/复指数叠加来表示”。这里建议死磕一个直觉叠加的项数越多逼近越精确高频项决定了信号的“细节”低频项决定了信号的“轮廓”。从系统建模来看傅里叶变换给出的频率响应 H(jω) 描述的是系统对不同频率输入信号的“放大或衰减”作用。滤波器之所以是滤波器正是因为它在频域对不同频率有不同的响应。5.3 拉普拉斯变换与 Z 变换复频域建模傅里叶变换不是万能的。很多信号不满足绝对可积条件比如单位阶跃信号、指数增长信号直接做傅里叶变换会遇到收敛性问题。拉普拉斯变换通过引入收敛因子 e^{-σt}把信号“压”到可积后再做傅里叶变换从而扩展了建模范围。拉普拉斯变换的独立价值还有两点。第一它把微分方程变成代数方程系统分析从“解微分方程”变成“解方程”第二系统函数 H(s) 的零极点图可以非常直观地判断系统稳定性和频率特性这是控制理论里最基本的工具。Z 变换则是离散时间系统的拉普拉斯版本。它把差分方程变成代数方程把单位圆上取值的变换称为离散时间傅里叶变换DTFT。离散系统的稳定性判断取决于系统函数的极点是否在单位圆内这和连续系统的“极点是否在 s 平面左半平面”是一一对应的类比关系。这一段的总结判断是这些变换工具不是一个一个孤立的知识点它们都是某个坐标系下的建模方式。时域、频域、复频域看起来工具变多实际上没有改变“信号建模 系统建模”这个大图景。5.4 用 Python 观察傅里叶变换与频率响应通过代码看图可以让变换域建模的理解更扎实。import numpy as np import matplotlib.pyplot as plt fs 1000 t np.linspace(0, 2, 2*fs) # 构造一个频率逐步变化的正弦信号 f0 10 signal np.sin(2*np.pi*f0*t*t/2) # 设计一个理想低通滤波器44Hz 以上被衰减 fft_signal np.fft.fft(signal) freq np.fft.fftfreq(len(signal), 1/fs) mask np.abs(freq) 50 filtered_fft fft_signal * mask filtered_signal np.fft.ifft(filtered_fft) plt.figure(figsize(12, 6)) plt.subplot(3, 1, 1) plt.plot(t, signal) plt.title(原始信号频率随时间增加) plt.xlabel(t/s) plt.ylabel(x(t)) plt.grid(True) plt.subplot(3, 1, 2) plt.plot(freq[:500], np.abs(fft_signal[:500])) plt.title(频域幅值谱高频部分随时间增加而移动) plt.xlabel(f/Hz) plt.ylabel(|X(jw)|) plt.grid(True) plt.subplot(3, 1, 3) plt.plot(t[:1000], filtered_signal[:1000].real) plt.title(经过 50Hz 低通滤波后的输出) plt.xlabel(t/s) plt.ylabel(y(t)) plt.grid(True) plt.tight_layout() plt.show()这段代码演示了一个非常直观的现象频域里把高频分量清零输出的时域波形就明显变得平滑。你看到的“滤波器”效果本质上就是系统在频域上的选择性响应也就是系统建模中“频率响应”概念的直接体现。6. 用“建模”视角重看信号与系统核心章节学完上面几条主线我们把课程章节重新映射一遍。这样你再复习时脑子里就有了一张框架图。第 1、2 章信号与系统概述介绍信号分类、系统性质。对应“建模前的对象观察”。第 3 章时域分析用微分方程/差分方程描述 LTI 系统输出用卷积求响应。对应“时域建模”。第 4 章傅里叶级数与傅里叶变换把信号从时域建模切到频域建模同时给系统建立频率响应。第 5 章连续系统的频域分析用频域模型分析系统输出引出采样定理。对应“频域建模在系统中的应用”。第 6 章拉普拉斯变换与系统函数把频域建模扩展为复频域建模用 H(s) 分析稳定性、瞬态与稳态响应。第 7 章Z 变换与离散系统分析把复频域建模迁移到离散域用 H(z) 分析数字滤波器与离散系统。你看每一章都在“信号建模”和“系统建模”这两条线上做不同维度的扩展。如果你把每章新术语都放进这个框架里它们不再是孤立的知识点而是一个坐标系的某个侧面。7. 信号与系统学习中的常见误区与避坑指南这些年帮助过不少学弟学妹复习这门课发现了一些很典型的学习误区。这里逐一列出来你可以对号入座。7.1 误区一只背公式不看物理意义很多同学把傅里叶变换表格、拉普拉斯变换性质背得滚瓜烂熟但问他“频率响应 H(jω) 的幅值代表什么”却答不上来。这是学习信号与系统最危险的状态。公式只是建模结果的浓缩真正重要的是结果背后的含义。建议把每一个重要公式旁写上“它描述了系统的哪个建模侧面”形成记忆锚点。比如频移特性描述的是“信号的频率搬移”卷积定理描述的是“时域卷积等价于频域相乘”这些都不是单纯的计算性质而是信号建模视角的切换法则。7.2 误区二把卷积当成纯操作技巧卷积的本质是“加权叠加”和“记忆积累”。如果只关注“翻转、平移、相乘、积分”的操作流程做常见例题可能够用但遇到分段函数、变上下限、系统为零状态响应时就会手忙脚乱。建议用图像理解卷积把一个单位冲激响应“倒过来滑过”输入信号每一个时间点的输出都是输入在两函数重叠区域上的加权和。这个过程在数字信号处理里对应 FIR 滤波器的运算过程完全可以通过代码模拟加深理解。7.3 误区三离散和连续完全两套知识体系有些同学学完连续系统再学离散系统觉得是两门课。实际上离散系统分析是连续系统分析的“镜像版”Z 变换对应拉普拉斯变换单位圆对应虚轴单位样值响应对应冲激响应差分方程对应微分方程。两条线几乎每一对概念都能对上。建议做一张对照表把连续与离散的对应概念并列写出来这会极大降低离散部分的学习成本。7.4 误区四跳过性质直接从作业学起信号与系统想做对题很重要的一步是先判断用什么方法。这个问题依赖于系统的性质是线性时不变系统吗因果吗稳定吗如果把性质判断学透了你会自然知道能不能用卷积、能不能用傅里叶变换、能不能用拉普拉斯变换。建议复习顺序调整为“先性质判断再选工具最后套公式”而不是“看到题就开始套公式”。8. 高效学习路径从做题到建立系统思维对北邮的学生也好对自学的读者也好信号与系统的学习都可以拆成“四步法”。第一步听懂概念梳理主线。上课或看书时不要急着记住每个公式先把今天学的内容放进“信号建模 / 系统建模”的框架里。问自己这节课讲的知识点是为了更好地描述信号还是为了更好地描述系统第二步动手画图建立直觉。用 Python 或 MATLAB 把信号的时域波形、频谱图、系统的冲激响应、频率响应、零极点图画出来。图像能让人瞬间理解抽象公式尤其是卷积、频域变换、采样定理这些概念。第三步做典型题总结题型。信号与系统的题型相对固定求卷积、判断性质、求傅里叶变换、求系统函数、判断稳定性、解采样问题。每类题总结一套思路模板而不是盲目刷很多题。第四步回归框架搭建自己的知识图谱。学完一章之后在一张白纸上默写这章的关键概念和它们之间的关系。如果默写不出来说明还没有形成体系。这个方法虽然费时却是效果最好的知识结构化方式。9. 从信号与系统到后续课程的进阶路径最后聊一下这门课在专业体系里的位置。信号与系统不是一门“孤立”的专业基础课它是数字信号处理、通信原理、自动控制原理、图像处理、语音信号处理等课程的基础工具。举个例子通信原理里的调制与解调本质就是信号建模里频率搬移的应用自动控制原理里的传递函数与稳定性判据本质就是拉普拉斯变换在系统建模中的应用数字信号处理里的 FIR/IIR 滤波器设计本质就是离散系统建模的工程化。如果你现在能把信号与系统的底层逻辑吃透后面这几门课的入门成本会低很多。反过来如果你现在只是为了应付考试而学这门课的知识点很快会遗忘。但如果你把它看成“一套理解动态系统的建模语言”你会发现它不仅对后续课程有用在算法设计、数据分析、系统仿真等很多工程领域都能提供一种更本质的思维方式。所以这篇文章最想留下的一个判断是信号与系统不是一堆公式的集合而以信号建模和系统建模为两条主线层层升级的一套科学分析框架。你不需要试图每条公式都推导但一定要抓住它为什么要出现在那一步。抓住了这条主线你的信号与系统才算真正学懂了。学完这门课之后如果还想继续深入值得花时间去掌握两件事一是 Python 中 numpy/scipy 的信号处理函数亲手做几个滤波器设计和频谱分析的小实验二是把书籍里的连续系统分析迁移到离散系统的 Z 变换和数字实现中。前者能让你“用起来”后者能让你从“理论”走向“工程”。信号与系统真正吃透后你会发现后续的数字信号处理、通信系统、自动控制都能够用同一套建模思维去学习和理解。