ESP-APA-DOA 组件
ESP-APA-DOA 简介
ESP-APA-DOA 是一个面向 ESP-IDF 工程的声源到达方向估计组件,用于根据多路麦克风 PCM 数据估计说话人的水平面方位角。组件当前主要覆盖双麦线阵和三麦三角阵列,内部使用 GCC-PHAT 估计麦克风之间的 TDOA(Time Difference Of Arrival,到达时间差),再结合麦克风几何关系输出角度和方向 bin。
和完整语音前端不同,ESP-APA-DOA 本身只负责 DOA 计算,不内置唤醒、AEC、NS、语音识别等能力。应用可以把它放在已有录音链路、VAD 链路或语音交互链路之后,只在检测到有效语音时调用 DOA 计算,从而降低 CPU 占用并减少噪声段误判。
组件的典型输入输出如下:
项目 |
说明 |
备注 |
|---|---|---|
输入 |
多通道 |
支持 packed 或 planar 布局 |
输出 |
|
|
典型采样率 |
16 kHz |
适合语音 DOA 场景 |
核心算法 |
GCC-PHAT + 几何求解 + gate + 平滑 |
偏工程化,便于调试和移植 |
双麦 DOA
双麦模式适合 ESP32-S3-Korvo-2、ESP-VoCat、ESP32-S31-Korvo-1 等带两个麦克风的设备。两个麦克风构成一条线阵,只能得到一个麦克风对的 TDOA,因此它天然更适合判断前半平面内的左右方向。
ESP-APA-DOA 双麦输出角度定义为:
角度 |
含义 |
|---|---|
|
靠近左侧麦克风方向 |
|
两麦中垂线方向,即正前方 |
|
靠近右侧麦克风方向 |
双麦的核心限制是前后模糊:同一个 TDOA 可以对应前方和后方两个对称方向。因此双麦一般不输出完整 0..360°,而是输出 0..180° 的用户角度。对智能音箱、玩具、桌面屏、机器人头部等场景,如果主要关心用户在设备前方的左右位置,双麦方案通常已经够用。
当前 ESP-APA-DOA 双麦路径在基础 GCC-PHAT 之外,还加入了 TDOA 滤波、置信度判断、弱尾音保护、通道能量平衡检查、方向平滑和 bin hysteresis。这些处理的目标不是让双麦突破物理上限,而是让输出更连续、更容易调试,并减少语音尾段、混响和弱能量帧带来的方向抖动。
双麦实际评估和产品交互中,建议优先使用 45°、90°、135° 三个典型角度:
45°:左前方,能验证左侧方向是否可分辨。90°:正前方,通常是双麦最稳定、最适合作为中心参考的位置。135°:右前方,能验证右侧方向是否可分辨。
不建议一开始就用 0° 或 180° 作为主要验收角度。它们靠近双麦 endfire 端点,对麦距误差、左右麦增益差、反射和测试站位都非常敏感,容易出现端点打不满或向 90° 回中的现象。端点可以作为补充测试项,但更适合在 45°、90°、135° 已经稳定后再单独调试。
和 ESP-SR 双麦 DOA 的对比
ESP-SR 中也包含 DOA 能力,通常作为语音识别前端的一部分使用。ESP-APA-DOA 更偏独立组件,适合只需要声源方向、或者希望把 DOA 单独拿出来调试和集成的场景。
根据 project_example/esp_doa 中的双麦实测对比记录,ESP-APA-DOA 和 ESP-SR 双麦 DOA 可以这样理解:
对比维度 |
ESP-SR 双麦 DOA |
ESP-APA-DOA 双麦 |
|---|---|---|
组件定位 |
语音前端能力的一部分,通常和 AFE、唤醒、VAD 等一起使用 |
独立 DOA 组件,不强依赖 ESP-SR 或 GMF |
输出风格 |
更偏离散结果,边界角度有时更敢给满值 |
输出更连续,带有 TDOA、置信度、电平等调试依据 |
稳定性 |
中心角度可用,但同一段语音内可能有较明显跳动 |
在 |
边界表现 |
|
边界更保守, |
可调试性 |
主要看最终 DOA 结果 |
可结合 |
因此,如果产品已经使用 ESP-SR AFE,并且 DOA 只是语音前端的附带能力,可以优先沿用 ESP-SR。若需要更独立、更可解释的方向估计模块,或者需要针对不同板子单独调整麦距、通道顺序、TDOA 滤波和方向平滑,ESP-APA-DOA 会更方便。
需要注意的是,双麦端点本身就是最难的位置。0° 和 180° 的效果不仅受算法影响,也受麦距、麦克风灵敏度差异、外壳开孔、桌面反射、测试站位和录音通道顺序影响。遇到端点打不满或方向回中时,应优先保存多通道原始 PCM/WAV,检查采样率、通道数、左右麦顺序和能量平衡。
三麦 DOA
三麦模式适合 ESP32-S3-Korvo-1 等三麦阵列设备。ESP-APA-DOA 当前三麦模型默认使用等边三角形阵列,三个麦克风两两组成三个 pair,可以得到三组 TDOA。
三麦相对双麦的主要优势是:
可以输出完整
0..360°方位角,而不是只输出前半平面0..180°。三个 TDOA 之间存在几何一致性,可以通过 residual 判断当前方向是否可信。
对于环形灯、机器人转向、屏幕朝向、会议设备等需要全向定位的场景更合适。
三麦输出角度定义为:
角度 |
含义 |
|---|---|
|
正前方 |
|
右侧 |
|
后方 |
|
左侧 |
三麦内部仍然先用 GCC-PHAT 估计每个麦克风对的 TDOA,然后根据三麦几何矩阵做最小二乘求解,得到二维方向向量。由于有三条基线,三麦可以比双麦更好地区分前后方向。但三麦也更依赖硬件一致性:麦克风位置、通道顺序、采样同步和通道电平都需要正确,否则可能出现角度旋转、镜像、固定在某条轴上,或者 residual 变大导致结果不稳定。
使用和集成建议
ESP-APA-DOA 的集成链路通常可以理解为:应用先完成多麦采集和必要的 VAD 判断,再把有效语音段的多通道 PCM 送入 DOA 组件,最后使用组件输出的 azimuth 和 direction_bin 驱动 UI、灯效、屏幕朝向或机器人转向。推荐集成时重点确认以下参数:
参数 |
说明 |
|---|---|
|
麦克风数量。双麦设为 |
|
相邻麦克风中心距。双麦为两麦间距,三麦为三角形边长。 |
|
必须和实际 PCM 采样率一致。 |
|
每次 DOA 分析使用的历史窗口长度。窗口越大通常越稳,但延迟和 CPU 更高。 |
|
每次输入的新样本数。越小更新越频繁,但调用次数和 CPU 更高。 |
|
PCM 通道布局,必须和实际录音数据一致。 |
|
用于板级安装方向校准。 |
示例工程
ESP-APA-DOA 组件中包含以下示例:
示例 |
设备 |
麦克风数量 |
|---|---|---|
|
无硬件依赖,使用合成 PCM 验证 API |
3 |
|
ESP32-S3-Korvo-2 |
2 |
|
ESP32-S31-Korvo-1 |
2 |
|
ESP-VoCat |
2 |
|
ESP32-S3-Korvo-1 |
3 |
调试建议
如果 DOA 结果不随说话角度变化,建议优先检查硬件和录音链路,而不是直接修改算法:
保存原始多通道 PCM/WAV,确认文件头中的采样率、通道数和实际数据一致。
检查每个麦克风通道是否有声音,是否存在静音、削波、严重底噪或直流偏置。
检查通道顺序是否和
num_mics、input_layout、slot 配置一致。双麦重点看左右通道是否反了,以及
0°、90°、180°是否有可解释变化。三麦重点看三个 pair 的 TDOA 是否随方向变化,以及是否满足几何一致性。
对于弱尾音和混响场景,可以结合 VAD,只在有效语音段调用 DOA 输出。
总体来说,ESP-APA-DOA 更适合需要独立声源方向估计、需要双麦/三麦统一 API、需要保留可调试信息的产品。双麦方案成本低、集成简单,但有前后模糊和端点限制;三麦方案硬件成本略高,但可以提供完整 360° 方位角,更适合需要全向交互的设备。