语音增强

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

架构

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 — 由增强后的频谱重建干净音频

模型变体

变体大小精度
INT8(默认)~2.2 MB8 位量化
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 MBaufklarer/DeepFilterNet3-CoreML

与其他模型组合

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

# 先降噪再转写
.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")

也可在 Android 与 Linux 上通过 ONNX Runtime 使用