【Wukong AI】T5语音前端可以调试算法参数(适用版本3.12.14)

Wi-Fi 设备、蜂窝设备、WuKongAI、开发板、TuyaOS 移植等


Post Reply
愚者千虑必有一得
Posts: 775

T5语音前端算法使用的是原厂提供的AEC、NS、VAD算法(截至3.12.14版本,后面版本如有更新会更新此文档),目前工作流程如下图所示:

企业微信截图_17533237688292.png

以下是一些参数的设置方法:

  • MIC增益:mic_gain
    tkl_ai_init接口中,目前默认设置成了0x2f,原厂推荐设置0x2d

    Code: Select all

    	OPERATE_RET tkl_ai_init(TKL_AUDIO_CONFIG_T *pconfig, INT32_T count)
    	  {
          int ret;
      
      
          bk_printf("audio trace: %s %d\r\n", __func__, __LINE__);
          if (pconfig == NULL)
              return OPRT_INVALID_PARM;
          
          aud_voc_setup.aec_enable = 1;
          aud_voc_setup.mic2_disable = !pconfig->enable;
          if (pconfig->card == TKL_AUDIO_TYPE_UAC) {
              aud_voc_setup.data_type = AUD_INTF_VOC_DATA_TYPE_PCM;
              aud_voc_setup.spk_mode = AUD_DAC_WORK_MODE_SIGNAL_END;
          
              aud_voc_setup.mic_type = AUD_INTF_MIC_TYPE_UAC;
              aud_voc_setup.spk_type = AUD_INTF_SPK_TYPE_UAC;
          
              bk_printf("audio trace: %s %d\r\n", __func__, __LINE__);
          } else{
              aud_voc_setup.data_type = AUD_INTF_VOC_DATA_TYPE_PCM;
              aud_voc_setup.mic_mode = AUD_ADC_MODE_DIFFEN;
              aud_voc_setup.spk_mode = AUD_DAC_WORK_MODE_DIFFEN;
              aud_voc_setup.mic_gain = 0x2f;		// mic 增益,增益确定之后,声音音量会在0-增益之间调整
              aud_voc_setup.spk_gain = 0x2f;		// spk 增益
              aud_voc_setup.mic_type = AUD_INTF_MIC_TYPE_BOARD;
              aud_voc_setup.spk_type = AUD_INTF_SPK_TYPE_BOARD;
              bk_printf("audio trace: %s %d\r\n", __func__, __LINE__);
          }
          ...
      }
  • AEC算法参数:aec_enable

    audio_recorder_init接口默认使能。

    Code: Select all

    	int audio_recorder_init(audio_recorder_cfg_t *cfg)
    	{
        int rt = OPRT_OK;
    	
        TUYA_CHECK_NULL_RETURN(audio_recorder = audio_recorderer_create(cfg), OPRT_MALLOC_FAILED);
    	
        TKL_AUDIO_CONFIG_T audio_config;
        memset(&audio_config, 0, sizeof(TKL_AUDIO_CONFIG_T));
        audio_config.enable                 = 1;      //! enable aec
        ...
    	}
  • AEC算法参数:drcec_depth

  • NS参数:ns_levelns_param

    位于aud_tras_drv_aec_cfg函数,该函数有多个,选择multimedia/aud/目录下的。

    Code: Select all

      static bk_err_t aud_tras_drv_aec_cfg(void)
      {
      	...
      	temp_aec_info->aec_config->mic_delay = 16;//0x0
      	temp_aec_info->aec_config->ec_depth = 0x14;//0x14 8  0x0e	越大消除内容越多
      	temp_aec_info->aec_config->voice_vol =0x0d;//0xe
      	temp_aec_info->aec_config->ns_level = 0x5;//0x2  0x5	降噪级别,越小降噪越少
      	temp_aec_info->aec_config->ns_para = 0x02;//0x1   0x02
      	#if (CONFIG_DMIC_DUAL_NC_ALGRITHMS_OPEN)
      	temp_aec_info->aec_config->drc = 0x0a;//0xf  2	增益aec之后的音频数据,越大增益越大
      	#else
      	temp_aec_info->aec_config->drc = 0x04;//0xf  2  增益aec之后的音频数据,越大增益越大
      	#endif
      	...
      }

  • VAD算法参数:scalestart_threshold_ms

    audio_recorder_init接口设置。

    Code: Select all

      
      int audio_recorder_init(audio_recorder_cfg_t *cfg)
      {
      	...
          ty_vad_config_t vad_config;
          memset(&vad_config, 0, sizeof(ty_vad_config_t));
          vad_config.silence_threshold_ms     = 0;
          vad_config.scale                    = 1.0;		// 能量强调,越小越被声音触发,建议0.8,1.0,1.2
          vad_config.sample_rate              = cfg->sample_rate;
          vad_config.channel                  = cfg->channel;
          vad_config.start_threshold_ms       = cfg->vad_active_ms;	// 默认300ms,越长越不容易触发vad
          vad_config.end_threshold_ms         = cfg->vad_silence_ms;	// 默认800ms,越短越容易断句
          vad_config.vad_frame_duration       = 20;
          TUYA_CALL_ERR_GOTO(ty_vad_app_init(&vad_config), __failed);
          ...
      }
  • KWS算法:如需替换参考此文档 https://developer.tuya.com/cn/docs/iot- ... 7%E6%B3%95

  • 音频编码:支持PCMOPUS编码, 请参考tuyaos_demo_ai_toy 的README.md

Post Reply