9.9. DNS神经网络降噪算法

概述

提供DNS神经网络降噪算法的配置和使用说明

9.9.1. 应用实例

  • 普通MIC数据降噪配置

  • 蓝牙通话降噪配置

进入 demo_DevKitBoard/include/app_config.h ,开启宏 CONFIG_DNS_ENC_ENABLE

//普通MIC数据降噪配置
union audio_req req = {0};

req.enc.channel_bit_map = BIT(CONFIG_AUDIO_ADC_CHANNEL_L);
req.enc.frame_size = sample_rate / 100 * 4 * channel;       //收集够多少字节PCM数据就回调一次fwrite
req.enc.output_buf_len = req.enc.frame_size * 3; //底层缓冲buf至少设成3倍frame_size
req.enc.cmd = AUDIO_ENC_OPEN;
req.enc.channel = channel;
req.enc.volume = __this->gain;
req.enc.sample_rate = sample_rate;
req.enc.format = "pcm";
req.enc.sample_source = "mic";
if (sample_rate == 8000 || sample_rate == 16000)) {
    req.enc.dns_enable = 1; //打开降噪功能
}

err = server_request(__this->enc_server, AUDIO_REQ_ENC, &req);

Note

关于普通MIC数据降噪配置的几个说明:
  1. CONFIG_DNS_ENC_ENABLE必须打开

  2. 需要在配置MIC的时候参数把dns_enable置1

  3. 需要链接libdns.a和libjlsp.a库,工程需要添加 apps/common/jl_math/jl_fft.c

//蓝牙通话降噪配置
#define AEC_EN              BIT(0)
#define NLP_EN              BIT(1)
#define ANS_EN              BIT(2)
#define AGC_EN              BIT(3)
#define DNS_EN              BIT(5)

/*aec module enable bit define*/
#define AEC_MODE_ADVANCE    (AEC_EN | NLP_EN | ANS_EN)

struct aec_s_attr aec_param = {0};
aec_param.EnableBit = AEC_MODE_ADVANCE | DNS_EN;
req.enc.aec_attr = &aec_param;
req.enc.aec_enable = 1;
get_cfg_file_aec_config(&aec_param);

aec_param.AGC_echo_look_ahead = 100;
aec_param.AGC_echo_hold = 400;
aec_param.ES_Unconverge_OverDrive = aec_param.ES_MinSuppress;

if (req.enc.sample_rate == 16000) {
    aec_param.wideband = 1;
    aec_param.hw_delay_offset = 50;
} else {
    aec_param.wideband = 0;
    aec_param.hw_delay_offset = 75;
}

err = server_request(__this->enc_server, AUDIO_REQ_ENC, &req);

Note

关于蓝牙通话降噪配置的几个说明:
  1. CONFIG_DNS_ENC_ENABLE和CONFIG_AEC_ENC_ENABLE必须打开

  2. aec_param.EnableBit需要与上BIT(5)

  3. req.enc.aec_enable需要置1

  4. 需要链接libaec.a、libdns.a和libjlsp.a库

  5. app_main.c任务列表需要增加dns_encoder任务,否则会打开失败

9.9.2. 常见问题

  • DNS神经网络降噪能使用多少采样率?

    答: DNS目前只支持采样率8000 或 16000,且输入通道数只支持1个通道。