RNNoise 降噪入门

一、RNNoise 简介(Overview)

RNNoise 是由 Jean-Marc Valin 提出的一个基于循环神经网络(RNN)实时语音降噪算法。其主要特点如下:

  • 开源,轻量,易嵌入(仅使用 float,C 实现)

  • 支持 实时处理(低延迟)

  • 不依赖任何专有模型或第三方框架

  • 架构简单但效果强大,性能优于传统 Wiener Filter 或 Spectral Subtraction 方法

  • 全频段48K处理,16BIT.

二、整体架构(System Architecture)

RNNoise 将整个处理流程分为两个主要部分:

  • 信号预处理(Feature Extraction)

  • 神经网络预测增益(GRU + Dense 层)

  • 应用增益恢复语音(Gain Application)

  • 流程:输入音频 → 分帧+窗函数 → FFT → 特征提取 → 神经网络 → 频带增益预测 → 应用增益 → iFFT → 重建音频


 

三、神经网络架构(GRU Network)

输入特征(42维)
   ↓
GRU (Gated Recurrent Unit) - 48 单元
   ↓
GRU (Gated Recurrent Unit) - 96 单元
   ↓
Dense - 48 单元
   ↓
输出:频带增益 (22 频带) ∈ [0, 1]


输出是一个长度为 22 的向量,对应于每个 Bark 频带的增益系数(在 [0, 1] 之间),即决定了当前帧在每个频段保留多少能量。

四、增益应用与语音重建(Gain Application)

处理流程:

  1. 将输出的 22 个频带增益,插值扩展为原始 FFT bin 数(例如 256 点 FFT → 129 bins)

  2. 对输入帧的复数频谱,逐频率乘以增益

  3. 使用逆 FFT(iFFT)重建时间域帧

  4. 使用重叠加窗(OLA)重叠恢复音频

五、推理效率(Real-Time Performance)

RNNoise 可以在极低资源的设备上运行:

  • CPU:一个 ARM Cortex-A53 核心即可实时运行

  • 算力需求:小于 10 MFLOPS

  • 延迟:仅 10ms(帧长)+ 10ms(窗口重叠)

六、实际效果与评价

特性表现
语音清晰度高(不损伤原始语音)
噪声抑制效果中高(对稳定背景噪声效果显著)
对突发噪声一般(对瞬间杂音较弱)
实时性极高
嵌入适应性优秀(适合嵌入式/前端设备)

七、损失函数:

gamma =0.25

gain_loss:

e = pred_gain**gamma - target_gain**gamma
gain_loss = torch.mean((1 + 5. * vad) * mask(gain) * (e ** 2))

非线性损失:

用的是基于 gamma 的非线性差异度量 e = ĝ^γ - g^γ,这是许多语音增强论文中会采用的形式,接近对数域处理(如 γ=0.5 就是平方根)。

加权:

(1 + 5 * vad):语音段更重要,损失被放大 5 倍。

vad_loss:交叉熵损失

vad_loss = torch.mean(
    torch.abs(2 * vad - 1) * (-vad * torch.log(0.01 + pred_vad) - (1 - vad) * torch.log(1.01 - pred_vad))
)

总的损失:

loss = gain_loss + 0.001 * vad_loss

参考:

https://github.com/xiph/rnnoise

https://arxiv.org/pdf/1709.08243

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值