第二章 信号与系统基础:信号分类、傅里叶变换、拉普拉斯变换、Z变换、系统响应

各位同学,咱们今天聊聊信号与系统。说实话,这章是整个通信系统的地基。我做了十几年软硬件协同设计,回头一看,最值钱的还是这些基础概念。你想想看,不管是做数字滤波器,还是搞OFDM调制,底层跑的都是这些变换。

先给大家画个知识框架,心里有个谱。

信号与系统基础 · 知识体系 信号与系统 信号分类 连续 vs 离散 周期 vs 非周期 确定 vs 随机 能量 vs 功率 傅里叶变换 FT:连续非周期 FS:连续周期 DTFT:离散非周期 DFS/DFT:离散周期 拉普拉斯变换 s = σ + jω 收敛域(ROC) 系统稳定性分析 模拟滤波器设计 Z变换 z = re^(jω) 收敛域(ROC) 数字滤波器设计 IIR/FIR 实现 系统响应分析 时域分析 频域分析 冲激响应 h(t) / h[n] 卷积:y = x * h 传递函数 H(s) / H(z) 频率响应 H(jω) / H(e^(jω)) ← 时域 ↔ 频域 →

2.1 信号分类:别把信号搞混了

信号怎么分?我个人的习惯是看两个维度:时间和取值。时间上分连续和离散,取值上分模拟和数字。组合起来就是四种:连续模拟信号、连续数字信号、离散模拟信号、离散数字信号。嗯,这里要注意,咱们做软硬件协同设计,打交道最多的是离散数字信号——说白了就是ADC采样之后的那串二进制数。

还有几个分类维度,大家记一下:

  • 周期信号 vs 非周期信号:周期信号有固定的重复模式。我在做电源纹波分析时,就经常用周期信号模型来近似开关噪声。
  • 能量信号 vs 功率信号:能量有限的是能量信号,功率有限的是功率信号。实际中,脉冲信号是能量信号,正弦波是功率信号。
  • 确定信号 vs 随机信号:确定信号可以用数学表达式精确描述。随机信号嘛,只能用统计特性。通信信道里的噪声就是典型的随机信号。
小技巧: 判断一个信号是能量型还是功率型,最简单的方法——看它是不是持续存在的。持续振荡的信号(比如正弦波)是功率信号,一闪而过的脉冲是能量信号。我在调试射频功放时,就用这个原则快速判断信号类型。

2.2 傅里叶变换:时域和频域的桥梁

傅里叶变换,说白了就是把信号从时间域搬到频率域。为什么要搬?因为有些东西在时域里看不清楚,到了频域一目了然。比如一个混叠了噪声的正弦波,时域波形乱糟糟的,但频谱上就是一根干净的谱线加一片底噪。

常见的傅里叶变换家族有四个成员:

变换类型 时域特性 频域特性 典型应用
FT(傅里叶变换) 连续、非周期 连续、非周期 模拟信号分析
FS(傅里叶级数) 连续、周期 离散、非周期 周期信号谐波分析
DTFT 离散、非周期 连续、周期 数字信号频谱
DFT/FFT 离散、周期 离散、周期 数字信号处理(最常用)

实际项目中,我们用的最多的是FFT(快速傅里叶变换)。我记得有一次做软件无线电项目,需要在FPGA里实现一个1024点的FFT。当时我纠结是用基2还是基4的结构,最后选了基4,因为资源占用更少,而且流水线深度也合适。

核心公式(DFT):
X[k] = Σ x[n] · e^(-j·2π·k·n/N)   (n=0 to N-1)

这个公式,我建议你背下来。做数字通信系统,天天跟它打交道。

2.3 拉普拉斯变换:从频域到复频域

傅里叶变换有个局限——它只能处理绝对可积的信号。遇到指数增长信号怎么办?拉普拉斯变换就是来解决这个问题的。它把频率从纯虚数 jω 扩展到了复数 s = σ + jω,相当于给信号乘了一个衰减因子 e^(-σt),让那些发散信号也能被分析。

拉普拉斯变换的定义:

F(s) = ∫ f(t) · e^(-st) dt   (从0到∞)

这里有个关键概念——收敛域(ROC)。我刚开始学的时候,总觉得ROC是个抽象的概念,直到有一次做模拟滤波器设计,发现极点位置决定了系统是否稳定。嗯,从那以后我再也不敢忽视ROC了。

拉普拉斯变换在系统分析中的核心作用:

  • 系统函数 H(s):输出与输入的拉普拉斯变换之比
  • 极点与零点:极点决定系统稳定性,零点影响频率响应形状
  • 稳定性判据:所有极点必须在s平面的左半平面(实部小于0)
避坑指南: 我曾经在做一个模拟锁相环设计时,忽略了拉普拉斯变换的初始条件。结果仿真和实测对不上,折腾了两天才发现是拉普拉斯变换的双边和单边版本搞混了。单边拉普拉斯变换考虑了初始状态,双边则没有。做系统响应分析时,一定要搞清楚你用的是哪种。

2.4 Z变换:数字世界的拉普拉斯

Z变换是离散时间系统的拉普拉斯变换。它把离散信号映射到z平面,z = r·e^(jω)。当r=1时,Z变换退化为DTFT。

Z变换的定义:

X(z) = Σ x[n] · z^(-n)   (n从-∞到∞)

Z变换的收敛域同样重要。我记得有一次设计IIR滤波器,按照教科书上的系数直接实现,结果滤波器不稳定。后来一查,是极点在单位圆外了。所以做数字滤波器时,一定要检查所有极点是否在单位圆内。

Z变换的常用性质:

性质 时域 Z域
线性 a·x[n] + b·y[n] a·X(z) + b·Y(z)
时移 x[n-k] z^(-k)·X(z)
卷积 x[n] * h[n] X(z)·H(z)
初值定理 x[0] lim(z→∞) X(z)
实用技巧: 在FPGA里实现数字滤波器时,我习惯先用Z变换写出传递函数 H(z),然后转换成差分方程,最后用Verilog实现。这样每一步都有数学依据,不容易出错。

2.5 系统响应:输入输出之间的故事

系统响应,说白了就是给系统一个输入,看它怎么输出。我们关心两种响应:

  • 冲激响应 h(t) 或 h[n]:系统对单位冲激信号的响应。它完全描述了系统的特性。
  • 阶跃响应 s(t) 或 s[n]:系统对单位阶跃信号的响应。它反映了系统的瞬态行为。

系统响应的计算,核心就是卷积:

连续时间:y(t) = x(t) * h(t) = ∫ x(τ)·h(t-τ) dτ
离散时间:y[n] = x[n] * h[n] = Σ x[k]·h[n-k]

在实际项目中,我很少直接做卷积运算,太慢了。通常的做法是:

  1. 把信号和系统变换到频域(FFT)
  2. 在频域做乘法:Y(ω) = X(ω) · H(ω)
  3. 再反变换回时域

这就是快速卷积的原理。我在做OFDM系统的信道估计时,就是用这个方法,效率比时域卷积高了好几个数量级。

系统响应分析流程:
输入信号 x(t) → 拉普拉斯变换 → X(s)
系统冲激响应 h(t) → 拉普拉斯变换 → H(s)
输出响应:Y(s) = X(s) · H(s)
时域输出:y(t) = 拉普拉斯反变换 [Y(s)]

对于离散系统,把拉普拉斯换成Z变换就行。

最后说一句,系统响应分析里有个容易踩的坑——因果性。因果系统的输出只依赖于当前和过去的输入,不依赖未来。做实时系统时,必须保证系统是因果的。我曾经在做一个自适应均衡器时,不小心用了一个非因果的滤波器结构,结果在FPGA上跑出来的结果全是乱的。嗯,从那以后我设计任何系统,第一件事就是检查因果性。

好了,信号与系统的基础就聊到这儿。这些概念是后面所有章节的基石,建议大家多动手算几个例子,光看是学不会的。


公众号:蓝海资料掘金营,微信deep3321