跳转至

GX8008C_Alexa开发板使用指南*

版本 版本更新说明 发布时间
V1.0 初稿 20230815
V1.1 增加串口协议指令,Alexa缓存,算法参数详细 202301017

NationalChip-Alexa-Block-Diagram

第一章 NationalChip Aleax软硬件资源介绍*

1.1 硬件资源简介*

NationChip Alexa 开发板的资源图,如下所示:

未命名绘图-第 15 页.drawio

国芯 8008C Alexa 开发板板载资源如下:

  • 1 个电源指示灯(黄色)
  • 1 个状态指示灯(红色)
  • 1 个复位按键,可用于复位 8008C
  • 1个BOOT按键,可用于升级8008C
  • 4个功能按键,(音量+、音量-、Mute、Phone)
  • 2个模拟硅麦,用于拾音
  • 一个柱级体麦克风接口,可接两个麦克风
  • 1 路单声道音频输出接口
  • 一个USB接口
  • 一个播放控制开关,用于3.5mm音频输入和输出

1.2 软件资源简介*

1.2.1 查看Alexa Board 软件版本号*

通过 8008C 上的 DSP_UART 查看串口输出打印

image-20220309135322243

1.2.2 查看Amzon AVS 版本号*

image-20230811173351178

第二章 国芯Alexa方案套件体验*

这一章指导用户如何使用国芯Alexa方案套件进行开发和体验。

详细介绍如何正确搭配使用AVS开发板和树莓派,包括连接、配置和开发环境搭建

未命名绘图-第 16 页.drawio

2.1 Alexa 套件介绍*

1.套件图,箱子内的物品介绍

  • Alexa设备,8008C与PI
  • PI 电源,用于给树莓派供电
  • micor转HDMI,用于外接显示器
  • 1一根USB线,用于Alexa Board 连接PI
  • 1根3.5mm音频线,用于连接音响
  • 1根3.5mm一分二音频线,用于外部音频信号输入
  • 1个串口小板,用于Alexa Board 板子调试,对应uart0、uart1、DSP_TX

2.2 ALEXA 套件快速体验*

  1. 如下图用USB先连接Alexa Board与树莓派
  2. 将网口连接至树莓派
  3. 连接树莓派电源给树莓派供电

2.3 AVS开发板+树莓派使用说明*

2.3.1 开启、关闭自动运行AVS*

命令即可

2.3.2 连接WIFI*

./wifi_config.sh "Wi-Fi名称" "Wi-Fi密码"

2.3.3 运行亚马逊AVS*

运行AVS注意事项:

1.在运行测试前,保证账号注册成功,网络连接成功

2.树莓派意外掉电需要重新运行AVS程序

./NationalChip_8008C_Alexa_Scheme.sh

运行成功如图:可以正常测试

image-20230814095327901

2.3.4 切换Alexa账户*

提供切换Alexa账户的步骤和操作指南。

确保树莓派连接上网口,设备连接正确(树莓派电源,8008C -> 树莓派USB口,)

第一步:运行切换账号程序

./SwitchUserAmazonAccount.sh

GX8008C-Alexa-Register-0

第二步:按Z

image-20230814095539803

第三步:按Y

image-20230814095735725

image-20230814095834104

第四步:打开浏览器https://amazon.com/us/code,将注册码填入,继续下一步操作

image-20220308162009311

第五步:点击继续

image-20220308162112880

切换账号成功。在自己的Alexa设备下有个8008C的设备。

2.4 使用潜在问题分析指南*

  • 问题一,注册亚马逊设备时,出现以下打印

image-20220406141049893

原因:由于8008的USB没有连接树莓派的**PI_USB**口,或者树莓派上USB口过多

解决办法:去掉多余USB口,重新连接USB先到**PI_USB**口,在重新接上,其他USB设备

  • 问题二,运行AVS测试时,出现以下打印

image-20220308141550535

原因:连接8008C上的USB线松动,或者没有插入USB设备

解决办法:重新插拔下,固定USB连接线

  • 问题三 、如下图唤醒一直是**“Listing“**状态,无法识别到语句

GX8008C-Alexa-Error-3

原因:连接8008C上的USB线松动

解决办法:重新插拔USB线,插拔时间间隔长一些10s左右

  • 问题四、 在进行 Barge-In 测试下,只支持手动调节扬声器的音量
  • 问题五、 在遇上唤醒异常情况下,可以接上 **DSP_UART**查看唤醒状态

第三章 国芯Alexa Board 2.0 使用*

3.1 烧录8008C固件*

1.下载烧录工具,芯片类型选择8008C

https://nationalchip.gitlab.io/ai_audio_docs/software/tools/NCDownloader/

3.2 OAT升级*

3.2 串口协议*

端口 :8008C uart0

波特率:115200

详细串口协议可参考串口协议指南

3.2.1 获取版本号*

主机:42 55 58 58 02 02 01 00 00 00 7F 61 4D 58
丛机:42 55 58 58 02 02 00 01 08 00 25 e6 ea 29 01 00 00 01 ef 88 ff ee

消息体解析

01 00 00 01 表示1.0.0.1

ef 88 ff ee 表示消息体crc32

3.2.2 Talking(通话)模式*

主机:42 55 58 58 06 01 01 00 00 00 B9 59 7C 84
丛机: 42 55 58 58 06 02 00 01 05 00 7e da d5 07 01 1b df 05 a5

消息体解析

01 (成功)

1b df 05 a5 表示消息体crc32

3.2.3 Active(ASR)模式*

主机:42 55 58 58 06 02 01 00 00 00 69 23 DC C3
丛机:42 55 58 58 06 02 00 01 05 00 7e da d5 07 01 1b df 05 a5

消息体解析

01 (成功)

1b df 05 a5 表示消息体crc32

3.2.4 获取设备状态*

主机:42 55 58 58 0D 01 01 00 00 00 7A A9 BB EE
丛机:42 55 58 58 0d 02 00 01 05 00 bd 2a 12 6d 01 1b df 05 a5 (Talking模式)
丛机:42 55 58 58 0d 02 00 01 05 00 bd 2a 12 6d 00 8d ef 02 d2 (Active模式)

消息体解析

01 Talking模式

00 Active模式

1b df 05 a5 表示消息体crc32

3.2.5 设置Mic 增益(DMic 0 ~ 54)*

主机:42 55 58 58 0B 01 01 01 05 00 15 D4 57 44 12 C5 9E BB 21
丛机:42 55 58 58 0b 02 00 01 05 00 a0 c9 4b bb 01 1b df 05 a5 (成功)
丛机:42 55 58 58 0b 02 00 01 05 00 a0 c9 4b bb 00 8d ef 02 d2 (失败)

消息体解析

01 (成功)

00 (失败)

1b df 05 a5 表示消息体crc32

3.2.6 获取Mic 增益*

主机:42 55 58 58 0C 01 01 00 00 00 DF 7A E7 25
丛机:42 55 58 58 0c 02 00 01 05 00 18 f9 4e a6 12 c5 9e bb 21

0x12(18) 当前mic增益18

c5 9e bb 21 表示消息体crc32

3.2.7 开启厂测模式*

主机:42 55 58 58 0A 01 01 00 00 00 C2 99 BE F3
丛机:42 55 58 58 0a 01 01 01 05 00 b0 07 0b 8f 01 1b df 05 a5

消息体解析

01 表示进入厂测模式(关闭AEC)

1b df 05 a5 表示消息体crc32

3.2.8 关闭厂测模式*

主机:42 55 58 58 0E 01 01 00 00 00 D4 DB 2F 68
丛机:42 55 58 58 0a 01 01 01 05 00 b0 07 0b 8f 01 1b df 05 a5

消息体解析

01 表示进入厂测模式(打开AEC)

1b df 05 a5 表示消息体crc32

3.2.9. 打开麦克风*

主机:42 55 58 58 0F 01 01 00 00 00 71 08 73 A3
丛机:42 55 58 58 0a 01 01 01 05 00 b0 07 0b 8f 01 1b df 05 a5

消息体解析

01 关闭麦克风

1b df 05 a5 表示消息体crc32

3.2.10. 关闭麦克风*

主机:42 55 58 58 10 01 01 00 00 00 3F B8 F3 51
丛机:42 55 58 58 0a 01 01 01 05 00 b0 07 0b 8f 01 1b df 05 a5

消息体解析

01 关闭麦克风

1b df 05 a5 表示消息体crc32

3.2.11. 发送Alexa Index*

丛机:42 55 58 58 11 01 09 01 14 00 17 fe 77 70 80 d9 6e 46 00 00 00 00 80 06 6f 46 00 00 00 00 1e 91 fe 42

消息体解析

startIndexInSamples :80 d9 6e 46 00 00 00 00 -> 十进制 :1181669760

endIndexInSamples:80 06 6f 46 00 00 00 00 ->十进制 :1181681280

1e 91 fe 42 表示消息体crc32

3.2.12 算法参数*

AGC 参数(参数范围0 ~ 25)*
读取AGC参数*
  • 魔数(magic):0x42 0x55 0x58 0x58

  • 消息

    命令号 属性 B_CHECK 消息体长度 消息体内容
    主机 0x09 0x01 0 0
    从机 0x09 0x01 0x01 (8字节Data + 4字节crc) AGC
  • 读取AGC参数

    主机: 42 55 58 58 09 01 01 00 00 00 6C EB 2A 75
    从机: 42 55 58 58 09 01 01 01 0c 00 57 ce 5d d8 25 00 15 00 15 00 03 00 1d d4 45 cb
    
  • 丛机读取数据示例图

    image-20221129101038154

    丛机参数解析

    消息体内容包含8个byte(AGC 数据) + 4 byte (32crc 校验)

    AGC参数主要有两个TargetLevelDbfs、CompressionGaindB

    1. TargetLevelDbfs:目标电平(Target Level),以分贝全尺度(dBFS)为单位。它定义了所需的输出音频信号的目标电平值。AGC将尝试自动调整输入音频信号的增益,使其接近或达到目标电平。较高的目标电平将导致输出音频信号变得更贴近最大电平,较低的目标电平将导致输出音频信号变得更接近最小电平。注:相当于调整输出音频的最大幅度
    2. CompressionGaindB:压缩增益(Compression Gain),以分贝(dB)为单位。它表示在AGC应用压缩之前,对输入音频信号进行调整的增益值。压缩增益用于控制输入音频信号的动态范围,并影响输出音频信号的可听性。较高的压缩增益将导致输入音频信号的动态范围被压缩得更多,较低的压缩增益将导致更少的动态范围压缩。

    如上图消息体中的RX-targ、RX-comp、TX-targ、TX-comp。

    0x25 0x00 (RX-targ) : 表示接收端音频信号的目标电平。

    0x15 0x00 (RX-comp) : 表示接收端音频信号的压缩增益。

    0x15 0x00 (TX-targ) : 表示发送端端音频信号的目标电平。

    0x03 0x00 (TX-comp) : 表示发送端音频信号的压缩增益。

    0x1D 0xD4 0x45 0xCB : 表示消息体的crc32校验

设置AGC参数*
  • 写入AGC数据示例

    示例一、TX 数据
    主机: 42 55 58 58 09 02 01 01 07 00 4C 6D 09 7C 02 15 03 D2 BA 79 52
    丛机:42 55 58 58 0b 02 00 01 05 00 a0 c9 4b bb 01 1b df 05 a5 (成功)
    示例二、RX 数据
    主机: 42 55 58 58 09 02 01 01 07 00 4C 6D 09 7C 01 25 15 29 87 AD 7B
    丛机:42 55 58 58 0b 02 00 01 05 00 a0 c9 4b bb 01 1b df 05 a5 (成功)
    
  • 消息结构示例图:

    image-20221122162543267

主机消息体解析

0x01(TX) / 0x02(RX) :某个音频信号设置。TX表示发送端音频信号,RX表示接收端音频信号。

0x15(TAR) : TargetLevelDbfs:目标电平(Target Level)

0x03(COMP) : CompressionGaindB:压缩增益(Compression Gain)

AEC 参数(参数范围0 ~ 10)*
读取AEC数据*
  • 读取AEC参数

    主机: 42 55 58 58 08 01 01 00 00 00 C9 38 76 BE
    从机:42 55 58 58 08 01 01 01 08 00 f6 d8 6d 77 04 00 00 00 4b 48 26 ae
    
  • 丛机读取数据示例图

    image-20221129101938778

    消息体解析

    AEC_delay 是在回声消除过程中引入的延迟时间。它代表了从音频信号通过扬声器播放到麦克风接收到反射回来的回声的时间差。通过测量这个时间差,算法可以确定合适的相位和增益补偿,以消除回声。

    0x04 0x00 0x00 0x00(AEC_delay) : 延时时间4ms。

    0x4B 0x48 0x26 0xAE :表示消息体的crc32校验

设置AEC数据*
  • 写入AEC数据示例

    主机: 42 55 58 58 08 02 01 01 05 00 6B DC 63 85 03 37 BE 0B 4B
    丛机:42 55 58 58 0b 02 00 01 05 00 a0 c9 4b bb 01 1b df 05 a5 (成功)
    
  • 消息结构示例图:

    image-20221122155000578

    消息体解析

    0x03 : 设置延时时间3ms。

    0x37 0xBE 0x0B 0x4B : 表示消息体的crc32校验

    EQ 参数(参数范围-20 ~ 20)*
    读取EQ数据*

主机发送读取EQ参数的命令,丛机一次性返回RX(接收端) TX(发送端)相关的EQ参数数据。

主机: 42 55 58 58 07 01 01 00 00 00 1C 8A 20 4F
从机:42 55 58 58 07 01 00 01 94 00 50 c8 73 e3
RX-BandFre    :   3e 00 00 00(62)  7d 00 00 00(125)  09 01 00 00(265)  20 03 00 00(800)  e8 03 00 00(1000)     c4 09 00 00(2500)   a0 0f 00 00(4000)  88 13 00 00(5000) 40 1f 00 00(8000)
RX-bandGanin: 00 00 00 00(0)  00 00 00 00(0)  00 00 00 00(0)  03 00 00 00(3)  00 00 00 00(0)
      00 00 00 00(0)  00 00 00 00(0)  00 00 00 00(0)  00 00 00 00(0)

TX-BandFre    :   3e 00 00 00(62) 7d 00 00 00(125) a0 00 00 00(160) ee 02 00 00(750) e8 03 00 00(1000)        d0 07 00 00(2000) a0 0f 00 00(4000) 88 13 00 00(5000) 40 1f 00 00(8000)
TX-bandGanin: 00 00 00 00(0) fc ff ff ff(-4) fc ff ff ff(-4) fc ff ff ff(-4)  00 00 00 00(0)
        00 00 00 00(0) 00 00 00 00(0)  00 00 00 00(0)  00 00 00 00(0)
Crc32:        :   57 d2 79 2e

丛机消息体解析:

消息体包含144byte(Data) + 4 byte(32crc)。每4byte表示一个参数。

EQ 有两个参数EqBandFre(中心频率Hz)、EqBandGaindB(频带增益)。

RX接收端(远端)音频信号EQ数据:

0x3e 0x00 0x00 0x00 (RX-BandFre-1) : 表示接收端62Hz的频率。

0x7d 0x00 0x00 0x00 (RX-BandFre-2) : 表示接收端25Hz的频率。

...

0x40 0x1f 0x00 0x00(RX-BandFre-9) : 表示接收端8kHz的频率。注:最大只到8k。

0x00 0x00 0x00 0x00 (RX-bandGain-1) : 表示接收端在RX-BandFre-1(62Hz)的频率的频带增益位 0 dBA。

0x00 0x00 0x00 0x00 (RX-bandGain-2) : 表示接收端在RX-BandFre-2(125Hz)的频率的频带增益 0 dBA。

...

0x00 0x00 0x00 0x00 (RX-bandGain-9) : 表示接收端在RX-BandFre-9(8kHz)的频率的频带增益 0 dBA。

TX发送端(近端)音频信号EQ数据:

0x3e 0x00 0x00 0x00 (RX-BandFre-1) : 表示发送端62Hz的频率。

0x7d 0x00 0x00 0x00 (RX-BandFre-2) : 表示发送端125Hz的频率。

...

0x40 0x1f 0x00 0x00(RX-BandFre-9) : 表示发送端8kHz的频率。注:最大只到8k。

0x00 0x00 0x00 0x00 (RX-bandGain-1) : 表示发送端在RX-BandFre-1(62Hz)的频率的频带增益位 0 dBA。

0xFC 0xFF 0xFF 0xFF (RX-bandGain-2) : 表示发送端在RX-BandFre-2(125Hz)的频率的频带增益 -4 dBA。

...

0x00 0x00 0x00 0x00 (RX-bandGain-9) : 表示发送端在RX-BandFre-9(8Hz)的频率的频带增益 0 dBA。

数据解析如下。

RxEqBandFre          = {62, 125, 250, 800, 1000, 2000, 4000, 5000, 8000},
RxEqBandGaindB       = { 0,   0,   0,   3,     0,    0,    0,    0,    0},
TxEqBandFre          = {62, 125, 160, 750, 1000, 2000, 4000, 5000, 8000},
TxEqBandGaindB       = { 0,  -4,  -4,  -4,     0,    0,    0,    0,    0},
写入EQ参数*
  • 写入EQ数据示例

    主机:42 55 58 58 07 02 01 01 4D 00 B3 AB 95 4C
    RX:01
    BandFre :   3e 00 00 00(62) 7d 00 00 00 (125)a0 00 00 00 (160) ee 02 00 00 (750)e8 03 00 00(1000) d0 07 00 00(2000) a0 0f 00 00(4000) 88 13 00 00(5000) 40 1f 00 00 (8000)
    bandGanin:  00 00 00 00 (0)00 00 00 00(0) 00 00 00 00 (0)03 00 00 00 (3)00 00 00 00 (0)00 00 00 00 (0)00 00 00 00(0) 00 00 00 00 (0)00 00 00 00 (0)
    Crc32:      :   12 4E b0 09
    丛机:42 55 58 58 0b 02 00 01 05 00 a0 c9 4b bb 01 1b df 05 a5 (成功)
    
    主机:42 55 58 58 07 02 01 01 4D 00 B3 AB 95 4C
    TX:02
    BandFre :   3e 00 00 00(62) 7d 00 00 00 (125)a0 00 00 00 (160) ee 02 00 00 (750)e8 03 00 00(1000) d0 07 00 00(2000) a0 0f 00 00(4000) 88 13 00 00(5000) 40 1f 00 00 (8000)
    bandGanin:  00 00 00 00 (0)00 00 00 00(0) 00 00 00 00 (0)03 00 00 00 (3)00 00 00 00 (0)00 00 00 00 (0)00 00 00 00(0) 00 00 00 00 (0)00 00 00 00 (0)
    Crc32:      :   41 AC 95 CA
    丛机:42 55 58 58 0b 02 00 01 05 00 a0 c9 4b bb 01 1b df 05 a5 (成功)
    
  • 主机消息体解析

    1Byte 标志 + 72 byte (Data) + 4 byte (crc32)

    0x01(TX) / 0x02(RX) :某个音频信号设置。TX表示发送端音频信号,RX表示接收端音频信号。

    RX接收端音频信号EQ数据:

    0x3e 0x00 0x00 0x00 (RX-BandFre-1) : 表示接收端62Hz的频率。

    0x7d 0x00 0x00 0x00 (RX-BandFre-2) : 表示接收端125Hz的频率。

    ...

    内容见EQ读取参数

3.4 Alexa回滚*

共享内存环缓冲区满足向AVS传输连续话语的要求,其中包括500毫秒的预滚、唤醒词和用户对基于云的唤醒词验证的请求。这减少了延迟和多次复制音频样本的需要。官方说明 https://developer.amazon.com/en-US/docs/alexa/alexa-voice-service/implement-ww-verification.html

下图说明了一种方法;只要保持必要的功能,就允许其他实现:

image-20240117180856155

方法一、AVS Client端实现

点击下载:AVS Client 回滚方式.zip

方法二、8008C缓存包含Alexa音频通过UART或SPI发送给AVS Cient。

点击下载:serial_cache_tool.zip

⼀帧数据的⻓度 4 byte header + 960 byte 语⾳⻓度,总38帧。

3.4.1 连接示意图*

image-20231127105519339

3.4.2 接收端功能验证*

第一步:编译代码

cd serial_cache_tool
make liunx

第二步:运行接收程序

sudo ./serialDeom.elf /dev/ttyUSB0 # 根据识别到的USB对应修改

喊唤醒“Alexa”,正常接收到数据如下

image-20230828161628690

使用Audacity导入alexa.pcm

3.5 分析算法输出音频*

第一步:安装audacity*

https://www.audacityteam.org/download/windows/

安装步骤:略

第二步:连接8008C到PC*

第三步:打开audacity,选择声卡*

image-20230411150939244

第四步:录音*

image-20230411151128573

可能出现的问题*

1.window下录制时通道无数据

解决办法:打开设备管理器,点击Nationalchip Conference Speaker 声卡右键(卸载设备),后重新插拔USB

3.6麦的一致性,Speech level 输出固定音量*

第四章 Alexa 标准测试*

1.我们自己内部套件需要测试完成Alexa测试标准输出测试数据

2.客户机器测试。也要完成Alexa测试标准。输出报告。客户测试完后也会有自己的账号,我们要做的切换自己的账号,完成Alexa测试。

声学结构测试*

对mic的测试项,安静的底噪,自播自录等增益的调整。

自播自录*

1.播放白噪

1.第一点:用亚马逊标定白噪。最大3M-----------------------65dBa----到 mic 82dBA

AFE 测试*

《Alexa Far Field Reference Solutions Acoustic Qualification Test User Guide V2_2.pdf》

《OSL_verification_AN-AVS-0084 .pdf》

《TR-001_AcousticReport_NationalChip_AFE_FT.docx》

《NationalChip_AFE_FT_RefSol_Scoresheet_External_V2.2.xlsx》

《Wake_up_latency_self_test_checklist_nationalchip_AFE.xlsx》

ACM测试*