前言
到现在为止也开发了许多杰理TWS蓝牙耳机项目SDK的案子,在调试案子时不断的向前辈们学习到了很多关于蓝牙TWS耳机专业的知识。想在这里做一个学习汇总,方便各位同行和对杰理芯片SDK感兴趣的小伙伴们学习;
本章详细讲解杰理AD697N芯片ENC配置与调试实现方法
在调试一个TWS蓝牙耳机案子时,常常会遇到客户要求耳机带有ENC功能,因此在本章解决3个问题;
问题1:ENC是什么?
问题2:在SDK中如何配置ENC?
问题3:如何调试ENC效果?
因此废话不多说,直接带着疑问去解决问题!
问题一:DMS(ENC)是什么?
ENC(Environmental Noise Cancellation)降噪技术。是通过双/多麦克风阵列,精准计算通话者说话的方位,在保护主方向目标语音的同时,去除环境中的各种干扰噪声,例如其他人的讲话声、交通工具产生的噪音、风噪声等等。
DMS双mic降噪系统属于ENC的一种。通过双mic相互作用,通话过程,给到远端接听的人以清晰语音。ENC的受益人是通话时的另一方,并不是耳机使用者,在通话时通过ENC功能,减少环境噪声对通话的影响,让对方听感环境更加安静听到清晰语音;
1、在SDK配置工具中双MIC降噪数据处理流程如下:

注意:通话降噪模块可以选择两个降噪方式:有传统降噪ANS、神经网络降噪DNS,二选一;对于降噪效果DNS更好,当然也意味着所占内存空间也大;
2、以下是对于端对端通话过程远端和近端的定义,本手册涉及的远端近端概念,遵照一下框图。

回音是指远端手机讲话,发送到连接蓝牙设备的近端手机,然后声音从蓝牙设备的speaker发出来,又被蓝牙设备的咪头采集到,通过近端手机发送回远端手机,远端可以延时听到自己讲话的声音。
为了方便介绍双麦克风系统相关信息,定义两个mic的连线上指向主mic方向为0°。相对的,指向副mic方向为180°。

双麦ENC是基于波束成形(beamforming)技术来进行方向性选择的信号处理系统,依赖于不同方位的声音到达两个mic的幅度差和相位差,比如两个平行的mic朝向如下:

正常情况下,人声达到两个mic的幅度和相位差是这样的:下面的mic的幅度和相位都大于上面的mic。而其他方向的噪声去到这两个mic的幅度差和相位差应该是接近或者上面的mic大于下面的mic的。
双mic降噪目标效果是为了消除声源位于方向为90°至270°之间的声音,实际调试使用过程中,主mic两侧120°范围内的声音被清晰识别到,其余方向被不同程度的消除。
问题二:在SDK中如何配置ENC?
配置ENC功能前,先去查看原理图ENC双麦是如何与主控芯片进行连接;


1、在板级配置" board_xxxx_demo_cfg.h "文件中将双麦ENC总开关使能

2、观察原理图,可发现PA1为MIC0,PB8为MIC1;双麦有两个麦一个MIC0通话麦一个MIC1降噪麦,通话麦也就是我们的主麦,降噪麦也就是我们的副麦;所以#define TCFG_AUDIO_DMS_MIC_MANAGE该宏定义该设置为DMS_MASTER_MIC0;

3、观察原理图,可发现麦电源配置MIC_LDO为MIC_BIAS麦供电脚,如果是需要对应GPIO引脚来供电的话,就需要使能板级配置文件" board_xxxx_demo_cfg.h "中#define TCFG_AUDIO_MIC_PWR_CTL该宏定义,并对下面对应咪进行IO引脚配置(本原理图并没有做GPIO引脚控制下方图是做一个例子!)


4、省电容麦与不省电容麦配置,其实就是见名知意。省电容麦是mic的信号脚直接接到芯片的mic port;mic无须额外供电和串隔直电容,不省电容则相反;如果是省电容麦。则需在板级配置文件 board_xxxx_demo_cfg.h "中将#define TCFG_SUPPORT_MIC_CAPLESS该总开关使能,才可以对具体mic省电容功能使能,要不然是无效的;

5、双麦降噪模式的选择!不选择的话SDK中默认是ANS降噪模式,降噪效果的话DNS更好但是所占用的空间也就越大!

问题三:如何调试ENC效果?
在代码中配置完ENC后,就该调试ENC效果了。可以详细查看杰理通话调试手册(本作者表示看不懂一推的专业术语还要依靠专门的ENC调试仪器哈哈哈,本人都是前辈教如何调试几个重要的参数慢慢的干中学!)此段依照杰理ENC调试手册介绍几个重要的参数!
1、全局压制控制:GlobalMinsuppress
全局的压制由回音压制NLP、beamforming ENC、降噪ANS三个模块共同作用,全局的最小压制就是限制这三个模块共同作用下的最小压制,防止某种情况下过度压制(如大环境噪声下的双工,三个模块都算出了非常低的压制,共同作用下可能声音会完全消掉);
针对某些信噪比比较差的信号经过各个算法模块处理过后,压制太多,导致声音损失严重。这个时候就可以通过配置全局最小压制系数来控制压制强度。该值越大,表示压制下限越高,压制效果越弱。0 的时候最强,即最小可以压制成静音。注:一般无需修改,使用默认值!

2、双麦ENC参数调试
MIC_Distance:两个 mic 拾音孔之间的物理距离,单位是 m(0.015 即为 15mm)、
Mic RMS diff:目标信号到达主麦克风与副麦克风之间的幅度差异补偿、
ENC压制参数:ENC_Aggressfactor和ENC_Minsuppress、
ENC_Process_MaxFreq:ENC处理的频率上限
ENC_Process_MaxFreq:ENC处理的频率下限
MIC_Distance必须要用卡尺去量数值要精确;
Mic RMS diff没有仪器的话需要一个一个参数去试(反正就7个参数,改进去选效果最好的);
ENC_Aggressfactor是动态侵略系数,越大压制越强和ENC_Minsuppress是静态压制最小值,越大压制越小

3、AGC 调试的是远端听到的声音。即 mic 采集到的人声传到远端手机端的声音大小。该模块是后级数字模块,即在一定的 mic 模拟增益的情况下,做完回音消除处理后,准备送到远端之前做的一个数字放大 AGC。所以它只影响声音的大小。

调试秘诀:
(1)增益单位是dB;
(2)当mic采集到的数据人声大于speech_thr(近端声音放大的阈值)时放大MAX_GAIN;
(3)当mic采集到的数据人声小于等于speech_thr(近端声音放大的阈值)时放大MIN_GAIN;
(4)最大放大倍数和最小放大倍数之间,是通过fade_in和fade_out来淡入淡出的。比如单端讲话,这个时候淡入的步进就是:ndt_fade_in,淡出的步进就是:ndt_fade_out。讲话的时候淡入,没说话的时候淡出。双端讲话则用dt_fade_in和dt_fade_out,用法一样;
(5)speech_thr(近端声音放大的阈值)这个值根据mic采到的声音大小而定,如果太大,声音得不到均匀放大,即一会 放大max_gain,一会放大min_gain,听起来有可能忽大忽小。太小则有可能环境声也会一并放大。
4、ANS参数
一般降噪参数不要修改,就使用默认值
如果要加强降噪效果,先调大一点动态压制 AggressFactor,还不够,可以尝试调小一点静态压制 minSuppress;
如果要减弱降噪效果,先调大一点静态压制 minSuppress,还不够,可以尝试调小一点动态压制 AggressFactor;

5、AEC回音消除
双mic降噪ENC默认需要打开AEC回音消除模块,AEC主要用来消除回音中的线性部分。AEC模块的参数跟ANS降噪参数一样基本不需要调试修改

6、NLP回音压制
NLP主要用来消除回音中的非线性部分
OverDrive:影响回声压制系数计算,数值越大压制则越强,当值为 0 的时候则无任何回声压制作用。

通话调试常见问题点!
1、通话中有噪声或者电流声
有时在调试ENC通话中,出现噪声或者电流声。我们就需要把回音消除AEC模块给关闭,在听MIC的原始声音是否有噪声或者电流声。如果有,则优先处理源头的噪声,因为干扰声会严重影响通话效果。
一般操作:
1、通话的时候电源模式切换成LDO模式
2、降低发射功率
3、从硬件元器件上电感、电容更改上入手

2、通话中声音忽大忽小,不均匀
由于不同的 mic 灵敏度不一样,这里可以将 max_gain 和 min_gain 设置成一样,确认是否是 AGC造成的原因,改完如果正常,则逐步加小相应的阈值 SPEECH_THR,小于该阈值的当成噪声不放大。(ENC 已经带有降噪效果,当没有人声时也不会有太大噪音。因此单端和双端通话的MAX_GAIN 和MAXGAIN 可以调成一样值。这样可以预防出现声音忽大忽小情况)

3、回音消不掉
通话过程中有回音,需要使能AEC回音消除模块
4、远端听到的声音比较不清晰
增加MIC增益效果,如果声音足够大了还是有点不清晰,改EQ模块啦

5、通话过程中听到的声音有尾音
可能 mic 本身(或者由于电路干扰)采到的声音信噪比比较低,目前的 ANS 参数无法压制 mic 的噪声,可以调整 ANS 参数;如果调节 ANS 参数会带来忽大忽小问题,那么还原 ANS 参数。降低 AGC的效果,逐步减小相应的放大上限 MAX_GAIN,至声音比较干净,再轻微提高 MIC 的增益,对声音的大小进行补偿。

总结:调试ENC其实非常看重耳机的结构,只要耳机的结构设计的非常好,MIC的位置按照要求放置的。基本上软件都不需要怎么调试ENC了;当然有几个重要参数还需要修改总结一下
1、global_minsuppress:全局最小压制系数
2、ENC_Process_MaxFreq:ENC 处理的频率上限
3、ENC_Process_MinFreq:ENC 处理的频率下限
4、Mic_Distance:两个 mic 拾音孔之间的物理距离
5、Mic RMS diff(Target_Signal_Degradation):目标信号到达主麦克风与副麦克风之间的幅度差异补偿。
6、ENC_Aggressfactor:动态侵略系数,越大压制越强
7、ENC_Minsuppress:静态压制最小值,越大压制越小
8、动态压制 :AggressFactor
9、静态压制 :minSuppress
制作不易!喜欢的小伙伴给个小赞赞!喜欢我的小伙伴点个关注!有不懂的地方和需要的资源随时问我哟!