深度学习波束形成 (NN Beamforming)
概述
ESP-SR NN Beamforming(神经网络波束形成)模块是一种端到端的深度学习波束形成算法:多路麦克风音频经神经网络联合完成空间滤波与频谱增强,直接输出单通道增强语音。单一算法即可满足会议系统、录音笔、录音卡等产品的阵列降噪需求,无需额外的阵列标定或多算法级联。
NN Beamforming 具有以下特点:
采样率:16 kHz,16-bit PCM
帧移:256 个采样点(16 ms)
多通道输入(2~8 通道,运行时配置),单通道输出
端到端深度学习:无需配置麦克风阵列几何坐标,适配任意阵列形状
端到端算法延迟:48 ms
每帧热数据(SCM、谱缓冲等)驻留内部 RAM,模型权重等大表在 PSRAM,处理路径零 malloc
支持芯片:ESP32-P4
使用方式
接口定义在 esp_nnbf.h 中。使用前先通过 esp_srmodel_init() / esp_srmodel_filter() 加载神经网络模型并获取模型名,再以 esp_nnbf_config_t 完成配置。
基本流程:
加载模型并填写配置
#include "esp_nsn_models.h" #include "model_path.h" #include "esp_nnbf.h" srmodel_list_t *models = esp_srmodel_init("model"); char *model_name = esp_srmodel_filter(models, ESP_NSNET_PREFIX, NULL); esp_nnbf_config_t cfg; esp_nnbf_default_config(&cfg); /* 默认 4 通道、参考通道 0 */
创建波束形成实例
esp_nnbf_data_t *bf = esp_nnbf_create(model_name, &cfg);
处理音频帧
每次调用
esp_nnbf_process()消耗channel_num路、每路esp_nnbf_get_samp_chunksize()个采样点(256,即 16 ms),输出单通道 256 个采样点。输入为 planar(分通道)排布:int chunk = esp_nnbf_get_samp_chunksize(bf); /* 256 */ int16_t *in[4] = {ch0, ch1, ch2, ch3}; /* 每个指针指向 chunk 个采样点 */ int16_t out[chunk]; esp_nnbf_process(bf, in, out);
释放资源
esp_nnbf_destroy(bf);
esp_nnbf_config_t 常用参数:
参数 |
默认值 |
说明 |
|---|---|---|
|
4 |
输入通道数,2~8( |
|
0 |
参考通道,必须小于 |
备注
配置结构体中的其余参数为算法调优参数,建议使用默认值。
示例
examples/nn_beamforming 应用演示了通过 USB_SERIAL_JTAG 在 PC 主机与芯片之间流式传输多通道音频:主机逐帧下发 16 kHz 16-bit 多通道 PCM,板端波束形成后回传单通道结果。在主机侧运行:
cd examples/nn_beamforming
idf.py -DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.defaults.esp32p4" build flash -p /dev/ttyACM1
python3 stream_host.py --port /dev/ttyACM1 --in test_4ch_in.wav --out out.wav
# 批量处理目录中的多通道 WAV
python3 stream_host.py --port /dev/ttyACM1 --batch <wav_dir> --out_dir <out_dir>
推流结束后,主机端会打印每帧平均耗时与 CPU 占用统计。
资源消耗
在 ESP32-P4 @ 400 MHz 上实测(HEX PSRAM @ 250 MHz,flash @ 80 MHz,4 通道输入):
场景 |
每帧耗时 (ms / 16 ms) |
CPU 占用 (%) |
|---|---|---|
真实音频推流 |
9.98 |
62.4 |
静音输入 |
8.93 |
55.8 |
备注
运行时占用 PSRAM 约 370 KB(含模型权重约 100 KB,于首个实例创建时加载;关闭后置滤波时约 237 KB),内部 RAM 约 91 KB(空间协方差矩阵、谱缓冲等每帧热数据);内部 RAM 不足时自动回退 PSRAM。
单元测试(create/destroy 循环 ×7)结论:PSRAM 泄漏 0 B,内部 RAM 不随次数增长;全部测试用例通过。
降噪效果
在 ESP32-P4 @ 400 MHz(HEX PSRAM @ 250 MHz)上以实板推流方式完成两组客观评测,指标为 DNSMOS 客观评分(OVL/SIG/BAK,越高越好),对比基线为单通道深度学习降噪(取参考通道 ch0 输出)。
合成数据集(54 组样本)
覆盖 18 种噪声类型 × 3 个信噪比(-5/0/+5 dB)的 4 通道合成样本:
配置 |
OVL |
SIG |
BAK |
|---|---|---|---|
原始含噪输入(raw) |
1.934 |
3.200 |
2.008 |
单通道深度学习降噪基线 |
2.688 |
3.207 |
3.827 |
NN Beamforming |
2.884 |
3.401 |
3.928 |
NN Beamforming 平均 OVL 较基线提升 +0.196;分信噪比提升为 -5 dB 时 +0.238、0 dB 时 +0.190、+5 dB 时 +0.159,噪声越强优势越明显。
真实录音(15 组样本)
覆盖 7 种噪声场景 × 0°/45° 两个入射角度、另有 1 组环绕噪声的 4 通道真实录音(每组 15~50 s):
配置 |
OVL |
SIG |
BAK |
|---|---|---|---|
原始含噪输入(raw) |
1.455 |
1.863 |
1.846 |
单通道深度学习降噪基线 |
2.490 |
2.984 |
3.982 |
NN Beamforming |
2.620 |
3.096 |
4.026 |
NN Beamforming 平均 OVL 较基线提升 +0.129,且在 0° 与 45° 两个入射角度均稳定提升(+0.155 / +0.131)。