littlebot
Published on 2025-04-18 / 1 Visits
0

【源码】基于Python的语音降噪系统

项目简介

本项目是基于Python的语音降噪系统,部分借鉴了知名的RNNoise项目及其论文中的方法。借助神经网络控制音频均衡器,通过高频调整均衡器各频段增益的方式抑制噪音,同时保留语音信号。支持训练自己的模型,并能将训练好的模型部署到PC或STM32L476 - Discovery单片机上进行语音降噪处理。

项目的主要特性和功能

  1. 多模型支持:提供与RNNoise类似的复杂模型和简单的多层GRU模型两种不同的RNN模型,可按需选择。
  2. 语音数据集定制:使用微软的可定制语音数据集(MS - SNSD),可配置生成不同时长、噪音类型和信噪比的干净语音和带噪音语音。
  3. 音频特征提取:运用MFCC(Mel - scale)提取音频特征,生成训练所需的数据集。
  4. 模型训练与转换:使用Keras训练模型,并将其转换为NNoM模型,便于在单片机上部署。
  5. 实时降噪:能对16kHz、1CH的.wav音频文件进行实时降噪处理,输出降噪后的音频文件。
  6. 语音活动检测(VAD):模型可输出VAD信息,在单片机示例中可通过LED指示是否检测到语音。
  7. 性能优化:支持CMSIS - NN后端和ARM FFT,可显著提升在ARM - Cortex M系列单片机上的运行性能。

安装使用步骤

前提条件

假设用户已经下载了本项目的源码文件,且已安装Python及相关依赖库(如numpy)。

操作步骤

  1. 获取带噪音语音数据
    • 修改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_trainingMS - SNSD/NoisySpeech_training
  2. 生成训练数据集
    • 运行gen_dataset.py计算MFCC和gains,生成dataset.npz文件。
    • 可配置MFCC特征数(num_filter,范围10 - 26),同时该脚本会生成equalizer_coeff.h文件供C语音的均衡器使用。
    • 脚本还会生成_noisy_sample.wav_filtered_sample.wav两个音频文件。
  3. 训练模型
    • dataset.npz生成后,运行main.py训练Keras模型,训练好的模型保存为model.h5
    • 训练时设置stateful = Truetimestamps = 1batchsize >= 1024
    • 该步骤会使用RNN生成的gains_noisy_sample.wav进行滤波,滤波后的文件保存为_nn_filtered_sample.wav
    • 调用NNoM的API generate_model(...)生成NNoM模型文件 weights.h
  4. 在NNoM上进行推理
    • 在项目目录下运行scons编译生成二进制可执行文件。
    • 该可执行文件支持对16kHz、1CH的.wav文件进行降噪处理,使用方法如下:
      • Windows PowerShell:.\rnn - denoise [input_file] [output_file] 或拖拽.wav文件到可执行文件上。
      • Linux:自行测试。
    • 例如,运行.\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】