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数据降噪配置的几个说明:
CONFIG_DNS_ENC_ENABLE必须打开
需要在配置MIC的时候参数把dns_enable置1
需要链接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
- 关于蓝牙通话降噪配置的几个说明:
CONFIG_DNS_ENC_ENABLE和CONFIG_AEC_ENC_ENABLE必须打开
aec_param.EnableBit需要与上BIT(5)
req.enc.aec_enable需要置1
需要链接libaec.a、libdns.a和libjlsp.a库
app_main.c任务列表需要增加dns_encoder任务,否则会打开失败
9.9.2. 常见问题
DNS神经网络降噪能使用多少采样率?
答: DNS目前只支持采样率8000 或 16000,且输入通道数只支持1个通道。