从denoise.c的main()中看程序。对于定义的变量不要太刻意的却了解它是干什么的,不论数组还是变量都是为了存数据或者暂存数据。
要点:
1)通过随机函数生成语音增益和噪声增益来模拟不同的SNR,这些增益都是直接应用在时域帧上的。此时的语音信号并没有加上Vorbis window,仅仅是取出480个点。
2)biquad滤波器设置合适的系数可以去除高频噪音,随机系数可以模拟各种声学场景
3)vad的值通过信号的的能量大小给出
4)frame_analysis加窗–>FFT–>计算band能量
5)compute_frame_features对嘈杂的信号提取特征,具体特征参考Google浏览器RNNoise的特侦提取blog。注意该函数的返回是什么含义?在denoise_demo.c中的rnnoise_process_frame()函数中会使用到。
6)增益标签的定义在main()函数尾部。输入特征与标签都会写入到stdout这个标准输出流文件内中,通过 > training.f32从映射到training.f32文件中
7)bin2hdf5.py将training.f32文件转化为h5文件
8)在数据处理的过程中每一帧的数据是 42输入特征+22增益标签+22对数谱+1vad标签。一共有5000000(自定义的),所以在rnn_training.py中all_data = hf[‘data’] [:]不管列,取出5000000行数据,将其分为2500个样本,每个样本分为2000个序列,每个序列有 44+22+22+1个输入或者特征。
9)训练出的weights.hdf5文件通过dump_rnn.py写到rnn_data.c文件中。在c环境下应用这些权值,对于测试的数据,固定这些权值,直接过网络输出增益,并在c下应用处理,恢复信号。