数字信号处理基础:采样定理、量化与编码、时域与频域表示、傅里叶变换(DFT/FFT)简介

各位同学,欢迎来到第三讲。

说实话,自适应降噪算法玩得再花哨,根基还是数字信号处理。这一章,咱们就把地基夯实了。我会把采样定理、量化编码、时频域概念和傅里叶变换串起来讲。你想想看,麦克风采集到的声音,从模拟世界进入数字芯片,中间到底经历了什么?

3.1 采样定理:别让信号“说谎”

先问个问题:为什么CD的采样率是44.1kHz?

答案就是奈奎斯特采样定理。简单说:采样频率必须大于信号最高频率的两倍。否则,高频信号会伪装成低频信号混进来,这就是“混叠”。

核心公式: fs > 2 × fmax

工程上一般取 2.5~4 倍,留点余量。

我在项目中遇到过一件事。有一次调试ANC耳机,低频降噪效果很好,但总觉得有“嘶嘶”声。查了半天,发现是ADC采样率设成了32kHz,而麦克风能拾取到15kHz的环境噪声。按照采样定理,15kHz的信号需要至少30kHz的采样率,32kHz勉强够,但抗混叠滤波器不够陡,导致部分高频分量折叠到了可听频段。嗯,后来把采样率提到48kHz,问题就解决了。

避坑指南: 我曾经以为只要采样率够高就行,忽略了抗混叠滤波器。记住:采样定理的前提是信号已经限带。如果前端没有低通滤波器,采样率再高也没用。

3.2 量化与编码:精度与噪声的博弈

采样把时间离散化了,量化则把幅度离散化。说白了,就是把连续的电压值,映射到有限的二进制码上。

量化过程一定会引入误差,我们叫它量化噪声。量化位数每增加1位,信噪比提升约6dB。16位量化,理论动态范围是96dB;24位就是144dB。

量化位数 动态范围(理论) 典型应用
8 bit 48 dB 语音通信
16 bit 96 dB CD、WAV
24 bit 144 dB 专业录音、ANC参考信号

我个人习惯在自适应降噪系统中,至少用24位ADC。为什么?因为降噪算法需要处理很微弱的误差信号,如果量化噪声太大,算法会误判,导致收敛不稳定。

编码方式也有讲究。线性PCM最直接,但数据量大。像μ-law、A-law这种非线性编码,在语音通信里很常见——人耳对小声更敏感,所以用小步长量化小声,大步长量化大声。

小技巧: 如果你在做嵌入式降噪,内存紧张,可以考虑用16位线性PCM配合动态范围压缩。我在一个低功耗蓝牙耳机项目里就这么干过,效果还不错。

3.3 时域与频域:同一枚硬币的两面

时域,就是信号随时间怎么变。你看到的一条波形,横轴是时间,纵轴是幅度。频域,则是信号由哪些频率成分组成。横轴是频率,纵轴是幅度或相位。

为什么降噪算法要跑到频域去做?因为人耳对频率的感知是“对数”的,而且噪声往往集中在某些频段。在时域里,噪声和语音混在一起,很难分开。到了频域,你可以精准地“削掉”某个频段的噪声,而不影响其他频段。

举个例子:空调的嗡嗡声,频率大概在50Hz~100Hz。在时域波形里,它和语音叠加在一起,你很难直接滤除。但在频域里,你一眼就能看到那个低频的“尖峰”,直接衰减它就行了。

我的理解: 时域是“原汁原味”的物理世界,频域是“分析加工”的数学世界。做降噪,你得学会在这两个世界之间自由切换。

3.4 傅里叶变换:从时域到频域的“翻译官”

傅里叶变换,就是把时域信号分解成不同频率的正弦波。数学公式看着吓人,但核心思想很简单:任何周期信号,都可以看作一系列正弦波的叠加

实际系统中,我们处理的是离散的、有限长的数字信号。所以用的是离散傅里叶变换(DFT)。DFT的计算量很大,N点DFT需要N²次复数乘法。直到快速傅里叶变换(FFT)出现,才把计算量降到N·log₂(N)。

举个例子:1024点的DFT,需要约100万次运算。而FFT只需要约1万次。差了100倍!

// 一个简单的FFT使用示例(伪代码)
// 假设 audio_buffer 是时域数据,长度1024
complex[] freq_data = FFT(audio_buffer, 1024);

// 现在 freq_data[0] 是直流分量
// freq_data[1] 对应频率 = 采样率 / 1024
// freq_data[k] 对应频率 = k * 采样率 / 1024

// 做降噪处理:比如衰减低频
for (int k = 0; k < 10; k++) {
    freq_data[k].magnitude *= 0.1;  // 衰减前10个频点
}

// 逆变换回时域
complex[] output_buffer = IFFT(freq_data, 1024);

我在做ANC滤波器设计时,经常用FFT来观察误差麦克风的频谱。如果看到某个频点有异常凸起,就知道该调整那个频段的滤波器系数了。

注意: FFT有个“频谱泄露”的问题。因为我们对无限长的信号做了“截断”,相当于加了一个矩形窗。这会导致频谱能量扩散到相邻频点。解决办法是加窗函数,比如汉宁窗、海明窗。我习惯用汉宁窗,旁瓣衰减快,适合音频处理。

3.5 知识体系总览

下面这张图,把本章的核心逻辑串起来了。从模拟信号到数字信号,再到频域分析,每一步都有坑,也都有技巧。

数字信号处理基础:知识体系 模拟信号 连续时间/连续幅度 采样定理 离散时间信号 连续幅度 量化与编码 数字信号 离散时间/离散幅度 DFT/FFT 频域表示 幅度/相位 关键要点: • 采样率必须 > 2×信号最高频率,否则产生混叠 • 量化位数每增加1位,信噪比提升6dB • 时域直观,频域精准——降噪算法多在频域实现 • FFT是DFT的快速实现,计算量从N²降到N·log₂(N) • 避坑:别忘了抗混叠滤波器和加窗函数!

好了,这一章的内容就这些。采样定理、量化编码、时频域概念、FFT,这四个点串起来,就是数字信号处理的骨架。后面讲具体降噪算法时,你会发现这些基础概念无处不在。

个人建议: 如果你刚开始接触这些概念,别急着啃公式。先动手用Python或MATLAB写一段代码:生成一个正弦波,加噪声,做FFT看看频谱,再做个低通滤波。亲手跑一遍,比看十遍书都管用。

专注资料整理