4.3.29.1. HIFI5用户指南
概述
HiFi 子系统
基础xos,驱动SSF路由
说明:本章
涉及 的 是 DSP 侧 固件 二次开发,需要 获取 adsp源码授权(未 授权 时 在 BSP 的 platform_source_code 中 找 不到 adsp目录)。若仅需 体验「ARM 侧 通过 IPC 调用 DSP 算法」的 完整 流程,使用 镜像 中 预置 的 固件 即可,无需 授权,参见 sample_dsp 使用 说明 。
硬件架构

软件架构

关键词
KWS(Keyword Spotting): 唤醒
VAD(Voice Activity Detection):人声
ASR(Automatic Speech Recognition):语音
AGC(Automatic Gain Control):自动增益
NS(Noise Suppression):噪声
AEC(Acoustic Echo Cancellation):自动
DOA(Direction of Arrival):声源
BF(Beamforming):波束
ASR(Automatic Speech Recognition):语音
Speech Front-End Processing :语音
Primary Wake-up 一级
Secondary Wake-up Front-end 二级
Time Sync:时间
Wake-up Scheme : 唤醒
快速开始
源码目录结构
adsp目录
├── application # HIFI5中间件入口
├── bsp_project # 驱动代码
├── core_config # xos工具链相关,编译依赖
├── custom_lsp #
├── env_hf5.sh # 环境配置脚本
├── Makefile # 编译文件
├── Makefile.in # 编译配置文件
├── output # 核心输出
├── output_sdk # sdk输出
├── sample_wakeup # A core 集成示例
├── ssf # 路由中间件
└── toolchain # 编译工具链
其中sample_wakeup目录
├── build # 编译目录
├── CMakeLists.txt # cmake编译文件
├── hobot_speech_x5_sdk # 算法SDK
├── i2c_control.sh # 音频板加载脚本
├── include # 头文件目录
├── out # 输出目录
├── README.md # 介绍
├── src # 源文件
├── x5audio_init.sh # 板端使用的环境初始化脚本
└── xbuild.sh # 编译脚本
编译
编译bsp源码,选择
在adsp目录
# firmware编译
source env_hf5.sh # 选择编译的版本,输入0编译debug版本,再输入0不需编译测试用例
make clean # 清除历史数据
make application
# 进入示例目录,编译示例文件
cd sample_wakeup
./xbuild.sh
自动环境部署
Acore dts默认dsp_dma,系统启动adsp测试dsp_dma节点。
#关闭:
setenv fdt-blacklist "/soc/dsp_apb/dma-controller@32080000"
#打开:
setenv fdt-whitelist "/soc/dsp_apb/dma-controller@32080000"
#保存设置,执行
saveenv
#setenv设置后,每次刷机后单次设置后即可
boot
#进入kernel
注意:手动
sample_wakeup编译sample_wakeup/out目录
检查
mount / -o rw,remount
命令sample_wakeup/out目录adb push到/mnt下后,示例
sh-5.1# pwd
/mnt/out
sh-5.1# ls
adsp hrsc_sdk_demo_lp_to_normal hrsc_sdk_demo_pipeline4
hobot_speech_device_test hrsc_sdk_demo_pipeline0 i2c_control.sh
hrsc hrsc_sdk_demo_pipeline1 lib
hrsc_sdk_demo_files hrsc_sdk_demo_pipeline2 x5audio_init.sh
执行
chmod 777 x5audio_init.sh
./x5audio_init.sh
即可
可以
arecord -D hw:0,0 -c 4 -f S16_LE -r 16000 ./normal_record.wav # 未经算法处理的原生音频 3mic+1ref
arecord -D hw:0,1 -c 1 -f S16_LE -r 16000 ./asr_record.wav # 单通道asr音频
arecord -D hw:0,2 -c 2 -f S16_LE -r 16000 ./history_buffer.wav # 2通道降噪后音频,用以语音唤醒
arecord -D hw:0,3 -c 4 -f S16_LE -r 16000 ./hisf_lp.wav # 4通道低功耗降噪后音频
arecord -D hw:0,4 -c 4 -f S16_LE -r 16000 ./hisf_normal.wav # 4通道经过降噪的音频,前三通道为mic降噪音频,用以唤醒,
# 第四通道为ASR音频,用以语音识别
aplay -D hw:0,0 test.wav #支持2通道48k采样率16bit位宽的音频播放
pipeline定义
pipeline3链路
上 不会 将 数据 送给alsa,如果 使用arecord命令 测试,alsa框架 在10s无 数据 后 触发 超时 给 用户 空间 返回 异常。 pipeline2链路
上 数据 依赖history buffer送 出来 的 数据,单独 启动pipeline2不会 控制 配置i2s驱动,alsa框架10s后 触发 超时 用户 空间 返回 异常。

关于pipeline详细
手动环境部署
firmware默认
加载 路径 是:/lib/firmware V1.0.12版本acore会 把firmware打包 到 镜像 中 镜像 烧写 默认 将firmware安装 在/usr/hobot/lib/firmware路径 下,因此 需要 执行 以下 命令 增加 可 查找 的firmware路径: echo -n "/usr/hobot/lib/firmware" > /sys/module/firmware_class/parameters/path
设置firmware名称。用户
可 根据 实际fw名称 在 加载fw之前 进行 调整 echo <adsp> > /sys/class/remoteproc/remoteproc0/firmware
注意:
<>尖括号不 需要 附加, <>中间的 内容 为 /usr/hobot/lib/firmware路径下 需要 加载 的 固件 文件名。 加载firmware
echo start > /sys/class/remoteproc/remoteproc0/state //测试...
卸载firmware
echo stop > /sys/class/remoteproc/remoteproc0/state