Skip to content

语音增强与降噪

语音增强(Speech Enhancement)的目标是从含噪录音中恢复干净语音,是 hearing aid(助听器)、视频会议、手机通话等场景的核心前处理环节。它也是 语音识别 ASR 的关键前置步骤——噪声严重时 ASR 词错率会急剧上升。前置阅读:语音与音频技术概览。

语音增强 = 给 AI 装一个”降噪耳机”。 想象你在嘈杂的咖啡厅打电话:人耳会自动”聚焦”对方的声音、屏蔽背景杂音。语音增强算法就是让机器完成同样的事——从混合信号中把目标人声提取出来。

理解语音增强,首先需要理解为什么降噪很难。一段含噪录音是”干净人声”和”噪声”在时域上的简单叠加(加法混音),数学上表示为 y(t)=s(t)+n(t)y(t) = s(t) + n(t)。知道 y(t)y(t) 要反推 s(t)s(t) 本质上是一个欠定问题——只有一个方程,两个未知数。因此降噪不可能”完美”,只能基于统计规律做”最优估计”。

传统方法和深度学习方法走的是两条路线:

  • 谱减法(Spectral Subtraction)= 照镜子减背景。 先在”没人说话”的间隙采样噪声频谱,再从含噪频谱中把它减掉——像用橡皮擦擦掉背景。简单粗暴,但会在残留中留下”音乐噪声”(musical noise),即零散的”叮叮”声。
  • 维纳滤波(Wiener Filter)= 最优比例混合。 不直接减,而是根据信噪比估算一个增益系数:信号强的地方多保留,噪声强的地方多压制。数学上是最小均方误差(MMSE)意义下的最优线性滤波器。
  • MMSE 统计模型 = 概率版维纳滤波。 对语音和噪声分别建模为概率分布(如高斯分布),用最小均方误差准则估计干净频谱的每个分量——比维纳滤波更精细,是经典方法的性能天花板。
  • 深度学习方法 = 端到端学习映射。 把”含噪 → 干净”当作一个映射问题,用神经网络直接学——不再依赖噪声平稳性假设,在非平稳噪声(键盘声、警笛声等突发噪声)下优势巨大。

人发出的语音信号是连续变化的——你说话时,嘴唇和舌头的位置不断移动,产生不同的声音。但如果把时间窗口缩小到 20-40 毫秒,口腔的形状在这么短的时间内几乎不变,声音可以近似为稳态信号。这就是语音处理的基本假设:语音是短时平稳的(short-time stationary)。

STFT(Short-Time Fourier Transform,短时傅里叶变换) 就是利用这一特性的核心工具:

  1. 把连续音频切成 20-40ms 的短帧(通常有 50% 重叠)
  2. 对每帧施加窗函数(如汉明窗),减少边缘效应
  3. 对每帧做 FFT(快速傅里叶变换),得到该时刻的频域表示
  4. 拼接所有帧的频谱,得到时频图(Spectrogram)——横轴是时间,纵轴是频率,颜色深浅表示能量大小

STFT 的结果是一个复数:包含幅度(magnitude,该频率分量的强度)和相位(phase,该频率分量的起始角度)。传统方法只用幅度谱做处理、丢弃相位(因为相位难以估计),但深度学习的复数域方法同时处理两者——后面会详细解释。

传统频域方法依赖噪声估计和增益函数,深度学习方法则直接从含噪频谱(或波形)学习到干净语音的映射:

从最朴素的映射网络到实时因果模型,每一步都在解决前一代的实际约束:

STFT 输出的是复数:S(t,f)=∣S(t,f)∣×ejφ(t,f)S(t, f) = |S(t, f)| \times e^{j\varphi(t, f)},其中 ∣S∣|S| 是幅度,φ\varphi 是相位。传统方法(谱减、维纳)只修改幅度 ∣S∣|S|,保留原始相位 φ\varphi。问题在于:含噪信号的相位本身就受噪声污染。如果只修正幅度而用脏相位做逆变换,合成出来的声音会有”模糊感”(phaselss reconstruction artifact)——就像一幅分辨率不够的照片被强行放大。

复数域方法(如 DCCRN)同时处理实部和虚部,相当于同时修正幅度和相位,能更好地重建干净语音的精细结构。

谱减法(Spectral Subtraction) 的数学表达:

∣S^(t,f)∣2=max⁡(∣Y(t,f)∣2−λ(f),  0)|\hat{S}(t, f)|^2 = \max(|Y(t, f)|^2 - \lambda(f),\; 0)

其中 YY 是含噪幅度谱,λ(f)\lambda(f) 是估计的噪声功率谱(从静音段平均得到),max⁡(⋅,  0)\max(\cdot,\; 0) 防止出现负值。输出 S^\hat{S} 使用含噪信号的原始相位做逆 STFT。

问题在于:噪声是随机波动的,某些频率上实际噪声值可能远大于估计值 λ(f)\lambda(f),导致减不干净——残留的频率尖峰听起来像随机音符,即”音乐噪声”。

维纳滤波(Wiener Filter)从统计最优角度出发:

H(f)=Ps(f)Ps(f)+Pn(f)H(f) = \frac{P_s(f)}{P_s(f) + P_n(f)}

其中 Ps(f)P_s(f) 是语音功率谱密度,Pn(f)P_n(f) 是噪声功率谱密度。直觉上:信噪比高的频段(语音远强于噪声)H≈1H \approx 1(几乎不衰减),信噪比低的频段 H≈0H \approx 0(大幅压制)。维纳滤波在最小均方误差意义下是最优的线性滤波器。

这是语音增强中一个核心工程约束:

  • 因果模型(Causal):在时刻 tt 做决策时,只能用 tt 及之前的信息(当前帧和过去帧),不能”偷看”未来。适用于实时场景(手机通话、视频会议),延迟可低至 10ms。DCCRN、RNNoise 等就是因果模型。
  • 非因果模型(Non-causal):可以使用未来信息。例如处理时刻 tt 的帧时,还可以利用 t+1,t+2,…t+1, t+2, \ldots 的帧。效果更好,但引入了延迟(通常几百毫秒)。适用于离线场景(音频后期处理、录音修复)。

实时通话的典型延迟预算:端到端总延迟需低于 20ms(人耳不感知),其中算法本身的延迟只能占一小部分,因此实时增强模型几乎都是因果模型。

DCCRN(Deep Complex Convolution Recurrent Network) 的关键创新是复数域处理:

  • 传统方法只处理 STFT 的幅度谱,丢弃相位信息。但相位对语音质量至关重要。
  • DCCRN 用复数卷积(complex-valued convolution)同时处理实部和虚部,保留完整的复频域信息。复数卷积的定义:如果输入是 (a+bi)(a + bi),权重是 (c+di)(c + di),则复数卷积输出 (ac−bd)+(ad+bc)i(ac - bd) + (ad + bc)i。
  • 编码器-解码器结构:编码器逐层下采样提取深层特征,CRN(卷积循环网络)在中间做时序建模,解码器逐层上采样恢复频域掩码。
  • 输出一个复数掩码,与输入复频谱逐元素相乘后做逆 STFT 得到增强后的波形。

FullSubNet 融合了全频带(full-band)和子频带(sub-band)信息:全频带网络看整个频谱捕捉全局噪声特征,子频带网络分别处理每个频率子带,捕捉精细的频率结构。这种融合在 DNS Challenge 上取得了优异表现。

DeepFilterNet 3:CPU 实时降噪的工业标杆

Section titled “DeepFilterNet 3:CPU 实时降噪的工业标杆”

DeepFilterNet 3(2023-2024)是一个轻量级实时降噪模型,核心创新是使用**深度滤波器(Deep Filter, DF)**替代传统的掩蔽(masking)方法:

  • 传统方法预测一个频域掩码与含噪频谱相乘;DeepFilterNet 预测一组滤波器系数,直接对含噪信号做滤波操作。
  • 这种方式计算量更小、更适合 CPU 实时运行,且在 DNS Challenge 上表现优异。
  • 支持 48kHz 采样率,适合高质量语音通信场景。

MP-SENet(ICASSP 2024)是语音增强的新 SOTA:

  • 同时预测幅度(Magnitude)和相位(Phase),而非仅预测幅度掩码。
  • 使用两路网络分别建模幅度的幅频特性和相位的相频特性。
  • 在 VoiceBank+DEMAND 和 DNS Challenge 等多个基准上取得最优 PESQ 和 STOI 分数。

TF-GridNet(2024)将语音增强建模为三维张量(时间 × 频率 × 通道)的处理:

  • 在时间维度和频率维度上交替使用自注意力,捕捉时频联合模式。
  • 每一层的处理包含三个子模块:沿时间做注意力、沿频率做注意力、跨通道混合。
  • 在语音分离和语音增强两大任务上均取得 SOTA。

2024 年起,WebRTC 和主流浏览器开始集成基于深度学习的 AI 降噪:

  • NVIDIA Broadcast / RTX Voice:利用 GPU Tensor Core 实时执行深度降噪,广泛用于直播(OBS)、视频会议和录音。
  • WebRTC AI Noise Suppression:Chrome 等浏览器内置实时 AI 降噪,无需安装插件,直接在 getUserMedia 层处理。
import numpy as np # 数值计算
import librosa, librosa.display # 音频处理与可视化
# 加载含噪音频
noisy, sr = librosa.load("noisy.wav", sr=16000)
# 计算 STFT 幅度谱(n_fft 越大频率分辨率越高)
S = np.abs(librosa.stft(noisy, n_fft=512))
# 取前 6 帧作为噪声参考(无人说话的起始段)
noise_profile = np.mean(S[:, :6], axis=1, keepdims=True)
# 谱减法:从含噪幅度中减去噪声估计(不小于 0)
S_clean = np.maximum(S - noise_profile, 0)
# 逆 STFT 恢复时域波形(相位沿用含噪信号的相位)
y_clean = librosa.istft(S_clean * np.exp(1j * np.angle(
librosa.stft(noisy, n_fft=512))))
librosa.write_audio("enhanced.wav", y_clean, sr=16000)
print("降噪完成,输出 enhanced.wav")

💡 实际工程中很少直接用谱减法(会留下音乐噪声),更多使用深度学习模型。上面代码展示了频域降噪的核心思路:估计噪声 → 计算增益 → 修正频谱。

用 DeepFilterNet 深度学习实时降噪

Section titled “用 DeepFilterNet 深度学习实时降噪”
# DeepFilterNet 3:官方预训练权重,CPU 上即可实时运行
# pip install deepfilternet soundfile
from df.audio import load_audio, save_audio
from df import init_df, enhance
# 初始化模型(首次运行自动下载 DeepFilterNet3 权重)
model, df_state, _ = init_df()
# 加载含噪音频(自动重采样到模型要求的分辨率)
audio, sr = load_audio("noisy.wav", sr=48000)
# 执行流式降噪,返回干净语音波形
enhanced = enhance(model, df_state, audio)
# 保存增强结果
save_audio("enhanced_dl.wav", enhanced, sr)
print("深度降噪完成,输出 enhanced_dl.wav")

💡 深度学习方案的优点:对非平稳噪声(键盘声、警笛、多人说话)效果远好于谱减法,且不会引入音乐噪声。训练时把干净语音与各类噪声按不同信噪比混合(DNS Challenge 数据集),模型就学会了泛化。

# pip install noisereduce librosa soundfile
import noisereduce as nr
import librosa, soundfile as sf
audio, sr = librosa.load("noisy.wav", sr=16000)
# 非平稳模式:自适应频谱门限,不假设噪声稳定(效果通常更好)
clean = nr.reduce_noise(y=audio, sr=sr, stationary=False, prop_decrease=0.8)
sf.write("clean.wav", clean, sr)
print("降噪完成")
  • 实时性是关键约束:手机通话和视频会议要求算法延迟低于 20ms(人耳不感知),因此必须使用因果(causal)模型——只看当前和过去帧,不能”偷看”未来。DCCRN、DeepFilterNet、RNNoise 等就是专为实时场景设计的。
  • 离线场景可用双向模型:录音后处理(podcast 后期、音频修复)不要求实时性,可用双向 RNN 或 Transformer(如 TF-GridNet)获得更好效果。
  • 噪声估计的难点:传统方法的性能高度依赖噪声估计的准确性。平稳噪声(空调嗡嗡声)相对容易估计;非平稳噪声(突发的关门声、警笛)则需要深度学习方法来应对。
  • 复数频谱优于幅度频谱:早期深度学习方法只用幅度谱、丢弃相位;DCCRN、MP-SENet 等模型同时处理实部和虚部(复数域),能更好地重建语音的精细结构。
  • 数据增强至关重要:训练数据通常通过将干净语音与各种噪声按不同信噪比混合来生成(如 DNS Challenge 的数据集)。噪声种类越丰富,泛化能力越强。
  • 评估指标:客观指标用 PESQ(Perceptual Evaluation of Speech Quality,语音感知质量,模拟人耳对语音质量的主观感受,范围 -0.5 到 4.5,越高越好)和 STOI(Short-Time Objective Intelligibility,短时客观可懂度,衡量语音能否被听懂,范围 0 到 1,越高越好);主观评估用 MOS(Mean Opinion Score,5 分制人耳评分)。
  • 与 ASR 的联合优化:语音增强不是 ASR 的万能药——过度增强会引入失真反而降低识别率。联合训练(joint training)让增强模块直接为 ASR 性能优化,效果优于两阶段串联。
  • 视频会议降噪:Zoom 的”原始声音”模式、Microsoft Teams 的 AI 降噪(基于深度学习模型)、腾讯会议的 AI 降噪——在居家办公场景中过滤键盘声、婴儿哭声、街道车流声。NVIDIA Broadcast 利用 GPU 实现实时 AI 降噪,广泛用于直播场景。
  • 助听器(Hearing Aid):现代数字助听器内置多麦克风阵列和实时语音增强算法,帮助听障人士在嘈杂环境中听清对话。延迟要求极严(小于 10ms),否则用户会感到嘴唇动作和声音不同步。
  • 手机通话降噪:iPhone 和 Android 手机的”通话降噪”功能,利用双麦克风波束成形(Beamforming,利用多麦克风的空间信息增强目标方向的声音)+ 单通道增强,在嘈杂街头也能让对方听清你的声音。
  • ASR 前处理:会议室远场拾音场景(如智能音箱、会议机器人)中,声学回声消除(AEC)+ 波束成形 + 语音增强构成标准前处理链路,显著降低 ASR 词错率。详见 语音识别 ASR。
  • 音频修复:老唱片去噪、犯罪现场录音增强、影视后期对白清洁——这些离线场景可使用 TF-GridNet、MP-SENet 等最先进的大模型获得最佳效果。
  • Cochlear implant(人工耳蜗)信号处理:将增强后的语音信号转换为电刺激信号,帮助重度听障患者理解语音。
类库语言说明
DeepFilterNet 3Python/Rust开源深度学习实时降噪模型,低复杂度,可在 CPU 上实时运行(48kHz)
RNNoiseCMozilla 开发的基于 RNN(GRU)的实时降噪库,延迟约 10ms,广泛用于 WebRTC 通话
SpeechBrainPython开源语音工具包,提供语音增强、分离、ASR 等完整模块
AsteroidPython基于 PyTorch 的语音分离与增强库,支持 ConvTasNet、SepFormer 等
librosaPython音频分析经典库,可用于实现传统谱减法、维纳滤波等基线方法
torchaudioPythonPyTorch 官方音频库,提供 STFT/ISTFT 和多种数据增强操作
noisereducePython轻量级频谱降噪库,支持平稳和非平稳噪声模式
术语英文解释
语音增强Speech Enhancement从含噪信号中恢复干净语音的处理过程
短时傅里叶变换STFT (Short-Time Fourier Transform)将信号分帧做 FFT,得到时频域二维表示的核心工具
谱减法Spectral Subtraction从含噪幅度谱中减去噪声谱估计的经典降噪方法
维纳滤波Wiener Filter最小均方误差意义下的最优线性滤波器,按信噪比计算增益
MMSE 估计Minimum Mean Square Error用统计模型在均方误差最小准则下估计干净频谱的方法
音乐噪声Musical Noise谱减法残留的随机频率尖峰,听感上像零散的”叮叮”声
复数域卷积循环网络DCCRN在复数域(实部+虚部)同时操作的深度卷积循环网络,实时增强的主流架构
波束成形Beamforming利用多麦克风阵列空间信息增强目标方向声音、抑制其他方向噪声
声学回声消除AEC (Acoustic Echo Cancellation)消除扬声器回传到麦克风的回声,双工通话的基础
因果模型Causal Model只使用当前和过去信息的模型,延迟低,适合实时场景
短时客观可懂度STOI (Short-Time Objective Intelligibility)客观评估语音可懂度的指标,范围 0 到 1
语音感知质量PESQ (Perceptual Evaluation of Speech Quality)ITU 标准的语音质量客观评估指标,范围 -0.5 到 4.5
DNS ChallengeDeep Noise Suppression ChallengeMicrosoft 主办的年度语音降噪比赛,推动该领域发展
  • Boll, “Suppression of Acoustic Noise in Speech Using Spectral Subtraction” (IEEE TASSP 1979):谱减法的开创性论文,至今仍是理解频域降噪的基础。
  • Ephraim & Malah, “Speech Enhancement Using a Minimum Mean-Square Error Short-Time Spectral Amplitude Estimator” (IEEE TASSP 1984):MMSE 经典论文,统计模型方法的奠基之作,引用超 8000 次。
  • Hu et al., “DCCRN: Deep Complex Convolution Recurrent Network for Phase-Aware Speech Enhancement” (Interspeech 2020):在复数域同时建模幅度和相位的深度学习增强网络,DNS Challenge 冠军方案之一。
  • Chen et al., “FullSubNet: A Full-Band and Sub-Band Fusion Model for Real-Time Speech Enhancement” (ICASSP 2022):融合全频带和子频带信息的实时增强模型,在 DNS Challenge 中取得 SOTA。
  • Wang et al., “TF-GridNet: Integrating Full- and Sub-Band Information for Multi-Speech Separation and Enhancement” (2024):时频网格网络,在增强和分离基准上取得多项 SOTA。
  • Subakan et al., “Attention Is All You Need In Speech Separation” (ICASSP 2021):SepFormer,将 Transformer 注意力机制引入语音分离,取得当时最优性能。详见 语音分离与降噪。
  • 延伸路线:增强后的语音如何转成文字,见 语音识别 ASR;如何合成新的语音,见 语音合成 TTS;多说话人分离的深入讨论见 语音分离与降噪。