2. 语音降噪基础

做语音降噪,说白了就是在跟信号打交道。你连信号长什么样都搞不清楚,后面那些滤波器、自适应算法根本玩不转。这一章咱们把基础打牢,后面实战才不会慌。

2.1 时域与频域:信号的两副面孔

我刚开始接触数字信号处理时,总觉得时域和频域是两个世界的东西。后来一个老工程师跟我说了句话,我记到现在——「时域是信号的样子,频域是信号的灵魂」。

时域,就是信号随时间变化的轨迹。你拿示波器看麦克风采集的语音,那条上下跳动的曲线就是时域波形。横轴是时间,纵轴是幅度。我们平时录的音频文件,存的就是时域采样点。

频域,则是信号在不同频率上的能量分布。你想想看,一段语音里有人声、有空调嗡嗡声、有键盘敲击声,这些声音混在一起,时域上根本分不清谁是谁。但转到频域一看,每个频率分量清清楚楚。

核心理解:时域告诉你「什么时候有声音」,频域告诉你「有什么频率的声音」。降噪的本质,就是在频域里找到噪声所在的频率,然后把它干掉。

我在项目里遇到过这么个事:有个同事死活调不好降噪参数,时域波形看着挺干净,但一听还是有底噪。我让他把信号转到频域看看,结果发现有个 50Hz 的工频干扰一直没滤掉。时域上它被语音盖住了,频域里一目了然。

维度 时域 频域
横轴 时间 (s) 频率 (Hz)
纵轴 幅度 幅度/能量
直观性 高,波形一眼看懂 需要转换思维
降噪用途 检测信号起止、能量变化 分离语音与噪声

2.2 采样定理:别让你的信号「失真」

模拟信号是连续的,但数字处理器只能处理离散的点。怎么把连续信号变成离散点?采样。但采样不是随便采的,这里有个铁律——奈奎斯特采样定理。

定理很简单:采样频率必须大于信号最高频率的两倍。否则,就会发生混叠——高频信号伪装成低频信号混进来,你根本不知道。

我曾经踩过这个坑:做一款低功耗降噪耳机,为了省电把采样率从 16kHz 降到 8kHz。结果高频齿音全变成了低频噪声,怎么调都去不掉。后来才发现是混叠了——语音里 4kHz 以上的成分被折返到低频段,跟噪声混在一起,神仙也分不开。

实际工程中,我建议采样率至少留 20%~30% 的余量。比如语音信号最高频率通常认为是 4kHz(电话带宽),那采样率至少 8kHz,但我个人习惯用 16kHz。为什么?留点余量给抗混叠滤波器,也方便后面做算法处理。

应用场景 最高频率 理论最低采样率 工程推荐采样率
电话语音 4 kHz 8 kHz 16 kHz
宽带语音 8 kHz 16 kHz 32 kHz
高保真音频 20 kHz 40 kHz 44.1/48 kHz

2.3 傅里叶变换:时域到频域的「翻译官」

傅里叶变换,说白了就是把信号从时域翻译到频域的工具。你给它一段时域波形,它告诉你这段信号里有哪些频率成分,每个频率有多强。

公式长这样:

X(f) = ∫ x(t) · e^(-j2πft) dt

别被积分符号吓到。你只要记住:傅里叶变换的本质是「相关性检测」——它拿不同频率的正弦波去跟原始信号做对比,匹配上了就记一笔,匹配不上就忽略。

在嵌入式系统里,我们不用连续傅里叶变换,用的是离散傅里叶变换(DFT)。DFT 的公式:

X[k] = Σ x[n] · e^(-j2πkn/N),  k = 0, 1, ..., N-1

其中 N 是采样点数,x[n] 是时域采样值,X[k] 是频域结果。k 对应的是第 k 个频率分量。

小技巧:实际工程中没人手写 DFT,都用快速傅里叶变换(FFT)。FFT 是 DFT 的高效实现,能把计算复杂度从 O(N²) 降到 O(N log₂N)。N=1024 时,FFT 比 DFT 快两个数量级。

2.4 频谱与功率谱:看透噪声的本质

做完 FFT 之后,你得到的是复数结果。怎么用?

  • 幅度谱:取绝对值,|X[k]|,表示每个频率分量的强度。
  • 相位谱:取角度,∠X[k],表示每个频率分量的相位偏移。
  • 功率谱:|X[k]|²,表示每个频率分量的能量。

降噪算法里,我们最关心的是幅度谱和功率谱。为什么?因为噪声的能量分布是判断噪声类型的关键依据。白噪声在所有频率上能量均匀,粉红噪声低频能量高,窄带噪声集中在某个频率附近——这些特征在功率谱上一眼就能看出来。

我习惯在调试降噪算法时,先把噪声段的功率谱画出来看看。这能帮你快速判断:噪声是平稳的还是非平稳的?是宽带还是窄带?然后针对性地选算法。

2.5 知识体系总览

下面这张图把本章的核心逻辑串起来了。你从时域出发,经过采样定理进入数字域,再用傅里叶变换转到频域,最后在频域里做降噪处理。每一步都有坑,每一步也都有技巧。

信号基础:从时域到频域的知识体系 时域信号 x(t) 或 x[n] 采样定理 fs > 2·fmax 频域信号 X(f) 或 X[k] ADC 采样 FFT 傅里叶变换 频谱 / 功率谱 频域降噪 ⚠ 常见陷阱 采样率不足 → 混叠 FFT 点数太少 → 频率分辨率低 忽略相位 → 重建信号失真

2.6 工程中的实用要点

最后,我把自己做语音降噪这些年积累的几个要点列出来,你直接拿去用:

  1. 采样率选型:语音降噪最低 8kHz,推荐 16kHz。低于 8kHz 高频信息丢失严重,降噪后语音听起来「闷」。
  2. FFT 点数:常用 256、512、1024。点数越大频率分辨率越高,但时延也越大。实时系统里 512 点是个不错的折中。
  3. 加窗:做 FFT 前一定要加窗(汉宁窗、海明窗),否则频谱泄漏会让你怀疑人生。
  4. 帧移:一般取 FFT 点数的一半,比如 512 点 FFT,帧移 256 点。这样帧与帧之间有 50% 重叠,能避免分帧带来的边界效应。

我的习惯:每次拿到新的音频数据,第一件事就是画时域波形和频谱图。时域看有没有削波、有没有静音段;频域看噪声分布在哪些频率、语音能量集中在哪。这两张图看完,降噪方案基本就有数了。

嗯,信号基础就聊到这儿。这些概念后面每一章都会用到,尤其是傅里叶变换和频谱分析,几乎是所有降噪算法的起点。你先把这些吃透,后面学滤波器设计、自适应算法才会顺。