ESP-APA-DOA 组件

[English]

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 占用并减少噪声段误判。

组件的典型输入输出如下:

项目

说明

备注

输入

多通道 int16_t PCM

支持 packed 或 planar 布局

输出

azimuthdirection_bin

azimuth 为平滑后的方向角

典型采样率

16 kHz

适合语音 DOA 场景

核心算法

GCC-PHAT + 几何求解 + gate + 平滑

偏工程化,便于调试和移植

双麦 DOA

双麦模式适合 ESP32-S3-Korvo-2、ESP-VoCat、ESP32-S31-Korvo-1 等带两个麦克风的设备。两个麦克风构成一条线阵,只能得到一个麦克风对的 TDOA,因此它天然更适合判断前半平面内的左右方向。

ESP-APA-DOA 双麦输出角度定义为:

角度

含义

靠近左侧麦克风方向

90°

两麦中垂线方向,即正前方

180°

靠近右侧麦克风方向

双麦的核心限制是前后模糊:同一个 TDOA 可以对应前方和后方两个对称方向。因此双麦一般不输出完整 0..360°,而是输出 0..180° 的用户角度。对智能音箱、玩具、桌面屏、机器人头部等场景,如果主要关心用户在设备前方的左右位置,双麦方案通常已经够用。

当前 ESP-APA-DOA 双麦路径在基础 GCC-PHAT 之外,还加入了 TDOA 滤波、置信度判断、弱尾音保护、通道能量平衡检查、方向平滑和 bin hysteresis。这些处理的目标不是让双麦突破物理上限,而是让输出更连续、更容易调试,并减少语音尾段、混响和弱能量帧带来的方向抖动。

双麦实际评估和产品交互中,建议优先使用 45°90°135° 三个典型角度:

  • 45°:左前方,能验证左侧方向是否可分辨。

  • 90°:正前方,通常是双麦最稳定、最适合作为中心参考的位置。

  • 135°:右前方,能验证右侧方向是否可分辨。

不建议一开始就用 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、置信度、电平等调试依据

稳定性

中心角度可用,但同一段语音内可能有较明显跳动

90°135° 等测试角度上更平滑

边界表现

180° 更容易直接报满,但尾段也可能散开

边界更保守,180° 可能打不满

可调试性

主要看最终 DOA 结果

可结合 raw_tdoafilt_tdoaconflevelbalance 分析问题

因此,如果产品已经使用 ESP-SR AFE,并且 DOA 只是语音前端的附带能力,可以优先沿用 ESP-SR。若需要更独立、更可解释的方向估计模块,或者需要针对不同板子单独调整麦距、通道顺序、TDOA 滤波和方向平滑,ESP-APA-DOA 会更方便。

需要注意的是,双麦端点本身就是最难的位置。180° 的效果不仅受算法影响,也受麦距、麦克风灵敏度差异、外壳开孔、桌面反射、测试站位和录音通道顺序影响。遇到端点打不满或方向回中时,应优先保存多通道原始 PCM/WAV,检查采样率、通道数、左右麦顺序和能量平衡。

三麦 DOA

三麦模式适合 ESP32-S3-Korvo-1 等三麦阵列设备。ESP-APA-DOA 当前三麦模型默认使用等边三角形阵列,三个麦克风两两组成三个 pair,可以得到三组 TDOA。

三麦相对双麦的主要优势是:

  • 可以输出完整 0..360° 方位角,而不是只输出前半平面 0..180°

  • 三个 TDOA 之间存在几何一致性,可以通过 residual 判断当前方向是否可信。

  • 对于环形灯、机器人转向、屏幕朝向、会议设备等需要全向定位的场景更合适。

三麦输出角度定义为:

角度

含义

正前方

90°

右侧

180°

后方

270°

左侧

三麦内部仍然先用 GCC-PHAT 估计每个麦克风对的 TDOA,然后根据三麦几何矩阵做最小二乘求解,得到二维方向向量。由于有三条基线,三麦可以比双麦更好地区分前后方向。但三麦也更依赖硬件一致性:麦克风位置、通道顺序、采样同步和通道电平都需要正确,否则可能出现角度旋转、镜像、固定在某条轴上,或者 residual 变大导致结果不稳定。

使用和集成建议

ESP-APA-DOA 的集成链路通常可以理解为:应用先完成多麦采集和必要的 VAD 判断,再把有效语音段的多通道 PCM 送入 DOA 组件,最后使用组件输出的 azimuthdirection_bin 驱动 UI、灯效、屏幕朝向或机器人转向。推荐集成时重点确认以下参数:

参数

说明

num_mics

麦克风数量。双麦设为 2,三麦设为 3

mic_side_m

相邻麦克风中心距。双麦为两麦间距,三麦为三角形边长。

sample_rate_hz

必须和实际 PCM 采样率一致。

window_samples

每次 DOA 分析使用的历史窗口长度。窗口越大通常越稳,但延迟和 CPU 更高。

chunk_samples

每次输入的新样本数。越小更新越频繁,但调用次数和 CPU 更高。

input_layout

PCM 通道布局,必须和实际录音数据一致。

azimuth_offset_deg

用于板级安装方向校准。

示例工程

ESP-APA-DOA 组件中包含以下示例:

示例

设备

麦克风数量

examples/basic_doa

无硬件依赖,使用合成 PCM 验证 API

3

examples/2_mic_example

ESP32-S3-Korvo-2

2

examples/2_mic_s31_example

ESP32-S31-Korvo-1

2

examples/2_mic_vocat

ESP-VoCat

2

examples/3_mic_example

ESP32-S3-Korvo-1

3

调试建议

如果 DOA 结果不随说话角度变化,建议优先检查硬件和录音链路,而不是直接修改算法:

  • 保存原始多通道 PCM/WAV,确认文件头中的采样率、通道数和实际数据一致。

  • 检查每个麦克风通道是否有声音,是否存在静音、削波、严重底噪或直流偏置。

  • 检查通道顺序是否和 num_micsinput_layout、slot 配置一致。

  • 双麦重点看左右通道是否反了,以及 90°180° 是否有可解释变化。

  • 三麦重点看三个 pair 的 TDOA 是否随方向变化,以及是否满足几何一致性。

  • 对于弱尾音和混响场景,可以结合 VAD,只在有效语音段调用 DOA 输出。

总体来说,ESP-APA-DOA 更适合需要独立声源方向估计、需要双麦/三麦统一 API、需要保留可调试信息的产品。双麦方案成本低、集成简单,但有前后模糊和端点限制;三麦方案硬件成本略高,但可以提供完整 360° 方位角,更适合需要全向交互的设备。