发布时间:2026/8/14 20:18:39
基于 RA8P1 的声音分类推理工程 关于公开内容的重要说明本作品将于 8 月 20 日参加全国大学生电子设计竞赛信息科技前沿专题赛现场评审。为保护作品核心成果不泄漏烧录进 Flash 中的二进制文件暂不公开本文仅作原理与工程方法交流。声音分类模型目前只分辨狗叫、猫叫、鸟叫三种声音其它声音类型的判别方式暂时不公开敬请理解。本文记录声音分类推理工程的完整技术路线模型如何从 tflite 转换到可编译的 C 代码、转换产物怎么用、模型怎么烧录、板端推理链路与 UI 如何实现。整套推理完全在板端完成不依赖上位机与网络。一、模型转换从 tflite 到 C 代码模型先以 TensorFlow Lite 格式int8 量化训练导出。RA8P1 的 Ethos-U55 NPU 不能直接执行 tflite需要先用瑞萨的RHUMI 套件Renesas Heterogeneous Unified Model Interface做一次转换把 tflite 变成可以直接编译进工程的 C 源码。RHUMI 会自动分析模型图按算子类型把网络拆成两部分能上 NPU 的算子卷积、全连接等→ 编译成 Ethos-U55 专用命令流运行时由 NPU 硬件执行不能上 NPU 的算子量化、反量化等预处理/后处理→ 保留为 CPU 代码由 TFLite-Micro 内核执行。转换输出位于converted/build/MCU/compilation/src/另外按子图分目录sub_0000__CPU_C_CODEGEN # CPU 子图模型输入侧 sub_0001__ARM_ETHOS_U55_C_CODEGEN # NPU 子图模型主体 sub_0002__CPU_C_CODEGEN # CPU 子图模型输出侧二、转换产物说明整张模型的推理被串成三个子图CPU 量化 → NPU 主体推理 → CPU 反量化。src/目录下的文件按职责分组1. 统一入口直接使用不需要改文件作用model.c / model.h把三个子图串成一次RunModel()调用并暴露输入/输出缓冲指针hal_entry.cRHUMI 附带的示例入口演示特征提取与调用模型的完整流程可作为移植参考2. NPU 子图sub_0001由 Vela 编译器生成文件作用sub_0001_model_data.c / .h模型权重数据约 6 MB 二进制的 C 数组展开体积最大的文件sub_0001_command_stream.c / .hNPU 命令流即 Ethos-U55 要执行的指令序列sub_0001_invoke.c / .hNPU 调用封装把权重、工作区arena和各张量内存地址打包成base_addrs[]调用 Ethos-U 驱动ethosu_invoke_v3()执行sub_0001_tensors.c / .h、sub_0001_io_data.c / .h张量信息表与 IO 缓冲区地址偏移并定义 NPU 工作区大小491,520 字节 ≈ 480 KB arena3. CPU 子图文件作用compute_sub_0000.c / .h、compute_sub_0002.c / .h量化/反量化等 CPU 算子的实现kernel_library_int.c / .h、kernel_library_utils.c / .hTFLite-Micro 内核库CPU 算子的运行时依赖ethosu_common.h张量描述结构TensorInfo定义三、接口与调用方式三个统一接口就够用了float*GetModelInputPtr_serving_default_input_1_0();/* 输入指针96×64 的 mel 特征缓冲 */voidRunModel(bool clean_outputs);/* 执行一次推理 */float*GetModelOutputPtr_StatefulPartitionedCall_1_0_70040();/* 输出指针各类别置信度 */RunModel()内部依次执行三个子图compute_sub_0000(compute_arena_sub_0000,input,quantized);/* CPUfloat 特征 → int8 */memcpy(npu_arenaoffset,quantized,6144);/* 把量化数据送入 NPU 输入区 */sub_0001_invoke(clean_outputs);/* NPU执行命令流 */compute_sub_0002(compute_arena_sub_0002,npu_out,output);/* CPUint8 → float 置信度 */应用层的用法就是填特征 → 跑一次 → 读置信度三步float*inputGetModelInputPtr_serving_default_input_1_0();memcpy(input,mel_patch,96*64*sizeof(float));/* 填一帧特征 */RunModel(false);/* 推理 */float*outGetModelOutputPtr_StatefulPartitionedCall_1_0_70040();/* 对 out 取最大值下标即类别值即置信度 */四、模型如何烧录与内存布局转换产物里有两个大块存放位置不同1. 模型权重约 6 MB——烧入 OSPI Flash 专用槽默认编译方式会把权重数组直接编进固件固件体积会撑到 6 MB 以上不可接受。本工程的做法先把sub_0001_model_data.c里的权重数组提取为二进制文件MODEL_AUDIO.BIN约 6 MB烧录时写入 OSPI Flash 的专用8 MiB 槽位地址0x80800000推理前做CRC 校验工程源码里把权重数组替换为一个指针常量让 NPU 直接从 OSPI 的 memory-mapped 窗口读取不占 SDRAM、不占固件空间constuint8_t*constsub_0001_model_data(constuint8_t*)0x80800000UL;模型更新走板载串口XMODEM-CRC 上传命令2 Mbps下载前自动停止推理会话上传后校验匹配再允许恢复推理。2. NPU 工作区 arena约 480 KB——必须放非缓存 SDRAMarena 是 NPU 推理时的可写工作区由 NPU 的 DMA 直接读写。放普通可缓存 RAM 时CPU 会从 D-Cache 读到陈旧数据导致结果错误。工程里把生成代码的 arena 定义加一段属性/* 转换产物原样 */__attribute__((aligned(16)))uint8_tsub_0001_arena[491520];/* 工程版放入非缓存 SDRAM 段 */__attribute__((section(.sdram_nocache),aligned(16)))uint8_tsub_0001_arena[491520];输入/输出缓冲float 特征与 float 置信度无 DMA 参与放普通内存即可。五、本工程的声音推理推理链路采集链路麦克风信号经 WM8960 编解码器以 48.828 kHz 立体声采集由 DMA 写入双缓冲再经重采样器转成 16 kHz 单声道供后续分析与识别共用。分段处理推理会话按5 秒一段切分。每段数据直接写入片内内存 PCM 缓冲约 160 KB位于 SDRAM段满即送推理——全程不写 SD 卡无卡也能运行。特征提取对每一段音频计算 mel 频谱图96×64 特征图作为模型输入。分段表决为提高鲁棒性每一段会切分为若干短片段分别推理再对结果做多数表决表决结果作为该段的最终类别段置信度取胜出类在判定为自身的短片段上的平均置信度。表决机制能显著降低单点误判带来的抖动。实时展示识别结果按狗叫 / 猫叫 / 鸟叫展示屏幕同时给出置信度百分比、已分析段数与失败段数每 5 秒刷新一次。六、UI单页推理界面界面保持单页、无跳转原则开机直接进入推理页左侧两个按钮START开始推理、STOP停止推理运行中再次触发无效会话防重入门控按钮置灰显示。右侧实时结果卡当前轮计时秒数、当前分类与置信度、已分析/失败段数。停止后计时定格显示本轮汇总总时长 HH:MM:SS、各段统计结果只保留在内存不写入 SD、不保存历史可立即开始下一轮。界面文案全部使用 ASCII 字符集配套字库裁剪为 ASCII 子集字库生成脚本自动完成。七、内存与缓存约定板级验证数据位置约束录音采集双缓冲内部 SRAM 的.ram_noinit_nocache段32 字节对齐I2S DMA 写、CPU 读必须绕过 D-Cache推理段 PCM 缓冲SDRAM 的.sdram_noinit段CPU 写 / CPU 读同线程推理无 DMANPU 工作区 arenaSDRAM 的.sdram_nocache段约 480 KBNPU 运行期读写不得放入 OSPI模型权重OSPI Flash memory-mapped0x80800000槽推理前 CRC 校验直接读取FAT 缓存缓冲内部 SRAM 的.ram_noinit_nocache段32 字节对齐SDHI DMAC 直接写入避免 CPU 读到陈旧缓存行八、工程代码结构与声音分类相关部分文件职责src/player_Thread_entry.c音频线程录音主循环、DSP、段 PCM 累积src/middleware/audio/audio_cmd_handler.c音频命令、5 秒段循环、推理会话状态机src/application/audio/model/audio_model_infer.cmel 特征提取与 Ethos-U 推理入口src/application/audio/model/ethosu_freertos.cNPU 互斥/信号量 FreeRTOS 钩子src/application/audio/model/ai_model_slot.c / ai_model_upload.cOSPI 模型槽校验与 XMODEM 上传src/application/audio/model/generated/Vela 编译器生成的 NPU 命令流不含权重数据src/application/core/app_bridge.c线程间命令/消息桥与推理会话门控src/application/ui/ui_manager.c、ui_page_infer.c单页推理 UI篇幅所限模型训练、量化与 Vela 编译流程未展开感兴趣的队伍欢迎交流。通过网盘分享的文件音频模型.zip链接: https://pan.baidu.com/s/1Wno2164rDZrxV4Ddf8Isng?pwdsiwq 提取码: siwq

相关新闻

2026/8/14 20:18:39

【Spring Cloud Alibaba】Nacos(一)

【Spring Cloud Alibaba】Nacos0. Spring Cloud Alibaba 组件1. 什么是Nacos,它都能干什么?1.1 注册中心演变及其思想1.2 Nacos Discovery1.3 远程调用流程图1.4 一个微服务的流程1.4 常用注册中心对比2. Nacos Server部署3. Nacos Client搭建4. Nacos管…

2026/8/14 20:18:39

完整指南:使用npm-g_nosudo配置无sudo的Node.js开发环境

完整指南:使用npm-g_nosudo配置无sudo的Node.js开发环境 【免费下载链接】npm-g_nosudo A shell script which will fix the problem where you want to stop using sudo for npm -g on Ubuntu. 项目地址: https://gitcode.com/gh_mirrors/np/npm-g_nosudo n…

2026/8/14 21:03:46

TokenTown可视化工具:深入理解Transformer与LLM内部工作机制

在探索大语言模型(LLM)和 Transformer 架构时,很多开发者,尤其是刚入门的同学,常常感到困惑:这些模型内部到底是如何运作的?注意力机制、词元(Token)处理、前馈网络这些概…

2026/8/14 21:03:46

低代码平台核心原理深度解析:三层抽象模型与实战避坑指南

1. 从“提效神话”到“落地困境”:我们为什么需要理解低代码原理?最近几年,低代码平台(Low-Code Platform)无疑是技术圈最火的概念之一。无论是企业内部的流程审批、数据报表,还是面向客户的小程序、管理后…

2026/8/14 21:03:46

同步解调原理详解:从频谱搬移到载波同步的通信核心

如果你正在准备通信考研,或者在学习《信号与系统》这门课时,面对“同步解调”这个概念感到一头雾水——明明公式看起来就是“已调信号乘以同频载波,再加个低通滤波”,但为什么就能把信号“搬”回来?它和“相干解调”到…

2026/8/14 21:03:46

ClickHouse+S2索引实现万亿级轨迹数据秒级检索实战

1. 项目概述:当轨迹数据遇上“秒级”挑战在移动互联网和物联网时代,轨迹数据正以前所未有的速度增长。从共享单车的骑行路线、物流车辆的配送轨迹,到手机App的用户位置签到,这些由时间、空间坐标构成的序列,每天都在产…

2026/8/14 21:03:46

Web安全攻防:文件包含漏洞原理、利用与防御实战指南

在CTF比赛和日常渗透测试中,文件包含漏洞(File Inclusion)是Web安全领域一个经典且危害巨大的漏洞类型。它允许攻击者通过Web应用程序的动态文件包含功能,读取或执行服务器上的任意文件,甚至结合其他漏洞实现远程代码执…

2026/8/14 20:58:46

5步完成缠论插件安装,通达信自动画好笔、线段和中枢

5步完成缠论插件安装,通达信自动画好笔、线段和中枢 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 如果你在通达信里研究缠论,大概率经历过这样的场景:对着K线图手动标…

2026/8/14 4:27:24

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/14 4:27:24

当 LLM 遇见大文档:主流开源项目如何处理上下文超限

从 Agentic Loop 到 Repo Map,七种策略与六类陷阱引言:128K vs 10MB 的硬冲突 2026 年的 LLM 上下文窗口已达到 128K ~ 1M token(≈ 0.5MB ~ 4MB 文本),但 LLM 想要处理的真实数据规模远远超过这个量级:真实…

2026/8/14 0:00:09

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:09

VSCode高效Git管理:从入门到实战技巧

1. 为什么选择VSCode进行Git代码管理作为微软推出的轻量级代码编辑器,Visual Studio Code(简称VSCode)已经成为全球开发者使用率最高的编辑器之一。根据2023年Stack Overflow开发者调查,VSCode的市场占有率高达74.48%。它内置的Gi…

2026/8/14 4:27:24

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/14 4:27:24

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/14 4:27:24

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…