语音增强
使用 DeepFilterNet3 去除语音录音中的背景噪声。模型通过 CoreML 在 Neural Engine 上高效推理,而所有信号处理(STFT、ERB filterbank、deep filtering)则在 CPU 上通过 Accelerate/vDSP 运行。
架构
DeepFilterNet3 采用双解码器架构,将频谱包络增强与精细频谱细节恢复分离。
| 阶段 | 细节 |
|---|---|
| STFT | 通过 vDSP 进行短时傅立叶变换 |
| Encoder | 4 层 SepConv2d + SqueezedGRU |
| ERB Decoder | 在 ERB 频率子带上应用的 sigmoid mask |
| DF Decoder | 5-tap 复值滤波系数 |
| iSTFT | 逆 STFT,重建时域信号 |
ERB Decoder 在等效矩形带宽(ERB)尺度上估计增益掩码,负责宽频段的频谱整形。DF Decoder 为精细细节预测 5-tap 复值滤波系数,直接在频域中应用已学习的滤波器。
处理流水线
- STFT — 使用 vDSP 将带噪音频分解为时频表示
- ERB 特征 — 将 STFT bin 映射到 ERB 频率子带
- 神经网络 — Encoder 在 Neural Engine 上处理特征;ERB 与 DF 解码器预测增强参数
- ERB 掩码 — 应用 sigmoid 增益掩码,抑制频谱包络中的噪声
- Deep Filtering — 应用 5-tap 复值系数,恢复精细频谱细节
- iSTFT — 由增强后的频谱重建干净音频
模型变体
| 变体 | 大小 | 精度 |
|---|---|---|
| INT8(默认) | ~2.2 MB | 8 位量化 |
| FP32 | ~4.3 MB | 全精度 |
模型约有 2.1M 参数。默认使用 INT8 变体,它在一半大小下提供与全精度相当的质量。
CLI 使用
# 降噪音频(输出到 _denoised.wav)
.build/release/audio denoise noisy.wav
# 指定输出文件
.build/release/audio denoise noisy.wav -o clean.wav
# 使用 FP32 模型变体
.build/release/audio denoise noisy.wav --model fp32
选项
| 选项 | 说明 |
|---|---|
--output, -o | 输出文件路径(默认 <input>_denoised.wav) |
--model | 模型变体:int8(默认)或 fp32 |
重要
DeepFilterNet3 通过 CoreML 运行在 Neural Engine 上,而不是通过 MLX 运行在 GPU 上。这意味着它可以在其他 GPU 模型(ASR、TTS)运行时也高效工作。无需编译 metallib。
模型下载
| 模型 | 大小 | HuggingFace |
|---|---|---|
| DeepFilterNet3 (CoreML FP16) | ~4.2 MB | aufklarer/DeepFilterNet3-CoreML |
与其他模型组合
语音增强作为其他模型的前处理步骤特别有用:
- 转写之前 — 在运行 ASR 前先降噪,可改善嘈杂录音的词错率
- 说话人嵌入之前 — 更干净的音频能得到更可靠的说话人嵌入向量
- 说话人分离之前 — 去噪可以改善分段精度
# 先降噪再转写
.build/release/audio denoise noisy.wav -o clean.wav
.build/release/audio transcribe clean.wav
Swift API
import SpeechEnhancement
let model = try await DeepFilterNet3.loadFromHub()
let cleanAudio = try await model.denoise(audioFile: "noisy.wav")
try cleanAudio.write(to: "clean.wav")