项目简介
本项目是基于Python的语音降噪系统,部分借鉴了知名的RNNoise项目及其论文中的方法。借助神经网络控制音频均衡器,通过高频调整均衡器各频段增益的方式抑制噪音,同时保留语音信号。支持训练自己的模型,并能将训练好的模型部署到PC或STM32L476 - Discovery单片机上进行语音降噪处理。
项目的主要特性和功能
- 多模型支持:提供与RNNoise类似的复杂模型和简单的多层GRU模型两种不同的RNN模型,可按需选择。
- 语音数据集定制:使用微软的可定制语音数据集(MS - SNSD),可配置生成不同时长、噪音类型和信噪比的干净语音和带噪音语音。
- 音频特征提取:运用MFCC(Mel - scale)提取音频特征,生成训练所需的数据集。
- 模型训练与转换:使用Keras训练模型,并将其转换为NNoM模型,便于在单片机上部署。
- 实时降噪:能对16kHz、1CH的.wav音频文件进行实时降噪处理,输出降噪后的音频文件。
- 语音活动检测(VAD):模型可输出VAD信息,在单片机示例中可通过LED指示是否检测到语音。
- 性能优化:支持CMSIS - NN后端和ARM FFT,可显著提升在ARM - Cortex M系列单片机上的运行性能。
安装使用步骤
前提条件
假设用户已经下载了本项目的源码文件,且已安装Python及相关依赖库(如numpy)。
操作步骤
- 获取带噪音语音数据
- 修改
MS - SNSD/noisyspeech_synthesizer.cfg
文件,推荐配置如下:sampling_rate: 16000 audioformat: *.wav audio_length: 60 silence_length: 0.0 total_hours: 15 snr_lower: 0 snr_upper: 20 total_snrlevels: 3
- 运行
noisyspeech_synthesizer.py
生成干净语音和带噪音语音,文件分别位于MS - SNSD/CleanSpeech_training
和MS - SNSD/NoisySpeech_training
。
- 修改
- 生成训练数据集
- 运行
gen_dataset.py
计算MFCC和gains,生成dataset.npz
文件。 - 可配置MFCC特征数(
num_filter
,范围10 - 26),同时该脚本会生成equalizer_coeff.h
文件供C语音的均衡器使用。 - 脚本还会生成
_noisy_sample.wav
和_filtered_sample.wav
两个音频文件。
- 运行
- 训练模型
- 当
dataset.npz
生成后,运行main.py
训练Keras模型,训练好的模型保存为model.h5
。 - 训练时设置
stateful = True
和timestamps = 1
,batchsize >= 1024
。 - 该步骤会使用RNN生成的
gains
对_noisy_sample.wav
进行滤波,滤波后的文件保存为_nn_filtered_sample.wav
。 - 调用NNoM的API
generate_model(...)
生成NNoM模型文件weights.h
。
- 当
- 在NNoM上进行推理
- 在项目目录下运行
scons
编译生成二进制可执行文件。 - 该可执行文件支持对16kHz、1CH的.wav文件进行降噪处理,使用方法如下:
- Windows PowerShell:
.\rnn - denoise [input_file] [output_file]
或拖拽.wav文件到可执行文件上。 - Linux:自行测试。
- Windows PowerShell:
- 例如,运行
.\rnn - denoise _noisy_sample.wav _nn_fixedpoit_filtered_sample.wav
生成定点RNN滤波后的音频。
- 在项目目录下运行
单片机使用说明
若要在STM32L476 - Discovery单片机上使用,可使用main_arm.c
文件。若使用ARM - Cortex M系列的MCU,可进行以下设置提升性能:
- 打开NNoM的CMSIS - NN后端,参考 Porting and Optimization Guide。
- 在mfcc.h
中打开PLATFORM_ARM
宏定义来使用ARM_FFT。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】