第一章:离散时间信号与系统
1.1 序列表示——说白了就是数字世界的“快照”
离散时间信号,我习惯叫它“序列”。你想想看,连续信号就像一条连续的曲线,而离散信号就是在这条曲线上每隔一段距离拍一张照片。这些“照片”按时间顺序排好,就是序列了。
数学上,我们用 x[n] 来表示一个序列。n 是整数,代表时间索引。比如 x[0] 是第 0 个时刻的值,x[1] 是第 1 个时刻的值。嗯,这里要注意:n 只能是整数,不能是 1.5 或者 2.3。
核心概念:序列 x[n] 只在整数点上有定义,其他时间点我们不考虑。这和连续信号完全不同。
常见的序列有几种:
- 单位脉冲序列 δ[n]:只在 n=0 时为 1,其余全为 0。这是离散系统的“砖块”,任何序列都能用它拼出来。
- 单位阶跃序列 u[n]:n≥0 时为 1,n<0 时为 0。相当于一个开关,从某个时刻开始一直开着。
- 实指数序列:x[n] = a^n,a 是实数。a 的绝对值小于 1 时衰减,大于 1 时发散。
我在项目中遇到过一个问题:采集到的信号明明是连续的,但 ADC 采样后变成了序列。这时候如果采样率不够,就会出现混叠——说白了就是高频信号伪装成了低频信号,坑得很。
个人经验:处理序列时,我建议先把索引范围画清楚。比如 n 从 -5 到 10,画个图一目了然。别偷懒,画图能避免 80% 的索引错误。
1.2 线性移不变系统——系统的“身份证”
一个系统,说白了就是把输入序列变成输出序列的“黑盒子”。我们最关心两类性质:线性和移不变性。
线性:系统对叠加和缩放保持“老实”。如果输入 x1[n] 得到 y1[n],x2[n] 得到 y2[n],那么输入 a·x1[n] + b·x2[n] 应该得到 a·y1[n] + b·y2[n]。不满足这个,就是非线性系统。
移不变性:输入延迟 k 个时刻,输出也延迟 k 个时刻。说白了就是系统不“挑时间”,今天处理信号和明天处理信号,行为一样。
重要结论:线性移不变系统(LSI 系统)完全由它的单位脉冲响应 h[n] 决定。输入 x[n] 和 h[n] 做卷积,就得到输出 y[n]。
卷积公式:
y[n] = x[n] * h[n] = Σ x[k] · h[n-k] (k 从 -∞ 到 ∞)
这个公式我刚开始学的时候觉得挺抽象。后来做音频滤波项目时,我拿一个脉冲信号过滤波器,看输出波形——那就是 h[n] 啊!瞬间就理解了。
避坑指南:我曾经在计算卷积时搞错了索引范围。两个有限长序列卷积,结果长度是 Lx + Lh - 1。比如 x 有 5 个点,h 有 3 个点,结果就是 7 个点。少一个都不对。
1.3 因果性与稳定性——系统能不能用,就看这两条
因果性和稳定性,是判断一个系统是否“靠谱”的两个硬指标。
因果性:系统的输出只依赖于当前和过去的输入,不依赖未来的输入。说白了就是“不能预知未来”。数学上,如果 n<0 时 h[n] = 0,系统就是因果的。
为什么重要?你想想看,一个实时系统,比如手机通话,如果它需要“未来的声音”才能处理当前的声音,那不就卡住了吗?
稳定性:输入有界,输出也有界。数学上叫 BIBO 稳定(Bounded Input Bounded Output)。判断条件是:h[n] 的绝对值之和是有限的。
稳定性条件:Σ |h[n]| < ∞ (n 从 -∞ 到 ∞)
我在做数字滤波器设计时,遇到过滤波器发散的情况。一查,原来是极点跑到了单位圆外面——系统不稳定了。输出越来越大,最后全是 NaN。
快速判断法:对于因果系统,看 h[n] 是否随着 n 增大而衰减到 0。如果 h[n] 不衰减甚至增长,那系统肯定不稳定。
1.4 知识体系总览
下面这张图,是我梳理的本章核心逻辑。你看一眼,就能把知识点串起来。
1.5 小结与实用建议
这一章的内容,说白了就是离散信号处理的“地基”。序列表示是语言,线性移不变是规则,因果稳定是约束。这三样东西搞明白了,后面学频率响应、滤波器设计就顺了。
我个人的习惯是:拿到一个新系统,先问三个问题——
- 它是线性的吗?
- 它是移不变的吗?
- 它稳定吗?
如果前两个答案是“是”,那恭喜你,可以用卷积和频率响应来分析。如果第三个答案是“否”,那赶紧改设计,不稳定的系统在实际中没法用。
实用技巧:判断因果性,看 h[n] 在 n<0 时是不是全零。判断稳定性,看 Σ|h[n]| 是不是有限。这两个判断,用 MATLAB 或者 Python 几行代码就能验证。
好了,第一章就到这里。记住:序列是离散世界的语言,卷积是系统的灵魂,因果和稳定是系统的“底线”。