语音增强 / 降噪入门工具包。用纯 Python(只依赖 numpy + scipy)实现谱减法、 维纳滤波、log-MMSE 等经典单通道降噪方法,外加一个"学习式"的监督式 NMF, 配套 SNR / PESQ 风格的评估与可视化。面向入门学习与课程实验,离线可跑、结果可复现。
起因很简单:我在学语音增强时,发现很多现成库要么是黑箱、要么依赖一堆需要编译的 C 扩展, 装起来就劝退。于是自己按公式把几个经典方法从零写了一遍,尽量让每一步都能对着代码读懂。
- 🎛️ 四种经典降噪:谱减法、维纳滤波、log-MMSE、频谱噪声门;
- 🧠 一个学习式方法:监督式 NMF(先学语音/噪声基,再做软掩码分离);
- 📏 六个评估指标:SNR、分段 SNR、SI-SDR、对数谱距离、STOI 近似、PESQ 风格综合分;
- 📈 开箱可视化:波形、频谱图、方法对比条形图(可选 matplotlib);
- 🧪 合成数据自带:内置合成语音 + 加噪,不用下载任何语料就能跑通全部示例;
- 🖥️ 命令行:
denoiselab denoise / evaluate / plot; - ✅ 零系统依赖:只用 numpy + scipy,WAV I/O 走
scipy.io.wavfile。
git clone https://github.com/hrobers3/denoise-lab.git
cd denoise-lab
pip install -e ".[viz]" # 只要核心功能可去掉 [viz]import numpy as np
import denoiselab as dl
sr = 16000
vowel = dl.synth_vowel(duration=1.0, sample_rate=sr)
clean = np.concatenate([np.zeros(int(0.3 * sr)), vowel]) # 前导静音便于估计噪声
noisy = dl.add_noise(clean, dl.white_noise(len(clean)), snr_db=0.0)
enhanced = dl.denoise(noisy, sr, method="wiener")
print(dl.evaluate(clean, enhanced, sr))命令行:
denoiselab denoise noisy.wav -m logmmse -o clean.wav
denoiselab evaluate clean.wav clean_out.wav| 方法 | 一句话 |
|---|---|
spectral_subtraction |
从含噪幅度谱减去噪声谱;带过减因子与谱下限抑制音乐噪声 |
wiener |
频域维纳增益,判决引导估计先验 SNR |
logmmse |
对数谱 MMSE,自适应更新噪声,通常整体最稳 |
spectral_gate |
类 Audacity 降噪,阈值软掩码 |
nmf(监督式) |
学好语音/噪声基后做软掩码分离 |
内置的 stoi_proxy / pesq_proxy 是轻量近似,只适合横向比较不同方法/参数,
不能替代官方 STOI / ITU-T PESQ 的绝对分数。经典幅度谱降噪常会让全局 SNR 变差、
但分段 SNR 与可懂度变好,这与听感一致,详见设计笔记。
MIT © 2026 Nian Nian