第一章:数字信号处理基础
各位同学好,我是你们这门课的老张。做嵌入式音频这些年,我踩过的坑比走过的路还多。今天咱们先打好地基——数字信号处理基础。这部分内容,说白了就是搞懂三件事:怎么把声音变成数字、变的时候会出什么幺蛾子、以及怎么用数学工具分析它。
1.1 采样定理——别让你的信号"说谎"
先问大家一个问题:为什么CD的采样率是44.1kHz?不是40kHz,也不是48kHz?
答案就在采样定理里。采样定理说:要无失真地还原一个模拟信号,采样频率必须大于信号最高频率的两倍。这个"两倍"的临界值,我们叫它奈奎斯特频率。
核心公式: fs > 2fmax
其中 fs 是采样率,fmax 是信号最高频率。
人耳能听到的频率范围是20Hz到20kHz。所以44.1kHz的采样率,刚好能覆盖20kHz的信号。我个人习惯在设计系统时留出10%~20%的余量,比如处理20kHz信号时,采样率至少给到48kHz。
实战经验:我在做车载音响项目时,遇到过一个问题:高音喇叭出来的声音总有点"毛刺感"。查了半天,发现是ADC的采样率设置成了32kHz,而高音信号里有8kHz以上的成分。32kHz的奈奎斯特频率是16kHz,按理说够用啊?后来才发现,功放的非线性产生了高频谐波,这些谐波超过了16kHz,混叠进了音频带。从那以后,我设计采样率时都会留足余量。
1.2 量化误差——精度与成本的博弈
采样是把连续时间变成离散时间,量化则是把连续幅度变成离散幅度。说白了,就是用有限个数字去表示无限个可能的电压值。
量化误差,就是真实值和量化值之间的差值。这个误差的范围是 ±LSB/2,其中LSB是最低有效位对应的电压。
| 量化位数 | 量化级数 | 动态范围(理论) | 典型应用 |
|---|---|---|---|
| 8位 | 256 | 48 dB | 语音通信 |
| 16位 | 65536 | 96 dB | CD音质 |
| 24位 | 16777216 | 144 dB | 专业录音 |
嗯,这里要注意:动态范围每增加6dB,相当于量化位数增加1位。16位CD音质有96dB动态范围,已经能覆盖从最轻的耳语到最强音的交响乐。
避坑指南:我曾经在一个低功耗蓝牙音箱项目里,为了省成本用了12位ADC。结果播放钢琴曲时,弱音部分全是"沙沙"的量化噪声。后来换成16位,问题立刻解决。量化位数不够,就像用粗颗粒的砂纸打磨镜面——永远磨不光滑。
1.3 混叠效应——高频信号的"伪装"
混叠,是数字信号处理里最阴险的敌人。它会让高频信号"伪装"成低频信号,混进你的音频带里,而且一旦混进来,就再也分不开了。
为什么会这样?因为采样点太少,无法区分两个不同频率的信号。比如用100Hz采样率去采一个80Hz的信号和一个180Hz的信号,得到的采样值完全一样。
混叠公式: falias = |fsignal - n × fs|
其中 n 是使结果落在 [0, fs/2] 区间内的整数。
我建议在ADC前端一定要加抗混叠滤波器。这个滤波器是个低通滤波器,截止频率设在 fs/2 以下。别想着靠软件滤波——混叠一旦发生,软件也救不了你。
真实案例:有次我调试一个数字对讲机,发现接收到的语音里总有"嗡嗡"的底噪。用频谱仪一看,50Hz工频干扰混叠进了音频带。原来ADC前端的抗混叠滤波器设计得太简陋,截止频率没压住。加了一级二阶有源低通滤波器后,世界清净了。
1.4 Z变换入门——离散世界的"傅里叶"
Z变换,是分析离散系统的利器。它把差分方程变成代数方程,把卷积变成乘法。说白了,就是让复杂的计算变得简单。
Z变换的定义式:
X(z) = Σ x[n] · z^(-n) (n从负无穷到正无穷)
在实际嵌入式系统里,我们处理的是因果序列(n<0时x[n]=0),所以求和从0开始。
Z变换有几个重要性质,我挑最常用的说:
- 线性性: a·x[n] + b·y[n] 的Z变换是 a·X(z) + b·Y(z)
- 时移性: x[n-k] 的Z变换是 z^(-k) · X(z)
- 卷积定理: x[n] * y[n] 的Z变换是 X(z) · Y(z)
卷积定理特别有用。在时域做卷积,计算量是O(N²)。在Z域做乘法,计算量是O(N)。这就是为什么数字滤波器都在Z域设计。
举个例子:一个简单的差分方程 y[n] = x[n] + 0.5·y[n-1]
两边做Z变换:Y(z) = X(z) + 0.5·z^(-1)·Y(z)
整理得传递函数:H(z) = Y(z)/X(z) = 1 / (1 - 0.5·z^(-1))
这个系统稳定吗?看极点:z=0.5,在单位圆内,稳定。
Z变换的逆变换,说白了就是把X(z)变回x[n]。常用的方法有部分分式展开和长除法。我个人习惯用部分分式展开,因为能直接看出系统的模态响应。
学习建议:刚开始学Z变换时,别急着背公式。先理解它"把离散序列映射到复平面"这个思想。我当时花了整整一周才搞明白Z平面和S平面的关系。后来做IIR滤波器设计时,这个理解帮了大忙。
小结
这一章的内容,是后面所有章节的基础。采样定理告诉你采样率怎么选,量化误差告诉你精度怎么定,混叠效应告诉你滤波器为什么重要,Z变换告诉你分析工具怎么用。
下节课,咱们开始讲FIR滤波器设计。到时候你会看到,Z变换的知识会像一把钥匙,打开数字滤波器设计的大门。
课后提醒:我建议你把采样定理和混叠效应这两节反复看几遍。我在面试嵌入式音频工程师时,十个人里有八个在这两个问题上栽跟头。基础不牢,地动山摇啊。