面向会议记录、工业对讲、人机交互及嵌入式智能终端在风扇、空调、键盘敲击和室内混响等噪声环境下的语音采集需求,设计并实现一套基于GD32H759IMT6微控制器的边缘语音降噪系统。系统通过ES7210音频采集模块、SAI和DMA连续获取48 kHz多通道音频,在本地完成通道选择、音量统计、短时傅里叶变换、频带特征提取、神经网络推理、频谱掩蔽和语音重建,无需依赖云端服务器。
系统支持RAW原始音频、RNNoise对照降噪和自研CRN降噪三种工作模式,可通过触摸屏完成模式切换、输入通道选择、增益调整、开始或停止录音以及屏幕截图。LCD实时显示原始与降噪波形、音量、模型状态、录音时间、缓存状态和输出文件名;TF卡可保存原始WAV录音、CRN降噪音频及LCD截图,形成“音频采集—边缘推理—效果显示—文件保存”的完整闭环。
项目由模型训练端和GD32H759I嵌入式端两部分组成。模型训练端使用Python和PyTorch开发,自研参数量约7.12万的TinyCRN轻量级卷积循环网络。模型输入为连续8帧、每帧32维的频带特征,共256个输入数据;网络依次采用二维卷积、深度可分离卷积、1×1逐点卷积、单层LSTM和全连接Sigmoid输出层,预测当前音频帧的32维频带掩蔽。训练数据由干净语音和环境噪声按-5 dB至20 dB随机信噪比在线混合,损失函数结合掩蔽L1损失和增强频带对数幅度损失,以兼顾噪声抑制和语音频谱保真。
完成训练后,我将PyTorch模型导出为ONNX,并生成量化校准NPZ数据,通过GD Embedded AI Tool转换为适用于GD32H759IMT6的int8模型。板端封装统一的模型初始化和推理接口,每次接收256字节整型输入并输出32字节频带掩蔽,同时在每次滑动窗口推理前清理LSTM状态,使板端行为与Python离线推理保持一致。
嵌入式端使用C语言开发。ES7210通过软件I2C完成配置,音频数据经SAI/TDM接口输入,并由DMA双缓冲连续搬运。为解决LCD刷新、触摸扫描和TF卡写入可能导致音频帧丢失的问题,我在32 MB外部SDRAM中设计了深度为1024帧的软件环形队列,中断中仅快速复制完成帧,主循环按顺序消费,同时记录读写指针、最高水位和丢帧数量。
在CRN处理链路中,程序对20 ms、960点音频窗执行1024点FFT,将频谱压缩为32维非均匀三角频带特征,维护8帧上下文并完成int8量化推理。模型输出经反量化后重新映射到FFT频点,对原始幅度谱进行掩蔽,随后利用原始相位执行逆FFT和重叠相加,恢复降噪语音。系统采用“录音实时优先、推理与显示分级”的调度方式,录音期间优先保存连续RAW数据,非录音状态低频更新CRN实时预览,停止录音后再生成完整CRN降噪WAV文件,从而兼顾音频连续性、模型计算量和触摸界面响应速度。