- 语音
- 音频
- 人工智能
- 嵌入式
- 物联网
【免费下载链接】esp-sr
Speech recognition
本文基于 esp-sr 官方基准测试文档(docs/en/benchmark/README.rst),系统梳理 AFE 音频前端、WakeNet 唤醒引擎、MultiNet 关键词识别和 TTS 语音合成四大模块在不同 ESP32 芯片上的资源消耗(Internal RAM / PSRAM / Flash / CPU 占用)与实测性能指标,并结合仓库源码中的afe_config_t、det_mode_t等配置定义解释各基准数据对应的流水线构成与适用场景,帮助你在硬件选型、功耗预算和模型裁剪时做出有据可依的决策。
一、基准测试的总体背景:先看懂 AFE 流水线配置
benchmark 文档中反复出现MR, SR, LOW_COST、MMNR, VC, HIGH_PERF这类配置名,理解它们是读懂全部基准数据的前提。
从源码结构看,这些命名直接对应 esp_afe_config.h 中的两组枚举:
- 输入格式(MR / MMNR):
afe_config_init()的input_format参数约定M表示麦克风通道、R表示播放参考通道、N表示未知/未用通道。因此MR = 一路麦克风 + 一路播放参考(单麦全双工/语音助手场景),MMNR = 两路麦克风 + 一路播放参考(麦阵场景,文档中即两麦一播); - 场景类型(SR / VC / FD):
afe_type_t枚举定义了AFE_TYPE_SR(语音识别,不含非线性降噪)、AFE_TYPE_VC(语音通信,16 kHz,含非线性降噪 NSNET)、AFE_TYPE_FD(全双工,含非线性降噪); - 性能档位(LOW_COST / HIGH_PERF):
afe_mode_t枚举,低资源模式与高性能模式。
不同配置组合对应不同的算法流水线。以文档中 ESP32-S3 的 AFE 配置与流水线表为例(完整继承自原文档):
| Config | Pipeline |
|---|---|
| MR, SR, LOW_COST | |AEC(SR_LOW_COST)| -> |VAD(vadnet1_medium)| -> |WakeNet(wn9_hilexin,)| |
| MR, SR, HIGH_PERF | |AEC(SR_HIGH_PERF)| -> |VAD(vadnet1_medium)| -> |WakeNet(wn9_hilexin,)| |
| MR, VC, LOW_COST | |AEC(VOIP_LOW_COST)| -> |NS(nsnet2)| -> |VAD(vadnet1_medium)| |
| MR, VC, HIGH_PERF | |AEC(VOIP_HIGH_PERF)| -> |NS(nsnet2)| -> |VAD(vadnet1_medium)| |
| MMNR, SR, LOW_COST | |AEC(SR_LOW_COST)| -> |SE(BSS)| -> |VAD(vadnet1_medium)| -> |WakeNet(wn9_hilexin,)| |
| MMNR, SR, HIGH_PERF | |AEC(SR_HIGH_PERF)| -> |SE(BSS)| -> |VAD(vadnet1_medium)| -> |WakeNet(wn9_hilexin,)| |
| MR, FD, LOW_COST | |AEC(FD_LOW_COST)| -> |VAD(vadnet1_medium)| -> |WakeNet(wn9_hilexin,)| |
| MR, FD, HIGH_PERF | |AEC(FD_HIGH_PERF)| -> |VAD(vadnet1_medium)| -> |WakeNet(wn9_hilexin,)| |
| MMNR, FD, LOW_COST | |AEC(FD_LOW_COST)| -> |SE(BSS)| -> |VAD(vadnet1_medium)| -> |WakeNet(wn9_hilexin,)| |
| MMNR, FD, HIGH_PERF | |AEC(FD_HIGH_PERF)| -> |SE(BSS)| -> |VAD(vadnet1_medium)| -> |WakeNet(wn9_hilexin,)| |
原文档对该表的注释为:
- MR:一路麦克风通道和一路播放通道
- MMNR:两路麦克风通道和一路播放通道
- Models:nsnet2、vadnet1_medium、wn9_hilexin
可以看出几个清晰的规律:
- SR 场景挂 WakeNet,面向"唤醒 + 关键词"的语音助手链路,VAD 之后直接进唤醒引擎;
- VC / FD 场景引入非线性降噪(VC 流水线中的
NS(nsnet2)),因为通话质量比唤醒更看重语音清晰度; - MMNR(双麦)相比 MR 多了
SE(BSS)盲源分离环节,这是双麦场景 CPU 占用和 PSRAM 占用明显更高的直接原因; - LOW_COST 与 HIGH_PERF 的差异主要体现在AEC 档位(
SR_LOW_COSTvsSR_HIGH_PERF、VOIP_LOW_COSTvsVOIP_HIGH_PERF、FD_LOW_COSTvsFD_HIGH_PERF),对应源码中aec_mode_t aec_mode字段的取值。
该流水线格式并非文档杜撰:esp_afe_sr_iface.h 中print_pipeline接口的注释明确给出同款输出格式([input] -> |AEC(VOIP_HIGH_PERF)| -> |WakeNet(wn9_hilexin)| -> [output]),开发者可以在自己的工程里调用print_pipeline打印当前实例实际生效的流水线,与上表逐项核对。
二、AFE 资源消耗基准
2.1 ESP32(经典双核)
ESP32 上文档给出的分项资源数据如下:
| Algorithm Type | RAM | Average CPU loading (compute with 2 cores) | Frame Length |
|---|---|---|---|
| AEC (HIGH_PERF) | 114 KB | 11% | 32 ms |
| NS | 27 KB | 5% | 10 ms |
| AFE Layer | 73 KB | — | — |
即:高性能 AEC 是最大的 RAM 开销来源(114 KB),AFE 框架层本身再占 73 KB;NS 模块 10 ms 一帧、双核算力约 5%。
2.2 ESP32-S3:十种配置的完整数据
ESP32-S3 下 AFE 配置与性能(完整继承原文档,Feed/Fetch 均为单核口径):
| Config | Internal RAM (KB) | PSRAM (KB) | Feed CPU usage (1 core, %) | Fetch CPU usage (1 core, %) |
|---|---|---|---|---|
| MR, SR, LOW_COST | 60.1 | 739.7 | 8.8 | 9.8 |
| MR, SR, HIGH_PERF | 49.1 | 775.8 | 9.3 | 9.8 |
| MR, FD, LOW_COST | 60.2 | 777.7 | 12.1 | 9.8 |
| MR, FD, HIGH_PERF | 49.2 | 813.8 | 12.5 | 9.8 |
| MR, VC, LOW_COST | 48.7 | 819.7 | 30.6 | 4.7 |
| MR, VC, HIGH_PERF | 91.1 | 822.2 | 32.2 | 4.7 |
| MMNR, SR, LOW_COST | 79.1 | 1153.7 | 23.7 | 22.9 |
| MMNR, SR, HIGH_PERF | 68.1 | 1200.4 | 24.9 | 22.9 |
| MMNR, FD, LOW_COST | 79.2 | 1191.7 | 29.4 | 22.9 |
| MMNR, FD, HIGH_PERF | 68.1 | 1238.5 | 30.4 | 22.9 |
可以从数据中读出几条选型规律:
- HIGH_PERF 档 Internal RAM 反而更低(如 MR/SR:49.1 KB vs 60.1 KB,MMNR/SR:68.1 KB vs 79.1 KB)。结合源码中
afe_memory_alloc_mode_t提供的AFE_MEMORY_ALLOC_MORE_INTERNAL / BALANCE / MORE_PSRAM三种分配策略可以推断,高性能档把更多数据放到了 PSRAM(PSRAM 从 739.7 KB 增至 775.8 KB),用内部 RAM 换算力实现; - Feed 与 Fetch 的分工:feed 线程负责把麦克风数据送入 AEC 环,fetch 线程取出处理后的音频并驱动 VAD/WakeNet 等推理。MMNR 配置的 Fetch 占用(约 22.9%)远高于 MR(约 9.8%),因为多了 BSS 分离环节;VC 配置 Feed 高达 30%+,则是 AEC(VOIP) 加 NSNET 的代价;
- PSRAM 大头来自神经网络模型(vadnet1_medium、nsnet2、wn9_hilexin 的权重),这也是所有配置 PSRAM 都在 700 KB 以上的原因;
- 单核占用最高约 32%(MR, VC, HIGH_PERF),对 RISC-V 双核的 ESP32-S3 来说,AFE 独立占一个核仍有充足余量。
2.3 ESP32-P4:同表数据 + 明确的测试条件
ESP32-P4 下十种配置的流水线与数值和 ESP32-S3 表格一致(同样的 Internal RAM / PSRAM / Feed / Fetch 数值),但原文档特别给出了P4 的测试前提,复测时必须对齐:
Setting:ESP32-P4 @ 400 MHz,
CONFIG_CACHE_L2_CACHE_256KB=y,CONFIG_CACHE_L2_CACHE_LINE_128B=y
这说明 P4 的基准数据依赖 256 KB L2 缓存与 128 B 行长的特定配置,换缓存大小后 CPU 占用数字不具备可比性。
2.4 如何在源码层面核对这些配置
上述流水线全部由 esp_afe_config.h 中的afe_config_t描述:aec_mode、ns_model_name、vad_model_name、wakenet_model_name、afe_type、afe_mode等字段与基准表一一对应;afe_config_init(input_format, models, type, mode)会按芯片和输入格式自动生成"尽可能启用全部算法"的默认配置,之后可用afe_config_check()消除冲突(例如两路输入下 SE(BSS) 优先于 NS 的裁剪逻辑在头文件注释中有明确说明)。测试工程test_apps/esp-sr-afe的 sdkconfig.defaults 展示了最小配置示例,其中CONFIG_SR_VADN_VADNET1_MEDIUM=y正是基准表所用 VAD 模型的分区开关。
三、WakeNet 唤醒引擎基准
3.1 各平台资源消耗
WakeNet 各代模型在不同芯片上的资源占用(完整继承原文档):
ESP32(量化 WakeNet5 系列,30 ms 帧长):
| Model Type | Parameter Num | RAM | Average Running Time per Frame | Frame Length |
|---|---|---|---|---|
| Quantised WakeNet5 | 41 K | 15 KB | 5.5 ms | 30 ms |
| Quantised WakeNet5X2 | 165 K | 20 KB | 10.5 ms | 30 ms |
| Quantised WakeNet5X3 | 371 K | 24 KB | 18 ms | 30 ms |
ESP32-S3(32 ms 帧长):
| Model Type | RAM | PSRAM | Average Running Time per Frame | Frame Length |
|---|---|---|---|---|
| Quantised WakeNet8 @ 2 channel | 50 KB | 1640 KB | 10.0 ms | 32 ms |
| Quantised WakeNet9 @ 2 channel | 16 KB | 324 KB | 3.0 ms | 32 ms |
| Quantised WakeNet9 @ 3 channel | 20 KB | 347 KB | 4.3 ms | 32 ms |
| Quantised WakeNet10 @ 3 channel | 17 KB | 523 KB | 7.1 ms | 32 ms |
原文档注释:WakeNet10 三通道结果默认使用
DET_MODE_3CH_90检测模式,单核 CPU 占用 22.6%。
ESP32-P4:
| Model Type | RAM | PSRAM | Average Running Time per Frame | Frame Length |
|---|---|---|---|---|
| Quantised WakeNet9 @ 2 channel | 16 KB | 324 KB | 2.6 ms | 32 ms |
| Quantised WakeNet9 @ 3 channel | 20 KB | 347 KB | 3.1 ms | 32 ms |
| Quantised WakeNet10 @ 3 channel | 16 KB | 523 KB | 4.1 ms | 32 ms |
原文档注释:WakeNet10 三通道默认
DET_MODE_3CH_90,单核 CPU 占用 14.1%。
ESP32-S31:
| Model Type | RAM | PSRAM | Average Running Time per Frame | Frame Length |
|---|---|---|---|---|
| Quantised WakeNet10 @ 3 channel | 16 KB | 523 KB | 6.4 ms | 32 ms |
原文档注释:默认
DET_MODE_3CH_90,单核 CPU 占用 19.9%。
其中DET_MODE_3CH_90并非凭空出现:esp_wn_iface.h 中该枚举定义为DET_MODE_3CH_90 = 4,注释写明"Normal, Load from flash, 3 channels, just for wakenet10"——它是 WakeNet10 专属的三通道、权重从 Flash 加载的常规检测模式,这也解释了为何 WakeNet10 的 Internal RAM 反而只有 16 KB 而 PSRAM 占用 523 KB。
对比各代模型可以清楚看到演进方向:从 WakeNet5(ESP32 上 15 KB / 5.5 ms 每帧)到 WakeNet9(S3 上 16 KB / 3.0 ms),单帧推理时间下降而 RAM 开销相当,PSRAM 部分则是模型权重的存储位置(如 wn9_alexa 等模型文件见 model/wakenet_model 目录)。
3.2 WakeNet 实测性能(ESP32-S3)
原文档给出的唤醒率测试矩阵(不同距离与噪声条件下):
| Distance | Quiet | Stationary Noise (SNR = 4 dB) | Speech Noise (SNR = 4 dB) | AEC Interruption (-10 dB) |
|---|---|---|---|---|
| 1 m | 98% | 96% | 94% | 96% |
| 3 m | 98% | 96% | 94% | 94% |
误触发率:12 小时 1 次。
原文档注释明确测试前提:以上结果基于ESP32-S3-Korvo V4.0 开发板 + WakeNet9 (Alexa) 模型。引用该组数据时应保留这一前提,不能推广到其他板型或其他唤醒词模型。
四、MultiNet 关键词识别基准
4.1 资源消耗
ESP32:
| Model Type | Internal RAM | PSRAM | Average Running Time per Frame | Frame Length |
|---|---|---|---|---|
| MultiNet 2 | 13.3 KB | 9 KB | 38 ms | 30 ms |
ESP32-S3(32 ms 帧长):
| Model Type | Internal RAM | PSRAM | Average Running Time per Frame |
|---|---|---|---|
| MultiNet 4 | 16.8 KB | 1866 KB | 18 ms |
| MultiNet 4 Q8 | 10.5 KB | 1009 KB | 11 ms |
| MultiNet 5 Q8 | 16 KB | 2310 KB | 12 ms |
| MultiNet 6 | 32 KB | 4100 KB | 12 ms |
| MultiNet 7 | 18 KB | 2920 KB | 11 ms |
ESP32-P4:
| Model Type | Internal RAM | PSRAM | Average Running Time per Frame | Frame Length |
|---|---|---|---|---|
| MultiNet 7 | 18 KB | 2920 KB | 8 ms | 32 ms |
几点观察:
- Q8 量化收益显著:MultiNet 4 量化后 PSRAM 从 1866 KB 降到 1009 KB、Internal RAM 从 16.8 KB 降到 10.5 KB,每帧推理从 18 ms 降到 11 ms,单帧 11 ms < 32 ms 帧长,即推理耗时不到输入帧间隔的三分之一,满足实时且有余量;
- MultiNet 7 相比 MultiNet 6 是明显的"更省"路线:PSRAM 从 4100 KB 降到 2920 KB,内部 RAM 从 32 KB 降到 18 KB,速度还略快(11 ms vs 12 ms),结合下节 WER 数据看,7 代在精度上并未妥协;
- 从源码结构看,模型名到引擎的映射由 esp_mn_models.h 的
esp_mn_handle_from_name()完成,模型名(如mn7_en)需与 model/multinet_model 目录下的实际模型文件(如mn7_en、mn5q8_en、mn6_cn)对应,测试工程test_apps/esp-sr-multinet中即可找到各模型对应的工程配置。
4.2 字错误率(WER)性能测试
原文档基于 librispeech 英文测试集的数据:
| Model Type | librispeech test-clean | librispeech test-other |
|---|---|---|
| MultiNet5-en | 16.5% | 41.4% |
| MultiNet6-en | 9.0% | 21.3% |
| MultiNet7-en | 8.5% | 21.3% |
test-clean(读体语料)上 MultiNet7-en 达到 8.5% WER;test-other(对话语料,难度更高)上 6 代与 7 代持平在 21.3%,5 代为 41.4%。整体趋势与资源表一致:7 代是精度与开销综合最优的版本。
4.3 关键词(Speech Commands)性能测试
3 米距离下的英文关键词识别率:
| Model Type | Distance | Quiet | Stationary Noise (SNR = 5~10 dB) | Speech Noise (SNR = 5~10 dB) |
|---|---|---|---|---|
| MultiNet 5_en | 3 m | 95.4% | 85.9% | 82.7% |
| MultiNet 6_en | 3 m | 96.8% | 87.9% | 85.5% |
| MultiNet 7_en | 3 m | 97.2% | 92.3% | 90.6% |
MultiNet 7_en 在 3 米、含人声干扰噪声下仍有 90.6% 的识别率,三代模型呈现单调提升,其中 7 代在强人声噪声环境相对 5 代提升 7.9 个百分点,是抗干扰能力改进最大的场景。
五、TTS 语音合成基准
中文 TTS(esp-tts)模块的基准数据:
- Flash image size: 2.2 MB
- RAM runtime: 20 KB
CPU 负载测试(ESP32 @ 240 MHz),以"合成速度是实时语速的几倍"衡量:
| Speech Rate | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| Times faster than real time | 4.5 | 3.2 | 2.9 | 2.5 | 2.2 | 1.8 |
解读:语速档位越高(语速 0 为最慢、5 为最快),单位文本的声学内容越多,合成速度相对实时语速的倍数从 4.5x 降到 1.8x;即便最快的语速档位,ESP32 上仍有 1.8 倍实时余量,离线缓存式 TTS 或实时播报均可覆盖。模块源码与多档语速的示例音频见 esp-tts 目录(esp-tts/samples下提供了 xiaole 各语速档位的 WAV 样例),各芯片预编译库位于esp-tts/esp_tts_chinese/下按芯片划分的目录。
六、复现路径与数据使用边界
6.1 如何复现/参考这些基准
- AFE:
test_apps/esp-sr-afe工程,通过 pytest_afe.py 与多芯片sdkconfig.ci.*配置(sdkconfig.ci.afe、sdkconfig.ci.p4_afe、sdkconfig.ci.s31_afe等)分别在不同目标上验证 AFE 各模式; - WakeNet:
test_apps/esp-sr-wakenet与test_apps/esp32c5目录下的多芯片 WakeNet 工程; - MultiNet:
test_apps/esp-sr-multinet,其main/test_multinet.cpp中覆盖mn7_en、mn6_cn、mn5q8_en等模型的加载与识别测试; - TTS:
test_apps/esp-tts提供多芯片中文 TTS 验证工程; - 模型文件:全部打包在 model 目录,可用
model/movemodel.py、model/pack_model.py管理模型分区。
6.2 引用数据时的边界说明
- AFE 表中ESP32-P4 的数据依赖特定缓存配置(400 MHz + 256 KB L2 + 128 B 行),迁移到其他 P4 配置时需复测;
- WakeNet 98%/96%/94% 的唤醒率绑定 ESP32-S3-Korvo V4.0 板型与 WakeNet9 (Alexa) 模型,更换硬件或唤醒词后数字不成立;
- MultiNet WER 是 librispeech 基准,关键词识别率是 3 m 特定噪声场景实测,两者口径不同,不可互相换算;
- 所有帧长 32 ms(WakeNet5/MultiNet2 为 30 ms)对应 16 kHz 采样下的 512/480 样本,"每帧推理时间 < 帧长"是实时的直接判据;
- 各芯片的 AFE/WakeNet/MultiNet 接口定义按芯片分目录存放于 include(如
include/esp32s3/、include/esp32p4/),跨芯片移植时以目标芯片目录的头文件为准。
七、结语:面向选型的关键结论
以 benchmark 文档与仓库源码为依据,可以沉淀出如下选型速查结论:
- 单麦语音助手(SR 场景):
MR, SR配置单核占用最低(Feed ~8.8%、Fetch ~9.8%),HIGH_PERF 档比 LOW_COST 档 Internal RAM 少约 11 KB,适合内部 RAM 紧张的项目; - 双麦阵列:MMNR 配置多出的 SE(BSS) 使 Fetch 占用翻倍(~22.9%),需为 AFE 预留独立核心或更低优先级;
- 语音通话(VC):NSNET 带来 Feed 侧 30% 上下的占用,且 VC 流水线不含 WakeNet,资源预算应按"feed 核"重分配;
- 唤醒引擎:新设计优先 WakeNet9/WakeNet10 系列,32 ms 帧内 3~7 ms 推理 + 16 KB 内部 RAM,配合
DET_MODE_3CH_90三通道模式可兼顾多麦场景; - 关键词识别:MultiNet 7 是精度(8.5% WER / 90.6% 噪声下识别率)与开销(8~11 ms 每帧、18 KB RAM)的当前最优平衡点;
- TTS:2.2 MB Flash + 20 KB RAM 的开销在 ESP32 上即可达到最快 4.5 倍实时合成速度。
以上所有数值均出自仓库基准文档docs/en/benchmark/README.rst,配置字段与检测模式的定义可回溯到include/下对应芯片目录的头文件,实际项目中建议在自己的目标板上按test_apps/的工程模板复测确认。
- 语音
- 音频
- 人工智能
- 嵌入式
- 物联网
【免费下载链接】esp-sr
Speech recognition
相关推荐
ESP-SR 性能基准测试全解析:AFE / WakeNet / MultiNet / TTS / NSNet 资源消耗与识别精度数据指南
ESP SR 性能基准测试全解析:AFE / WakeNet / MultiNet / TTS / NSNet 资源消耗与识别精度数据指南 本指南以乐鑫 ESP
语音音频人工智能嵌入式物联网ESP-SR 入门实战:基于乐鑫语音识别框架的 AFE、WakeNet、MultiNet 与 TTS 端到端开发指南
ESP SR 入门实战:基于乐鑫语音识别框架的 AFE、WakeNet、MultiNet 与 TTS 端到端开发指南 本文是乐鑫 ESP SR 语音识别框架的入
语音音频人工智能嵌入式物联网ESP-SR WakeNet 语音唤醒引擎详解:架构、模型选型与 AFE 集成实战
ESP SR WakeNet 语音唤醒引擎详解:架构、模型选型与 AFE 集成实战 本指南基于 ESP SR 仓库的 WakeNet 文档 https://li
语音音频人工智能嵌入式物联网
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考