语音增强 — DeepFilterNet3

使用 DeepFilterNet3 去除语音录音中的背景噪声。模型通过 CoreML 在 Neural Engine 上高效推理,而所有信号处理(STFT、ERB filterbank、deep filtering)则在 CPU 上通过 Accelerate/vDSP 运行。

与官方 DF3 对齐

DSP 全流程遵循 libdf:分析缩放为 1/960,归一化 alpha 为 0.99,深度滤波越界抽头补零,并正确处理 NumPy 的 C/Fortran 矩阵顺序。在固定的 20 段 VoiceBank-DEMAND 子集上,Swift 的 PESQ、STOI 和 SI-SDR 分别为 3.097、0.964 和 19.12 dB;官方 Python DF3 为 3.029、0.962 和 18.31 dB。

处理前/后示例

一段带噪语音经过 DeepFilterNet3 处理,便于在本地运行前先听 CoreML 降噪效果。

带噪输入MP3, 48 kHz
DeepFilterNet3 输出MP3, 48 kHz

架构

DeepFilterNet3 采用双解码器架构,将频谱包络增强与精细频谱细节恢复分离。

阶段细节
STFT通过 vDSP 进行短时傅立叶变换
Encoder4 层 SepConv2d + SqueezedGRU
ERB Decoder在 ERB 频率子带上应用的 sigmoid mask
DF Decoder5-tap 复值滤波系数
iSTFT逆 STFT,重建时域信号

ERB Decoder 在等效矩形带宽(ERB)尺度上估计增益掩码,负责宽频段的频谱整形。DF Decoder 为精细细节预测 5-tap 复值滤波系数,直接在频域中应用已学习的滤波器。

处理流水线

  1. STFT — 使用 vDSP 将带噪音频分解为时频表示
  2. ERB 特征 — 将 STFT bin 映射到 ERB 频率子带
  3. 神经网络 — Encoder 在 Neural Engine 上处理特征;ERB 与 DF 解码器预测增强参数
  4. ERB 掩码 — 应用 sigmoid 增益掩码,抑制频谱包络中的噪声
  5. Deep Filtering — 应用 5-tap 复值系数,恢复精细频谱细节
  6. iSTFT — 由增强后的频谱重建干净音频

模型

变体大小精度
默认~2.2 MB8 位调色板权重,FP16 计算

CLI 使用

# Denoise audio (output to _denoised.wav)
.build/release/speech denoise noisy.wav

# Specify output file
.build/release/speech denoise noisy.wav -o clean.wav

# Use another compatible HuggingFace repository
.build/release/speech denoise noisy.wav --model owner/DeepFilterNet3-CoreML

选项

选项说明
--output, -o输出文件路径(默认 <input>_denoised.wav
--model兼容的 HuggingFace 模型仓库 ID(默认:aufklarer/DeepFilterNet3-CoreML
重要

DeepFilterNet3 通过 CoreML 运行在 Neural Engine 上,而不是通过 MLX 运行在 GPU 上。这意味着它可以在其他 GPU 模型(ASR、TTS)运行时也高效工作。无需编译 metallib。

模型下载

模型大小HuggingFace
DeepFilterNet3(CoreML,8 位调色板权重)~2.2 MBaufklarer/DeepFilterNet3-CoreML

与其他模型组合

语音增强作为其他模型的前处理步骤特别有用:

# Denoise then transcribe
.build/release/speech denoise noisy.wav -o clean.wav
.build/release/speech transcribe clean.wav

Swift API

import SpeechEnhancement

let model = try await SpeechEnhancer.fromPretrained()
let cleanAudio = try model.enhance(audio: noisySamples, sampleRate: 48000)

亦可在 Android 上使用;Linux 与 Windows 请使用 Speech Core(ONNX Runtime)