GSC 波束形成
概述
ESP-SR GSC(Generalized Sidelobe Canceller,广义旁瓣抵消器)模块是面向麦克风阵列的自适应波束形成器。在给定目标说话人方向的条件下,它可以增强该方向的语音,同时抑制其他方向的干扰和噪声,输出单通道增强信号。它通常与 DOA 模块 级联使用,由 DOA 实时提供目标方向,广泛应用于远场语音交互、会议转写等场景。
备注
GSC 模块目前仅支持 ESP32-P4。
GSC 模块具有以下特点:
支持任意阵列几何形状:2 个及以上麦克风,麦克风坐标在运行时配置
帧长:16 kHz 采样率下每通道 128 个采样点(每帧 8 ms)
输入为多通道 16-bit PCM(planar 排布),输出为单通道 16-bit PCM
定向方向可按帧更新,支持移动说话人
使用方式
头文件为 include/esp32p4/esp_gsc.h。
基本流程:
定义麦克风阵列几何坐标
麦克风坐标以米为单位,采用右手坐标系,每个麦克风一项。各坐标项可以是任意顺序,但传入
esp_gsc_process()的第i路音频必须始终来自mic_coord[i]对应的麦克风。#include "esp_gsc.h" /* 4 麦均匀圆阵,半径 5 cm;第 i 个麦克风位于 i*90 度方向 */ PlaneCoord mic_coords[4] = { { 0.05f, 0.0f, 0.0f}, { 0.0f, 0.05f, 0.0f}, {-0.05f, 0.0f, 0.0f}, { 0.0f, -0.05f, 0.0f}, };
创建 GSC 实例
gsc_handle_t *gsc = esp_gsc_create(mic_coords, 4);
处理音频帧
输入为
mic_num通道 16-bit PCM 音频,planar(分通道) 排布([ch0_0..ch0_127, ch1_0..ch1_127, ...]),每帧每通道 128 个采样点。loc_phi为目标说话人方向,单位为度,范围 0–360,定义在阵列绝对坐标系中(0° = x 轴正方向,逆时针)。输出为 128 个采样点的单通道 16-bit PCM。int16_t mic_data[128 * 4]; // 4 通道,planar 排布 int16_t out_data[128]; esp_gsc_process(gsc, mic_data, 0.0f, out_data); // 定向到 0 度
备注
自适应滤波器需要一定时间(约 1 秒)收敛。实例创建或定向方向改变后,增强效果会逐渐建立。
释放资源
esp_gsc_destroy(gsc);
与 DOA 级联
在典型应用中,DOA 模块逐帧估计说话人方向,GSC 模块将波束对准该方向:
/* 两个模块传入相同的坐标数组 */
esp_doa_capon_embedded_handle_t *doa =
esp_doa_capon_embedded_create(mic_coords, 4);
gsc_handle_t *gsc = esp_gsc_create(mic_coords, 4);
while (1) {
/* mic_planar:planar 排布的 4 通道 x 128 采样点(DOA 与 GSC 共用) */
float angle = esp_doa_capon_embedded_process(doa, mic_planar, vad);
esp_gsc_process(gsc, mic_planar, angle, out_data);
}
警告
两个模块必须使用相同的麦克风坐标数组,否则估计出的角度会对应错误的通道。
内存配置
在 ESP32-P4 上,GSC 核心的内部缓冲区默认分配在 PSRAM 中。如需改用内部 RAM,可定义编译选项
GSC_P4_INTERNAL_RAM。在包含
esp_gsc.h之前定义ESP_GSC_DISABLE_PSRAM,只会将少量的封装层缓冲区(句柄和帧转换缓冲区)移到内部 RAM,不影响 GSC 核心缓冲区。
性能测试
测试程序 test_apps/esp-sr-gsc-stream 配合主机脚本 host_gsc_stream.py 评估 GSC 的增强性能:
主机通过 USB-serial-JTAG 控制台,以二进制锁步协议将多通道含噪混合音频逐帧发送到芯片。
芯片使用
esp_gsc_process()对每帧做波束形成(定向到已知的目标方向),并将单通道输出回传。主机分别计算输入混合音频和波束形成输出相对于干净目标参考的 SNR(信噪比),并报告 SNR 提升量。前 125 帧(1 秒)不计入指标,以等待自适应滤波器收敛。
测试结果:
信噪比 |
提升 (dB) |
|---|---|
-5 dB |
+13.3 |
0 dB |
+12.1 |
+5 dB |
+10.6 |
总体 |
+12.0 |
资源消耗
下表为典型的资源占用与性能数据(16 kHz 采样率):