跳转至

配置选项参考

本章汇总 CI13XX_SDK_LLM_AIoT_V3.0.19 示例工程中的主要可配置宏选项,便于开发者按应用场景裁剪功能。

配置位置

  • **算法使能开关**统一位于 system/user_alg_config.mk(MCU 核与 BNPU 核工程共用,修改算法组合后重新clean再编译,自动编译BNPU),并可在其中查看各算法在 BNPU 端的内存占用;
  • 板级、串口、OTA、离在线音频上传/播放、云端交互、VAD、语音识别、播放器、自学习、DOA 等功能宏位于各示例工程下的 projects\<工程名>\app\app_main\user_config.h;
  • 部分全局默认值(如 POST_MIN_CNT)位于 system/sdk_default_config.h;
  • 各示例工程的默认值不同(如 uart 工程默认使用 CI-D06GT01D 开发板),请以实际工程文件为准。

1. 算法使能配置(system/user_alg_config.mk)

宏定义 说明
USE_ASR ASR 识别功能(除事件检测外其他功能都依赖识别,默认 1)
USE_ANY_MIC 任意 MIC 识别(双麦)
USE_AEC 回声消除模块(单/双麦可用;双麦 + AEC 需硬件再增加一个 codec 做信号回采)
USE_CWSL 自学习功能(需在安静环境下清晰洪亮地学习)
USE_NN_DENOISE NN 深度降噪
USE_NN_VAD 语音活性检测
USE_NN_DOA NN DOA(暂不支持)
USE_GCC_DOA GCC DOA 声源定位(当前默认支持)
USE_IIS_RECORD IIS 采音(占用 PA2~PA6,多消耗约 20KB SYS 内存)
USE_REF_IN_FROM_INNER_CODEC 双麦算法时使用模拟右麦作参考信号(V3.0.19 新增;置 1 时 makefile 会向两个核传递 -DREF_IN_FROM_INNER_CODEC=1,需同步使能 AUDIO_IN_FROM_DMIC)
SDK_ALG_PRO_SRAM_HOST_NOT_ALG_END_ADDR 仅开 ASR 时 HOST 端基地址(V3.0.19 为 0x1FFD3000)

各算法在 BNPU 端的内存占用(供链接脚本自动分配,一般无需修改):

内存宏 V3.0.19 默认值 说明
AEC_USE_BNPU_SRAM_SIZE 30*1024 AEC(V3.0.19 由 27K 调整为 30K)
CWSL_USE_BNPU_SRAM_SIZE 0*1024 自学习
NN_DENOISE_USE_BNPU_SRAM_SIZE 47*1024 NN 降噪(V3.0.19 由 43K 调整为 47K)
TVAD_USE_BNPU_SRAM_SIZE 0*1024 NN VAD
NN_DOA_USE_BNPU_SRAM_SIZE 60*1024 NN DOA
GCC_DOA_USE_BNPU_SRAM_SIZE 23*1024 GCC DOA(V3.0.19 由 20K 调整为 23K)
IIS_RECORD_USE_BNPU_SRAM_SIZE 0*1024 IIS 采音

内存表与链接脚本的联动

SDK_ALG_PRO_SRAM_HOST_NOT_ALG_END_ADDR 与 utils/common.lds 中的 SDK_ALG_PRO_SRAM_HOST_END_ADDR(V3.0.19 为 0x1ffbfc00)、各工程 lds/ci130x_asr_alg_mcu_temp.lds 中的 SRAM_END_ADDR / SYS_HEAP_SIZE(V3.0.19 默认 120KB)共同决定内存布局,三者需随算法组合保持匹配。

user_alg_config.mk 中的可组合开关:

宏定义 说明
AIOT_AUDIO_COMPRESS_TYPE AIOT 音频压缩类型(仅 uart_sample 使用):0-null、1-speex、2-opus、3-g722

2. 工程编译参数(project_file/makefile)

宏定义 说明
AUDIO_UPLOAD_TYPE 音频上传云端接口类型:1-串口、2-hpout、3-iis(不可修改)
ALG_PRO_LINK_LDS MCU 核链接脚本,固定为 ../lds/ci130x_asr_alg_mcu.lds
LIB_BNPU_CORE_ALG_PRO BNPU 核算法库,固定为 ci130x_asr_alg_bnpu.a

3. 板级与芯片配置(user_config.h)

宏定义 说明
USE_CI_xxx_BOARD 板级选择开关(如 USE_CI_D06GT01D_BOARD、USE_CI_D06GT01J_BOARD),同一时刻只置 1 个
CI_CHIP_TYPE 芯片型号(1302/1306/1312/2312/2306 等),随板级选择自动定义
BOARD_PORT_FILE 板级驱动文件(如 "CI-D06GT01D.c"),随板级选择自动定义;文件位于 driver/boards
HOST_MIC_USE_NUMBER MIC 数量(1 单麦 / 2 双麦)
AUDIO_IN_FROM_DMIC 是否使用数字 MIC 输入音频(V3.0.19 新增)
MIC_RECORD_IIS_SELECT MIC 输入的 IIS 选择:0-内部 codec IIS1、1-外部 IIS0(V3.0.19 新增)
MIC_DIFF_SINGLE MIC 电路模式:1 单端、0 差分(通用模块为差分,省成本模块单端时置 1)
REF_DIFF_SINGLE REF(回采)电路模式:1 单端、0 差分(V3.0.19 新增;D 类功放单 MIC AEC 用差分,AB 类功放用单端)
REF_IN_FROM_INNER_CODEC 采用 2 DMIC + 内部 codec 右通道(或模拟右麦)输入 REF 信号(V3.0.19 新增)。默认值 0,定义于 system/sdk_default_config.h;置 1 的推荐方式是在 system/user_alg_config.mk 中设置 USE_REF_IN_FROM_INNER_CODEC := 1(makefile 会为 BNPU/MCU 两核传递 -DREF_IN_FROM_INNER_CODEC=1)
IF_USE_ANOTHER_CODEC_TO_GET_REF 采用 2 DMIC + 外挂 codec 输入 REF 信号(V3.0.19 新增);AUDIO_IN_FROM_DMIC 且未开启 REF_IN_FROM_INNER_CODEC 时由 user_config.h 自动置 1
USE_IIS_RECORD(makefile) IIS 采音开关(V3.0.19 由 makefile 控制,取代原 USE_IIS1_OUT_PRE_RSLT_AUDIO)

4. 串口与通讯配置

宏定义 说明
CONFIG_CI_LOG_UART LOG 输出串口(默认 HAL_UART0_BASE,勿与协议串口共用)
UART0/1/2_PAD_OPENDRAIN_MODE_EN 通讯串口开漏模式使能(对接 5V 电平 IO 时开启)
USE_EXTERNAL_CRYSTAL_OSC 时钟源:1 外部晶振、0 内部 RC(离在线应用必须为 1)
UART_BAUDRATE_CALIBRATE 波特率自适应使能;配套 BAUDRATE_SYNC_PERIOD、BAUDRATE_FAST_SYNC_PERIOD、BAUD_CALIBRATE_MAX_WAIT_TIME
MSG_COM_USE_UART_EN 语音模块通讯协议开关(离在线应用默认关闭)
UART_PROTOCOL_NUMBER / UART_PROTOCOL_BAUDRATE / UART_PROTOCOL_VER 语音模块协议串口 / 波特率 / 协议版本(1 一代、2 二代、255 平台生成)
CLOUD_UART_PROTOCOL_EN 云端协议使能(仅启英开发者平台做固件配协议时可用,与 MSG_COM_USE_UART_EN 互斥)
USE_UART_SEND_PRE_RSLT_AUDIO_NUMBER / _BAUD / _BUF_LEN 串口输出算法处理后音频数据的串口 / 波特率 / BUF 大小(V3.0.19 新增)

5. OTA 配置

宏定义 说明
CI_OTA_ENABLE OTA 使能:1 使能、0 不使能(默认 0)

说明

V2.2.7 起,OTA 功能统一由 components/ota 组件承载,各工程不再包含 app/app_ota 目录;OTA 版本为 V4.1.12,打包固件时需将 firmware/config.ini 中 firmware_version 设为 FW_V4。详见 ☞《语音芯片OTA V4.1.X使用和说明》。

6. 离在线音频上传 / 播放配置(全局宏开关)

V2.2.7 重点

V2.2.7 起,UART、IIS、HPOUT 三个工程统一使用下列 全局宏开关 控制上下行、串口通信、本地播报与云端播报,可灵活配置各通路。

宏定义 说明
AUDIO_DATA_UPLOAD_BY_UART 通过串口上传录音(uart 工程;消耗约 75KB 内存)
AUDIO_DATA_PLAY_BY_UART 通过串口接收音频数据并播放(uart 工程)
AUDIO_DATA_UPLOAD_BY_IIS 通过 IIS 上传录音(iis 工程)
AUDIO_DATA_PLAY_BY_IIS 通过 IIS 接收音频数据播放(iis 工程)
AUDIO_DATA_UPLOAD_BY_HPOUT 通过 HPOUT 上传录音(hpout 工程,不支持压缩)
WIFI_CMD_BY_UART 上下行均关闭时,仅通过串口与 WIFI 交互指令
AUDIO_VAD_CHECK_ENABLE VAD 检测功能使能(V3.0.19 起 VAD 由 NN VAD 承载)
AUDIO_SEND_WITH_PROTOCOL_HEADER 上传数据是否带协议头:1 带(默认)、0 裸数据(调试用)
UART_NUM_SEND_PLAY_AUDIO_NUMBER / UART_NUM_SEND_PLAY_AUDIO_BAUDRATE 与网络端(WIFI)交互的串口 / 波特率
IIS_UPLOAD_IS_WAKEUP IIS 工程:1 唤醒后(或收到开始录音指令后)开始录音、0 上电后开始录音
IIS_DOWNLOAD_BY_CMD IIS 工程:1 收到指令后开始 IIS 播报、0 上电后开始 IIS 播报(V2.2.7 新增)
HPOUT_UPLOAD_IS_WAKEUP HPOUT 工程:1 唤醒后开始录音、0 上电后开始录音(V2.2.7 新增)
ASR_MIDDLE_RESULT_OUT_EN ASR 中间识别结果输出使能(V3.0.19 新增)
AUTO_GET_AEC_GAIN AEC 自动增益测试使能;配套 GET_AEC_GAIN_AUDIO_ID、GET_AEC_REF_THR_AUDIO_ID、GET_AEC_GAIN_POEWR_ON_START、DEFAULT_MIN_MIC_GAIN、DEFAULT_EXPECT_VOLUM(V3.0.19 新增)
IIS_CHANNEL_ENG_CALC_EANBLE IIS 通道能量计算使能(V3.0.19 新增)
CIAS_HAVE_AUDIO_ENG_MICL/MICR/REFL/REFR 各通道音频能量阈值(默认 50dB,产测用,V3.0.19 新增)
CIAS_UPLOD_FACTORY_TEST_REAL_VAL 上传音频过程中的实时值(产测用,V3.0.19 新增)

6.1 压缩算法选择(三选一)

宏定义 说明
AUDIO_COMPRESS_RECORD_DISABLE PCM 上传,不做压缩(建议 SYS_HEAP_SIZE=1024*130)
AUDIO_COMPRESS_SPEEX_ENABLE SPEEX 压缩上传(建议 SYS_HEAP_SIZE=1024*110)
AUDIO_COMPRESS_OPUS_ENABLE OPUS 压缩上传(比 SPEEX 多消耗约 31KB 内存;V2.2.7 起节约 10K 内存)
AUDIO_COMPRESS_G722_ENABLE G722 压缩上传(20ms 压缩一次,4:1 压缩率)

注意

上述压缩宏需与 makefile 中 AIOT_AUDIO_COMPRESS_TYPE 保持一致(0-PCM、1-SPEEX、2-OPUS、3-G722)。

表中 SYS_HEAP_SIZE 建议值取自 user_config.h 注释;V3.0.19 工程 lds/ci130x_asr_alg_mcu.lds 中 SYS_HEAP_SIZE 默认值为 (1024*120)(V2.2.7 为 1024*130),切换压缩算法或云端播放格式后请同步调整该值。

6.2 云端播放格式选择(三选一)

宏定义 说明
NET_AUDIO_PLAY_BY_MP3 云端播放 MP3 格式(建议 SYS_HEAP_SIZE=1024*110)
NET_AUDIO_PLAY_BY_PCM 云端播放 PCM 格式(建议 SYS_HEAP_SIZE=1024*130)
NET_AUDIO_PLAY_BY_G722 云端播放 G722 格式(必须使用精简播放器)
NET_PLAY_PCM_OR_G722_ENABLE_LOCAL_PLAY 云端播放 PCM/G722 时同时开启本地播报
USE_HP_OUT_NET_AUDIO 使用 HPOUT 直接输出云端音频

7. 云端交互配置

宏定义 说明
CUR_INTERACTION_MULTI_ROUND_ENABLE 1 多轮对话、0 单轮
UPLOAD_PLAY_FULL_DUPLEX_ENABLE 全双工处理:播放音频的同时支持 VAD 检测音频上传
VAD_START_STOP_PLAY_ENABLE 全双工模式下 VAD 起来是否立刻停止播放:1 停止、0 不停止
CLOUD_ANS_TIME_OUT_ENEABLE 云端响应超时功能使能(使用 NN VAD 后置检查模式时建议关闭)
CLOUD_ANS_TIME_OUT_VALUE 云端响应超时时间(秒,需 > 0)
AUDIO_PLAY_MODE 1 支持打断当前播放、0 顺序播放(暂不用)
UPLOAD_NNDENOISE_AUDIO_DATA_ENABLE 1 上传降噪后的音频、0 上传非降噪音频
DENOISE_STRENGTH_ADAPT_ENABLE 降噪强度自适应调整模式(V3.0.19 新增,需在 ci_ssp_config.c 中配置自适应参数)
CHECK_NET_WORK_STATE_ENABLE 检测网络状态后再上传音频
PCM_MSG_STREAM_NUM 原始数据 stream buf 大小
NN_VAD_BACK_PORCH 前端回退帧数(默认 25 帧 ≈ 400ms)(V3.0.19 由 PCM_ALG_ROOLBACK_FRAME_LEN 更名)
PCM_ALG_FRAME_LEN 前端原始音频帧长(16K 采样,每帧 256 点共 512 字节)

8. VAD 配置(NN VAD)

宏定义 说明
NN_VAD_SENSITIVITY NNVAD 灵敏度等级:0/1/2 对应低/中/高(V3.0.19 新增)
NN_VAD_FRONT_PORCH 后窗口大小,VAD_ON→VAD_END 最多持续帧数(20~40,过小会导致停顿即结束)(V3.0.19 由 NN_VAD_END_DELAY 更名)
NN_VAD_VALID_NUM VAD_ON 状态至少满足的有效帧数,低于该阈值识别结果无效(V3.0.19 新增)
NN_VAD_VALID_CHECK_MODE 语音有效性检查模式:1-前置检查(等待判断有效后回退已存录音再上传)、2-后置检查(优先实时上传,检查结果后通知 WIFI 端)(V3.0.19 新增)
LOCAL_REC_VAD_END_ENABLE 本地识别后立即停止 VAD;若不停止,在半双工且本地词条有播报时,播报会丢录音
WEAK_VAD_ENABLE 1 唤醒后开始检测 VAD、0 一直检测 VAD(IIS / HPOUT 工程)
VAD_TIMEOUT_CHECK_ENABLE VAD 算法内部是否进行超时检测(不可修改)(V3.0.19 由 VAD_TIMEOUT_CHECK 更名)
VAD_TIMEOUT_VALUE 强制结束录音时间(秒)(V3.0.19 由 VAD_FORCE_OVER_NUM_TIME 更名)

9. 语音识别与播放器配置

宏定义 说明
POST_MIN_CNT 识别结果后处理帧数(V3.0.19 调整默认值为 2,位于 sdk_default_config.h;1 提升识别率但误识增加,3 误识最低但识别率下降)
USE_SEPARATE_WAKEUP_EN 是否使用独立的唤醒词模型
DEFAULT_MODEL_GROUP_ID 上电默认进入的语言模型(0 命令词模型、1 唤醒词模型)
PLAY_WELCOME_EN / PLAY_ENTER_WAKEUP_EN / PLAY_EXIT_WAKEUP_EN / PLAY_OTHER_CMD_EN 开机 / 唤醒 / 退出唤醒 / 识别到命令词时是否播放提示音
EXIT_WAKEUP_TIME 退出唤醒超时时间(毫秒)
BF_DEEPSE_MODE 深度分离模式:1 全深度分离(更耗内存)、0 半深度分离
BF_ASR_VALID_MODE 是否开启 ASR 打分有效性判断(仅针对全/半深度分离)
AUDIO_PLAYER_ENABLE 是否启用音频播放器(默认播放器约 52K、精简播放器约 36K)
PLAYER_CONTROL_PA 播放器是否控制音频功放开关
VOLUME_MAX / VOLUME_MIN / VOLUME_DEFAULT 音量上限 / 下限 / 默认值
MP3_NO_CONSTANT_BITRATE 开启非恒定比特率(VBR、ABR)适配

10. 算法相关配置

宏定义 说明
AEC_INTERRUPT_TYPE AEC 打断类型:2 命令词与唤醒词都可打断、1 仅命令词、0 仅唤醒词
USE_DUAL_MIC_ANY 任意 MIC 均可识别(双麦无 BF/DOA/去混响时)
DEREVERB_FREQ_RANGE_INDEX 去混响起效频率范围索引
GCC_DOA_OUT_TYPE GCC DOA 输出类型:0-周期输出角度、1-唤醒词和命令词都输出角度(V3.0.19 新增,取代 AI_DOA_OUT_TYPE)
NN_DOA_OUT_TYPE NN DOA 输出类型:1 唤醒词、2 命令词、3 两者都输出(V3.0.19 新增)
USER_CODE_SWITCH_ENABLE 两份 code 动态切换功能

NN 降噪参数在 projects\<工程名>\app\app_main\ci_ssp_config.c 的 nn_denoise_config 中配置:

字段 说明
alpha_forget 遗忘因子(默认 0.75f)
denoise_beta 降噪强度系数,范围 0.0 < beta <= 1.0,1.0 为默认降噪强度(V3.0.19 新增)
denoise_beta_adaptive_mode beta 自适应模式,配合 NN 噪声估计模块使用(V3.0.19 新增)
denoise_ratio_upper_limit / _lower_limit beta 上限 / 下限值(推荐大于 0.85)
denoise_energy_highest_thr / _lowest_thr 噪声能量对数高低阈值,均分 4 个噪声能量分区,各分区取不同 beta

GCC DOA 参数在 ci_ssp_config.c 的 gcc_doa_config 中配置:distance(麦间距 30~80mm)、energy_thr(能量阈值 0~1)、denoise_en 等。

V3.0.19 算法相关变化

  • DOA 不再被 AEC 阻断:V3.0.19 起 components/alg/doa/ci_doa_apply.c 移除了“AEC 工作状态时直接返回”的判断,AEC 运行期间 DOA 同样输出角度结果;
  • 前端算法执行顺序以 ci_ssp_config_t 成员顺序为准:V3.0.19 中 components/audio_in_manage/alg_preprocess.h 将 doa 成员调整到 aec 之前(顺序:ALC → 噪声估计 → FFT → DOA → AEC → 去混响 → BF → NN 降噪 → 传统降噪 → IFFT → EQ → DRC → NN VAD → IIS 输出 → SED → PWK);
  • IIS 输出支持重采样到 32kHz:当开启 IF_USE_ANOTHER_CODEC_TO_GET_REF(外挂 codec 取 REF)、INNER_CODEC_AUDIO_IN_USE_RESAMPLE 且使用 IIS 上传/输出时,audio_pre_rslt_iis_out 会通过 components/ci_common/ci_alg_common_api.c 的 ci_common_create(CI_COMMON_UPSAMPLE) 与 upsample_linear_interp() 对 IIS0 输出做线性插值升采样(16kHz → 32kHz);
  • 新增算法公共接口 components/ci_common/ci_alg_common_api.h:ci_common_create()(创建句柄)、upsample_linear_interp()(线性插值升采样,无抗镜像滤波)、downsample_process()(带低通滤波的降采样),随 MCU 工程源码编译,同时提供预编译库 libs/libci_common.a。

11. 自学习(CWSL)配置

宏定义 说明
CWSL_WAKEUP_NUMBER 可学习的唤醒词数量(最大 2)
WAKE_UP_ID 学习的唤醒词对应的命令词 ID
CWSL_REG_TIMES 学习时每个词需说几遍(1、2 遍;FOR_REG_2TIMES_FLOW_V2=1 时最多 3 遍)
CWSL_WAKEUP_THRESHOLD / CWSL_CMD_THRESHOLD 学习的唤醒词 / 命令词阈值门限(越小越灵敏)
CWSL_REG_VAD_LEVEL 学习过程灵敏度:0 低(抗噪)、1 高
CICWSL_TOTAL_TEMPLATE 可存储模板数量

注意

在线 SDK 只支持唤醒词学习。为避免指令词被学习成模板,请确保 cmd_info 表格中词条的语义 ID、命令词 ID 与需学习的词条语义 ID、命令词 ID 不重复。

12. 编译期互斥约束(部分)

SDK 在 user_config.h 中通过 #error 对非法组合做了强制校验,常见约束包括:

  • 压缩算法 SPEEX / OPUS / G722 只能三选一;云端播放 MP3 / PCM / OPUS / G722 只能择一;
  • 双麦算法(BF / GCC DOA / NN DOA / 去混响 / 任意 MIC)与 USE_CI_D12GS01J_BOARD(1312)不能同时使用;
  • USE_ALC_AUTO_SWITCH_MODULE 与双麦算法(GCC/NN DOA、去混响、BF、AEC)不能同时使用;
  • MSG_COM_USE_UART_EN 与 CLOUD_UART_PROTOCOL_EN 不能同时使用;
  • 离在线应用必须 USE_EXTERNAL_CRYSTAL_OSC = 1;
  • USE_PWK 与动态 ALC、NN 降噪、自学习等算法不能同时使用。

关于内存

音频上传/播放与压缩算法会显著消耗内存,SYS_HEAP_SIZE 需按所选组合配置(如 PCM 上传推荐 1024*130、SPEEX/MP3 推荐 1024*110)。具体组合请参考 ☞《CI13XX离在线大模型对话SDK开发流程》。

13. BNPU 核算法配置的联动构建(V3.0.19 新增)

V3.0.19 起,算法使能宏与内存表既决定 MCU 核工程的编译,也决定 BNPU 核算法库的构成,因此 makefile 增加了自动联动构建逻辑:

相关文件 / 变量 作用
system/user_alg_config.mk 算法使能与 BNPU 端内存表的唯一来源,两个核工程共享
components/bnpu_core_alg_pro/project_file/config.a BNPU 工程的算法宏快照,由 utils/parse_user_alg_config_mk.lua sync 写入
utils/parse_user_alg_config_mk.lua check 比对 user_alg_config.mk 与 config.a(一致返回 0、不一致返回 1);sync 把宏以 key=value 写回快照(数学表达式会求值,如 30*1024 → 30720)
LIB_BNPU_CORE_ALG_PRO 固定为 ci130x_asr_alg_bnpu.a,位于 $(LIBS_PATH)

联动规则(三个模板工程 makefile 一致):

  1. libs/<LIBS_PATH>/ci130x_asr_alg_bnpu.a 缺失或比 system/user_alg_config.mk 陈旧时触发重建;
  2. 先 check 宏快照:不一致提示 alg config changed: sync config.a and rebuild bnpu project,一致(仅库陈旧)提示 alg config identical: rebuild bnpu project (bnpu lib outdated/missing);
  3. 随后 clean BNPU 工程 → sync 写入宏快照 → 编译 BNPU 核工程,完成后再继续 MCU 核工程的编译。

固件分区地址

firmware/config.ini 中的分区地址(command_addr、module_addr、user_file_addr、voice_addr、code1_size 等)在 V3.0.19 中相对 V2.2.7 整体偏移 0x1000(起始地址向低地址方向减小 0x1000),例如 command_addr 由 0x3C000 改为 0x3B000、code1_size 由 0x38000 改为 0x37000(V3.0.19 实际值:command_addr=0x3B000、module_addr=0x3D000、user_file_addr=0x1A9000、voice_addr=0x16F000、NV_addr=0x3FC000)。请以 SDK 包内 firmware/config.ini 与 合成分区bin文件.bat 为准,不要沿用旧版本地址表。