XVF3610 产品描述
XMOS VocalFusion® XVF3610系列语音处理器使用麦克风阵列处理,从房间的任何地方捕捉清晰、高质量的语音。XVF3610处理器使用高度优化的数字信号处理算法,实施 "闯入"、点噪声和环境噪声降低,以提高信噪比(SNR),从而在任何环境下实现可靠的语音接口。
XVF3610处理器是为无缝集成到需要自动语音识别(ASR)、通信或会议的语音接口的消费电子产品而设计的。除了其同类领先的语音处理外,XVF3610语音处理器还提供了一套全面的接口和配置选项,以简化将语音接口集成到广泛的系统架构中。这包括电视和机顶盒应用中需要的特定功能,包括音频切换和支持开关和LED指示灯的数字输入和输出。
产品差异
XVF3610-INT 用作集成设备,内嵌入产品 通过I2S传输音频,I2C与其他MCU交互
XVF3610-UA 用作即插即用设备,或者通过USB嵌入产品 通过UAC1.0传输音频
系统架构
XVF3610-INT主要是通过I2C交互,I2S提供Ref参考信号,PDM麦克风输入,然后通过I2S输出音频信号

XVF3610-UA主要是通过USB交互,通过UAC1.0提供Ref信号,PDM麦克风输入,然后通过I2S输出音频信号(可选),以及通过USB输出音频信号

固件配置
设备固件配置有两种方式:
-
通过板子上包含的QSPI Flash自动加载到XVF3610处理器
-
从host端的处理器上通过 SPI 接口下载到XVF3610处理器
通过设置QSPI_D1/BOOTSEL pin来选择引导方式
如果设备固件是从主机下载的,则不需要数据分区,设备直接通过控制接口进行配置。
语音处理流水线
XVF3610语音处理器的核心是一个高性能的音频处理流水线,它从一个复杂的音景中通过执行一系列的信号处理算法,提取出一个语音信号。音频流水线可以从HOST接收一个参考信号,用于执行AEC(Acoustic Echo Cancellation)以移除主机播放的音频。
处理后的语音分别针对人声识别和语音通讯进行优化,然后分为两个不同的channel输出。
音频处理流水线
XVF3610-UA 和 XVF3610-INT 的音频处理流水都是相同的
XVF3610的输入是从MEMS PDM麦克风中获取输入,然后使用高级信号处理算法去创建适用于ASR(Automatic Speech Recognition)和语音通讯的音频流。流水线使用一组互补的信号增强和降噪过程来增强捕获的音频流。

流水线通过PDM麦克风采集音频信号,并将格式转为PCM进行进一步处理:
-
AEC(Acoustic Echo Cancellation):持续对房间声学进行建模,以去除产品本身播放音频所产生的回声(避免其出现在处理后的音频中)。这里需要向XVF3610提供音频的参考副本,以消除回声。
-
ADEC(Automatic Delay Estimation & Control):自动监测并自动补偿参考音频和麦克风接收的回声之间的延迟。
在回声消除之后,ASR和语音通信的处理路径发生分歧,以允许对个别音频输出使用情况进行适当的参数调整。
- IC(Interference Cancellation):抑制来自点源的静态噪声,如抽油烟机、洗衣机或没有参考音频信号的收音机。
- VAD(Voice Activity Detection):控制IC和AGC的自适应,以优化近端语音输出。
- NS(Noise Suppression):抑制来自频率特性不随时间迅速变化的来源的弥散噪声(即弥散静止噪声)。
- AGC(Automatic Gain Control):通过独立的AGC通道控制音频输出电平(控制音量大小),用于自动语音识别(ASR)和通讯输出。VAD用于防止语音期间的增益变化,以提高语音识别性能。
流水线旨在最大限度地减少调整和修改这些功能的需求,同时在后面也提供了一些可以调整的参数
ASR和通讯处理
经过流水线处理后会产生两个音频流,默认会通过两个channel输出:
| Channel | 默认值 |
|---|---|
| [0] - Left | ASR - Automatic Speech Recognition |
| [1] - Right | Communications |
无论是通过USB还是I2S输出,通道默认值都是如此
在使用ASR调用呼叫的情况下,可能需要持续监测ASR通道的 "结束呼叫 "意图。ASR和通信处理流的并行输出允许高质量的呼叫音频与调整后的ASR能力相结合。
IO_MAP 配置参数(请参阅信号流和处理部分)允许用户还可以将两个通道配置为 ASR 或通信(如果需要)
XVF3610-INT - 用于集成语音接口应用
XVF3610-INT产品将核心音频处理流水线嵌入一系列的音频设备中,XVF3610-INT还为主机系统提供了一套外围接口,用于连接其他设备,如数字输入、LED、SPI外围设备等。
支持的外围接口包括一个到可选的QSPI闪存设备的接口,该设备含有XVF3610固件和配置信息,在启动时由处理器加载。
XVF3610-INT的系统结构如下所示:

XVF3610-UA - 用于 USB 附件语音接口应用
XVF3610-UA变体包括与XFV3610-INT相同的音频基础设施,但它包括一个USB接口,实现了一个UAC1.0音频设备与主机系统的连接。USB接口还支持一个端点0控制通道,以及一个USB HID,以向主机发出输入事件的信号。
XVF3610-UA的系统结构如下所示:

注意:XVF3610-UA产品还支持混合操作模式,其中参考信号通过I2S而不是USB发送。这种模式是通过修改存储在闪存设备中的配置数据来选择的。
固件发布包
XVF3610有两个发布包,一个用于XVF3610-UA,另一个用于XVF3610-INT。
发布包和固件构建是通过版本号来识别的,它遵循标准的语义版本规范。版本号的格式是X.Y.Z,例如5.2.0,这些数字有以下含义。
| 数字 | 名称 | 含义 |
|---|---|---|
| X | 主要版本号 | 固件的重大发布。控制界面可能无法向后兼容早期版本 |
| Y | 次要版 本号 | 增加了新的功能,但控制界面可以向后兼容早期的主机应用程序 |
| Z | 补丁版本号 | 仅对不正确的功能进行了错误修复。对主机界面没有改变 |
发布版本包含在固件文件分发的文件名中,也可以通过控制界面使用GET_VERSION命令读取。
每个包由几个目录和文件组成,包含发布的固件二进制文件、数据分区工具、主机二进制文件和主机源代码。一个简化的目录结构显示如下:
├── bin
├── data-partition
│ ├── images
│ └── input
└── host
├── Linux
│ └── bin
├── MAC
└── bin
├── Pi
│ ├── bin
│ └── scripts
├── Win32
│ └── bin
└── src
├── dfu
├── dpgen
└── vfctrl
对于主要目录的说明如下:
bin
包含XVF3610的固件:一份用于Flash自动加载,一份用于SPI主机加载
data-partition
数据分区包含 XVF3610 固件的配置数据,以启动时运行的一组命令的形式实现。数据分区是使用输入命令源文件和一组工具创建的,这些工具在本文件的数据分区部分有描述。数据分区目录的内容如下:
根目录包含默认的数据分区图像源文件(int.json或ua.json)以及通用闪存设备规范16mbit_12.5mhz_sector_4kb.spispec、数据分区生成脚本和关于如何生成数据分区二进制文件的简短说明。
- images子目录包含从默认数据分区映像源文件生成的预生成数据分区二进制文件。如果默认设置合适,这些文件适合与固件一起直接编程到外部闪存中。
- input子目录包含简短的命令序列,在生成数据分区二进制文件时,由数据分区图像源文件引用。
此外,在运行数据分区生成脚本时,会创建一个输出目录,其中包含新生成的数据分区二进制文件。
host
这个目录包含与主机有关的文件和实用程序。执行参数控制、DFU和数据分区生成的各种主机工具被提供给Linux(ARM和x86)、Windows和MacOS平台预编译。这些二进制文件可以在Linux、Pi、Mac和Win32目录中找到,还有一个额外的脚本,叫做send_image_from_rpi.py,它提供了一个从主机发送SPI引导图像的例子。
host目录的根部也包含了解压缩信号的脚本,这些信号可以使用本文件信号路由部分所描述的控件来捕获。
在同一目录下还提供了从源头建立主机实用程序的说明。主机工具的源文件包含在src子目录中,允许建立、修改或集成到其他项目中。
在这个目录中还有三个子目录dfu、dpgen和vfctrl,它们包含DFU、数据分区发生器和参数控制工具的源文件(和依赖库)。
必要工具
为了更新固件、修改和重新生成数据分区以及重建主机实用程序,需要以下工具:
XTC Tools
需要配合15.1.0以上版本使用,可以使用xflash以将代码编译到通过XTAG连接的设备的Flash上,命令行的基本格式如下:
xflash --boot-partition-size 0x100000 --factory [Application executable (.xe)] --data [Data partition description (.bin)]
如果是XVF3610做SPI从,那么映像不需要数据分区,因为假定配置命令主机的控制器会提供
-
应用程序可执行文件 (.xe) .xe 文件是与支持的配置(-UA 或 -INT 产品变体)之一的 VocalFusion 发布包一起提供的启动映像。
-
数据分区描述(.bin).bin 文件是数据分区描述,可在发布包(-UA 或 -INT)中提供,也可按照本指南后面的描述进行自定义。
Python3
一些操作,如在Raspberry Pi上运行SPI启动实例,需要使用Python 3(推荐使用v3.7以上版本)
主机构建工具
发布包包含主机工具的可执行版本。源代码也被包括在内,以便为用户提供定制这些工具的选择。为了建立主机工具,需要使用一个特定平台的编译器。
配置和控制
XVF3610提供了两种启动方式,从外部QSPI闪存或由主机处理器通过SPI接口启动。
为了便于控制两种配置,XVF3610实现了两种控制和参数化的方式:
- 使用控制接口,使得主机和XVF3610之间直接连接,在运行时运作
- 使用数据分区,数据分区保存在闪存中,启动时对XVF3610进行参数化
两种方式都可以访问全部参数,都可以在应用中用来控制或指定设备的行为。
这里提供了一个主机工具 vfctrl,提供cmd访问,允许用户访问所有配置参数
命令行接口 (vfctrl)
该实用程序的两个版本用于控制设备(第三个版本由数据分区生成处理以在内部使用):
| Version | Function | Host platforms supported |
|---|---|---|
| vfctrl_usb | Control of XVF3610-UA over a USB interface | Windows, MacOS, Linux,Raspberry Pi OS |
| vfctrl_i2c | Control of XVF3610-INT over i2c interface | Raspberry Pi OS |
如果需要,还提供该实用程序的源代码以供其他主机设备编译。 当用于设备控制时,命令行工具的一般语法如下:
vfctrl_usb <COMMAND> [ arg 1] [arg 2]....[arg N] ['# Comment']
<COMMAND> 是必需的,用于控制设备的参数。命令可以是读写命令,通过前缀 GET_ 和 SET_ 分别用于参数读写。GET_命令的结果会被打印到终端。例如:
vfctrl_usb GET_GPI
GET_GPI: 13
在设置一些需要浮点数据的参数时,必须首先将数字转换为Q格式,然后作为整数传输。用于表示浮点数字的Q格式的规范在附录H中给出。
另外有一种格式的命令,用于为开发者提供信息:
vfctrl [options]
options可以是:
-h, --help : List all command options
-d, --dump-params : Print list of parameter values
-n, --no-check-version : Do not check version of firmware image
通过控制接口配置
XVF3610 语音处理器包含可由主处理器在运行时读取和写入的参数,有关在启动时写入参数以进行初始配置的信息,请参阅#通过数据分区配置
设备函数包括以下可调整的参数:audio pipeline,GPIO,sample rate设置,音频多路复用,定时以及常用设备设置和调整。
这些命令支持使用GET_或SET_前缀,具体哪些支持需要查看附录。同时参数也支持各种数据类型包括8b或32b的signed/unsigned整数、signed/unsigned的fixed point和floating-point.。
另一方面,XVF3610-UA会构建包含输入(处理过的MIC)和输出(Ref信号)的音量控制(UAC1.0)。设备上电时,音量会被初始化为100%。另外操作系统可能会影响设备音量(例如windows的记忆功能)
关于如何调整参数,需要参考用户指南与附录A。
控制操作
控制接口通过主机向XVF3610发送消息,执行命令需要的时间一般在30ms内,根据设计,控制程序会进入阻断直到完成。这个接口被设计成是允许实时调节的,但可能会因为总线访问或者数据检索而产生延迟。
控制接口分为host和device两端的应用。
Host应用
前面的#Host的介绍中,含有这些Host应用程序的例子,一般是命令行工具,接收文本命令。发布包中提供了适用于x86 Linux、ARM Linux (Raspberry Pi)、Windows和Mac平台的主机源代码和makefiles示例,以及预编译的可执行文件,以便快速评估和集成
设备应用
该设备总是准备好接收命令。该器件包括命令缓冲和一个异步机制,这意味着不需要端点0、USB的NACKing或I2C的时钟拉伸。这简化了主机的要求,特别是在主机I2C外设不支持时钟拉伸的情况下。
通过数据分区配置
VocalFusion设备的闪存固件配置由一个启动镜像和一个数据分区组成。
.xe档案形式的启动映像是可执行代码。它作为XVF3610-UA或XVF3610-INT发行包的一部分提供。这配置了设备的基本操作。
数据分区在启动时用一组可为特定应用定制的命令来配置运行中的Boot镜像实例。这 包括任何可以在运行时通过USB或I2C发出的命令,还有一些只在启动时发出的命令。预配置的数据分区在发布的软件包中提供,用于默认操作。
这种启动图像和数据分区的组合允许处理器的功能被配置和定义,而不需要对基本固件进行任何修改或重新编译。在后续章节中讨论的命令可以存储在数据分区中,以便在启动时执行,重新定义设备的默认操作。
开发工具包
XVF3610固件可以在XMOS xcore.ai语音参考平台上执行
| 开发工具包 | 固件版本 | 备注 |
|---|---|---|
| XK-VOICE-L71 Voice Reference Design | 5.1.1 | 需要升级到5.3.0 |
XMOS xcore.ai语音参考平台和主机代码使用户能够通过添加Raspberry PI(不提供)建立一个完整的亚马逊Alexa端点。XVF3610-INT使用I2S连接到树莓派,并使用I2C控制。 关于设置和使用XVF3610开发套件的详细说明,可在入门指南中找到。