杰理芯片SDK开发-ENC双麦降噪配置/调试教程

前言

到现在为止也开发了许多杰理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


制作不易!喜欢的小伙伴给个小赞赞!喜欢我的小伙伴点个关注!有不懂的地方和需要的资源随时问我哟!

相关推荐
m0_571186607 小时前
第三十六周周报
人工智能·量子计算
四代机您发多少7 小时前
从零开始训练一个大模型
人工智能·pytorch·python·transformer
SmartBrain7 小时前
基于SpringAI架构的多智能体协作(进阶版)
人工智能·spring boot·python·spring cloud
海兰7 小时前
运营营销人该如何看待OpenClaw?
人工智能·agent·openclaw
王郁7 小时前
如何使用 Docker 安全地部署 OpenClaw (龙虾)
人工智能
陈广亮7 小时前
MCP 2026路线图解读.md
人工智能
找藉口是失败者的习惯7 小时前
【Android】Android 车机 + AI Agent 有没有搞头?
android·人工智能
东离与糖宝7 小时前
Langflow-ai OpenRAG实战:Java+Spring Boot搭建企业级私有知识库(从0到1)
java·人工智能
Rsun045517 小时前
Spring AI 面试题
java·人工智能·spring
星浩AI7 小时前
OpenClaw 总是忘记你说过的话?来试试这个插件
人工智能·后端·agent