深度学习降噪方案-RNNoise源码解析 - 特征提取

RNNoise是一个采用音频特征抽取+深度神经网络结合的降噪方案. 更多相关基本信息, 请查看 RNNoise学习和翻译系列

目录

1.读取文件生成特征的主循环

2. 构造不同场景和条件的训练

3. 特征和标记提取代码

4. 特征提取代码


1.读取文件生成特征的主循环

Denoise.c 中的main函数是特征提取部分的主流程.

循环之外的内容有:

  • 数据对象管理
  • 命令行参数分析
  • 文件操作
  • 跳过噪音开头的帧

主循环主要做了三件事:

  • 定期生成随机参数(参考第二节)
  • 特征和标记提取运算(参考第三节)
  • 把特征数据和标记数据写到文件

这部分代码逻辑来说就是: 循环读取语音和噪音, 混成训练数据, 并产生对应的特征和标记数据.

其中, 数据片大小是20ms, 步进速度是10ms, 有10ms的重叠数据.

其框图如下:

2. 构造不同场景和条件的训练

一个有效的模型, 为了能在现实场景下工作的很好, 必须要刷题, 也要实战, 这意味着训练用的数据必须花样百出. 一种最基本的考虑是使用不同SNR的语音来进行训练, 实验表明使用SNR范围较广的训练数据得到的训练模型对不同的SNR有更好的支持度(参考链接的3.1节 SNR维度)

本模型中采用了以下几种变化参数:

  • 语音增益 和 噪声增益, 这两者合起来可以表示不同的SNR还可以表示不同的音量范围
  • 两个随机的二阶滤波器, 模拟各种特殊的声学场景
  • 最高截止频率(lowpass), 用来模拟各种采集环境的频率范围

各取值的范围:

  • 语音增益: 40~20dB, 10%概率变为静音
  • 噪音增益: 语音增益*30~20dB, 10%的概率不叠加噪音(这个10%和前面的10%乘数叠加的)
  • 滤波器系数: 0~0.75
  • Lowpass: FREQ_SIZE*50rand(1)/8, 当FREQ_SIZE为481时, 取值范围大概是60~3000

3. 特征和标记提取代码

该部分代码的数据流向图如下, 从中我们可以发现, 执行梳状滤波那个函数是没必要的:

其中比较关键的子函数有:

  • 特征提取(参考第四节)
  • 帧分析: 计算fft和频带能量
  • 梳状滤波: (本文先不涉及)
  • 叠加场景效果: 根据随机产生的场景参数来叠加效果.

其中的帧分析和特征提取部分都会缓存部分数据. 比如帧分析会缓存一帧的数据, 加上当前帧, 共20ms的数据用.

4. 特征提取代码

该部分代码的数据流向图如下:

其中比较关键的子函数有:

  • 特征计算: 此处使用了一个环形buffer来计算导数和谱稳度
  • 基音估计: (本文先不涉及)
  • 帧分析: 如上节

 

 

 

 

 

 

 

 

  • 7
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值