音频质量调试

更新时间:2025-05-14 07:33:49下载pdf

音频质量调试

语音交互是 AI 硬件的基本功能,交互过程中音频数据的质量,是保障产品功能、体验的基础,也是保证语音识别正确率,大模型理解、应答准确度的前提条件。因此,每个 AI 硬件产品都需要进行音频质量调试。

涂鸦提供了基础的音频数据调试方法,以协助您在开发过程中获取音频数据,并结合数据对产品结构、硬件、软件进行调整,保障音频数据质量,提高唤醒率、语音识别率,优化大模型交互体验。

获取数据

Wukong AI 硬件开发框架提供了基础的音频调试方法,以 tuyaos_demo_ai_toy 为例,操作步骤如下:

  1. 开启音频调试功能。修改 tuya_ai_debug.h,将 TUYA_UPLOAD_DEBUG 设置为 1

    #define TUYA_UPLOAD_DEBUG 1
    
  2. 修改 tuya_ai_debug.c,将服务端 ip 修改成上位机的 ip,一般为您的调试电脑的 ip

    #define TCP_SERVER_IP "192.168.32.160"  // IP 修改成您的调试上位机所在的电脑的 IP
    #define TCP_SERVER_PORT 5055
    
  3. 将项目中 scripts/ai_audio_proc.py 复制到 windows,并运行该文件。

    需要安装 pyaudio 库。

    python ai_audio_proc.py
    
    音频质量调试
  4. 编译固件,烧录到设备上,启动、配网,然后进行对话。在对话过程中,固件会在拾音、上传时,自动将 AECVAD 阶段的音频数据上传到当前脚本目录并播放,可佩戴耳机检查语音数据是否完整、清晰、干净。

    音频质量调试

分析数据

使用专业工具分析音频数据文件,建议使用 Ocenaudio 来分析、对比抓取到的音频文件。

音频质量调试

硬件优化

推荐参考涂鸦提供的硬件方案,根据方案的建议调整硬件结构、位置,采购方案推荐的配套器件:

软件优化 - VAD

以下是 VAD 的一些可以设置的参数:

#define TY_AI_AUDIO_CFG_DEF { \
    .sample_rate = TKL_AUDIO_SAMPLE_16K, \
    .sample_bits = TKL_AUDIO_DATABITS_16, \
    .channel = TKL_AUDIO_CHANNEL_MONO, \
    .upload_slice_duration = 100, \
    .record_duration = 10000, \
    .vad_active_duration = 300, \
    .vad_pre_active_duration = 500,\
    .vad_inactive_duration = 500, \
    .vad_frame_duration = 10, \
    .vad_silence_timeout = 30000, \
}

起始音频丢失

起始音频丢失主要是因为能量未能触发 VAD,中间语音触发 VAD 之后,需要将起始音频尽量包含进来,需要调整 vad_pre_active_duration ,目前默认 500ms,已经基本避免起始音频丢失。

停顿导致语音中断

说话停顿导致语音中断,需要调整 vad_inactive_duration 以减慢 VAD 的停止时间,可以让两段话变成一段话,但是会造成检测的等待时间变长,响应时间变长。目前默认 500ms,可以调整到 800ms 验证效果。

另外,涂鸦云端也会对上传的语音进行 VAD 检测,如果发现有效人声,会打断当前会话,实现随意说功能。

软件优化 - AEC

调整 AEC 的参数可以修改回声消除的 ec_depth,一般声音越大,ec_depth 需要设置的越大。调整 ec_depth 需要在 aud_tras_drv_aec_cfg 函数中,修改 temp_aec_info->aec_config->ec_depth 的值,一般推荐 0x14

	// aec parameter
	temp_aec_info->aec_config->mic_delay = 16;//0x0
	temp_aec_info->aec_config->ec_depth = 0x2;//0x14
	temp_aec_info->aec_config->voice_vol =0x0d;//0xe
	temp_aec_info->aec_config->ns_level = 0x5;//0x2
	temp_aec_info->aec_config->ns_para = 0x02;//0x1
	temp_aec_info->aec_config->drc = 0x0;//0xf

软件优化 - MIC 增益

调整 MIC 增益可以增加 MIC 的拾音距离,但是也会收到额外的杂音。需要您按需调整,调试达到平衡状态。

/**
* @brief ai set mic volume
*
* @param[in] card: card number
* @param[in] chn: channel number
* @param[in] vol: mic volume,[0, 100]
*
* @return OPRT_OK on success. Others on error, please refer to tkl_error_code.h
*/
OPERATE_RET tkl_ai_set_vol(INT32_T card, TKL_AI_CHN_E chn, INT32_T vol)

// example
tkl_ai_set_vol(TKL_AUDIO_TYPE_BOARD, 0, 100);

自行处理语音算法

如果您具备语音处理的专业能力,有丰富的经验和积累,可以自行处理语音前端。需要将您自己的语音算法集成到 T5 的开发框架,并将 T5 自带的语音前端处理替换成自己的。

替换 AEC

目前语音前端的数据入口位于 aud_tras_drv.c 文件的 aud_tras_aec 函数,此函数将 MIC 接收到的音频数据、回采电路采集到的参考音频数据,通过 aec_proc 进行回声消除, 只需要替换该接口即可:

static bk_err_t aud_tras_aec(void)
{
    ...
    aec_proc(aec_info_pr->aec, aec_info_pr->ref_addr, aec_info_pr->mic_addr, aec_info_pr->out_addr);
    ...
}

void aec_proc(AECContext* aec, int16_t* rin, int16_t* sin, int16_t* out);

替换 VAD

AEC 处理之后的数据,会通过 tkl_ai_init 接口注册的 put_cb 发送给应用层,put_cb 将数据发送给 VAD 现场进行处理,检测是否有有效的人声。需要对标ty_vad_app 实现相关功能,即可替换。ty_vad_app 目前位于 vendor/T5/tuyaos/tuyaos_adapter/src/misc/ty_vad_app.c

支持与帮助

在开发过程遇到问题,可以到 TuyaOS 开发者论坛 联网单品开发版块 发帖咨询。