news 2026/10/23 12:05:41

esp-sr 嵌入式语音前端基准测试指南:AFE、WakeNet、MultiNet 与 TTS 的资源占用与性能解读

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
esp-sr 嵌入式语音前端基准测试指南:AFE、WakeNet、MultiNet 与 TTS 的资源占用与性能解读
  • 语音
  • 音频
  • 人工智能
  • 嵌入式
  • 物联网

【免费下载链接】esp-sr

Speech recognition

项目地址:https://gitcode.com/gh_mirrors/es/esp-sr
点击查看免费下载

本文基于 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 配置与流水线表为例(完整继承自原文档):

ConfigPipeline
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

可以看出几个清晰的规律:

  1. SR 场景挂 WakeNet,面向"唤醒 + 关键词"的语音助手链路,VAD 之后直接进唤醒引擎;
  2. VC / FD 场景引入非线性降噪(VC 流水线中的NS(nsnet2)),因为通话质量比唤醒更看重语音清晰度;
  3. MMNR(双麦)相比 MR 多了SE(BSS)盲源分离环节,这是双麦场景 CPU 占用和 PSRAM 占用明显更高的直接原因;
  4. 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 TypeRAMAverage CPU loading (compute with 2 cores)Frame Length
AEC (HIGH_PERF)114 KB11%32 ms
NS27 KB5%10 ms
AFE Layer73 KB——

即:高性能 AEC 是最大的 RAM 开销来源(114 KB),AFE 框架层本身再占 73 KB;NS 模块 10 ms 一帧、双核算力约 5%。

2.2 ESP32-S3:十种配置的完整数据

ESP32-S3 下 AFE 配置与性能(完整继承原文档,Feed/Fetch 均为单核口径):

ConfigInternal RAM (KB)PSRAM (KB)Feed CPU usage (1 core, %)Fetch CPU usage (1 core, %)
MR, SR, LOW_COST60.1739.78.89.8
MR, SR, HIGH_PERF49.1775.89.39.8
MR, FD, LOW_COST60.2777.712.19.8
MR, FD, HIGH_PERF49.2813.812.59.8
MR, VC, LOW_COST48.7819.730.64.7
MR, VC, HIGH_PERF91.1822.232.24.7
MMNR, SR, LOW_COST79.11153.723.722.9
MMNR, SR, HIGH_PERF68.11200.424.922.9
MMNR, FD, LOW_COST79.21191.729.422.9
MMNR, FD, HIGH_PERF68.11238.530.422.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 TypeParameter NumRAMAverage Running Time per FrameFrame Length
Quantised WakeNet541 K15 KB5.5 ms30 ms
Quantised WakeNet5X2165 K20 KB10.5 ms30 ms
Quantised WakeNet5X3371 K24 KB18 ms30 ms

ESP32-S3(32 ms 帧长):

Model TypeRAMPSRAMAverage Running Time per FrameFrame Length
Quantised WakeNet8 @ 2 channel50 KB1640 KB10.0 ms32 ms
Quantised WakeNet9 @ 2 channel16 KB324 KB3.0 ms32 ms
Quantised WakeNet9 @ 3 channel20 KB347 KB4.3 ms32 ms
Quantised WakeNet10 @ 3 channel17 KB523 KB7.1 ms32 ms

原文档注释:WakeNet10 三通道结果默认使用DET_MODE_3CH_90检测模式,单核 CPU 占用 22.6%。

ESP32-P4:

Model TypeRAMPSRAMAverage Running Time per FrameFrame Length
Quantised WakeNet9 @ 2 channel16 KB324 KB2.6 ms32 ms
Quantised WakeNet9 @ 3 channel20 KB347 KB3.1 ms32 ms
Quantised WakeNet10 @ 3 channel16 KB523 KB4.1 ms32 ms

原文档注释:WakeNet10 三通道默认DET_MODE_3CH_90,单核 CPU 占用 14.1%。

ESP32-S31:

Model TypeRAMPSRAMAverage Running Time per FrameFrame Length
Quantised WakeNet10 @ 3 channel16 KB523 KB6.4 ms32 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)

原文档给出的唤醒率测试矩阵(不同距离与噪声条件下):

DistanceQuietStationary Noise (SNR = 4 dB)Speech Noise (SNR = 4 dB)AEC Interruption (-10 dB)
1 m98%96%94%96%
3 m98%96%94%94%

误触发率:12 小时 1 次。

原文档注释明确测试前提:以上结果基于ESP32-S3-Korvo V4.0 开发板 + WakeNet9 (Alexa) 模型。引用该组数据时应保留这一前提,不能推广到其他板型或其他唤醒词模型。

四、MultiNet 关键词识别基准

4.1 资源消耗

ESP32:

Model TypeInternal RAMPSRAMAverage Running Time per FrameFrame Length
MultiNet 213.3 KB9 KB38 ms30 ms

ESP32-S3(32 ms 帧长):

Model TypeInternal RAMPSRAMAverage Running Time per Frame
MultiNet 416.8 KB1866 KB18 ms
MultiNet 4 Q810.5 KB1009 KB11 ms
MultiNet 5 Q816 KB2310 KB12 ms
MultiNet 632 KB4100 KB12 ms
MultiNet 718 KB2920 KB11 ms

ESP32-P4:

Model TypeInternal RAMPSRAMAverage Running Time per FrameFrame Length
MultiNet 718 KB2920 KB8 ms32 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 Typelibrispeech test-cleanlibrispeech test-other
MultiNet5-en16.5%41.4%
MultiNet6-en9.0%21.3%
MultiNet7-en8.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 TypeDistanceQuietStationary Noise (SNR = 5~10 dB)Speech Noise (SNR = 5~10 dB)
MultiNet 5_en3 m95.4%85.9%82.7%
MultiNet 6_en3 m96.8%87.9%85.5%
MultiNet 7_en3 m97.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 Rate012345
Times faster than real time4.53.22.92.52.21.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 引用数据时的边界说明

  1. AFE 表中ESP32-P4 的数据依赖特定缓存配置(400 MHz + 256 KB L2 + 128 B 行),迁移到其他 P4 配置时需复测;
  2. WakeNet 98%/96%/94% 的唤醒率绑定 ESP32-S3-Korvo V4.0 板型与 WakeNet9 (Alexa) 模型,更换硬件或唤醒词后数字不成立;
  3. MultiNet WER 是 librispeech 基准,关键词识别率是 3 m 特定噪声场景实测,两者口径不同,不可互相换算;
  4. 所有帧长 32 ms(WakeNet5/MultiNet2 为 30 ms)对应 16 kHz 采样下的 512/480 样本,"每帧推理时间 < 帧长"是实时的直接判据;
  5. 各芯片的 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

项目地址:https://gitcode.com/gh_mirrors/es/esp-sr
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/17 20:50:46

半导体设备通信标准SECS/GEM:协议分层与联调避坑指南

简介&#xff1a;SECS/GEM作为从半导体行业走向智能制造的关键通信协议&#xff0c;如今已广泛应用于各类工业制造设备&#xff0c;用于统一设备与制造系统间的状态上报与控制。这份中文详解文档面向设备工程师、自动化集成人员与制造信息化从业者&#xff0c;系统梳理协议核心…

作者头像 李华
网站建设 2026/10/23 6:52:45

NCM2MP3实战:从解密原理到批量转换避坑指南

简介&#xff1a;网易云音乐的NCM格式封闭且不被普通播放器支持&#xff0c;NCM2MP3-master.zip提供从NCM到MP3的完整转换方案&#xff0c;内含可直接运行的JAR工具与Java源码&#xff0c;适合有一定编程基础或想了解音频格式处理逻辑的开发者。压缩包共35个文件&#xff0c;Ja…

作者头像 李华
网站建设 2026/10/22 2:21:26

QuarkTS移植实战:从裸机到协作式调度

1. 先想清楚&#xff1a;为什么我会在项目里选择 QuarkTS 而不是继续裸奔大概在去年做某便携式监测设备的原型时&#xff0c;我遇到一个很典型的嵌入式困境。产品本身是一块 Cortex-M3 内核的核心板&#xff0c;外设不算少&#xff1a;两路传感器要周期采集、一路串口要收发不定…

作者头像 李华
网站建设 2026/10/23 12:05:37

消防主机JK-2020协议对接实战:从串口参数到点位映射

简介&#xff1a;《JK-2020消防主机协议列表_220412》是一份面向消防报警主机集成、调试与维护人员的协议速查资料&#xff0c;系统汇总了蓝天、松江、海湾、北大青鸟、西门子等多个主流厂商数十款主机的通讯协议&#xff0c;涵盖常见国产及进口品牌&#xff0c;解决消防主机对…

作者头像 李华
网站建设 2026/10/23 1:03:00

机器人诊断系统技术突破与未来挑战

机器人诊断系统&#xff08;Robotics Diagnostics & Prognostics System&#xff09;是机器人软件与硬件栈中的“智能AI医生”。它位于日志记录&#xff08;Logging&#xff09;与实时监控&#xff08;Monitoring&#xff09;之上&#xff0c;核心任务是从海量的时序数据、…

作者头像 李华
网站建设 2026/10/23 0:22:32

更换新能源汽车高压部件,操作流程拆解:远比想象中复杂

很多人会有一个认知误区&#xff1a;新能源车维修和传统燃油车差别不大&#xff0c;零部件损坏之后&#xff0c;直接找维修师傅拆装更换即可。 但一旦涉及高压部件维修&#xff0c;没有经过系统化高压安全培训的人员&#xff0c;严禁上手作业&#xff0c;触电风险极高。本文以大…

作者头像 李华