第二章 信号与系统基础:信号分类、傅里叶变换、拉普拉斯变换、Z变换、系统响应
各位同学,咱们今天聊聊信号与系统。说实话,这章是整个通信系统的地基。我做了十几年软硬件协同设计,回头一看,最值钱的还是这些基础概念。你想想看,不管是做数字滤波器,还是搞OFDM调制,底层跑的都是这些变换。
先给大家画个知识框架,心里有个谱。
2.1 信号分类:别把信号搞混了
信号怎么分?我个人的习惯是看两个维度:时间和取值。时间上分连续和离散,取值上分模拟和数字。组合起来就是四种:连续模拟信号、连续数字信号、离散模拟信号、离散数字信号。嗯,这里要注意,咱们做软硬件协同设计,打交道最多的是离散数字信号——说白了就是ADC采样之后的那串二进制数。
还有几个分类维度,大家记一下:
- 周期信号 vs 非周期信号:周期信号有固定的重复模式。我在做电源纹波分析时,就经常用周期信号模型来近似开关噪声。
- 能量信号 vs 功率信号:能量有限的是能量信号,功率有限的是功率信号。实际中,脉冲信号是能量信号,正弦波是功率信号。
- 确定信号 vs 随机信号:确定信号可以用数学表达式精确描述。随机信号嘛,只能用统计特性。通信信道里的噪声就是典型的随机信号。
2.2 傅里叶变换:时域和频域的桥梁
傅里叶变换,说白了就是把信号从时间域搬到频率域。为什么要搬?因为有些东西在时域里看不清楚,到了频域一目了然。比如一个混叠了噪声的正弦波,时域波形乱糟糟的,但频谱上就是一根干净的谱线加一片底噪。
常见的傅里叶变换家族有四个成员:
| 变换类型 | 时域特性 | 频域特性 | 典型应用 |
|---|---|---|---|
| FT(傅里叶变换) | 连续、非周期 | 连续、非周期 | 模拟信号分析 |
| FS(傅里叶级数) | 连续、周期 | 离散、非周期 | 周期信号谐波分析 |
| DTFT | 离散、非周期 | 连续、周期 | 数字信号频谱 |
| DFT/FFT | 离散、周期 | 离散、周期 | 数字信号处理(最常用) |
实际项目中,我们用的最多的是FFT(快速傅里叶变换)。我记得有一次做软件无线电项目,需要在FPGA里实现一个1024点的FFT。当时我纠结是用基2还是基4的结构,最后选了基4,因为资源占用更少,而且流水线深度也合适。
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) |
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]
在实际项目中,我很少直接做卷积运算,太慢了。通常的做法是:
- 把信号和系统变换到频域(FFT)
- 在频域做乘法:Y(ω) = X(ω) · H(ω)
- 再反变换回时域
这就是快速卷积的原理。我在做OFDM系统的信道估计时,就是用这个方法,效率比时域卷积高了好几个数量级。
输入信号 x(t) → 拉普拉斯变换 → X(s)
系统冲激响应 h(t) → 拉普拉斯变换 → H(s)
输出响应:Y(s) = X(s) · H(s)
时域输出:y(t) = 拉普拉斯反变换 [Y(s)]
对于离散系统,把拉普拉斯换成Z变换就行。
最后说一句,系统响应分析里有个容易踩的坑——因果性。因果系统的输出只依赖于当前和过去的输入,不依赖未来。做实时系统时,必须保证系统是因果的。我曾经在做一个自适应均衡器时,不小心用了一个非因果的滤波器结构,结果在FPGA上跑出来的结果全是乱的。嗯,从那以后我设计任何系统,第一件事就是检查因果性。
好了,信号与系统的基础就聊到这儿。这些概念是后面所有章节的基石,建议大家多动手算几个例子,光看是学不会的。
公众号:蓝海资料掘金营,微信deep3321