RNNoise 开源代码修改功能需求
深度学习代写 针对基音周期相关性,做 dct变换,得到前 6 组带的系数以及一个基音周期的 系数(增加一个特征点)d、通过计算过去 8帧频带的差异值之和,求得稳定性系数 1 个(一个特征点)。采样 BFCC 系数,是因为 BFCC 在降噪方面的效果比 MFCC 更好。
一、开源代码:
基于以下开源代码的基础上做修改:
https://github.com/xiph/rnnoise
二、开源代码实现原理简介: 深度学习代写
- RNNoise总共提取了 42 个输入特征点和输出:
- 针对输⼊入信号 bark 22个频带的能量做 dct 变换,得到 22 个 BFCC 系数
- 针对 22个中的前六个即 2k 做导数处理,针对 当前及过去三帧处理理为(增加 12 个特征点):
6 个: An+A(n-1)+A(n-2);
+6 个: An -A(n-2);
+6 个: An +A(n-2)-2A(n-1)。
- 针对基音周期相关性,做 dct变换,得到前 6 组带的系数以及一个基音周期的 系数(增加一个特征点)
- d、通过计算过去 8帧频带的差异值之和,求得稳定性系数 1 个(一个特征点)。
特征点的提取主要是考虑:
1、采样 BFCC 系数,是因为 BFCC 在降噪方面的效果比 MFCC 更好。
2、基音周期系数,主要因为噪声会导致基因周期变低,人声中浊音具有明显的周期性,噪声不具有。
更多的原理分析文章:
【rnnoise 源码分析】biquad 滤波器https://blog.csdn.net/mimiduck/article/details/104708013?spm=1001.2014.3001.5502
【rnnoise 源码分析】band 能量计算https://blog.csdn.net/mimiduck/article/details/106390000?spm=1001.2014.3001.5502
三、我们的修改功能需求: 深度学习代写
1) 将 RNNoise 的源码中的 FFT 和 IFFT 运算改为调用 FFT/IFFT 硬件加速器来实现;然后可通过编译宏选项来让开发者决定是使用纯软件方式实现的 FFT/IFFT 还是硬件加速器实现的 FFT/IFFT。
2)RNNoise 需改为支持同时对 2 路声音信号(立体声)的降噪处理 深度学习代写
3) RNNoise 的 MFCC(梅尔倒谱系数) 是通过 22 个 bands 的 opus scale 的频段划分方式计算的出来的,opus scale 使用巴克刻度(bark scale)衍生频带来计算增益的主要缺点是我们无法在频谱中对更精细的细节建模。实际上, 这不利于抑制基音谐波之间的噪声,因此我们需要将代码改为自定义的 50 个左右的 bands 来计算;50 个bands 的划分可通过常量数组定义来进行修改。
4) RNNoise 的神经网络计算部分代码改为调用硬件神经网络加速器(NPU)进行运算,以下是 NPU 的结构框图:
以下为 NPU 的软件和模型训练流程
总结:
上述功能实现优先基于 GRU 模型进行实现